diff options
author | Vidhu Kant Sharma <vidhukant@vidhukant.xyz> | 2022-06-15 16:32:32 +0530 |
---|---|---|
committer | Vidhu Kant Sharma <vidhukant@vidhukant.xyz> | 2022-06-15 16:32:32 +0530 |
commit | 1d72b87bca4042d36cea1f1e775803a5252cd224 (patch) | |
tree | 04a0185a473c7f9acd5c92bc4091d7c66f102e6b /auth/server.go | |
parent | 83e1ce2508ea035fb299a88fe89e82f34e609499 (diff) |
now macli handles logging in by itself
Diffstat (limited to 'auth/server.go')
-rw-r--r-- | auth/server.go | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/auth/server.go b/auth/server.go index eef95bb..5a18a36 100644 --- a/auth/server.go +++ b/auth/server.go @@ -18,18 +18,61 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package auth -// import ( -// "net/http" -// "os" -// "fmt" -// ) -// -// func listen() { -// http.HandleFunc("/", getRoot) -// -// err := http.ListenAndServe(":8000", nil) -// if err != nil { -// fmt.Println("There was an error initialising the server", err.Error()) -// os.Exit(1) -// } -// } +import ( + "net/http" + "net/url" + "encoding/json" + "os" + "fmt" + // "io/ioutil" +) + +func listen(clientId, verifier string) { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + query := r.URL.Query() + + 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) + }) + + err := http.ListenAndServe(":8000", nil) + if err != nil { + fmt.Println("There was an error initialising the server", err.Error()) + os.Exit(1) + } +} + +func requestToken(clientId, verifier, code string) (string, string, string) { + data := url.Values{ + "client_id": {clientId}, + "code_verifier": {verifier}, + "grant_type": {"authorization_code"}, + "code": {code}, + } + + resp, err := http.PostForm("https://myanimelist.net/v1/oauth2/token", data) + if err != nil { + fmt.Println("Error while requesting an access token:", err) + os.Exit(1) + } + + var res map[string]interface{} + json.NewDecoder(resp.Body).Decode(&res) + + return fmt.Sprintf("%v", res["access_token"]), fmt.Sprintf("%v", res["refresh_token"]), fmt.Sprintf("%v", res["expires_in"]) +} |