From 99e26546d7f8a4936ca3c874d149aaad0c21509d Mon Sep 17 00:00:00 2001 From: DarkGopher Date: Wed, 11 Jun 2025 20:52:36 +0200 Subject: [PATCH] add extra sessopts and any additional opts --- session.go | 18 +++++++++++++----- storage/file/file.go | 2 ++ storage/memory/memory.go | 2 ++ tests/t_test.go | 7 ++++++- 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 storage/file/file.go diff --git a/session.go b/session.go index f38aa02..139f62d 100644 --- a/session.go +++ b/session.go @@ -85,16 +85,24 @@ type Manager struct { 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 -func NewManager(providerName, cookieName string, maxlifetime int64, ssl bool) (*Manager, error) { +func NewManager(sopts SessOpts, adopts any) (*Manager, error) { var provider Provider var ok bool - if provider, ok = provides[providerName]; !ok { - return nil, fmt.Errorf("session: Provider: %q not found (forgotten import?)", providerName) + if provider, ok = provides[sopts.ProviderName]; !ok { + return nil, fmt.Errorf("session: Provider: %q not found (forgotten import?)", sopts.ProviderName) } m := &Manager{ - cookieName: cookieName, provider: provider, - maxlifetime: maxlifetime, secure: ssl, + cookieName: sopts.CookieName, provider: provider, + maxlifetime: sopts.MaxLifetime, secure: sopts.Ssl, } go m.GC() return m, nil diff --git a/storage/file/file.go b/storage/file/file.go new file mode 100644 index 0000000..502df50 --- /dev/null +++ b/storage/file/file.go @@ -0,0 +1,2 @@ +// Package file implements sessions saved into filesystem persistently encoded using gob +package file diff --git a/storage/memory/memory.go b/storage/memory/memory.go index e14ab9f..aa6216b 100644 --- a/storage/memory/memory.go +++ b/storage/memory/memory.go @@ -120,6 +120,8 @@ func (pder *ProviderMemory) RegenerateID(oldsid, newsid string) (err error) { defer pder.lock.Unlock() if ssel, ok := pder.sessions[oldsid]; ok { ssel.Value.(*SessionMemory).sid = newsid + le := pder.sessions[oldsid] + pder.list.Remove(le) delete(pder.sessions, oldsid) pder.sessions[newsid] = ssel } diff --git a/tests/t_test.go b/tests/t_test.go index 931ce7f..b5b3dae 100644 --- a/tests/t_test.go +++ b/tests/t_test.go @@ -287,7 +287,12 @@ func TestRunAll(t *testing.T) { var err error jar, _ := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List}) 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) } fns := []func(t *testing.T){t1, t2, t3, t4, t5, t6, t7, t8, t9}