A community based topic aggregation platform built on atproto
1package oauth
2
3import (
4 "fmt"
5 "sync"
6
7 "github.com/gorilla/sessions"
8)
9
10var (
11 // Global singleton cookie store
12 cookieStoreInstance *sessions.CookieStore
13 cookieStoreOnce sync.Once
14 cookieStoreErr error
15)
16
17// InitCookieStore initializes the global cookie store singleton
18// Must be called once at application startup before any handlers are created
19func InitCookieStore(secret string) error {
20 cookieStoreOnce.Do(func() {
21 if len(secret) < MinCookieSecretLength {
22 cookieStoreErr = fmt.Errorf("OAUTH_COOKIE_SECRET must be at least %d bytes for security", MinCookieSecretLength)
23 return
24 }
25 cookieStoreInstance = sessions.NewCookieStore([]byte(secret))
26 })
27 return cookieStoreErr
28}
29
30// GetCookieStore returns the global cookie store singleton
31// Panics if InitCookieStore has not been called successfully
32func GetCookieStore() *sessions.CookieStore {
33 if cookieStoreInstance == nil {
34 panic("cookie store not initialized - call InitCookieStore first")
35 }
36 return cookieStoreInstance
37}