A fork of https://github.com/teal-fm/piper

On time (moved to .utc)

+26 -26
+3 -3
db/apikey/apikey.go
··· 64 } 65 apiKeyID := base64.URLEncoding.EncodeToString(b) 66 67 - now := time.Now() 68 expiresAt := now.AddDate(0, 0, validityDays) // Default to validityDays days validity 69 70 apiKey := &ApiKey{ ··· 100 101 if exists { 102 // Check if API key is expired 103 - if time.Now().After(apiKey.ExpiresAt) { 104 am.DeleteApiKey(apiKeyID) 105 return nil, false 106 } ··· 118 return nil, false 119 } 120 121 - if time.Now().After(apiKey.ExpiresAt) { 122 am.DeleteApiKey(apiKeyID) 123 return nil, false 124 }
··· 64 } 65 apiKeyID := base64.URLEncoding.EncodeToString(b) 66 67 + now := time.Now().UTC() 68 expiresAt := now.AddDate(0, 0, validityDays) // Default to validityDays days validity 69 70 apiKey := &ApiKey{ ··· 100 101 if exists { 102 // Check if API key is expired 103 + if time.Now().UTC().After(apiKey.ExpiresAt) { 104 am.DeleteApiKey(apiKeyID) 105 return nil, false 106 } ··· 118 return nil, false 119 } 120 121 + if time.Now().UTC().After(apiKey.ExpiresAt) { 122 am.DeleteApiKey(apiKeyID) 123 return nil, false 124 }
+6 -6
db/atproto.go
··· 80 did).Scan(&user.ID, &user.ATProtoDID, &user.CreatedAt, &user.UpdatedAt) 81 82 if err == sql.ErrNoRows { 83 - now := time.Now() 84 // create user! 85 result, insertErr := db.Exec(` 86 INSERT INTO users (atproto_did, created_at, updated_at) ··· 111 // create or update the current user's ATproto session data. 112 func (db *DB) SaveATprotoSession(tokenResp *oauth.TokenResponse, authserverIss string, dpopPrivateJWK jwk.Key, pdsUrl string) error { 113 fmt.Printf("Saving session with PDS url %s", pdsUrl) 114 - expiryTime := time.Now().Add(time.Second * time.Duration(tokenResp.ExpiresIn)) 115 - now := time.Now() 116 117 dpopPrivateJWKBytes, err := json.Marshal(dpopPrivateJWK) 118 if err != nil { ··· 213 } 214 215 // printout the session details 216 - fmt.Printf("Session details from DB: %+v\n", oauthSession) 217 218 // if token is expired, refresh it 219 - if time.Now().After(oauthSession.TokenExpiry) { 220 221 resp, err := oauthClient.RefreshTokenRequest(ctx, oauthSession.RefreshToken, authserverIss, oauthSession.DpopAuthServerNonce, privateJwk) 222 if err != nil { ··· 237 DpopPdsNonce: oauthSession.DpopPdsNonce, 238 DpopAuthServerNonce: resp.DpopAuthserverNonce, 239 DpopPrivateJWK: privateJwk, 240 - TokenExpiry: time.Now().Add(time.Duration(resp.ExpiresIn) * time.Second), 241 } 242 243 }
··· 80 did).Scan(&user.ID, &user.ATProtoDID, &user.CreatedAt, &user.UpdatedAt) 81 82 if err == sql.ErrNoRows { 83 + now := time.Now().UTC() 84 // create user! 85 result, insertErr := db.Exec(` 86 INSERT INTO users (atproto_did, created_at, updated_at) ··· 111 // create or update the current user's ATproto session data. 112 func (db *DB) SaveATprotoSession(tokenResp *oauth.TokenResponse, authserverIss string, dpopPrivateJWK jwk.Key, pdsUrl string) error { 113 fmt.Printf("Saving session with PDS url %s", pdsUrl) 114 + expiryTime := time.Now().UTC().Add(time.Second * time.Duration(tokenResp.ExpiresIn)) 115 + now := time.Now().UTC() 116 117 dpopPrivateJWKBytes, err := json.Marshal(dpopPrivateJWK) 118 if err != nil { ··· 213 } 214 215 // printout the session details 216 + fmt.Printf("Getting session details for the did: %+v\n", oauthSession.DID) 217 218 // if token is expired, refresh it 219 + if time.Now().UTC().After(oauthSession.TokenExpiry) { 220 221 resp, err := oauthClient.RefreshTokenRequest(ctx, oauthSession.RefreshToken, authserverIss, oauthSession.DpopAuthServerNonce, privateJwk) 222 if err != nil { ··· 237 DpopPdsNonce: oauthSession.DpopPdsNonce, 238 DpopAuthServerNonce: resp.DpopAuthserverNonce, 239 DpopPrivateJWK: privateJwk, 240 + TokenExpiry: time.Now().UTC().Add(time.Duration(resp.ExpiresIn) * time.Second), 241 } 242 243 }
+5 -5
db/db.go
··· 120 121 // create user without spotify id 122 func (db *DB) CreateUser(user *models.User) (int64, error) { 123 - now := time.Now() 124 125 result, err := db.Exec(` 126 INSERT INTO users (username, email, created_at, updated_at) ··· 136 137 // add spotify session to user, returning the updated user 138 func (db *DB) AddSpotifySession(userID int64, username, email, spotifyId, accessToken, refreshToken string, tokenExpiry time.Time) (*models.User, error) { 139 - now := time.Now() 140 141 _, err := db.Exec(` 142 UPDATE users SET username = ?, email = ?, spotify_id = ?, access_token = ?, refresh_token = ?, token_expiry = ?, created_at = ?, updated_at = ? ··· 200 } 201 202 func (db *DB) UpdateUserToken(userID int64, accessToken, refreshToken string, expiry time.Time) error { 203 - now := time.Now() 204 205 _, err := db.Exec(` 206 UPDATE users ··· 326 SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at 327 FROM users 328 WHERE refresh_token IS NOT NULL AND token_expiry < ? 329 - ORDER BY id`, time.Now()) 330 331 if err != nil { 332 return nil, err ··· 355 SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at 356 FROM users 357 WHERE access_token IS NOT NULL AND token_expiry > ? 358 - ORDER BY id`, time.Now()) 359 360 if err != nil { 361 return nil, err
··· 120 121 // create user without spotify id 122 func (db *DB) CreateUser(user *models.User) (int64, error) { 123 + now := time.Now().UTC() 124 125 result, err := db.Exec(` 126 INSERT INTO users (username, email, created_at, updated_at) ··· 136 137 // add spotify session to user, returning the updated user 138 func (db *DB) AddSpotifySession(userID int64, username, email, spotifyId, accessToken, refreshToken string, tokenExpiry time.Time) (*models.User, error) { 139 + now := time.Now().UTC() 140 141 _, err := db.Exec(` 142 UPDATE users SET username = ?, email = ?, spotify_id = ?, access_token = ?, refresh_token = ?, token_expiry = ?, created_at = ?, updated_at = ? ··· 200 } 201 202 func (db *DB) UpdateUserToken(userID int64, accessToken, refreshToken string, expiry time.Time) error { 203 + now := time.Now().UTC() 204 205 _, err := db.Exec(` 206 UPDATE users ··· 326 SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at 327 FROM users 328 WHERE refresh_token IS NOT NULL AND token_expiry < ? 329 + ORDER BY id`, time.Now().UTC()) 330 331 if err != nil { 332 return nil, err ··· 355 SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at 356 FROM users 357 WHERE access_token IS NOT NULL AND token_expiry > ? 358 + ORDER BY id`, time.Now().UTC()) 359 360 if err != nil { 361 return nil, err
+2 -2
service/apikey/apikey.go
··· 79 } 80 keyName := reqBody.Name 81 if keyName == "" { 82 - keyName = fmt.Sprintf("API Key (via API) - %s", time.Now().Format(time.RFC3339)) 83 } 84 validityDays := 30 // Default, could be made configurable via request body 85 ··· 133 134 keyName := r.FormValue("name") 135 if keyName == "" { 136 - keyName = fmt.Sprintf("API Key - %s", time.Now().Format(time.RFC3339)) 137 } 138 validityDays := 1024 139
··· 79 } 80 keyName := reqBody.Name 81 if keyName == "" { 82 + keyName = fmt.Sprintf("API Key (via API) - %s", time.Now().UTC().Format(time.RFC3339)) 83 } 84 validityDays := 30 // Default, could be made configurable via request body 85 ··· 133 134 keyName := r.FormValue("name") 135 if keyName == "" { 136 + keyName = fmt.Sprintf("API Key - %s", time.Now().UTC().Format(time.RFC3339)) 137 } 138 validityDays := 1024 139
+1 -1
service/lastfm/lastfm.go
··· 407 } 408 409 // printout the session details 410 - fmt.Printf("Session details: %+v\n", sess) 411 412 // horrible no good very bad for now 413 artistArr := []string{}
··· 407 } 408 409 // printout the session details 410 + fmt.Printf("Submitting track for the did: %+v\n", sess.DID) 411 412 // horrible no good very bad for now 413 artistArr := []string{}
+2 -2
service/musicbrainz/musicbrainz.go
··· 119 params.Artist, _ = s.cleaner.CleanArtist(params.Artist) 120 121 cacheKey := generateCacheKey(params) 122 - now := time.Now() 123 124 // --- Check Cache (Read Lock) --- 125 s.cacheMutex.RLock() ··· 188 s.cacheMutex.Lock() 189 s.searchCache[cacheKey] = cacheEntry{ 190 recordings: result.Recordings, 191 - expiresAt: time.Now().Add(s.cacheTTL), 192 } 193 s.cacheMutex.Unlock() 194 log.Printf("Cached MusicBrainz search result for key=%s, TTL=%s", cacheKey, s.cacheTTL)
··· 119 params.Artist, _ = s.cleaner.CleanArtist(params.Artist) 120 121 cacheKey := generateCacheKey(params) 122 + now := time.Now().UTC() 123 124 // --- Check Cache (Read Lock) --- 125 s.cacheMutex.RLock() ··· 188 s.cacheMutex.Lock() 189 s.searchCache[cacheKey] = cacheEntry{ 190 recordings: result.Recordings, 191 + expiresAt: time.Now().UTC().Add(s.cacheTTL), 192 } 193 s.cacheMutex.Unlock() 194 log.Printf("Cached MusicBrainz search result for key=%s, TTL=%s", cacheKey, s.cacheTTL)
+4 -4
service/spotify/spotify.go
··· 142 return 0, err 143 } 144 145 - tokenExpiryTime := time.Now().Add(1 * time.Hour) // Spotify tokens last ~1 hour 146 147 // We don't intend users to log in via spotify! 148 if user == nil { ··· 195 count := 0 196 for _, user := range users { 197 // load users with valid tokens 198 - if user.AccessToken != nil && user.TokenExpiry.After(time.Now()) { 199 s.userTokens[user.ID] = *user.AccessToken 200 count++ 201 } ··· 262 delete(s.userTokens, userID) 263 s.mu.Unlock() 264 // Also clear the bad refresh token from the DB 265 - updateErr := s.DB.UpdateUserToken(userID, "", "", time.Now()) // Clear tokens 266 if updateErr != nil { 267 log.Printf("Failed to clear bad refresh token for user %d: %v", userID, updateErr) 268 } ··· 281 return "", fmt.Errorf("failed to decode refresh response: %w", err) 282 } 283 284 - newExpiry := time.Now().Add(time.Duration(tokenResponse.ExpiresIn) * time.Second) 285 newRefreshToken := *user.RefreshToken // Default to old one 286 if tokenResponse.RefreshToken != "" { 287 newRefreshToken = tokenResponse.RefreshToken // Use new one if provided
··· 142 return 0, err 143 } 144 145 + tokenExpiryTime := time.Now().UTC().Add(1 * time.Hour) // Spotify tokens last ~1 hour 146 147 // We don't intend users to log in via spotify! 148 if user == nil { ··· 195 count := 0 196 for _, user := range users { 197 // load users with valid tokens 198 + if user.AccessToken != nil && user.TokenExpiry.After(time.Now().UTC()) { 199 s.userTokens[user.ID] = *user.AccessToken 200 count++ 201 } ··· 262 delete(s.userTokens, userID) 263 s.mu.Unlock() 264 // Also clear the bad refresh token from the DB 265 + updateErr := s.DB.UpdateUserToken(userID, "", "", time.Now().UTC()) // Clear tokens 266 if updateErr != nil { 267 log.Printf("Failed to clear bad refresh token for user %d: %v", userID, updateErr) 268 } ··· 281 return "", fmt.Errorf("failed to decode refresh response: %w", err) 282 } 283 284 + newExpiry := time.Now().UTC().Add(time.Duration(tokenResponse.ExpiresIn) * time.Second) 285 newRefreshToken := *user.RefreshToken // Default to old one 286 if tokenResponse.RefreshToken != "" { 287 newRefreshToken = tokenResponse.RefreshToken // Use new one if provided
+3 -3
session/session.go
··· 67 rand.Read(b) 68 sessionID := base64.URLEncoding.EncodeToString(b) 69 70 - now := time.Now() 71 expiresAt := now.Add(24 * time.Hour) // 24-hour session 72 73 session := &Session{ ··· 104 105 if exists { 106 // Check if session is expired 107 - if time.Now().After(session.ExpiresAt) { 108 sm.DeleteSession(sessionID) 109 return nil, false 110 } ··· 124 return nil, false 125 } 126 127 - if time.Now().After(session.ExpiresAt) { 128 sm.DeleteSession(sessionID) 129 return nil, false 130 }
··· 67 rand.Read(b) 68 sessionID := base64.URLEncoding.EncodeToString(b) 69 70 + now := time.Now().UTC() 71 expiresAt := now.Add(24 * time.Hour) // 24-hour session 72 73 session := &Session{ ··· 104 105 if exists { 106 // Check if session is expired 107 + if time.Now().UTC().After(session.ExpiresAt) { 108 sm.DeleteSession(sessionID) 109 return nil, false 110 } ··· 124 return nil, false 125 } 126 127 + if time.Now().UTC().After(session.ExpiresAt) { 128 sm.DeleteSession(sessionID) 129 return nil, false 130 }