include Set-Login header on session state transition
authorJustin Wind <justin.wind+git@gmail.com>
Sat, 8 Jun 2024 21:50:42 +0000 (14:50 -0700)
committerJustin Wind <justin.wind+git@gmail.com>
Sat, 8 Jun 2024 21:50:42 +0000 (14:50 -0700)
lib/authenticator.js
lib/enum.js
lib/session-manager.js

index 86b95d6d035e92284756476a1baae491908a5f18..2534cfa2d5224fe9bdf4c1c407472deb3cd8bd1f 100644 (file)
@@ -486,6 +486,7 @@ class Authenticator {
         path: `${this.proxyPrefix}/`,
         secure: this.secureAuthOnly,
       });
+      res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedIn);
       return true;
     }
 
@@ -498,6 +499,7 @@ class Authenticator {
         path: `${this.proxyPrefix}/`,
         secure: this.secureAuthOnly,
       });
+      res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedOut);
 
       res.statusCode = 302;
       res.setHeader(Enum.Header.Location, `${loginPath}?r=${encodeURIComponent(req.url)}`);
index 66e2856b453a3184e720044890b4e77aae40d8b4..4912cd847d228fa09fe2dbdece93dbf3ea60de98 100644 (file)
@@ -9,8 +9,13 @@ const Enum = mergeDeep(DingusEnum, {
     Cookie: 'Cookie',
     Location: 'Location',
     SetCookie: 'Set-Cookie',
+    SetLogin: 'Set-Login',
     WWWAuthenticate: 'WWW-Authenticate',
   },
+  LoginState: {
+    LoggedIn: 'logged-in',
+    LoggedOut: 'logged-out',
+  },
   SessionCookie: 'squeepSession',
   OTPResult: {
     Valid: 'Valid',
index 0b4ce4eaff29db733a04c9c8776716e5290c6317..4635547b7d42dbbebda728bf02983bf7aefb1bee 100644 (file)
@@ -232,6 +232,7 @@ class SessionManager {
     }
 
     await this._sessionCookieSet(res, session);
+    res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedIn);
     res.setHeader(Enum.Header.Location, authorizationEndpoint.href);
     res.statusCode = 302; // Found
     res.end();
@@ -321,6 +322,7 @@ class SessionManager {
           authenticatedIdentifier: state.authenticatedIdentifier,
         };
         await this._sessionCookieSet(res, ctx.session);
+        res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedIn);
         res.statusCode = 302;
         res.setHeader(Enum.Header.Location, state.redirect);
         res.end();
@@ -400,6 +402,7 @@ class SessionManager {
       authenticatedIdentifier: ctx.authenticationId,
     };
     await this._sessionCookieSet(res, ctx.session);
+    res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedIn);
     res.statusCode = 302;
     res.setHeader(Enum.Header.Location, redirect);
     res.end();
@@ -418,6 +421,7 @@ class SessionManager {
     this.logger.debug(_scope, 'called', { ctx });
 
     await this._sessionCookieClear(res);
+    res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedOut);
 
     const redirect = ctx.queryParams['r'] || './';
 
@@ -539,6 +543,7 @@ class SessionManager {
     };
 
     await this._sessionCookieSet(res, ctx.session);
+    res.setHeader(Enum.Header.SetLogin, Enum.LoginState.LoggedIn);
     res.statusCode = 302;
     res.setHeader(Enum.Header.Location, redirect);
     res.end();