Skip to content

Commit

Permalink
Moved more token error handling and messaging upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
Xemdo committed Jan 4, 2024
1 parent 7f3c73f commit 1478dcf
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 27 deletions.
19 changes: 12 additions & 7 deletions cmd/token.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
package cmd

import (
"errors"
"fmt"
"log"
"strconv"
Expand Down Expand Up @@ -86,13 +85,20 @@ func loginCmdRun(cmd *cobra.Command, args []string) error {
if revokeToken != "" {
p.Token = revokeToken
p.URL = login.RevokeTokenURL
login.CredentialsLogout(p)
_, err := login.CredentialsLogout(p)

if err != nil {
return err
}

log.Printf("Token %s has been successfully revoked", p.Token)

} else if validateToken != "" {
p.Token = validateToken
p.URL = login.ValidateTokenURL
r, err := login.ValidateCredentials(p)
if err != nil {
return fmt.Errorf("failed to validate: %v", err.Error())
return err
}

tokenType := "App Access Token"
Expand Down Expand Up @@ -121,14 +127,13 @@ func loginCmdRun(cmd *cobra.Command, args []string) error {
fmt.Println(white("- %v\n", s))
}
}

} else if refreshToken != "" {
p.URL = login.RefreshTokenURL

// If we are overriding the Client ID then we shouldn't store this in the config.
shouldStoreInConfig := (overrideClientId == "")

fmt.Printf("stored - %v", shouldStoreInConfig)

resp, err := login.RefreshUserToken(login.RefreshParameters{
RefreshToken: refreshToken,
ClientID: clientID,
Expand All @@ -144,7 +149,7 @@ func loginCmdRun(cmd *cobra.Command, args []string) error {
errDescription = "Check `--refresh` and `--client-id` flags to ensure the provided Refresh Token is valid for the provided Client ID."
}

return errors.New(err.Error() + "\n" + errDescription)
return fmt.Errorf("%v\n%v", err.Error(), errDescription)
}

fmt.Printf("%v", resp)
Expand All @@ -170,7 +175,7 @@ func loginCmdRun(cmd *cobra.Command, args []string) error {
resp, err := login.ClientCredentialsLogin(p)

if err != nil {
return errors.New("Error handling login: " + err.Error())
return err
}

lightYellow := color.New(color.FgHiYellow).SprintfFunc()
Expand Down
36 changes: 16 additions & 20 deletions internal/login/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ const ValidateTokenURL = "https://id.twitch.tv/oauth2/validate"
func ClientCredentialsLogin(p LoginParameters) (LoginResponse, error) {
u, err := url.Parse(p.URL)
if err != nil {
log.Fatal(err)
return LoginResponse{}, fmt.Errorf("Internal error: %v", err.Error())
}
q := u.Query()
q.Set("client_id", p.ClientID)
Expand All @@ -89,7 +89,7 @@ func ClientCredentialsLogin(p LoginParameters) (LoginResponse, error) {

resp, err := loginRequest(http.MethodPost, u.String(), nil)
if err != nil {
log.Fatal(err.Error())
return LoginResponse{}, fmt.Errorf("Error processing request: %v", err.Error())
}

if resp.StatusCode != http.StatusOK {
Expand All @@ -98,7 +98,7 @@ func ClientCredentialsLogin(p LoginParameters) (LoginResponse, error) {

r, err := handleLoginResponse(resp.Body, true)
if err != nil {
return LoginResponse{}, err
return LoginResponse{}, fmt.Errorf("Error processing login response: %v", err.Error())
}

return r, nil
Expand All @@ -109,7 +109,7 @@ func ClientCredentialsLogin(p LoginParameters) (LoginResponse, error) {
func UserCredentialsLogin(p LoginParameters, webserverIP string, webserverPort string) (LoginResponse, error) {
u, err := url.Parse(p.AuthorizeURL)
if err != nil {
log.Fatal(err)
return LoginResponse{}, fmt.Errorf("Internal error (parsing AuthorizeURL): %v", err.Error())
}
q := u.Query()
q.Set("client_id", p.ClientID)
Expand All @@ -120,7 +120,7 @@ func UserCredentialsLogin(p LoginParameters, webserverIP string, webserverPort s

state, err := generateState()
if err != nil {
log.Fatal(err.Error())
return LoginResponse{}, fmt.Errorf("Internal error (generating state): %v", err.Error())
}

q.Set("state", state)
Expand All @@ -146,7 +146,7 @@ func UserCredentialsLogin(p LoginParameters, webserverIP string, webserverPort s

u2, err := url.Parse(p.URL)
if err != nil {
return LoginResponse{}, fmt.Errorf("Internal error: %v", err.Error())
return LoginResponse{}, fmt.Errorf("Internal error (parsing URL): %v", err.Error())
}

q = u2.Query()
Expand Down Expand Up @@ -174,7 +174,7 @@ func UserCredentialsLogin(p LoginParameters, webserverIP string, webserverPort s
func CredentialsLogout(p LoginParameters) (LoginResponse, error) {
u, err := url.Parse(p.URL)
if err != nil {
log.Fatal(err)
return LoginResponse{}, fmt.Errorf("Internal error (parsing URL): %v", err.Error())
}
q := u.Query()
q.Set("client_id", p.ClientID)
Expand All @@ -183,16 +183,13 @@ func CredentialsLogout(p LoginParameters) (LoginResponse, error) {

resp, err := loginRequest(http.MethodPost, u.String(), nil)
if err != nil {
log.Print(err.Error())
return LoginResponse{}, err
return LoginResponse{}, fmt.Errorf("Error reading body: %v", err.Error())
}

if resp.StatusCode != http.StatusOK {
log.Printf("API responded with an error while revoking token: [%v] %v", resp.StatusCode, string(resp.Body))
return LoginResponse{}, errors.New("API responded with an error while revoking token")
return LoginResponse{}, fmt.Errorf("API responded with an error while revoking token: [%v] %v", resp.StatusCode, string(resp.Body))
}

log.Printf("Token %s has been successfully revoked.", p.Token)
return LoginResponse{}, nil
}

Expand All @@ -201,7 +198,7 @@ func CredentialsLogout(p LoginParameters) (LoginResponse, error) {
func RefreshUserToken(p RefreshParameters, shouldStoreInConfig bool) (LoginResponse, error) {
u, err := url.Parse(p.URL)
if err != nil {
log.Fatal(err)
return LoginResponse{}, fmt.Errorf("Internal error (parsing URL): %v", err)
}
q := u.Query()
q.Set("client_id", p.ClientID)
Expand All @@ -211,17 +208,16 @@ func RefreshUserToken(p RefreshParameters, shouldStoreInConfig bool) (LoginRespo

resp, err := loginRequest(http.MethodPost, u.String(), nil)
if err != nil {
return LoginResponse{}, err
return LoginResponse{}, fmt.Errorf("Error processing request: %v", err.Error())
}

if resp.StatusCode != http.StatusOK {
return LoginResponse{}, errors.New(fmt.Sprintf("Error with client while refreshing: [%v - `%v`]", resp.StatusCode, strings.TrimSpace(string(resp.Body))))
return LoginResponse{}, fmt.Errorf("Error with client while refreshing: [%v - `%v`]", resp.StatusCode, strings.TrimSpace(string(resp.Body)))
}

r, err := handleLoginResponse(resp.Body, shouldStoreInConfig)
if err != nil {
log.Printf("Error handling login: %v", err)
return LoginResponse{}, err
return LoginResponse{}, fmt.Errorf("Error handling login: %v", err.Error())
}

return r, nil
Expand All @@ -232,7 +228,7 @@ func RefreshUserToken(p RefreshParameters, shouldStoreInConfig bool) (LoginRespo
func ValidateCredentials(p LoginParameters) (ValidateResponse, error) {
u, err := url.Parse(p.URL)
if err != nil {
log.Fatal(err)
return ValidateResponse{}, fmt.Errorf("Internal error (parsing URL): %v", err)
}

resp, err := loginRequestWithHeaders(http.MethodGet, u.String(), nil, []loginHeader{
Expand All @@ -242,13 +238,13 @@ func ValidateCredentials(p LoginParameters) (ValidateResponse, error) {
},
})
if err != nil {
return ValidateResponse{}, err
return ValidateResponse{}, fmt.Errorf("Error processing request: %v", err)
}

// Handle validate response body
var r ValidateResponse
if err = json.Unmarshal(resp.Body, &r); err != nil {
return ValidateResponse{}, err
return ValidateResponse{}, fmt.Errorf("Error handling response: %v", err)
}

return r, nil
Expand Down

0 comments on commit 1478dcf

Please sign in to comment.