Write on the margins of the internet. Powered by the AT Protocol. margin.at
extension web atproto comments

session fix stuff

+25 -2
+15
backend/cmd/server/main.go
··· 37 37 logger.Fatal("Failed to run migrations: %v", err) 38 38 } 39 39 40 + go func() { 41 + ticker := time.NewTicker(1 * time.Hour) 42 + defer ticker.Stop() 43 + 44 + if err := database.DeleteExpiredSessions(); err != nil { 45 + logger.Error("Failed to run initial cleanup of expired sessions: %v", err) 46 + } 47 + 48 + for range ticker.C { 49 + if err := database.DeleteExpiredSessions(); err != nil { 50 + logger.Error("Failed to delete expired sessions: %v", err) 51 + } 52 + } 53 + }() 54 + 40 55 embeddingClient := embeddings.NewClient() 41 56 if err := database.MigrateRecommendations(); err != nil { 42 57 logger.Fatal("Failed to run recommendation migrations: %v", err)
+5 -2
backend/internal/api/token_refresh.go
··· 174 174 return false 175 175 } 176 176 errStr := err.Error() 177 - return bytes.Contains([]byte(errStr), []byte("invalid_token")) && 178 - bytes.Contains([]byte(errStr), []byte("exp")) 177 + return bytes.Contains([]byte(errStr), []byte("invalid_token")) || 178 + bytes.Contains([]byte(errStr), []byte("AuthenticationRequired")) || 179 + bytes.Contains([]byte(errStr), []byte("Unauthorized")) || 180 + bytes.Contains([]byte(errStr), []byte("authentication required")) || 181 + bytes.Contains([]byte(errStr), []byte("TokenExpired")) 179 182 } 180 183 181 184 func (tr *TokenRefresher) ExecuteWithAutoRefresh(
+5
backend/internal/db/queries_sessions.go
··· 30 30 _, err := db.Exec(db.Rebind(`DELETE FROM sessions WHERE id = ?`), id) 31 31 return err 32 32 } 33 + 34 + func (db *DB) DeleteExpiredSessions() error { 35 + _, err := db.Exec(db.Rebind(`DELETE FROM sessions WHERE expires_at <= ?`), time.Now()) 36 + return err 37 + }