{"id":"c1204","filename":"c1204_ulaz_korak5a_require_online.dok.json","weise3_id":"","tip":"ulaz_implementacija","naziv":"ULAZ Korak 5a — require_online() granica offline/online","kreator":"CC (Claude Code)","datum":"2026-05-31","snippet":"","status":"DOKAZANO","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"ulaz_implementacija","naziv":"ULAZ Korak 5a — require_online() granica offline/online","datum":"2026-05-31","status":"DOKAZANO","verzija":"1.0","sto_je_napravljeno":{"fajl":"/var/www/fenix-v4/core/middleware.py","bak":"/var/www/fenix-v4/core/middleware.py.bak_korak5a","server":"MAR (212.227.181.201)","promjene":["Dodan require_online() Depends — jedino centralno mjesto za granicu offline/online","Ispravljen trust=70 -> trust=60 u get_current_user_tprg (magic_link razina)"]},"require_online_spec":{"ulaz":"AuthenticatedUser (bilo koji put: JWT, POS, TPRG)","logika":"if user.user_id is None: raise HTTPException(403)","izlaz_ok":"AuthenticatedUser s garantiranim user_id (nije None)","izlaz_fail":"403 Forbidden — identitet je valjan, soba nije offline-sigurna","zasto_403_ne_401":"401 = neautenticiran. 403 = autenticiran ali nedovoljno. TPRG je autenticiran — samo offline.","lokacija":"core/middleware.py linija 120","log_event":"require_online_rejected (warning, bilježi weise3_id + trust)"},"trust_korekcija":{"staro":"trust=70 (TPRG, get_current_user_tprg)","novo":"trust=60","razlog":"magic_link razina — offline, bez baze, kriptografski vezan HMAC. Ne smije biti iznad 60 bez baze.","tablica":{"WebAuthn":100,"Genesis_online":90,"fina_cert":80,"TPRG_offline":60,"magic_link":60}},"dokaz":{"test_offline":"AuthenticatedUser(user_id=None, trust=60) -> HTTPException 403 OK","test_online":"AuthenticatedUser(user_id=UUID(...), trust=90) -> prolazi, user_id garantiran","import_test":"from core.middleware import require_online, get_current_user_tprg, AuthenticatedUser -> import ok","servis":"gunicorn-fenix-v4 restart -> active"},"sljedeci_korak":{"naziv":"ULAZ Korak 5b","opis":"Udruziti require_online() na sve rute koje direktno pristupaju user.user_id","moduli":["vault","invoicing","komitenti","companies","archive","ai_knjizenje","devices","accounts","capture"],"uvjet_za_start":"Korak 5a dokazan — DA. Korak 5b slobodan."},"zakon":["ZAKON 8","ZAKON 11","ULAZ spec c1203"],"autor":"CC (Claude Code)","chain_prev":"c1203_offline_sigurne_sobe_spec.dok.json"}}