From 3cd12f68f4092631c0aa571154adf4adba41b8e7 Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Wed, 24 Jul 2024 19:38:22 +0200 Subject: [PATCH] every user login resets agent expiry now. --- pkg/agent/session.go | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/pkg/agent/session.go b/pkg/agent/session.go index ef2fd5c..600b61d 100644 --- a/pkg/agent/session.go +++ b/pkg/agent/session.go @@ -49,7 +49,8 @@ type AgentState struct { // map of unique session id to a session sessions map[int]*AgentSession - agentUsed bool + lastUserLoginTime time.Time + agentUsed bool } type AgentSession struct { @@ -88,9 +89,14 @@ func ConfigureAgent(advanceWarningTime, agentExpiryTime, tickerInterval time.Dur tickerInterval: tickerInterval, ticker: time.NewTicker(tickerInterval), sessions: make(map[int]*AgentSession), - agentUsed: false, + + lastUserLoginTime: time.Time{}, + agentUsed: false, } + log.Printf("Agent expires at %s", + state.expiryTime(holdFilename).Format(time.DateTime)) + go func() { for { <-state.ticker.C @@ -184,6 +190,7 @@ func login(sessionId int, sshSession ssh.Session) { sshSession: sshSession, } state.sessions[sessionId] = &agentSession + state.lastUserLoginTime = time.Now() state.agentUsed = true logStatus() @@ -254,11 +261,19 @@ func fileExists(filename string) bool { } func (state *AgentState) expiryTime(filename string) time.Time { - stats, err := os.Stat(filename) - if err != nil { + if !state.agentUsed { return state.startTime.Add(state.agentExpriryTime) } - return stats.ModTime().Add(state.agentExpriryTime) + expiryTime := time.Time{} + stats, err := os.Stat(filename) + if err == nil { + expiryTime = stats.ModTime().Add(state.agentExpriryTime) + } + userLoginBaseExpiryTime := state.lastUserLoginTime.Add(state.agentExpriryTime) + if userLoginBaseExpiryTime.After(expiryTime) { + expiryTime = userLoginBaseExpiryTime + } + return expiryTime } func holdFileChange() {