add extra sessopts and any additional opts

This commit is contained in:
DarkGopher 2025-06-11 20:52:36 +02:00
parent 59aa49d2e9
commit 99e26546d7
4 changed files with 23 additions and 6 deletions

View file

@ -85,16 +85,24 @@ type Manager struct {
secure bool secure bool
} }
// SessOpts set session options or NewManager
type SessOpts struct {
ProviderName string
CookieName string
MaxLifetime int64
Ssl bool
}
// NewManager create new *Manager for provideName, cookieName and maxlifetime in seconds // NewManager create new *Manager for provideName, cookieName and maxlifetime in seconds
func NewManager(providerName, cookieName string, maxlifetime int64, ssl bool) (*Manager, error) { func NewManager(sopts SessOpts, adopts any) (*Manager, error) {
var provider Provider var provider Provider
var ok bool var ok bool
if provider, ok = provides[providerName]; !ok { if provider, ok = provides[sopts.ProviderName]; !ok {
return nil, fmt.Errorf("session: Provider: %q not found (forgotten import?)", providerName) return nil, fmt.Errorf("session: Provider: %q not found (forgotten import?)", sopts.ProviderName)
} }
m := &Manager{ m := &Manager{
cookieName: cookieName, provider: provider, cookieName: sopts.CookieName, provider: provider,
maxlifetime: maxlifetime, secure: ssl, maxlifetime: sopts.MaxLifetime, secure: sopts.Ssl,
} }
go m.GC() go m.GC()
return m, nil return m, nil

2
storage/file/file.go Normal file
View file

@ -0,0 +1,2 @@
// Package file implements sessions saved into filesystem persistently encoded using gob
package file

View file

@ -120,6 +120,8 @@ func (pder *ProviderMemory) RegenerateID(oldsid, newsid string) (err error) {
defer pder.lock.Unlock() defer pder.lock.Unlock()
if ssel, ok := pder.sessions[oldsid]; ok { if ssel, ok := pder.sessions[oldsid]; ok {
ssel.Value.(*SessionMemory).sid = newsid ssel.Value.(*SessionMemory).sid = newsid
le := pder.sessions[oldsid]
pder.list.Remove(le)
delete(pder.sessions, oldsid) delete(pder.sessions, oldsid)
pder.sessions[newsid] = ssel pder.sessions[newsid] = ssel
} }

View file

@ -287,7 +287,12 @@ func TestRunAll(t *testing.T) {
var err error var err error
jar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) jar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
testclient.Jar = jar testclient.Jar = jar
if sm, err = session.NewManager(pn, sid, lifet, true); err != nil { sessopts := session.SessOpts{
ProviderName: "memory", CookieName: sid,
MaxLifetime: 180, Ssl: true,
}
if sm, err = session.NewManager(sessopts, nil); err != nil {
t.Errorf("Session provider %s failed initialize err: %v", pn, err) t.Errorf("Session provider %s failed initialize err: %v", pn, err)
} }
fns := []func(t *testing.T){t1, t2, t3, t4, t5, t6, t7, t8, t9} fns := []func(t *testing.T){t1, t2, t3, t4, t5, t6, t7, t8, t9}