feat!: remove the shared demo account

The demo account — one shared user that whitelisted emails entered from
the login page, reset on a schedule — goes end to end (owner decision,
E34): demo.py and the reset job, users.is_demo and demo_whitelist
(migration 0098 deletes the demo user, its audit rows, the reset job's
override and notices, then drops the column and table; the downgrade
restores the empty schema), the /auth/demo entry, the admin whitelist and
reset, the Demo tab, the banner, the login page's "Try the demo", and
every is_demo branch in routes, userscope, scheduler and the UI.

require_human only ever refused the demo account, so its 87 uses become
current_user (owner-approved); require_write_scope keeps its own check.
The login page's "or" divider now shows only beside the Google button:
without the demo entry under it, an instance without Google would have
said "or" to nothing.

A contract test (removedFeatures) fails on the word anywhere in the
backend, frontend, e2e or scripts — seen red on a planted hit. Size
ceilings tightened for the modules that shrank; admin.py is back under
the limit.
This commit is contained in:
2026-10-05 00:19:38 +02:00
parent cca3315836
commit 6d8b7be6d8
109 changed files with 487 additions and 1400 deletions
@@ -9,9 +9,6 @@
"invite_approve": "Hozzáférési kérelem jóváhagyva",
"invite_deny": "Hozzáférési kérelem elutasítva",
"invite_add": "E-mail fehérlistára téve",
"demo_add": "Demó e-mail hozzáadva",
"demo_remove": "Demó e-mail eltávolítva",
"demo_reset": "Demó visszaállítva",
"discovery_purge": "Felfedezés ürítve",
"config_set": "Beállítás módosítva",
"config_reset": "Beállítás visszaállítva",
-2
View File
@@ -20,8 +20,6 @@
"accessRequestsMessage_one": "{{count}} függőben — nézd át a Felhasználók oldalon.",
"accessRequestsMessage_other": "{{count}} függőben — nézd át a Felhasználók oldalon.",
"accessRequestsReview": "Áttekintés",
"demoTitle": "Demó fiók",
"demoSharedNotice": "Egy közös demó fiókban vagy. Minden, amit itt csinálsz — lejátszási listák, elrejtett videók, beállítások — közös, és más demó látogatók egyszerre módosíthatják.",
"backToTop": "Vissza a tetejére",
"retry": "Újra",
"retryWithEnter": "Újrapróbáláshoz nyomd meg az Entert.",
+1 -7
View File
@@ -1,7 +1,6 @@
{
"title": "Nem sikerült",
"generic": "A szerver nem tudta végrehajtani a műveletet. Próbáld újra.",
"demo": "Ez a demó fiókban nem érhető el",
"validation": "Néhány megadott érték érvénytelen volt. Ellenőrizd, majd próbáld újra.",
"tooLarge": "Ez túl nagy, a szerver nem fogadta el",
"server": "Szerverhiba",
@@ -45,8 +44,7 @@
"not_applicable": "Ezen a fiókon már nincs mit megerősíteni",
"not_approved": "Csak jóváhagyott címre küldhető meghívó",
"email_off": "Nem ment ki levél: ezen a példányon nincs működő SMTP. Nézd meg a Konfiguráció → E-mail / SMTP fület.",
"send_failed": "Nem sikerült elküldeni a levelet: a levelezőszerver nem volt elérhető, vagy elutasította a belépést vagy a levelet. Nézd meg a Konfiguráció → E-mail / SMTP fület, majd próbáld újra.",
"demo": "A demó fiók közös, ezért nem kaphat jelszóbeállító linket"
"send_failed": "Nem sikerült elküldeni a levelet: a levelezőszerver nem volt elérhető, vagy elutasította a belépést vagy a levelet. Nézd meg a Konfiguráció → E-mail / SMTP fület, majd próbáld újra."
},
"reason": {
"unreachable": "A szerver nem volt elérhető. Próbáld újra.",
@@ -132,10 +130,6 @@
"collection_pending_sync": "A kollekció a Plexben megváltozott, de a helyi másolat frissítése nem sikerült — a következő szinkron pótolja",
"collection_read_only": "Ez a kollekció csak olvasható",
"collection_smart": "Az okos és az automatikus listás kollekciók nem tehetők szerkeszthetővé",
"demo_activate": "A demó fiók nem aktiválható",
"demo_delete": "A demó fiók nem törölhető",
"demo_role": "A demó fiók szerepköre nem módosítható",
"demo_suspend": "A demó fiók nem függeszthető fel",
"download_not_ready": "Ez a letöltés még nincs kész",
"edit_unfinished": "Csak befejezett letöltés szerkeszthető",
"filters_not_object": "A nézet szűrői hibás formátumúak",
-3
View File
@@ -17,9 +17,6 @@
"emptyBody": "Kösd össze a YouTube-fiókodat, hogy importáld a feliratkozásaidat, és felépítsd a Feededet.",
"setUp": "Feed beállítása",
"browseShared": "Vagy csak böngészd a közös Könyvtárat",
"demoEmptyTitle": "Itt a demóban nincs semmi",
"demoEmptyBody": "A demó fióknak nincsenek saját feliratkozásai — de a teljes közös Könyvtár a tiéd: böngészd, szűrd és rendezd kedvedre.",
"browseLibrary": "Könyvtár böngészése",
"noMatches": "Egy videó sem felel meg ezeknek a szűrőknek.",
"channelScopeHint": "Ez a csatorna nincs a Feededben – lehet, hogy el van rejtve. A videói a közös Könyvtárban vannak.",
"viewInLibrary": "Megnézés a Könyvtárban",
+1 -2
View File
@@ -4,8 +4,7 @@
"skipToContent": "Ugrás a tartalomra",
"role": {
"admin": "Admin",
"user": "Felhasználó",
"demo": "Demó"
"user": "Felhasználó"
},
"rail": {
"home": "Kezdőlap",
@@ -69,7 +69,6 @@
"shorts": "A youtube.com/shorts próbával jelöli, mely videók Shorts-ok. Ha leáll, a Shorts-ok nem különülnek el a normál videóktól a Feedben.",
"subscriptions": "Újraimportálja minden felhasználó YouTube-feliratkozásait. Ha leáll, a YouTube-on felvett vagy törölt feliratkozások nem tükröződnek itt.",
"playlist_sync": "Tükrözi a felhasználók YouTube lejátszási listáit az appba. Ha leáll, a YouTube-listák változásai nem jelennek meg lokálisan.",
"demo_reset": "Visszaállítja a közös demó fiókot (lejátszási listák és állapot), hogy minden látogató ugyanabból a homokozóból induljon. Ha nincs demó fiók, nem csinál semmit. Ha leáll, a demóban az marad, amit az előző látogató hagyott benne.",
"maintenance": "Megkeresi a már sehol le nem játszható videókat (törölt, priváttá tett, elhagyott premier), elrejti őket a Feedből, és türelmi idő után eltávolítja; újraellenőrzi a legrégebben ellenőrzött videókat. Ha leáll, a halott videók a katalógusban maradnak.",
"explore_cleanup": "A türelmi idő után eltávolítja a felfedezett, de nem követett csatornákat (és videóikat), hogy a kíváncsiság-böngészés ne halmozódjon a katalógusban. Ha leáll, az elhagyott felfedezett csatornák megmaradnak.",
"download_gc": "Törli a megőrzési időn túli letöltéseket, felszabadítja a már senki által nem használt helyet, és a lejárat előtt figyelmezteti a tulajdonost. Ha leáll, a régi letöltések felhalmozódnak, és a tárhely nem szabadul fel.",
@@ -90,7 +89,6 @@
"subscriptions": "Feliratkozások szinkronizálása a YouTube-ról",
"playlist_sync": "Lejátszási listák szinkronizálása a YouTube-ról",
"maintenance": "Karbantartás + ellenőrzés",
"demo_reset": "Demó fiók visszaállítása",
"explore_cleanup": "Felfedezett csatornák takarítása",
"download_gc": "Letöltések takarítása",
"plex_sync": "Plex-könyvtár szinkron",
@@ -139,7 +137,6 @@
"revalidated": "újraérvényesítve",
"flagged": "megjelölve",
"skipped": "kihagyva",
"playlists_seeded": "létrehozott lejátszási lista",
"expired": "lejárt",
"videos_deleted": "törölt videó",
"channels_deleted": "törölt csatorna",
@@ -183,7 +180,6 @@
"disabled": "kikapcsolva",
"PlexserverURLortokenisnotconfigured": "a Plex-szerver címe vagy tokenje nincs beállítva",
"tmdbapikeynotset": "nincs TMDB API-kulcs",
"nodemoaccount": "nincs demófiók",
"noserviceuser": "nincs szolgáltatásfiók",
"syncpaused": "a szinkron szünetel",
"lowquota": "kevés a kvóta",
@@ -73,7 +73,6 @@
"deleteTitle": "Törlöd a fiókodat?",
"deleteConfirm": "Ez véglegesen törli a fiókodat és minden adatodat (feliratkozások, címkék, megnézett/mentett/elrejtett állapot, lejátszási listák, beállítások). Nem vonható vissza.",
"deleteConfirmButton": "Minden törlése",
"demoNotice": "Ez a közös demó fiók. Nincs YouTube-kapcsolata — böngészheted a teljes közös Könyvtárat, szűrheted és rendezheted, listákat építhetsz és kipróbálhatsz dolgokat, de semmi nem nyúl valódi YouTube-fiókhoz.",
"signInMethods": "Bejelentkezési módok",
"googleLink": {
"title": "Google-fiók",
@@ -132,28 +131,6 @@
"removeConfirmAction": "Törlés",
"loadError": "Nem sikerült betölteni a letöltési hitelesítési beállításokat"
},
"demo": {
"title": "Demó hozzáférés",
"intro": "Az itt szereplő e-mailek a bejelentkező oldalról közvetlenül beléphetnek a közös demó fiókba — Google-bejelentkezés nélkül. Csak beírják a címet a mezőbe, és pár pillanat múlva bekerülnek.",
"addPlaceholder": "E-mail fehérlistára a demóhoz…",
"add": "Hozzáadás",
"added": "{{email}} hozzáadva a demó fehérlistához",
"addFailed": "Nem sikerült hozzáadni ezt az e-mailt",
"removeFailed": "Nem sikerült eltávolítani ezt az e-mailt",
"remove": "Eltávolítás",
"removeHint": "E-mail eltávolítása a demó fehérlistáról.",
"addedBy": "hozzáadta: {{who}}",
"reset": "Demó állapot visszaállítása",
"resetHint": "Törli a demó fiók lejátszási listáit, elrejtett/megnézett/mentett videóit és beállításait, majd újra létrehoz pár minta lejátszási listát.",
"resetTitle": "Visszaállítod a demó állapotot?",
"resetConfirm": "Ez törli mindazt, amit a demó fiók összegyűjtött — lejátszási listák, elrejtett/megnézett/mentett videók és beállítások —, és újra létrehoz pár minta lejátszási listát. Nem vonható vissza.",
"resetDone_one": "Demó visszaállítva — {{count}} minta lejátszási lista létrehozva",
"resetDone_other": "Demó visszaállítva — {{count}} minta lejátszási lista létrehozva",
"resetFailed": "Nem sikerült visszaállítani a demó fiókot",
"removed": "Eltávolítva a demó fehérlistáról",
"removeTitle": "Visszavonod a demó hozzáférést?",
"removeConfirm": "Eltávolítod {{email}} címet a demó fehérlistáról? Többé nem tud belépni a demó fiókba."
},
"invites": {
"title": "Hozzáférési kérelmek",
"noPending": "Nincs függőben lévő kérelem.",
@@ -228,7 +205,6 @@
},
"status": "{{level}} naplózás · {{time}} múlva visszaáll „Alap” szintre",
"revert": "Visszaállítás most",
"demo": "A demó fiókot többen használják, ezért itt nem kapcsolható be részletes naplózás.",
"failed": "Nem sikerült módosítani a naplózási szintet"
},
"myLog": {
+1 -7
View File
@@ -1,8 +1,7 @@
{
"tabs": {
"roles": "Felhasználók és szerepek",
"access": "Hozzáférési kérelmek",
"demo": "Demó"
"access": "Hozzáférési kérelmek"
},
"pendingAccess": {
"title": "Regisztrált, de még kívül van",
@@ -26,14 +25,11 @@
"empty": "Még nincs felhasználó.",
"you": "te",
"admin": "Admin",
"demo": "Demó",
"suspended": "Felfüggesztve",
"pending": "Jóváhagyásra vár",
"unverified": "Nem igazolt e-mail",
"lastLogin": "Utolsó belépés: {{time}}",
"lastLoginNone": "Nincs még rögzített belépés",
"lastLoginDemo": "A demó fióknál nem rögzítjük",
"demoLocked": "A demó fiók szerepe nem módosítható.",
"selfLocked": "A saját szerepedet nem módosíthatod.",
"makeAdmin": "Adminná tesz",
"makeUser": "Felhasználóvá tesz",
@@ -53,7 +49,6 @@
"undoConfirm": "Feloldod a felfüggesztést: {{email}}? Újra be tud majd lépni.",
"done": "{{email}} felfüggesztve",
"undone": "{{email}} felfüggesztése feloldva",
"demoLocked": "A demó fiók nem függeszthető fel.",
"selfLocked": "A saját fiókodat nem függesztheted fel.",
"failed": "Nem sikerült módosítani a felfüggesztést"
},
@@ -86,7 +81,6 @@
"invite": "Meghívó",
"lastLogin": "Utolsó belépés",
"lastLoginNone": "még nincs rögzítve",
"lastLoginDemo": "a demó fióknál nem rögzítjük",
"inviteMissing": "ez a cím nincs a fehérlistán",
"linkNote": "24 óráig érvényes, egyszer használható. Aki megnyitja, beállíthat egy jelszót, és ezzel kilép mindenki, aki eddig használta a fiókot. A címet nem erősíti meg.",
"mailOff": "nincs beállítva levelezés",
@@ -77,11 +77,6 @@
"backToSignin": "Vissza a belépéshez",
"or": "vagy",
"google": "Folytatás Google-lel",
"tryDemo": "Demó kipróbálása",
"demoHint": "Adj meg egy e-mailt, amely engedélyezve van a demó fiókhoz.",
"demoEmail": "Demó e-mail",
"demoEnter": "Belépés",
"demoDenied": "Ez az e-mail nincs engedélyezve a demóhoz. Kérd az admint, hogy adja hozzá.",
"registerDone": "Majdnem kész — nézd meg a postafiókod a megerősítő linkért, és a Spam mappát is, ha egy percen belül nem jön meg. Miután megerősítetted, egy admin jóváhagyja a fiókodat, mielőtt beléphetnél.",
"forgotDone": "Ha ehhez az e-mailhez tartozik fiók, elküldtük a visszaállító linket. Nézd meg a postafiókod, és a Spam mappát is, ha egy percen belül nem érkezik meg.",
"resetDone": "A jelszavad be van állítva — most már beléphetsz",