diff options
Diffstat (limited to 'back/cmd/authfs/sess.go')
| -rw-r--r-- | back/cmd/authfs/sess.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/back/cmd/authfs/sess.go b/back/cmd/authfs/sess.go new file mode 100644 index 0000000..138ea84 --- /dev/null +++ b/back/cmd/authfs/sess.go @@ -0,0 +1,48 @@ +package main + +import ( + "sync/atomic" + "time" + + "git.samanthony.xyz/buth/back/auth" +) + +type Session struct { + auth.SessId + auth.Uname + timer *time.Timer + dead *atomic.Bool +} + +func NewSession(id auth.SessId, uname auth.Uname) *Session { + dead := new(atomic.Bool) + timer := time.AfterFunc(auth.SessTimeout, func() { dead.Store(true) }) + return &Session{ + id, + uname, + timer, + dead, + } +} + +// Close expires the session immediately. +func (s *Session) Close() { + s.timer.Stop() + s.dead.Store(true) +} + +// IsActive returns true if the session has not yet expired. +func (s *Session) IsActive() bool { + return !s.dead.Load() +} + +// Extend resets the session's timer or returns false if it has +// already expired. +func (s *Session) Extend() bool { + if s.timer.Stop() { + s.timer.Reset(auth.SessTimeout) + return true + } + // already expired + return false +} |