code.gitea.io/gitea@v1.19.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"
     9  	"path/filepath"
    10  	"strings"
    11  
    12  	"code.gitea.io/gitea/modules/json"
    13  	"code.gitea.io/gitea/modules/log"
    14  )
    15  
    16  // SessionConfig defines Session settings
    17  var 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  
    43  func 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  	SessionConfig.Secure = sec.Key("COOKIE_SECURE").MustBool(false)
    54  	SessionConfig.Gclifetime = sec.Key("GC_INTERVAL_TIME").MustInt64(86400)
    55  	SessionConfig.Maxlifetime = sec.Key("SESSION_LIFE_TIME").MustInt64(86400)
    56  	SessionConfig.Domain = sec.Key("DOMAIN").String()
    57  	samesiteString := sec.Key("SAME_SITE").In("lax", []string{"none", "lax", "strict"})
    58  	switch strings.ToLower(samesiteString) {
    59  	case "none":
    60  		SessionConfig.SameSite = http.SameSiteNoneMode
    61  	case "strict":
    62  		SessionConfig.SameSite = http.SameSiteStrictMode
    63  	default:
    64  		SessionConfig.SameSite = http.SameSiteLaxMode
    65  	}
    66  	shadowConfig, err := json.Marshal(SessionConfig)
    67  	if err != nil {
    68  		log.Fatal("Can't shadow session config: %v", err)
    69  	}
    70  	SessionConfig.ProviderConfig = string(shadowConfig)
    71  	SessionConfig.OriginalProvider = SessionConfig.Provider
    72  	SessionConfig.Provider = "VirtualSession"
    73  
    74  	log.Info("Session Service Enabled")
    75  }