Skip to content

Commit

Permalink
feat: return errors from token refresh
Browse files Browse the repository at this point in the history
Signed-off-by: Matt Gleich <git@mattglei.ch>
  • Loading branch information
gleich committed Jan 23, 2025
1 parent eb27536 commit f4eb171
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
7 changes: 6 additions & 1 deletion internal/apis/strava/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,12 @@ func eventRoute(
return
}

tokens.refreshIfNeeded(client)
err = tokens.refreshIfNeeded(client)
if err != nil {
timber.Error(err)
return
}

activities, err := fetchActivities(client, minioClient, tokens)
if err != nil {
timber.ErrorMsg("failed to update strava cache")
Expand Down
5 changes: 4 additions & 1 deletion internal/apis/strava/strava.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ import (
func Setup(mux *http.ServeMux) {
client := http.Client{}
stravaTokens := loadTokens()
stravaTokens.refreshIfNeeded(&client)
err := stravaTokens.refreshIfNeeded(&client)
if err != nil {
timber.Error(err, "failed to refresh token data on boot")
}
minioClient, err := minio.New(secrets.ENV.MinioEndpoint, &minio.Options{
Creds: credentials.NewStaticV4(
secrets.ENV.MinioAccessKeyID,
Expand Down
13 changes: 7 additions & 6 deletions internal/apis/strava/tokens.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package strava

import (
"errors"
"fmt"
"net/http"
"net/url"
"time"
Expand All @@ -25,10 +26,10 @@ func loadTokens() tokens {
}
}

func (t *tokens) refreshIfNeeded(client *http.Client) {
func (t *tokens) refreshIfNeeded(client *http.Client) error {
// subtract 60 to ensure that token doesn't expire in the next 60 seconds
if t.ExpiresAt-60 >= time.Now().Unix() {
return
return nil
}

params := url.Values{
Expand All @@ -44,18 +45,18 @@ func (t *tokens) refreshIfNeeded(client *http.Client) {
nil,
)
if err != nil {
timber.Error(err, "creating request for new token failed")
return
return fmt.Errorf("%v creating request for new token failed", err)
}

tokens, err := apis.SendRequest[tokens](client, req)
if err != nil {
if !errors.Is(err, apis.IgnoreError) {
timber.Error(err, "failed to refresh tokens")
return fmt.Errorf("%v failed to fetch refresh tokens", err)
}
return
return err
}

*t = tokens
timber.Done("loaded new strava access token:", t.Access)
return nil
}

0 comments on commit f4eb171

Please sign in to comment.