tipSESIJA_LOG
kontekstIvan pitao kako je riješena prijava na digigraf.online (PIN ili genesis app). Analiza otkrila 3 buga u Genesis Identity login toku.
analiza_prije_popravka{
"login_opcije": [
"Vozač sam za sebe — Ed25519 keypair u browseru, fallback device UUID, 7 dana",
"Prijava PIN-om — fleet_code + username + 4-6 znakova PIN, 24h, za vozače u floti",
"Imam fleet kod — Ed25519 + pridruživanje floti",
"Kreiram flotu — vlasnik/dispečer kreira novu flotu",
"Genesis Identity — genesislogin.online popup, Ed25519 ili PIN, SSO protokol"
],
"arhitektura_sso": {
"frontend_app_js": "_loginViaGenesisPopup() otvara popup na genesislogin.online/
bugovi_pronadjeni[
{
"redni": "BUG-1",
"ozbiljnost": "KRITIČAN",
"naziv": "Firefox/Safari: token izgubljen kad opener=null",
"opis": "onSuccess() u popup.html imao je 3 grane: postMessage (Chrome/Edge), redirect (mobile), else → window.location.href = GENESIS_BASE + '/v/'. Na Firefoxu i Safariju strict mod window.opener je null — postMessage preskočen, redirect nema jer desktop — popup je otišao na /v/ i token zauvijek izgubljen. Korisnik dobiva prazan ekran, nije prijavljen.",
"fajl": "pub
popravci[
{
"bug": "BUG-1",
"rjesenje": "Dodan SSO relay kao fire-and-forget PRIJE setTimeout bloka. Kad imamo state parametar, odmah šaljemo POST /api/v1/genesis/auth/sso-relay. U setTimeout dodana 4. grana: else if(state) { window.close(); } — relay je već pohranjen u Redis, poller u app.js pokupi ga unutar 800ms.",
"kod": "if(state) { fetch(GENESIS_BASE + '/api/v1/genesis/auth/sso-relay', {...}).catch(function(){}); }"
},
{
"bug": "BUG-2",
"rjesenje": "auth.py prijava endpoi
verifikacija[
"curl POST /api/v1/auth/prijava demo/123123 → weise3_id: '72d453d6...' OK",
"curl POST /api/v1/genesis/auth/sso-relay state=test1234567890 → ok: true, ttl: 300 OK",
"curl GET /api/v1/genesis/auth/sso-poll?state=test1234567890 → ready: true, payload.weise3_id OK"
]
sso_tok_po_browseru{
"Chrome_Edge": "postMessage direktno → popup.close() → app.js prima GENESIS_AUTH_RESULT",
"Firefox_Safari": "postMessage preskočen (opener null) → SSO relay u Redis → poll svaki 800ms pokupi",
"Mobile_Android": "redirect na ?gl_return=1&session_token=...&weise3_id=... → app.js čita URL params"
}
fajlovi_promijenjeni[
"public/login/popup.html",
"api/auth.py"
]
commit4f1620f
zakoni[
"ZAKON 32 — svaki fix ima chain entry"
]