1
0
mirror of https://github.com/alexedwards/scs.git synced 2025-07-15 01:04:36 +02:00

Refactor to remove writeSessionCookie() method

This commit is contained in:
Alex Edwards
2020-11-01 10:16:35 +01:00
parent 8c9ddd4003
commit 04cf4f517e

View File

@ -147,16 +147,35 @@ func (s *SessionManager) LoadAndSave(next http.Handler) http.Handler {
sr.MultipartForm.RemoveAll() sr.MultipartForm.RemoveAll()
} }
switch s.Status(ctx) { if s.Status(ctx) != Unmodified {
case Modified: responseCookie := &http.Cookie{
token, expiry, err := s.Commit(ctx) Name: s.Cookie.Name,
if err != nil { Path: s.Cookie.Path,
s.ErrorFunc(w, r, err) Domain: s.Cookie.Domain,
return Secure: s.Cookie.Secure,
HttpOnly: s.Cookie.HttpOnly,
SameSite: s.Cookie.SameSite,
} }
s.writeSessionCookie(w, token, expiry)
case Destroyed: switch s.Status(ctx) {
s.writeSessionCookie(w, "", time.Time{}) case Modified:
token, expiry, err := s.Commit(ctx)
if err != nil {
s.ErrorFunc(w, r, err)
return
}
responseCookie.Value = token
responseCookie.Expires = time.Unix(expiry.Unix()+1, 0) // Round up to the nearest second.
responseCookie.MaxAge = int(time.Until(expiry).Seconds() + 1) // Round up to the nearest second.
case Destroyed:
responseCookie.Expires = time.Unix(1, 0)
responseCookie.MaxAge = -1
}
w.Header().Add("Set-Cookie", responseCookie.String())
addHeaderIfMissing(w, "Cache-Control", `no-cache="Set-Cookie"`)
addHeaderIfMissing(w, "Vary", "Cookie")
} }
if bw.code != 0 { if bw.code != 0 {
@ -166,31 +185,6 @@ func (s *SessionManager) LoadAndSave(next http.Handler) http.Handler {
}) })
} }
func (s *SessionManager) writeSessionCookie(w http.ResponseWriter, token string, expiry time.Time) {
cookie := &http.Cookie{
Name: s.Cookie.Name,
Value: token,
Path: s.Cookie.Path,
Domain: s.Cookie.Domain,
Secure: s.Cookie.Secure,
HttpOnly: s.Cookie.HttpOnly,
SameSite: s.Cookie.SameSite,
}
if expiry.IsZero() {
cookie.Expires = time.Unix(1, 0)
cookie.MaxAge = -1
} else if s.Cookie.Persist {
cookie.Expires = time.Unix(expiry.Unix()+1, 0) // Round up to the nearest second.
cookie.MaxAge = int(time.Until(expiry).Seconds() + 1) // Round up to the nearest second.
}
w.Header().Add("Set-Cookie", cookie.String())
addHeaderIfMissing(w, "Cache-Control", `no-cache="Set-Cookie"`)
addHeaderIfMissing(w, "Vary", "Cookie")
}
func addHeaderIfMissing(w http.ResponseWriter, key, value string) { func addHeaderIfMissing(w http.ResponseWriter, key, value string) {
for _, h := range w.Header()[key] { for _, h := range w.Header()[key] {
if h == value { if h == value {