fix: enforce configured session timeout

This commit is contained in:
OpenClaw Agent
2026-09-21 19:55:28 +08:00
parent 5ceba1104d
commit 75d6e45080
2 changed files with 14 additions and 3 deletions
+6 -2
View File
@@ -339,12 +339,16 @@ func (s *Server) session(w http.ResponseWriter, r *http.Request) {
writeJSONError(w, http.StatusNotFound, "user or password is wrong") writeJSONError(w, http.StatusNotFound, "user or password is wrong")
return return
} }
token, err := auth.NewToken(a.Username) ttl := 365 * 24 * time.Hour
if s.SessionTimeout > 0 {
ttl = time.Duration(s.SessionTimeout) * time.Minute
}
token, err := auth.NewTokenWithTTL(a.Username, ttl)
if err != nil { if err != nil {
writeJSONError(w, http.StatusInternalServerError, "failed to create token") writeJSONError(w, http.StatusInternalServerError, "failed to create token")
return return
} }
expires := time.Now().Add(365 * 24 * time.Hour) expires := time.Now().Add(ttl)
http.SetCookie(w, &http.Cookie{Name: "JWT", Value: token, Path: "/", Expires: expires, HttpOnly: true}) http.SetCookie(w, &http.Cookie{Name: "JWT", Value: token, Path: "/", Expires: expires, HttpOnly: true})
http.SetCookie(w, &http.Cookie{Name: "user", Value: a.Username, Path: "/", Expires: expires}) http.SetCookie(w, &http.Cookie{Name: "user", Value: a.Username, Path: "/", Expires: expires})
w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated)
+8 -1
View File
@@ -187,7 +187,14 @@ type jwtClaims struct {
} }
func NewToken(username string) (string, error) { func NewToken(username string) (string, error) {
claims := jwtClaims{Acc: username, StandardClaims: jwt.StandardClaims{ExpiresAt: time.Now().Add(365 * 24 * time.Hour).Unix()}} return NewTokenWithTTL(username, 365*24*time.Hour)
}
func NewTokenWithTTL(username string, ttl time.Duration) (string, error) {
if ttl <= 0 {
return "", fmt.Errorf("invalid token ttl")
}
claims := jwtClaims{Acc: username, StandardClaims: jwt.StandardClaims{ExpiresAt: time.Now().Add(ttl).Unix()}}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString([]byte(jwtSecret)) return token.SignedString([]byte(jwtSecret))
} }