github.com/gofiber/fiber/v2@v2.47.0/middleware/session/config.go (about) 1 package session 2 3 import ( 4 "fmt" 5 "log" 6 "strings" 7 "time" 8 9 "github.com/gofiber/fiber/v2" 10 "github.com/gofiber/fiber/v2/utils" 11 ) 12 13 // Config defines the config for middleware. 14 type Config struct { 15 // Allowed session duration 16 // Optional. Default value 24 * time.Hour 17 Expiration time.Duration 18 19 // Storage interface to store the session data 20 // Optional. Default value memory.New() 21 Storage fiber.Storage 22 23 // KeyLookup is a string in the form of "<source>:<name>" that is used 24 // to extract session id from the request. 25 // Possible values: "header:<name>", "query:<name>" or "cookie:<name>" 26 // Optional. Default value "cookie:session_id". 27 KeyLookup string 28 29 // Domain of the CSRF cookie. 30 // Optional. Default value "". 31 CookieDomain string 32 33 // Path of the CSRF cookie. 34 // Optional. Default value "". 35 CookiePath string 36 37 // Indicates if CSRF cookie is secure. 38 // Optional. Default value false. 39 CookieSecure bool 40 41 // Indicates if CSRF cookie is HTTP only. 42 // Optional. Default value false. 43 CookieHTTPOnly bool 44 45 // Value of SameSite cookie. 46 // Optional. Default value "Lax". 47 CookieSameSite string 48 49 // Decides whether cookie should last for only the browser sesison. 50 // Ignores Expiration if set to true 51 // Optional. Default value false. 52 CookieSessionOnly bool 53 54 // KeyGenerator generates the session key. 55 // Optional. Default value utils.UUIDv4 56 KeyGenerator func() string 57 58 // Deprecated: Please use KeyLookup 59 CookieName string 60 61 // Source defines where to obtain the session id 62 source Source 63 64 // The session name 65 sessionName string 66 } 67 68 type Source string 69 70 const ( 71 SourceCookie Source = "cookie" 72 SourceHeader Source = "header" 73 SourceURLQuery Source = "query" 74 ) 75 76 // ConfigDefault is the default config 77 var ConfigDefault = Config{ 78 Expiration: 24 * time.Hour, 79 KeyLookup: "cookie:session_id", 80 KeyGenerator: utils.UUIDv4, 81 source: "cookie", 82 sessionName: "session_id", 83 } 84 85 // Helper function to set default values 86 func configDefault(config ...Config) Config { 87 // Return default config if nothing provided 88 if len(config) < 1 { 89 return ConfigDefault 90 } 91 92 // Override default config 93 cfg := config[0] 94 95 // Set default values 96 if int(cfg.Expiration.Seconds()) <= 0 { 97 cfg.Expiration = ConfigDefault.Expiration 98 } 99 if cfg.CookieName != "" { 100 log.Printf("[Warning] - [SESSION] CookieName is deprecated, please use KeyLookup\n") 101 cfg.KeyLookup = fmt.Sprintf("cookie:%s", cfg.CookieName) 102 } 103 if cfg.KeyLookup == "" { 104 cfg.KeyLookup = ConfigDefault.KeyLookup 105 } 106 if cfg.KeyGenerator == nil { 107 cfg.KeyGenerator = ConfigDefault.KeyGenerator 108 } 109 110 selectors := strings.Split(cfg.KeyLookup, ":") 111 const numSelectors = 2 112 if len(selectors) != numSelectors { 113 panic("[session] KeyLookup must in the form of <source>:<name>") 114 } 115 switch Source(selectors[0]) { 116 case SourceCookie: 117 cfg.source = SourceCookie 118 case SourceHeader: 119 cfg.source = SourceHeader 120 case SourceURLQuery: 121 cfg.source = SourceURLQuery 122 default: 123 panic("[session] source is not supported") 124 } 125 cfg.sessionName = selectors[1] 126 127 return cfg 128 }