vinterliste/frontend
Ole-Morten Duesund 5e5bf92afb feat(auth): UnlockBanner so post-reload DEK loss is recoverable
After a page reload the SPA rehydrates session.user from /me but the
DEK lives only in memory and is intentionally gone. Previously this
manifested as:

  - "Logg inn på nytt med passordet ditt" line under each private
    row (vague — full re-login replaces the cookie too)
  - A raw "not_logged_in" Error.message on saving a private activity
  - Export silently dropping every private row from the file

New UnlockBanner.svelte mounts unconditionally in App.svelte and
renders only when session.user is set but session.dek is null. It
takes the password inline and runs the existing login() flow — same
challenge/derive/unwrap path — so the existing wrapped DEK is
recovered and all the user's private ciphertexts stay readable.
Replacing the cookie as a side effect is fine.

Polished a few other DEK-missing paths:

  - ActivityRow's private branch now says "Lås opp øverst på siden"
    instead of "Logg inn på nytt"
  - ActivityForm has a pre-flight check before submit + a friendly
    catch for the internal dek_missing sentinel
  - Profile's "Last ned eksport" refuses early with a "lås opp"
    pointer instead of producing a quietly truncated export
2026-05-25 22:14:45 +02:00
..
public Design refresh: warmer palette, softer cards, badge icons, hero treatment 2026-05-25 15:47:39 +02:00
src feat(auth): UnlockBanner so post-reload DEK loss is recoverable 2026-05-25 22:14:45 +02:00
index.html Design refresh: warmer palette, softer cards, badge icons, hero treatment 2026-05-25 15:47:39 +02:00
svelte.config.js Scaffold Vinterliste — end-to-end encrypted winter activity list 2026-05-25 12:27:14 +02:00
tsconfig.json Public landing, owner-list links, owner-conditional semi, PWA + mobile 2026-05-25 12:57:59 +02:00
vite.config.ts Scaffold Vinterliste — end-to-end encrypted winter activity list 2026-05-25 12:27:14 +02:00