diff --git a/src/auth/auth.go b/src/auth/auth.go index 8c522eb..bd003d2 100644 --- a/src/auth/auth.go +++ b/src/auth/auth.go @@ -1,15 +1,16 @@ package auth import ( + "context" "encoding/json" "fmt" - "io" - "log" "net/http" "os" "os/exec" "path/filepath" + "tuxpa.in/a/zlog/log" + "gitea.asdf.cafe/abs3nt/gospt/src/config" "gitea.asdf.cafe/abs3nt/gospt/src/gctx" @@ -25,6 +26,12 @@ var ( configDir, _ = os.UserConfigDir() ) +type roundTripperFunc func(*http.Request) (*http.Response, error) + +func (fn roundTripperFunc) RoundTrip(req *http.Request) (*http.Response, error) { + return fn(req) +} + func GetClient(ctx *gctx.Context) (*spotify.Client, error) { if config.Values.ClientId == "" || config.Values.ClientSecret == "" || config.Values.Port == "" { fmt.Println("PLEASE WRITE YOUR CONFIG FILE IN", filepath.Join(configDir, "gospt/client.yml")) @@ -57,42 +64,36 @@ func GetClient(ctx *gctx.Context) (*spotify.Client, error) { ), ) if _, err := os.Stat(filepath.Join(configDir, "gospt/auth.json")); err == nil { - authFile, err := os.Open(filepath.Join(configDir, "gospt/auth.json")) + authFilePath := filepath.Join(configDir, "gospt/auth.json") + authFile, err := os.Open(authFilePath) if err != nil { return nil, err } defer authFile.Close() - authValue, err := io.ReadAll(authFile) + tok := &oauth2.Token{} + err = json.NewDecoder(authFile).Decode(tok) if err != nil { return nil, err } - var tok *oauth2.Token - err = json.Unmarshal(authValue, &tok) - if err != nil { - return nil, err - } - client := spotify.New(auth.Client(ctx, tok)) + ctx.Context = context.WithValue(ctx.Context, oauth2.HTTPClient, &http.Client{ + Transport: roundTripperFunc(func(r *http.Request) (*http.Response, error) { + log.Trace().Interface("path", r.URL.Path).Msg("request") + return http.DefaultTransport.RoundTrip(r) + }), + }) + authClient := auth.Client(ctx, tok) + client := spotify.New(authClient) new_token, err := client.Token() if err != nil { return nil, err } - if new_token != tok { - out, err := json.MarshalIndent(new_token, "", " ") - if err != nil { - panic(err.Error()) - } - err = os.WriteFile(filepath.Join(configDir, "gospt/auth.json"), out, 0o644) - if err != nil { - panic("FAILED TO SAVE AUTH") - } - } - out, err := json.MarshalIndent(tok, "", " ") + out, err := json.MarshalIndent(new_token, "", " ") if err != nil { - panic(err.Error()) + return nil, err } - err = os.WriteFile(filepath.Join(configDir, "gospt/auth.json"), out, 0o644) + err = os.WriteFile(authFilePath, out, 0o644) if err != nil { - panic("FAILED TO SAVE AUTH") + return nil, fmt.Errorf("failed to save auth") } return client, nil } @@ -104,7 +105,7 @@ func GetClient(ctx *gctx.Context) (*spotify.Client, error) { go func() { err := http.ListenAndServe(fmt.Sprintf(":%s", config.Values.Port), nil) if err != nil { - log.Fatal(err) + panic(err) } }() url := auth.AuthURL(state) @@ -127,7 +128,6 @@ func completeAuth(w http.ResponseWriter, r *http.Request) { tok, err := auth.Token(r.Context(), state, r) if err != nil { http.Error(w, "Couldn't get token", http.StatusForbidden) - log.Fatal(err) } if st := r.FormValue("state"); st != state { http.NotFound(w, r)