github.com/blend/go-sdk@v1.20240719.1/web/session_timeout_provider.go (about) 1 /* 2 3 Copyright (c) 2024 - Present. Blend Labs, Inc. All rights reserved 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file. 5 6 */ 7 8 package web 9 10 import "time" 11 12 // SessionTimeoutProvider returns a new session timeout provider. 13 func SessionTimeoutProvider(isAbsolute bool, timeout time.Duration) func(*Session) time.Time { 14 if isAbsolute { 15 return SessionTimeoutProviderAbsolute(timeout) 16 } 17 return SessionTimeoutProviderRolling(timeout) 18 } 19 20 // SessionTimeoutProviderRolling returns a rolling session timeout. 21 func SessionTimeoutProviderRolling(timeout time.Duration) func(*Session) time.Time { 22 return func(session *Session) time.Time { 23 if session.ExpiresUTC.IsZero() { 24 return time.Now().UTC().Add(timeout) 25 } 26 return session.ExpiresUTC.Add(timeout) 27 } 28 } 29 30 // SessionTimeoutProviderAbsolute returns an absolute session timeout. 31 func SessionTimeoutProviderAbsolute(timeout time.Duration) func(*Session) time.Time { 32 return func(_ *Session) time.Time { 33 return time.Now().UTC().Add(timeout) 34 } 35 }