code.gitea.io/gitea@v1.22.3/modules/setting/session.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package setting 5 6 import ( 7 "net/http" 8 "path/filepath" 9 "strings" 10 11 "code.gitea.io/gitea/modules/json" 12 "code.gitea.io/gitea/modules/log" 13 ) 14 15 // SessionConfig defines Session settings 16 var SessionConfig = struct { 17 OriginalProvider string 18 Provider string 19 // Provider configuration, it's corresponding to provider. 20 ProviderConfig string 21 // Cookie name to save session ID. Default is "MacaronSession". 22 CookieName string 23 // Cookie path to store. Default is "/". 24 CookiePath string 25 // GC interval time in seconds. Default is 3600. 26 Gclifetime int64 27 // Max life time in seconds. Default is whatever GC interval time is. 28 Maxlifetime int64 29 // Use HTTPS only. Default is false. 30 Secure bool 31 // Cookie domain name. Default is empty. 32 Domain string 33 // SameSite declares if your cookie should be restricted to a first-party or same-site context. Valid strings are "none", "lax", "strict". Default is "lax" 34 SameSite http.SameSite 35 }{ 36 CookieName: "i_like_gitea", 37 Gclifetime: 86400, 38 Maxlifetime: 86400, 39 SameSite: http.SameSiteLaxMode, 40 } 41 42 func loadSessionFrom(rootCfg ConfigProvider) { 43 sec := rootCfg.Section("session") 44 SessionConfig.Provider = sec.Key("PROVIDER").In("memory", 45 []string{"memory", "file", "redis", "mysql", "postgres", "couchbase", "memcache", "db"}) 46 SessionConfig.ProviderConfig = strings.Trim(sec.Key("PROVIDER_CONFIG").MustString(filepath.Join(AppDataPath, "sessions")), "\" ") 47 if SessionConfig.Provider == "file" && !filepath.IsAbs(SessionConfig.ProviderConfig) { 48 SessionConfig.ProviderConfig = filepath.Join(AppWorkPath, SessionConfig.ProviderConfig) 49 checkOverlappedPath("[session].PROVIDER_CONFIG", SessionConfig.ProviderConfig) 50 } 51 SessionConfig.CookieName = sec.Key("COOKIE_NAME").MustString("i_like_gitea") 52 SessionConfig.CookiePath = AppSubURL 53 if SessionConfig.CookiePath == "" { 54 SessionConfig.CookiePath = "/" 55 } 56 SessionConfig.Secure = sec.Key("COOKIE_SECURE").MustBool(strings.HasPrefix(strings.ToLower(AppURL), "https://")) 57 SessionConfig.Gclifetime = sec.Key("GC_INTERVAL_TIME").MustInt64(86400) 58 SessionConfig.Maxlifetime = sec.Key("SESSION_LIFE_TIME").MustInt64(86400) 59 SessionConfig.Domain = sec.Key("DOMAIN").String() 60 samesiteString := sec.Key("SAME_SITE").In("lax", []string{"none", "lax", "strict"}) 61 switch strings.ToLower(samesiteString) { 62 case "none": 63 SessionConfig.SameSite = http.SameSiteNoneMode 64 case "strict": 65 SessionConfig.SameSite = http.SameSiteStrictMode 66 default: 67 SessionConfig.SameSite = http.SameSiteLaxMode 68 } 69 shadowConfig, err := json.Marshal(SessionConfig) 70 if err != nil { 71 log.Fatal("Can't shadow session config: %v", err) 72 } 73 SessionConfig.ProviderConfig = string(shadowConfig) 74 SessionConfig.OriginalProvider = SessionConfig.Provider 75 SessionConfig.Provider = "VirtualSession" 76 77 log.Info("Session Service Enabled") 78 }