Clear definitively stale sessions before starting Home sign-in
2 files changed,
+28
−1
internal/memoria/home.go+1 −1internal/memoria/home_router_test.go+27 −0
CI passed — run details
diff --git a/internal/memoria/home.go b/internal/memoria/home.go| index 8429789..4006405 100644 |
| --- a/internal/memoria/home.go |
| +++ b/internal/memoria/home.go |
| @@ -82,7 +82,7 @@ func (a *app) homeMiddleware(origin string) func(http.Handler) http.Handler { |
| func (a *app) signin(w http.ResponseWriter, r *http.Request) { |
| if a.home != nil { |
| - a.home.routes.Signin(w, r) |
| + a.home.sessions.Middleware(http.HandlerFunc(a.home.routes.Signin)).ServeHTTP(w, r) |
| return |
| } |
| a.localSignin(w, r) |
diff --git a/internal/memoria/home_router_test.go b/internal/memoria/home_router_test.go| index 8330d2b..c9bb99c 100644 |
| --- a/internal/memoria/home_router_test.go |
| +++ b/internal/memoria/home_router_test.go |
| @@ -272,3 +272,30 @@ func TestHomeRouterMissingKeymailFreshnessCannotAllocateLink(t *testing.T) { |
| t.Fatal("missing freshness allocated identity", n, err) |
| } |
| } |
| +func TestHomeSigninClearsOnlyDefinitivelyStaleSession(t *testing.T) { |
| + f := newHomeRouterFixture(t) |
| + f.local(t) |
| + cookieName := f.app.home.sessions.CookieName() |
| + saved := f.cookies[cookieName].Value |
| + if _, err := f.app.db.Writer().Exec("ALTER TABLE sessions RENAME TO unavailable_sessions"); err != nil { |
| + t.Fatal(err) |
| + } |
| + homeRedirect(t, f.do("GET", "/signin", "")) |
| + if f.cookies[cookieName] == nil || f.cookies[cookieName].Value != saved { |
| + t.Fatal("temporary storage failure cleared valid cookie") |
| + } |
| + if _, err := f.app.db.Writer().Exec("ALTER TABLE unavailable_sessions RENAME TO sessions"); err != nil { |
| + t.Fatal(err) |
| + } |
| + if _, err := f.app.db.Writer().Exec("DELETE FROM sessions"); err != nil { |
| + t.Fatal(err) |
| + } |
| + start := homeRedirect(t, f.do("GET", "/signin", "")) |
| + if f.cookies[cookieName] != nil { |
| + t.Fatal("stale cookie not cleared") |
| + } |
| + target := homeRedirect(t, f.do("GET", start, "")) |
| + if !strings.HasPrefix(target, homeTestIssuer+"/") { |
| + t.Fatal("stale cookie prevented Home sign-in", target) |
| + } |
| +} |