summaryrefslogtreecommitdiff
path: root/internal/router/session.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/router/session.go')
-rw-r--r--internal/router/session.go30
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
}