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)