{"id":"c0171","filename":"c0171_genesis_sso_expiry_fix.dok.json","weise3_id":"","tip":"fix","naziv":"c0171 — Genesis SSO token expiry fix (sati.ink + genesispos.online)","kreator":"CC/sonnet","datum":"2026-05-08","snippet":"","status":"DONE","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"fix","naziv":"c0171 — Genesis SSO token expiry fix (sati.ink + genesispos.online)","datum":"2026-05-08","autor":"CC/sonnet","prioritet":"P0","status":"DONE","sto_treba":"Korisnici nakon 2h dobivaju 'Token nevažeći ili istekao' i ne mogu se prijaviti. Drugi identitet također ne prolazi.","uzrok":{"root_cause":"genesis-auth.js isLoggedIn() nikada nije provjeravao expires_at polje u localStorage. Nakon što Redis session istekne (noble tier TTL=7200s), localStorage još uvijek drži stari token. isLoggedIn() vraća true → verifyToken() zove /me → 401 → error blokira UI.","sekundarni":"popup.html nije upisivao expires_at pri pohrani sesije u localStorage — bez toga isLoggedIn() fix ne može funkcionirati."},"faze":[{"id":"F1","naziv":"genesis-auth.js — dodaj expires_at provjeru u isLoggedIn()","status":"DONE","commit":"bb11999","repo":"/var/www/genesislogin","detalj":"isLoggedIn() sada čita s.expires_at, ako je isteklo → clearSession() → return false"},{"id":"F2","naziv":"popup.html — spremi expires_at pri loginu","status":"DONE","commit":"bb11999","repo":"/var/www/genesislogin","detalj":"expires_at = Math.floor(Date.now()/1000) + (result.tier_ttl || 7200)"},{"id":"F3","naziv":"login_pos.html — fallback na popup kad cached session istekla","status":"DONE","commit":"b85282f","repo":"/var/www/fenix-v3","detalj":"Expired session → GenesisAuth.logout() + nastavi na popup umjesto blokade"},{"id":"F4","naziv":"evalidator.eu/arhiva/ → /archive/ redirect","status":"DONE","fajl":"/etc/nginx/sites-enabled/evalidator","detalj":"location /arhiva/ { return 301 https://evalidator.eu/archive/; } — nginx reloadan"}],"testovi":["curl https://evalidator.eu/arhiva/ → 301 → https://evalidator.eu/archive/ ✓","curl https://genesis.limit-connect.com/api/v1/genesis/auth/me + expired token → 401 (expected) ✓","Genesis /verify/ endpoint aktivan, Redis DB4 ima 50+ aktivnih sesija ✓"],"zakon":["ZAKON 32 — svaki P0 fix ima chain entry","ZAKON 2 — Bršljan je naš internet"],"sljedeci":"c0172 — c0170 E2+E3 dovršiti (DE locale + PWA ikone za sati.ink)"}}