loading up the forgejo repo on tangled to test page performance
at forgejo 2.8 kB view raw
1// Copyright 2019 The Gitea Authors. All rights reserved. 2// SPDX-License-Identifier: MIT 3 4package setting 5 6import ( 7 "net/http" 8 "path" 9 "path/filepath" 10 "strings" 11 12 "forgejo.org/modules/json" 13 "forgejo.org/modules/log" 14) 15 16// SessionConfig defines Session settings 17var SessionConfig = struct { 18 OriginalProvider string 19 Provider string 20 // Provider configuration, it's corresponding to provider. 21 ProviderConfig string 22 // Cookie name to save session ID. Default is "MacaronSession". 23 CookieName string 24 // Cookie path to store. Default is "/". 25 CookiePath string 26 // GC interval time in seconds. Default is 3600. 27 Gclifetime int64 28 // Max life time in seconds. Default is whatever GC interval time is. 29 Maxlifetime int64 30 // Use HTTPS only. Default is false. 31 Secure bool 32 // Cookie domain name. Default is empty. 33 Domain string 34 // 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" 35 SameSite http.SameSite 36}{ 37 CookieName: "i_like_gitea", 38 Gclifetime: 86400, 39 Maxlifetime: 86400, 40 SameSite: http.SameSiteLaxMode, 41} 42 43func loadSessionFrom(rootCfg ConfigProvider) { 44 sec := rootCfg.Section("session") 45 SessionConfig.Provider = sec.Key("PROVIDER").In("memory", 46 []string{"memory", "file", "redis", "mysql", "postgres", "couchbase", "memcache", "db"}) 47 SessionConfig.ProviderConfig = strings.Trim(sec.Key("PROVIDER_CONFIG").MustString(path.Join(AppDataPath, "sessions")), "\" ") 48 if SessionConfig.Provider == "file" && !filepath.IsAbs(SessionConfig.ProviderConfig) { 49 SessionConfig.ProviderConfig = path.Join(AppWorkPath, 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}