diff options
| -rw-r--r-- | auth/auth.go | 9 | ||||
| -rw-r--r-- | auth/input.go | 40 | ||||
| -rw-r--r-- | auth/server.go | 28 | 
3 files changed, 57 insertions, 20 deletions
| diff --git a/auth/auth.go b/auth/auth.go index a8d28c7..95ccd48 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -70,12 +70,17 @@ func openInBrowser(url string) {    }    if err != nil { -    fmt.Println("There was an error while launching your browser.", err) +    fmt.Println("There was an error while launching your browser.")      fmt.Println("Please manually copy and paste the above URL into your web browser.") +    fmt.Println(err)    }  }  func Logout() { -  deleteClientId()    deleteToken() +  fmt.Println("Deleted user credentials.") +  if confirmInput("Delete your Client ID? [y/N] ") { +    fmt.Println("Deleting Client ID...") +    deleteClientId() +  }  } diff --git a/auth/input.go b/auth/input.go index 9f75fab..aa56f52 100644 --- a/auth/input.go +++ b/auth/input.go @@ -22,6 +22,7 @@ import (    "os"    "fmt"    "errors" +  "strings"    p "github.com/manifoldco/promptui"  ) @@ -55,3 +56,42 @@ func secretInput(label, errMessage string) string {    return res  } + +// ask yes/no with no as default +func confirmInput(label string) bool { +  validResponses := []string{"y", "yes", "n", "no", ""} + +  validate := func(input string) error { +    lowerInput := strings.ToLower(input) +    for _, i := range validResponses { +      if lowerInput == i { +        return nil +      } +    } +    return errors.New("answer can only be y(es) or n(o)") +  } + +  template := &p.PromptTemplates { +    Valid: "{{ . | cyan }}", +    Invalid: "{{ . | cyan }}", +    Success: "{{ . | blue }}", +  } + +  prompt := p.Prompt { +    Label: label, +    Templates: template, +    Validate: validate, +  } + +  res, err := prompt.Run() +  if err != nil { +    fmt.Println("Failed to run confirm prompt.", err.Error(), err) +    os.Exit(1) +  } + +  if res == "y" || res == "yes" { +    return true +  } + +  return false +} diff --git a/auth/server.go b/auth/server.go index 5a18a36..02b9382 100644 --- a/auth/server.go +++ b/auth/server.go @@ -29,25 +29,17 @@ import (  func listen(clientId, verifier string) {    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { -    query := r.URL.Query() +	  code, codeExists := r.URL.Query()["code"] -	code, codePresent := query["code"] -	if !codePresent { -	  // TODO: check if error message present -	  fmt.Println("Error: response from MyAnimeList doesn't contain required code.") -	  os.Exit(1) -	} - -	accessToken, refreshToken, expiresIn := requestToken(clientId, verifier, code[0]) - -	if accessToken != "" { -	  w.WriteHeader(200) -	  w.Write([]byte("<h1>You have successfully logged into macli.</h1>")) -	} - -	setToken(accessToken) -	setRefreshToken(refreshToken) -	setExpiresIn(expiresIn) +		if codeExists { +	    accessToken, refreshToken, expiresIn := requestToken(clientId, verifier, code[0]) +		  setToken(accessToken) +		  setRefreshToken(refreshToken) +      setExpiresIn(expiresIn) +			fmt.Println("\x1b[32mYou have successfully logged into macli.\x1b[0m") +			fmt.Println("\x1b[32mYou can close the web browser tab now.\x1b[0m") +			os.Exit(0) +		}    })    err := http.ListenAndServe(":8000", nil) |