+2
-1
db/atproto.go
+2
-1
db/atproto.go
···
246
}
247
248
func AtpSessionToAuthArgs(sess *models.ATprotoAuthSession) *oauth.XrpcAuthedRequestArgs {
249
-
fmt.Printf("DID: %s\nPDS URL: %s\nISS: %s\nAccess Token: %s\nNonce: %s\nPrivate JWK: %s\n", sess.DID, sess.PDSUrl, sess.AuthServerIssuer, sess.AccessToken, sess.DpopPdsNonce, sess.DpopPrivateJWK)
250
return &oauth.XrpcAuthedRequestArgs{
251
Did: sess.DID,
252
PdsUrl: sess.PDSUrl,
···
246
}
247
248
func AtpSessionToAuthArgs(sess *models.ATprotoAuthSession) *oauth.XrpcAuthedRequestArgs {
249
+
//Commenting out so jwts and tokens are not in logs
250
+
//fmt.Printf("DID: %s\nPDS URL: %s\nISS: %s\nAccess Token: %s\nNonce: %s\nPrivate JWK: %s\n", sess.DID, sess.PDSUrl, sess.AuthServerIssuer, sess.AccessToken, sess.DpopPdsNonce, sess.DpopPrivateJWK)
251
return &oauth.XrpcAuthedRequestArgs{
252
Did: sess.DID,
253
PdsUrl: sess.PDSUrl,
+33
-25
db/db.go
+33
-25
db/db.go
···
321
return tracks, nil
322
}
323
324
-
func (db *DB) GetUsersWithExpiredTokens() ([]*models.User, error) {
325
-
rows, err := db.Query(`
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
333
-
}
334
-
defer rows.Close()
335
336
var users []*models.User
337
···
350
return users, nil
351
}
352
353
-
func (db *DB) GetAllActiveUsers() ([]*models.User, error) {
354
rows, err := db.Query(`
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 {
···
362
}
363
defer rows.Close()
364
365
-
var users []*models.User
366
367
-
for rows.Next() {
368
-
user := &models.User{}
369
-
err := rows.Scan(
370
-
&user.ID, &user.Username, &user.Email, &user.SpotifyID,
371
-
&user.AccessToken, &user.RefreshToken, &user.TokenExpiry,
372
-
&user.CreatedAt, &user.UpdatedAt)
373
-
if err != nil {
374
-
return nil, err
375
-
}
376
-
users = append(users, user)
377
}
378
379
-
return users, nil
380
}
381
382
// debug to view current user's information
···
321
return tracks, nil
322
}
323
324
+
// SpotifyQueryMapping maps Spotify sql query results to user structs
325
+
func SpotifyQueryMapping(rows *sql.Rows) ([]*models.User, error) {
326
327
var users []*models.User
328
···
341
return users, nil
342
}
343
344
+
func (db *DB) GetUsersWithExpiredTokens() ([]*models.User, error) {
345
rows, err := db.Query(`
346
SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at
347
FROM users
348
+
WHERE refresh_token IS NOT NULL AND token_expiry < ?
349
ORDER BY id`, time.Now().UTC())
350
351
if err != nil {
···
353
}
354
defer rows.Close()
355
356
+
return SpotifyQueryMapping(rows)
357
358
+
}
359
+
360
+
func (db *DB) GetAllActiveUsers() ([]*models.User, error) {
361
+
rows, err := db.Query(`
362
+
SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at
363
+
FROM users
364
+
WHERE access_token IS NOT NULL
365
+
ORDER BY id`)
366
+
367
+
if err != nil {
368
+
return nil, err
369
}
370
+
defer rows.Close()
371
+
372
+
return SpotifyQueryMapping(rows)
373
+
}
374
375
+
func (db *DB) GetAllActiveUsersWithUnExpiredTokens() ([]*models.User, error) {
376
+
rows, err := db.Query(`
377
+
SELECT id, username, email, spotify_id, access_token, refresh_token, token_expiry, created_at, updated_at
378
+
FROM users
379
+
WHERE access_token IS NOT NULL AND token_expiry > ?
380
+
ORDER BY id`, time.Now().UTC())
381
+
382
+
if err != nil {
383
+
return nil, err
384
+
}
385
+
defer rows.Close()
386
+
387
+
return SpotifyQueryMapping(rows)
388
}
389
390
// debug to view current user's information
+26
service/spotify/spotify.go
+26
service/spotify/spotify.go
···
198
if user.AccessToken != nil && user.TokenExpiry.After(time.Now().UTC()) {
199
s.userTokens[user.ID] = *user.AccessToken
200
count++
201
}
202
}
203
204
log.Printf("Loaded %d active users with valid tokens", count)
205
return nil
206
}
207
···
537
defer ticker.Stop()
538
539
for range ticker.C {
540
// copy userIDs to avoid holding the lock too long
541
s.mu.RLock()
542
userIDs := make([]int64, 0, len(s.userTokens))
···
663
664
log.Printf("User %d is listening to: %s by %s", userID, track.Name, track.Artist)
665
}
666
}
667
}
668
}
···
198
if user.AccessToken != nil && user.TokenExpiry.After(time.Now().UTC()) {
199
s.userTokens[user.ID] = *user.AccessToken
200
count++
201
+
} else {
202
+
token, err := s.refreshTokenInner(user.ID)
203
+
if err != nil {
204
+
//Probably should remove the access token and refresh in long run?
205
+
log.Printf("Error refreshing token for user %d: %v", user.ID, err)
206
+
continue
207
+
}
208
+
s.userTokens[user.ID] = token
209
}
210
}
211
212
log.Printf("Loaded %d active users with valid tokens", count)
213
+
return nil
214
+
}
215
+
216
+
func (s *SpotifyService) UnloadAllUsers() error {
217
+
s.mu.Lock()
218
+
defer s.mu.Unlock()
219
+
s.userTokens = make(map[int64]string)
220
return nil
221
}
222
···
552
defer ticker.Stop()
553
554
for range ticker.C {
555
+
err := s.LoadAllUsers()
556
+
if err != nil {
557
+
log.Printf("Error loading spotify users: %v", err)
558
+
continue
559
+
}
560
// copy userIDs to avoid holding the lock too long
561
s.mu.RLock()
562
userIDs := make([]int64, 0, len(s.userTokens))
···
683
684
log.Printf("User %d is listening to: %s by %s", userID, track.Name, track.Artist)
685
}
686
+
}
687
+
688
+
//unloading users to save memory and make sure we get new signups
689
+
err = s.LoadAllUsers()
690
+
if err != nil {
691
+
log.Printf("Error loading spotify users: %v", err)
692
}
693
}
694
}