make session easier to be configured
This commit is contained in:
parent
adb4dabb24
commit
41b1833898
@ -15,21 +15,22 @@ import (
|
||||
)
|
||||
|
||||
func TestRedis(t *testing.T) {
|
||||
sessionConfig := &session.ManagerConfig{
|
||||
CookieName: "gosessionid",
|
||||
EnableSetCookie: true,
|
||||
Gclifetime: 3600,
|
||||
Maxlifetime: 3600,
|
||||
Secure: false,
|
||||
CookieLifeTime: 3600,
|
||||
}
|
||||
|
||||
redisAddr := os.Getenv("REDIS_ADDR")
|
||||
if redisAddr == "" {
|
||||
redisAddr = "127.0.0.1:6379"
|
||||
}
|
||||
redisConfig := fmt.Sprintf("%s,100,,0,30", redisAddr)
|
||||
|
||||
sessionConfig := session.NewManagerConfig(
|
||||
session.CfgCookieName(`gosessionid`),
|
||||
session.CfgSetCookie(true),
|
||||
session.CfgGcLifeTime(3600),
|
||||
session.CfgMaxLifeTime(3600),
|
||||
session.CfgSecure(false),
|
||||
session.CfgCookieLifeTime(3600),
|
||||
session.CfgProviderConfig(redisConfig),
|
||||
)
|
||||
|
||||
sessionConfig.ProviderConfig = fmt.Sprintf("%s,100,,0,30", redisAddr)
|
||||
globalSession, err := session.NewManager("redis", sessionConfig)
|
||||
if err != nil {
|
||||
t.Fatal("could not create manager:", err)
|
||||
|
||||
@ -13,15 +13,15 @@ import (
|
||||
)
|
||||
|
||||
func TestRedisSentinel(t *testing.T) {
|
||||
sessionConfig := &session.ManagerConfig{
|
||||
CookieName: "gosessionid",
|
||||
EnableSetCookie: true,
|
||||
Gclifetime: 3600,
|
||||
Maxlifetime: 3600,
|
||||
Secure: false,
|
||||
CookieLifeTime: 3600,
|
||||
ProviderConfig: "127.0.0.1:6379,100,,0,master",
|
||||
}
|
||||
sessionConfig := session.NewManagerConfig(
|
||||
session.CfgCookieName(`gosessionid`),
|
||||
session.CfgSetCookie(true),
|
||||
session.CfgGcLifeTime(3600),
|
||||
session.CfgMaxLifeTime(3600),
|
||||
session.CfgSecure(false),
|
||||
session.CfgCookieLifeTime(3600),
|
||||
session.CfgProviderConfig("127.0.0.1:6379,100,,0,master"),
|
||||
)
|
||||
globalSessions, e := session.NewManager("redis_sentinel", sessionConfig)
|
||||
if e != nil {
|
||||
t.Log(e)
|
||||
|
||||
@ -91,25 +91,6 @@ func GetProvider(name string) (Provider, error) {
|
||||
return provider, nil
|
||||
}
|
||||
|
||||
// ManagerConfig define the session config
|
||||
type ManagerConfig struct {
|
||||
CookieName string `json:"cookieName"`
|
||||
EnableSetCookie bool `json:"enableSetCookie,omitempty"`
|
||||
Gclifetime int64 `json:"gclifetime"`
|
||||
Maxlifetime int64 `json:"maxLifetime"`
|
||||
DisableHTTPOnly bool `json:"disableHTTPOnly"`
|
||||
Secure bool `json:"secure"`
|
||||
CookieLifeTime int `json:"cookieLifeTime"`
|
||||
ProviderConfig string `json:"providerConfig"`
|
||||
Domain string `json:"domain"`
|
||||
SessionIDLength int64 `json:"sessionIDLength"`
|
||||
EnableSidInHTTPHeader bool `json:"EnableSidInHTTPHeader"`
|
||||
SessionNameInHTTPHeader string `json:"SessionNameInHTTPHeader"`
|
||||
EnableSidInURLQuery bool `json:"EnableSidInURLQuery"`
|
||||
SessionIDPrefix string `json:"sessionIDPrefix"`
|
||||
CookieSameSite http.SameSite `json:"cookieSameSite"`
|
||||
}
|
||||
|
||||
// Manager contains Provider and its configuration.
|
||||
type Manager struct {
|
||||
provider Provider
|
||||
|
||||
137
server/web/session/session_config.go
Normal file
137
server/web/session/session_config.go
Normal file
@ -0,0 +1,137 @@
|
||||
package session
|
||||
|
||||
import "net/http"
|
||||
|
||||
// ManagerConfig define the session config
|
||||
type ManagerConfig struct {
|
||||
CookieName string `json:"cookieName"`
|
||||
EnableSetCookie bool `json:"enableSetCookie,omitempty"`
|
||||
Gclifetime int64 `json:"gclifetime"`
|
||||
Maxlifetime int64 `json:"maxLifetime"`
|
||||
DisableHTTPOnly bool `json:"disableHTTPOnly"`
|
||||
Secure bool `json:"secure"`
|
||||
CookieLifeTime int `json:"cookieLifeTime"`
|
||||
ProviderConfig string `json:"providerConfig"`
|
||||
Domain string `json:"domain"`
|
||||
SessionIDLength int64 `json:"sessionIDLength"`
|
||||
EnableSidInHTTPHeader bool `json:"EnableSidInHTTPHeader"`
|
||||
SessionNameInHTTPHeader string `json:"SessionNameInHTTPHeader"`
|
||||
EnableSidInURLQuery bool `json:"EnableSidInURLQuery"`
|
||||
SessionIDPrefix string `json:"sessionIDPrefix"`
|
||||
CookieSameSite http.SameSite `json:"cookieSameSite"`
|
||||
}
|
||||
|
||||
type ManagerConfigOpt func(config *ManagerConfig)
|
||||
|
||||
func NewManagerConfig(opts ...ManagerConfigOpt) *ManagerConfig {
|
||||
config := &ManagerConfig{}
|
||||
for _, opt := range opts {
|
||||
opt(config)
|
||||
}
|
||||
return config
|
||||
}
|
||||
|
||||
// CfgCookieName set key of session id
|
||||
func CfgCookieName(cookieName string) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.CookieName = cookieName
|
||||
}
|
||||
}
|
||||
|
||||
// CfgCookieName set len of session id
|
||||
func CfgSessionIdLength(len int64) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.SessionIDLength = len
|
||||
}
|
||||
}
|
||||
|
||||
// CfgSessionIdPrefix set prefix of session id
|
||||
func CfgSessionIdPrefix(prefix string) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.SessionIDPrefix = prefix
|
||||
}
|
||||
}
|
||||
|
||||
//CfgSetCookie whether set `Set-Cookie` header in HTTP response
|
||||
func CfgSetCookie(enable bool) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.EnableSetCookie = enable
|
||||
}
|
||||
}
|
||||
|
||||
//CfgGcLifeTime set session gc lift time
|
||||
func CfgGcLifeTime(lifeTime int64) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.Gclifetime = lifeTime
|
||||
}
|
||||
}
|
||||
|
||||
//CfgMaxLifeTime set session lift time
|
||||
func CfgMaxLifeTime(lifeTime int64) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.Maxlifetime = lifeTime
|
||||
}
|
||||
}
|
||||
|
||||
//CfgGcLifeTime set session lift time
|
||||
func CfgCookieLifeTime(lifeTime int) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.CookieLifeTime = lifeTime
|
||||
}
|
||||
}
|
||||
|
||||
//CfgProviderConfig configure session provider
|
||||
func CfgProviderConfig(providerConfig string) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.ProviderConfig = providerConfig
|
||||
}
|
||||
}
|
||||
|
||||
//CfgDomain set cookie domain
|
||||
func CfgDomain(domain string) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.Domain = domain
|
||||
}
|
||||
}
|
||||
|
||||
//CfgSessionIdInHTTPHeader enable session id in http header
|
||||
func CfgSessionIdInHTTPHeader(enable bool) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.EnableSidInHTTPHeader = enable
|
||||
}
|
||||
}
|
||||
|
||||
//CfgSetSessionNameInHTTPHeader set key of session id in http header
|
||||
func CfgSetSessionNameInHTTPHeader(name string) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.SessionNameInHTTPHeader = name
|
||||
}
|
||||
}
|
||||
|
||||
//EnableSidInURLQuery enable session id in query string
|
||||
func CfgEnableSidInURLQuery(enable bool) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.EnableSidInURLQuery = enable
|
||||
}
|
||||
}
|
||||
|
||||
//DisableHTTPOnly set HTTPOnly for http.Cookie
|
||||
func CfgHTTPOnly(HTTPOnly bool) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.DisableHTTPOnly = !HTTPOnly
|
||||
}
|
||||
}
|
||||
|
||||
//CfgSecure set Secure for http.Cookie
|
||||
func CfgSecure(Enable bool) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.Secure = Enable
|
||||
}
|
||||
}
|
||||
|
||||
//CfgSameSite set http.SameSite
|
||||
func CfgSameSite(sameSite http.SameSite) ManagerConfigOpt {
|
||||
return func(config *ManagerConfig) {
|
||||
config.CookieSameSite = sameSite
|
||||
}
|
||||
}
|
||||
16
server/web/session/session_provider_type.go
Normal file
16
server/web/session/session_provider_type.go
Normal file
@ -0,0 +1,16 @@
|
||||
package session
|
||||
|
||||
const (
|
||||
ProviderCookie = `cookie`
|
||||
ProviderFile = `file`
|
||||
ProviderMemory = `memory`
|
||||
ProviderCouchbase = `couchbase`
|
||||
ProviderLedis = `ledis`
|
||||
ProviderMemcache = `memcache`
|
||||
ProviderMysql = `mysql`
|
||||
ProviderPostgresql = `postgresql`
|
||||
ProviderRedis = `redis`
|
||||
ProviderRedisCluster = `redis_cluster`
|
||||
ProviderRedisSentinel = `redis_sentinel`
|
||||
ProviderSsdb = `ssdb`
|
||||
)
|
||||
Loading…
x
Reference in New Issue
Block a user