diff options
author | 2021-09-01 22:12:31 +0200 | |
---|---|---|
committer | 2021-09-01 22:12:31 +0200 | |
commit | ac7c5e8cd28e9a491d7eeb560dd0fe5aed0d94df (patch) | |
tree | 3d0e3d84a9e94a58b14222066c9e27421d74c280 /internal/router/session.go | |
parent | Improve GetRemoteStatus and db.GetStatus() logic (#174) (diff) | |
download | gotosocial-ac7c5e8cd28e9a491d7eeb560dd0fe5aed0d94df.tar.xz |
session name fix (#185)
Diffstat (limited to 'internal/router/session.go')
-rw-r--r-- | internal/router/session.go | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/internal/router/session.go b/internal/router/session.go index a42f04bfb..3276c38aa 100644 --- a/internal/router/session.go +++ b/internal/router/session.go @@ -23,6 +23,7 @@ import ( "errors" "fmt" "net/http" + "net/url" "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/memstore" @@ -31,8 +32,8 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/db" ) -// SessionOptions returns the standard set of options to use for each session. -func SessionOptions(cfg *config.Config) sessions.Options { +// sessionOptions returns the standard set of options to use for each session. +func sessionOptions(cfg *config.Config) sessions.Options { return sessions.Options{ Path: "/", Domain: cfg.Host, @@ -43,6 +44,22 @@ func SessionOptions(cfg *config.Config) sessions.Options { } } +func sessionName(cfg *config.Config) (string, error) { + // parse the protocol + host + u, err := url.Parse(fmt.Sprintf("%s://%s", cfg.Protocol, cfg.Host)) + if err != nil { + return "", err + } + + // take the hostname without any port attached + strippedHostname := u.Hostname() + if strippedHostname == "" { + return "", fmt.Errorf("could not derive hostname without port from %s://%s", cfg.Protocol, cfg.Host) + } + + return fmt.Sprintf("gotosocial-%s", strippedHostname), nil +} + func useSession(ctx context.Context, cfg *config.Config, sessionDB db.Session, engine *gin.Engine) error { // check if we have a saved router session already rs, err := sessionDB.GetSession(ctx) @@ -54,8 +71,13 @@ func useSession(ctx context.Context, cfg *config.Config, sessionDB db.Session, e } store := memstore.NewStore(rs.Auth, rs.Crypt) - store.Options(SessionOptions(cfg)) - sessionName := fmt.Sprintf("gotosocial-%s", cfg.Host) + store.Options(sessionOptions(cfg)) + + sessionName, err := sessionName(cfg) + if err != nil { + return err + } + engine.Use(sessions.Sessions(sessionName, store)) return nil } |