diff --git a/app/session.go b/app/session.go index ceccb4099f..22c8bec14d 100644 --- a/app/session.go +++ b/app/session.go @@ -351,6 +351,10 @@ func (a *App) UpdateLastActivityAtIfNeeded(session model.Session) { // A new ExpiresAt is only written if enough time has elapsed since last update. // Returns true only if the session was extended. func (a *App) ExtendSessionExpiryIfNeeded(session *model.Session) bool { + if !*a.Srv().Config().ServiceSettings.ExtendSessionLengthWithActivity { + return false + } + if session == nil || session.IsExpired() { return false } diff --git a/app/session_test.go b/app/session_test.go index a7673911a2..dcfe91b961 100644 --- a/app/session_test.go +++ b/app/session_test.go @@ -320,15 +320,22 @@ func TestApp_ExtendExpiryIfNeeded(t *testing.T) { }) var tests = []struct { + enabled bool name string session *model.Session }{ - {name: "mobile", session: &model.Session{UserId: model.NewId(), DeviceId: model.NewId(), Token: model.NewId()}}, - {name: "SSO", session: &model.Session{UserId: model.NewId(), IsOAuth: true, Token: model.NewId()}}, - {name: "web/LDAP", session: &model.Session{UserId: model.NewId(), Token: model.NewId()}}, + {enabled: true, name: "mobile", session: &model.Session{UserId: model.NewId(), DeviceId: model.NewId(), Token: model.NewId()}}, + {enabled: true, name: "SSO", session: &model.Session{UserId: model.NewId(), IsOAuth: true, Token: model.NewId()}}, + {enabled: true, name: "web/LDAP", session: &model.Session{UserId: model.NewId(), Token: model.NewId()}}, + {enabled: false, name: "mobile", session: &model.Session{UserId: model.NewId(), DeviceId: model.NewId(), Token: model.NewId()}}, + {enabled: false, name: "SSO", session: &model.Session{UserId: model.NewId(), IsOAuth: true, Token: model.NewId()}}, + {enabled: false, name: "web/LDAP", session: &model.Session{UserId: model.NewId(), Token: model.NewId()}}, } + for _, test := range tests { - t.Run(fmt.Sprintf("%s session beyond threshold should update ExpiresAt", test.name), func(t *testing.T) { + t.Run(fmt.Sprintf("%s session beyond threshold should update ExpiresAt based on feature enabled", test.name), func(t *testing.T) { + th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.ExtendSessionLengthWithActivity = test.enabled }) + session, err := th.App.CreateSession(test.session) require.Nil(t, err) @@ -337,6 +344,12 @@ func TestApp_ExtendExpiryIfNeeded(t *testing.T) { ok := th.App.ExtendSessionExpiryIfNeeded(session) + if !test.enabled { + require.False(t, ok) + require.Equal(t, expires, session.ExpiresAt) + return + } + require.True(t, ok) require.Greater(t, session.ExpiresAt, expires) require.False(t, session.IsExpired()) @@ -353,7 +366,6 @@ func TestApp_ExtendExpiryIfNeeded(t *testing.T) { require.Equal(t, session.ExpiresAt, storedSession.ExpiresAt) }) } - } const (