package web import ( "log" "time" "github.com/spf13/viper" "git.jmbit.de/jmb/podterminal/pods" ) type sessionData struct { lastAccess *time.Time sessionID string } var invalidSessions []string var sessionLastAccess map[string]*sessionData func initSessionAging() error { sessionLastAccess = make(map[string]*sessionData) return nil } func updateSession(id string, sessionID string) { nowTime := time.Now() sessionLastAccess[id].lastAccess = &nowTime sessionLastAccess[id].sessionID = sessionID } func deleteIdleSessions() { idleTimout := viper.GetInt("session_timeout") tenMinutesAgo := -time.Duration(idleTimout) * time.Second oldAge := time.Now().Add(tenMinutesAgo) for session, sessionData := range sessionLastAccess { log.Printf("Session %s last connected at %s", session, sessionData.lastAccess.String()) if oldAge.After(*sessionData.lastAccess) { pods.DestroyContainer(session) invalidSessions = append(invalidSessions, sessionData.sessionID) // Delete Proxy entry to avoid 502s delete(proxies, session) } } } func IdleSessionCleanup() error { err := initSessionAging() if err != nil { println("Could not initialize Session aging") return err } for { deleteIdleSessions() time.Sleep(time.Duration(viper.GetInt("session_timeout")) * time.Second) } }