diff options
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 } |