changeset 203:6a802aed7f99

Persistent session store: Implemented cleanDB/cleanToken.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 22 Jul 2018 09:42:47 +0200
parents dba50c51cda7
children 3d0988d9f867
files auth/persistent.go
diffstat 1 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/auth/persistent.go	Sun Jul 22 09:38:38 2018 +0200
+++ b/auth/persistent.go	Sun Jul 22 09:42:47 2018 +0200
@@ -73,11 +73,25 @@
 }
 
 func (pcp *PersistentConnectionPool) cleanDB() {
-	log.Println("cleanDB: Not implemented, yet.")
+	valid := time.Now().Add(-maxDBIdle)
+	for _, con := range pcp.conns {
+		if con.refCount <= 0 && con.last().Before(valid) {
+			con.close()
+		}
+	}
 }
 
 func (pcp *PersistentConnectionPool) cleanToken() {
-	log.Println("cleanToken: Not implemented, yet.")
+	now := time.Now()
+	for token, con := range pcp.conns {
+		expires := time.Unix(con.session.ExpiresAt, 0)
+		if expires.Before(now) {
+			// TODO: Be more graceful here?
+			con.close()
+			delete(pcp.conns, token)
+			pcp.remove(token)
+		}
+	}
 }
 
 func (pcp *PersistentConnectionPool) remove(token string) {