diff --git a/core/auth/auth.go b/core/auth/auth.go index ebc6d2db4..cffdbbe13 100644 --- a/core/auth/auth.go +++ b/core/auth/auth.go @@ -14,14 +14,14 @@ import ( ) var ( - once sync.Once - Secret []byte - TokenAuth *jwtauth.JWTAuth - sessionTimeOut time.Duration + once sync.Once + Secret []byte + TokenAuth *jwtauth.JWTAuth ) -func InitTokenAuth(ds model.DataStore) { +func Init(ds model.DataStore) { once.Do(func() { + log.Info("Setting Session Timeout", "value", conf.Server.SessionTimeout) secret, err := ds.Property(context.TODO()).DefaultGet(consts.JWTSecretKey, "not so secret") if err != nil { log.Error("No JWT secret found in DB. Setting a temp one, but please report this error", err) @@ -46,22 +46,13 @@ func CreateToken(u *model.User) (string, error) { return TouchToken(token) } -func getSessionTimeOut() time.Duration { - if sessionTimeOut == 0 { - sessionTimeOut = conf.Server.SessionTimeout - log.Info("Setting Session Timeout", "value", sessionTimeOut) - } - return sessionTimeOut -} - func TouchToken(token jwt.Token) (string, error) { claims, err := token.AsMap(context.Background()) if err != nil { return "", err } - timeout := getSessionTimeOut() - claims[jwt.ExpirationKey] = time.Now().UTC().Add(timeout).Unix() + claims[jwt.ExpirationKey] = time.Now().UTC().Add(conf.Server.SessionTimeout).Unix() _, newToken, err := TokenAuth.Encode(claims) return newToken, err diff --git a/server/app/auth.go b/server/app/auth.go index e5ff18b97..10943a10c 100644 --- a/server/app/auth.go +++ b/server/app/auth.go @@ -26,7 +26,7 @@ var ( ) func Login(ds model.DataStore) func(w http.ResponseWriter, r *http.Request) { - auth.InitTokenAuth(ds) + auth.Init(ds) return func(w http.ResponseWriter, r *http.Request) { username, password, err := getCredentialsFromBody(r) @@ -85,7 +85,7 @@ func getCredentialsFromBody(r *http.Request) (username string, password string, } func CreateAdmin(ds model.DataStore) func(w http.ResponseWriter, r *http.Request) { - auth.InitTokenAuth(ds) + auth.Init(ds) return func(w http.ResponseWriter, r *http.Request) { username, password, err := getCredentialsFromBody(r) @@ -190,7 +190,7 @@ func verifier() func(http.Handler) http.Handler { } func authenticator(ds model.DataStore) func(next http.Handler) http.Handler { - auth.InitTokenAuth(ds) + auth.Init(ds) return func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { diff --git a/server/subsonic/middlewares_test.go b/server/subsonic/middlewares_test.go index 2e51e5105..beb938571 100644 --- a/server/subsonic/middlewares_test.go +++ b/server/subsonic/middlewares_test.go @@ -270,8 +270,8 @@ var _ = Describe("Middlewares", func() { Context("JWT based authentication", func() { var validToken string BeforeEach(func() { - auth.InitTokenAuth(ds) conf.Server.SessionTimeout = time.Minute + auth.Init(ds) u := &model.User{UserName: "admin"} var err error