gitea源码

store.go 1.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package session
  4. import (
  5. "net/http"
  6. "code.gitea.io/gitea/modules/setting"
  7. "gitea.com/go-chi/session"
  8. )
  9. type RawStore = session.RawStore
  10. type Store interface {
  11. RawStore
  12. Destroy(http.ResponseWriter, *http.Request) error
  13. }
  14. type mockStoreContextKeyStruct struct{}
  15. var MockStoreContextKey = mockStoreContextKeyStruct{}
  16. // RegenerateSession regenerates the underlying session and returns the new store
  17. func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
  18. for _, f := range BeforeRegenerateSession {
  19. f(resp, req)
  20. }
  21. if setting.IsInTesting {
  22. if store := req.Context().Value(MockStoreContextKey); store != nil {
  23. return store.(Store), nil
  24. }
  25. }
  26. return session.RegenerateSession(resp, req)
  27. }
  28. func GetContextSession(req *http.Request) Store {
  29. if setting.IsInTesting {
  30. if store := req.Context().Value(MockStoreContextKey); store != nil {
  31. return store.(Store)
  32. }
  33. }
  34. return session.GetSession(req)
  35. }
  36. // BeforeRegenerateSession is a list of functions that are called before a session is regenerated.
  37. var BeforeRegenerateSession []func(http.ResponseWriter, *http.Request)