code.gitea.io/gitea@v1.22.3/modules/session/store.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package session 5 6 import ( 7 "net/http" 8 9 "code.gitea.io/gitea/modules/setting" 10 11 "gitea.com/go-chi/session" 12 ) 13 14 // Store represents a session store 15 type Store interface { 16 Get(any) any 17 Set(any, any) error 18 Delete(any) error 19 ID() string 20 Release() error 21 Flush() error 22 Destroy(http.ResponseWriter, *http.Request) error 23 } 24 25 // RegenerateSession regenerates the underlying session and returns the new store 26 func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) { 27 for _, f := range BeforeRegenerateSession { 28 f(resp, req) 29 } 30 if setting.IsInTesting { 31 if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok { 32 return store, nil 33 } 34 } 35 return session.RegenerateSession(resp, req) 36 } 37 38 func GetContextSession(req *http.Request) Store { 39 if setting.IsInTesting { 40 if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok { 41 return store 42 } 43 } 44 return session.GetSession(req) 45 } 46 47 // BeforeRegenerateSession is a list of functions that are called before a session is regenerated. 48 var BeforeRegenerateSession []func(http.ResponseWriter, *http.Request)