From e9e6973ff1ab14fea3d4ac552943265ec9710b68 Mon Sep 17 00:00:00 2001 From: meandaD Date: Sun, 14 Jan 2024 16:04:18 +0100 Subject: [PATCH 1/2] Add "remember me" option for log in. Passes on whether the user has selected the "remember me" option by setting a cookie, and if so, the jwt cookie set at login is set to be valid for 6 months instead of one week. Related: #1302 --- api/users.go | 2 +- tools/session.go | 15 ++++++++++----- web/template/login.gohtml | 14 ++++++++++++++ web/user.go | 10 +++++++++- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/api/users.go b/api/users.go index 2afc0e454..d16857738 100644 --- a/api/users.go +++ b/api/users.go @@ -86,7 +86,7 @@ func (r usersRoutes) impersonateUser(c *gin.Context) { }) return } - tools.StartSession(c, &tools.SessionData{Userid: u.ID}) + tools.StartSession(c, &tools.SessionData{Userid: u.ID}, false) } func (r usersRoutes) updateUser(c *gin.Context) { diff --git a/tools/session.go b/tools/session.go index 41f485ca7..beec4a3ee 100644 --- a/tools/session.go +++ b/tools/session.go @@ -12,21 +12,26 @@ type SessionData struct { SamlSubjectID *string } -func StartSession(c *gin.Context, data *SessionData) { - token, err := createToken(data.Userid, data.SamlSubjectID) +func StartSession(c *gin.Context, data *SessionData, rememberMe bool) { + maxAgeInDays := 7 // by default, log-in status expires in one week + if rememberMe { + maxAgeInDays = 30 * 6 // if user chooses "remember me", let log-in status be valid for 6 months + } + + token, err := createToken(data.Userid, data.SamlSubjectID, maxAgeInDays) if err != nil { logger.Error("Could not create token", "err", err) return } - c.SetCookie("jwt", token, 60*60*24*7, "/", "", CookieSecure, true) + c.SetCookie("jwt", token, 60*60*24*maxAgeInDays, "/", "", CookieSecure, true) } -func createToken(user uint, samlSubjectID *string) (string, error) { +func createToken(user uint, samlSubjectID *string, maxAgeInDays int) (string, error) { t := jwt.New(jwt.GetSigningMethod("RS256")) t.Claims = &JWTClaims{ RegisteredClaims: &jwt.RegisteredClaims{ - ExpiresAt: &jwt.NumericDate{Time: time.Now().Add(time.Hour * 24 * 7)}, // Token expires in one week + ExpiresAt: &jwt.NumericDate{Time: time.Now().Add(time.Hour * 24 * time.Duration(maxAgeInDays))}, // Token expires in one week }, UserID: user, SamlSubjectID: samlSubjectID, diff --git a/web/template/login.gohtml b/web/template/login.gohtml index 5e45f4150..8ab0c442d 100644 --- a/web/template/login.gohtml +++ b/web/template/login.gohtml @@ -39,6 +39,20 @@

Login

+ +
+ + + +
+ + {{if .UseSAML}}
Date: Sun, 14 Jan 2024 16:45:31 +0100 Subject: [PATCH 2/2] Remove "rememberMe" cookie upon load of login page --- web/template/login.gohtml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/template/login.gohtml b/web/template/login.gohtml index 8ab0c442d..2cb06c602 100644 --- a/web/template/login.gohtml +++ b/web/template/login.gohtml @@ -24,6 +24,13 @@ + + +