Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. // Store represents a session store
  10. type Store interface {
  11. Get(any) any
  12. Set(any, any) error
  13. Delete(any) error
  14. ID() string
  15. Release() error
  16. Flush() error
  17. Destroy(http.ResponseWriter, *http.Request) error
  18. }
  19. // RegenerateSession regenerates the underlying session and returns the new store
  20. func RegenerateSession(resp http.ResponseWriter, req *http.Request) (Store, error) {
  21. for _, f := range BeforeRegenerateSession {
  22. f(resp, req)
  23. }
  24. if setting.IsInTesting {
  25. if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok {
  26. return store, nil
  27. }
  28. }
  29. return session.RegenerateSession(resp, req)
  30. }
  31. func GetContextSession(req *http.Request) Store {
  32. if setting.IsInTesting {
  33. if store, ok := req.Context().Value(MockStoreContextKey).(*MockStore); ok {
  34. return store
  35. }
  36. }
  37. return session.GetSession(req)
  38. }
  39. // BeforeRegenerateSession is a list of functions that are called before a session is regenerated.
  40. var BeforeRegenerateSession []func(http.ResponseWriter, *http.Request)