Skip to content

Commit d0424e2

Browse files
authored
Update dependencies, add minor improvements and rework documentation markdowns (#1065)
* Update gradle wrapper * Update frontend dependencies * Fix errorlog initial last reported at * Add meta tags to index.html * Update documentation markdowns * Handle serializable conflicts with real retries * Keep the QR reader's scan callback in a ref
1 parent cef8e7e commit d0424e2

38 files changed

Lines changed: 3177 additions & 3001 deletions

backend/build.gradle.kts

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
33
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
44

55
plugins {
6-
id("org.springframework.boot") version "4.0.6"
6+
id("org.springframework.boot") version "4.1.1"
77
id("io.spring.dependency-management") version "1.1.7"
8-
id("org.owasp.dependencycheck") version "12.2.2"
9-
kotlin("jvm") version "2.3.21"
10-
kotlin("plugin.spring") version "2.3.21"
11-
id("org.sonarqube") version "7.3.0.8198"
8+
id("org.owasp.dependencycheck") version "13.0.0"
9+
kotlin("jvm") version "2.4.10"
10+
kotlin("plugin.spring") version "2.4.10"
11+
id("org.sonarqube") version "7.5.0.8588"
1212
}
1313

1414
group = "hu.bme.sch"
@@ -54,18 +54,18 @@ dependencies {
5454
implementation("com.github.spullara.mustache.java:compiler:0.9.14")
5555
implementation("com.google.zxing:core:3.5.4")
5656
implementation("com.google.zxing:javase:3.5.4")
57-
implementation("com.itextpdf:itext-core:9.6.0")
58-
implementation("com.squareup.okhttp3:okhttp:5.3.2")
57+
implementation("com.itextpdf:itext-core:9.7.1")
58+
implementation("com.squareup.okhttp3:okhttp:5.5.0")
5959
implementation(platform("io.jsonwebtoken:jjwt-bom:0.13.0"))
6060
runtimeOnly("io.jsonwebtoken:jjwt-impl")
6161
runtimeOnly("io.jsonwebtoken:jjwt-jackson")
6262
implementation("io.jsonwebtoken:jjwt-api")
63-
implementation(platform("io.micrometer:micrometer-bom:1.16.5"))
63+
implementation(platform("io.micrometer:micrometer-bom:1.17.1"))
6464
runtimeOnly("io.micrometer:micrometer-core")
6565
runtimeOnly("io.micrometer:micrometer-observation")
6666
runtimeOnly("io.micrometer:micrometer-registry-prometheus")
67-
implementation("org.commonmark:commonmark-ext-gfm-tables:0.28.0")
68-
implementation("org.commonmark:commonmark:0.28.0")
67+
implementation("org.commonmark:commonmark-ext-gfm-tables:0.30.0")
68+
implementation("org.commonmark:commonmark:0.30.0")
6969
implementation("org.jetbrains.kotlin:kotlin-reflect")
7070
implementation("org.jetbrains.kotlin:kotlin-scripting-common")
7171
implementation("org.jetbrains.kotlin:kotlin-scripting-dependencies")
@@ -75,7 +75,7 @@ dependencies {
7575
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
7676
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor:1.11.0")
7777
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0")
78-
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.3")
78+
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:3.1.0")
7979
implementation("org.springframework.boot:spring-boot-starter-actuator")
8080
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
8181
implementation("org.springframework.boot:spring-boot-starter-oauth2-client")
@@ -85,7 +85,7 @@ dependencies {
8585
implementation("org.springframework.boot:spring-boot-starter-web")
8686
implementation("org.springframework.boot:spring-boot-starter-webclient")
8787
implementation("org.springframework.session:spring-session-jdbc")
88-
implementation("software.amazon.awssdk:s3:2.44.12")
88+
implementation("software.amazon.awssdk:s3:2.54.13")
8989
runtimeOnly("com.h2database:h2")
9090
runtimeOnly("org.postgresql:postgresql")
9191
testImplementation("org.springframework.boot:spring-boot-starter-test")
@@ -99,7 +99,7 @@ dependencyCheck {
9999
tasks.withType<KotlinCompile> {
100100
compilerOptions {
101101
freeCompilerArgs.add("-Xjsr305=strict")
102-
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_3)
102+
apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_4)
103103
jvmTarget.set(JvmTarget.JVM_25)
104104
}
105105
}
-957 Bytes
Binary file not shown.

backend/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip
44
networkTimeout=10000
55
retries=0
66
retryBackOffMs=500

backend/gradlew

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/gradlew.bat

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/src/main/kotlin/hu/bme/sch/cmsch/component/admission/AdmissionComponentController.kt

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,23 +27,40 @@ class AdmissionComponentController(
2727
auditLogService = auditLogService,
2828
storageService = storageService,
2929
documentationMarkdown = """
30-
A **Beléptetés** (Admission) komponens a rendezvényre való bejutást és a helyszíni jegyellenőrzést kezeli. Lehetővé teszi a hozzáférési szintek finomhangolását csoportok, felhasználók és szerepkörök alapján.
31-
32-
## Beállítások
33-
34-
A **Komponens beállításai** menüpontban konfigurálhatod a beléptetési szabályokat:
35-
36-
- **Beléptetés működése** – szabályozható a belépési naplózás és az űrlapalapú beléptetés (csak elfogadott jelentkezéssel engedjen be).
37-
- **Csoportok hozzáférése** – csoportonként (pl. VIP, Szervezők, Fellépők) definiálható a hozzáférési szint.
38-
- **Felhasználók hozzáférése** – egyedi CMSCH ID alapján adható kiemelt hozzáférés.
39-
- **Szerepkörök hozzáférése** – globális szabályok a felhasználói szerepkörök (pl. STAFF, ADMIN) szerinti beléptetéshez.
40-
- **Tiltólista** – csoportok vagy egyének kizárása a beléptetésből.
41-
- **Jegyek** – BME Jegy integráció és a korábbi belépések számának megjelenítése a beolvasónál.
42-
43-
## Funkciók
44-
45-
- **Hozzáférési szintek** – támogatott szintek: USER, VIP, PERFORMER, ORGANIZER, LEAD_ORGANIZER. A rendszer mindig a felhasználó számára elérhető legmagasabb szintet veszi alapul.
46-
- **Naplózás** – minden sikeres és sikertelen belépési kísérlet rögzíthető az utólagos ellenőrzéshez.
30+
A **Beléptetés** komponens a helyszíni beengedést végzi: a rendező beolvassa a belépő kódját, a rendszer pedig a beállított szabályok alapján dönt. Nyilvános (résztvevői) menüpontja nincs, minden funkció a rendezői menü **Beléptetés** kategóriájában érhető el.
31+
32+
## Beengedés menete
33+
34+
1. A **Jogosultságok** menüpontban állítsd be, kiket engedj be (lásd lent).
35+
2. A beolvasókhoz a **Beléptetés kezelése**, a naplóhoz a **Beléptetés logok megtekintése** jogosultságot add meg a kijelölt rendezőknek.
36+
3. A **Beléptetés** menüpontban nyílik a kamerás beolvasó (mobilon érdemes használni). Az eredmény ablakban a **Név**, a **Belépés** (csoport) és a **JOGKÖR** látszik: KITILTVA, NEM JOGOSULT, BELÉPHET, VIP, RENDEZŐ, FELLÉPŐ, FŐRENDEZŐ.
37+
4. Űrlapos beengedéshez az **Űrlapos beléptetés**, jegyekhez a **Jegyellenőrzés** menüpontot használd.
38+
39+
## Jogosultsági szabályok
40+
41+
A rendszer minden forrásból összegyűjti a jogosultságokat, és a **legmagasabb** elért szintet adja. Ha egyik lista sem tartalmazza a belépőt, a válasz **NEM JOGOSULT** – üres listákkal senki sem jut be.
42+
43+
- **Csoportok hozzáférése** – a **USER / VIP / PERFORMER / ORGANIZER / LEAD_ORGANIZER hozzáférésű csoportok** mezőkben a csoportnevek pontos, vesszővel elválasztott felsorolása.
44+
- **Felhasználók hozzáférése** – ugyanezek a szintek CMSCH ID-k alapján.
45+
- **Szerepek hozzáférése** – a **USER hozzáférés** és az **ORGANIZER hozzáférés** a kiválasztott szerepkörtől felfelé mindenkire vonatkozik.
46+
- **Tiltó lista** – a **Kitiltott csoportok** és a **Kitiltott felhasználók** minden más szabályt felülírnak, az érintett belépő KITILTVA jelzést kap.
47+
48+
## Beállítások (Jogosultságok menüpont)
49+
50+
| Beállítás | Mit tesz |
51+
| --- | --- |
52+
| **Beléptetések mentése** | Minden beolvasás a **Belépés logok** közé és az audit naplóba kerül. Kikapcsolva nem működik az ismételt beolvasás számlálása, és az űrlapos CSV export sem jelöli, ki lépett már be. |
53+
| **Csak az elfogadott űrlapok számítanak** | Űrlapos beléptetésnél csak az elfogadott és nem elutasított beadás enged be. Csak az űrlapok komponenssel együtt működik. |
54+
| **BME Jegyesek beengedése** | BME Jegy utalványkódokat is elfogad (csak bekapcsolt bmejegy komponens mellett). |
55+
| **Belépések számának mutatása** | A **Jegyellenőrzés** beolvasónál kiírja, hányszor olvasták be ugyanazt a kódot; ismétlésnél **NEM ELSŐ!!!** figyelmeztetést ad. |
56+
57+
## Beolvasók és oldalak
58+
59+
- **Beléptetés** – CMSCH profil QR kódot (a beállított előtaggal kezdődik) és BME Jegy utalványkódot ismer fel. A **Jegyek** listát nem használja.
60+
- **Jegyellenőrzés** – a **Jegyek** listából dolgozik. **A jegy megléte önmagában beenged**, a jegy **Belépési jogosultság** mezője csak a kijelzett jogkört adja meg.
61+
- **Űrlapos beléptetés** – csak a felhasználók által létrehozott (nem csoport-tulajdonú) űrlapokat listázza, űrlapok komponens nélkül csak figyelmeztetést mutat. A **Beengedés** művelet az adott űrlap beolvasóját nyitja, a **CSV Export** a beadásokat és a belépéseket adja egy táblában (**Beléptetés kimentése** jogosultság kell hozzá). Az elfogadott beadás önmagában BELÉPHET szintet ad, amit a csoport/felhasználó/szerep szabályok emelhetnek; névtelen beadásnál az űrlap token mezőjének kódja is beolvasható.
62+
- **Jegyek** – egy sor egy jegy, a listában **Tulajdonos**, **Email** és **QR** látszik; szerkesztve adható meg a **Belépési jogosultság**, a **Megjegyzés** és a **Profil QR kód használata** (bekapcsolva a jegy a **QR** mezőben tárolt kóddal, kikapcsolva a belépő profiljához tartozó **Email** címmel azonosítható). Import és export is elérhető.
63+
- **Belépés logok** – a listában a **Felhasználó**, az **Engedélyezve** és a **Frissült** látszik; a sorok szerkeszthetők és törölhetők, de a törlés az ismételt beolvasás számlálóját is módosítja.
4764
"""
4865
)
4966
{

backend/src/main/kotlin/hu/bme/sch/cmsch/component/app/FooterComponentController.kt

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -31,53 +31,38 @@ class FooterComponentController(
3131
auditLogService = auditLogService,
3232
storageService = storageService,
3333
documentationMarkdown = """
34-
# Stílus
34+
A **Lábléc** a felhasználói oldalak alján minden oldalon megjelenő sáv. A beállításai a **Stílus** kategória **Lábléc** menüpontjában találhatók, a színei (**Footer színe**, **Footer alsó sáv színe**, **A footerre alkalmazott filter**) viszont a **Stílus beállítások** menüpontban állíthatók, világos és sötét témához külön.
3535
36-
A **Stílus** komponens segítségével testre szabhatod a weboldal megjelenését CSS-ismeretek nélkül.
36+
## Felépítés
3737
38-
## Beállítások
38+
- Bal oldalon a **Footer szöveg**, mellette a szervező logója a linkjeivel és a Kir-Dev logó.
39+
- Felette a támogatói és partneri logósáv, legalul pedig egy fix, nem állítható sáv (Made with ♥ by Kir-Dev / Minden jog fenntartva, az aktuális évszámmal).
3940
40-
A **Komponens beállításai** menüpontban konfigurálhatod a témákat:
41+
## Lábléc
4142
42-
- **Világos téma (Light Mode)** – színek (háttér, szöveg, brand), háttérképek és logók beállítása nappali módhoz.
43-
- **Sötét téma (Dark Mode)** – színek és képek éjszakai módhoz. Szabályozható, hogy a rendszer automatikusan kövesse-e az eszköz beállításait, vagy kényszerítve legyen valamelyik mód.
44-
- **Tipográfia** – az oldalon használt betűtípusok (fontok) és azok forrásának (CDN) megadása.
43+
- **Minimalisztikus lábléc** – elrejti a támogatói és partneri logósávot, valamint a szervező linkjeit (Weboldal, Facebook, Instagram); csak a logók, a **Footer szöveg** és az alsó sáv maradnak.
44+
- **Esemény szervezőjének a logója** – feltölthető kép vagy URL; ha üres, nem jelenik meg kép. **Esemény szervezőjének alt szövege** – ha a kép nem tölt be, ez látszik.
45+
- **Esemény szervezőjének oldala** – a logó melletti Weboldal link. **Facebook url**, **Instagram url** – üresen hagyva az adott ikon nem jelenik meg.
46+
- **Footer szöveg** – a lábléc szöveges tartalma, Markdown formázással, több sorban is írható.
47+
- **A kir-dev oldala**, **A kir-dev kapcsolat linkje** – a Kir-Dev logó melletti linkek, csak **Fejlesztő** (SUPERUSER) szerepkörrel szerkeszthetők.
4548
46-
## Funkciók
49+
## Támogatók
4750
48-
- **Brand-szín** – egyetlen szín megadásával az egész oldal arculatát a rendezvényhez igazíthatod (gombok, linkek, kiemelések).
49-
- **Reszponzív hátterek** – külön háttérképet állíthatsz be asztali és mobil nézethez.
51+
- **Sponsorok láthatóak** – enélkül a támogatói blokk egyáltalán nem jelenik meg.
52+
- **Szponzorok fejléc** – a blokk fölé kerülő cím (alapértéke: Támogatóink).
53+
- **Sponsor logók**, **Sponsor alt üzenetek**, **Sponsor weblapok** – vesszővel elválasztott listák, amelyek pozíció szerint párosulnak: az első logóhoz az első alt szöveg és az első weblap tartozik. Ha egy weblap üres, az adott logó nem lesz kattintható.
5054
51-
# Manifest
55+
## Partnerek
5256
53-
A **Manifest** komponens a webalkalmazás (PWA - Progressive Web App) telepítési tulajdonságait szabályozza. Ez határozza meg, hogyan jelenik meg az oldal, ha a felhasználó hozzáadja a kezdőképernyőjéhez.
57+
- **BME VIK logó**, **BME logó**, **Schönherz logó**, **schdesign logó** – beépített logók, világos és sötét témához külön változatban.
58+
- **Szponzorok fejléc** – a partneri blokk címe (a felirat tévesen ugyanaz, mint a támogatóknál, alapértéke: Partnereink), továbbá **Partner logók**, **Partner alt üzenetek**, **Partner weblapok** – a támogatókéhoz hasonló vesszős listák.
59+
- A partneri blokk akkor jelenik meg, ha bármelyik beépített logó be van kapcsolva, vagy a **Partner logók** mező nem üres.
5460
55-
## Beállítások
61+
## Figyelmeztetések
5662
57-
A **Komponens beállításai** menüpontban konfigurálhatod a manifest fájlt:
58-
59-
- **A manifest.json tartalma** – az alkalmazás neve, rövid neve, leírása, színei és megjelenítési módja (pl. `standalone`, `browser`).
60-
- **Ikonok** – a különböző eszközökhöz és felbontásokhoz szükséges ikonok feltöltése.
61-
62-
## Funkciók
63-
64-
- **PWA támogatás** – a helyesen beállított manifest lehetővé teszi, hogy az oldal alkalmazásként viselkedjen (ikon a főképernyőn, nincs böngésző keret).
65-
66-
# Lábléc
67-
68-
A **Lábléc** (Footer) komponens az oldal alján megjelenő információkat kezeli.
69-
70-
## Beállítások
71-
72-
A **Komponens beállításai** menüpontban konfigurálhatod a láblécet:
73-
74-
- **Lábléc** – alapvető adatok: szervező logója, linkje, közösségi média elérhetőségek és a copyright szöveg.
75-
- **Támogatók** – a rendezvény szponzorainak logói és weboldalai.
76-
- **Partnerek** – együttműködő partnerek (pl. BME, VIK, SCH) logóinak megjelenítése.
77-
78-
## Funkciók
79-
80-
- **Minimalisztikus lábléc** – ha be van kapcsolva, a lábléc kevesebb helyet foglal, és csak a legszükségesebb információkat mutatja.
81-
- **Dinamikus partnerek** – a szponzorok és partnerek listája vesszővel elválasztott URL-ek megadásával egyszerűen bővíthető.
63+
- A **Sponsor logók** és **Partner logók** alapértéke `url1,url2`: írd felül valódi URL-ekkel vagy töröld, különben törött képek jelennek meg.
64+
- A három lista mindig ugyanannyi és ugyanolyan sorrendű elemet tartalmazzon, különben elcsúsznak az alt szövegek és a linkek.
65+
- A támogatói és partneri sáv a **Minimalisztikus lábléc** bekapcsolása esetén nem jelenik meg, hiába állítod be a többi beállítást.
66+
- A Kir-Dev logó és linkjei az admin felületről nem kapcsolhatók ki, csak a frontend `VITE_HIDE_KIR_DEV_IN_FOOTER` beállításával.
8267
"""
8368
)

0 commit comments

Comments
 (0)