mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-10 01:08:06 -06:00
[feature] Start adding advanced configuration options, starting with samesite (#628)
* fix incorrect port being used for db * start adding advanced config flags * use samesite lax by default
This commit is contained in:
parent
265b680098
commit
327d3f001f
11 changed files with 135 additions and 18 deletions
|
|
@ -114,6 +114,8 @@ type Configuration struct {
|
|||
AdminAccountEmail string `name:"email" usage:"the email address of this account"`
|
||||
AdminAccountPassword string `name:"password" usage:"the password to set for this account"`
|
||||
AdminTransPath string `name:"path" usage:"the path of the file to import from/export to"`
|
||||
|
||||
AdvancedCookiesSamesite string `name:"advanced-cookies-samesite" usage:"'strict' or 'lax', see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite"`
|
||||
}
|
||||
|
||||
// MarshalMap will marshal current Configuration into a map structure (useful for JSON).
|
||||
|
|
|
|||
|
|
@ -87,4 +87,6 @@ var Defaults = Configuration{
|
|||
SyslogEnabled: false,
|
||||
SyslogProtocol: "udp",
|
||||
SyslogAddress: "localhost:514",
|
||||
|
||||
AdvancedCookiesSamesite: "lax",
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,6 +109,9 @@ func AddServerFlags(cmd *cobra.Command) {
|
|||
cmd.Flags().Bool(SyslogEnabledFlag(), cfg.SyslogEnabled, fieldtag("SyslogEnabled", "usage"))
|
||||
cmd.Flags().String(SyslogProtocolFlag(), cfg.SyslogProtocol, fieldtag("SyslogProtocol", "usage"))
|
||||
cmd.Flags().String(SyslogAddressFlag(), cfg.SyslogAddress, fieldtag("SyslogAddress", "usage"))
|
||||
|
||||
// Advanced flags
|
||||
cmd.Flags().String(AdvancedCookiesSamesiteFlag(), cfg.AdvancedCookiesSamesite, fieldtag("AdvancedCookiesSamesite", "usage"))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1492,3 +1492,28 @@ func GetAdminTransPath() string { return global.GetAdminTransPath() }
|
|||
|
||||
// SetAdminTransPath safely sets the value for global configuration 'AdminTransPath' field
|
||||
func SetAdminTransPath(v string) { global.SetAdminTransPath(v) }
|
||||
|
||||
// GetAdvancedCookiesSamesite safely fetches the Configuration value for state's 'AdvancedCookiesSamesite' field
|
||||
func (st *ConfigState) GetAdvancedCookiesSamesite() (v string) {
|
||||
st.mutex.Lock()
|
||||
v = st.config.AdvancedCookiesSamesite
|
||||
st.mutex.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
// SetAdvancedCookiesSamesite safely sets the Configuration value for state's 'AdvancedCookiesSamesite' field
|
||||
func (st *ConfigState) SetAdvancedCookiesSamesite(v string) {
|
||||
st.mutex.Lock()
|
||||
defer st.mutex.Unlock()
|
||||
st.config.AdvancedCookiesSamesite = v
|
||||
st.reloadToViper()
|
||||
}
|
||||
|
||||
// AdvancedCookiesSamesiteFlag returns the flag name for the 'AdvancedCookiesSamesite' field
|
||||
func AdvancedCookiesSamesiteFlag() string { return "advanced-cookies-samesite" }
|
||||
|
||||
// GetAdvancedCookiesSamesite safely fetches the value for global configuration 'AdvancedCookiesSamesite' field
|
||||
func GetAdvancedCookiesSamesite() string { return global.GetAdvancedCookiesSamesite() }
|
||||
|
||||
// SetAdvancedCookiesSamesite safely sets the value for global configuration 'AdvancedCookiesSamesite' field
|
||||
func SetAdvancedCookiesSamesite(v string) { global.SetAdvancedCookiesSamesite(v) }
|
||||
|
|
|
|||
|
|
@ -348,7 +348,7 @@ func deriveBunDBPGOptions() (*pgx.ConnConfig, error) {
|
|||
if address != "" {
|
||||
cfg.Host = address
|
||||
}
|
||||
if port := config.GetPort(); port > 0 {
|
||||
if port := config.GetDbPort(); port > 0 {
|
||||
cfg.Port = uint16(port)
|
||||
}
|
||||
if u := config.GetDbUser(); u != "" {
|
||||
|
|
|
|||
|
|
@ -24,10 +24,12 @@ import (
|
|||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-contrib/sessions"
|
||||
"github.com/gin-contrib/sessions/memstore"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||
"golang.org/x/net/idna"
|
||||
|
|
@ -35,13 +37,28 @@ import (
|
|||
|
||||
// SessionOptions returns the standard set of options to use for each session.
|
||||
func SessionOptions() sessions.Options {
|
||||
var samesite http.SameSite
|
||||
switch strings.TrimSpace(strings.ToLower(config.GetAdvancedCookiesSamesite())) {
|
||||
case "lax":
|
||||
samesite = http.SameSiteLaxMode
|
||||
case "strict":
|
||||
samesite = http.SameSiteStrictMode
|
||||
default:
|
||||
logrus.Warnf("%s set to %s which is not recognized, defaulting to 'lax'", config.AdvancedCookiesSamesiteFlag(), config.GetAdvancedCookiesSamesite())
|
||||
samesite = http.SameSiteLaxMode
|
||||
}
|
||||
|
||||
return sessions.Options{
|
||||
Path: "/",
|
||||
Domain: config.GetHost(),
|
||||
MaxAge: 120, // 2 minutes
|
||||
Secure: config.GetProtocol() == "https", // only use cookie over https
|
||||
HttpOnly: true, // exclude javascript from inspecting cookie
|
||||
SameSite: http.SameSiteStrictMode, // https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-same-site-00#section-4.1.1
|
||||
Path: "/",
|
||||
Domain: config.GetHost(),
|
||||
// 2 minutes
|
||||
MaxAge: 120,
|
||||
// only set secure over https
|
||||
Secure: config.GetProtocol() == "https",
|
||||
// forbid javascript from inspecting cookie
|
||||
HttpOnly: true,
|
||||
// https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-same-site-00#section-4.1.1
|
||||
SameSite: samesite,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue