Mercurial > public > pacobot
diff auth/auth.go @ 8:e9df3bb010f4
fix issues
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Thu, 13 Mar 2025 17:41:42 +0000 |
parents | cmd/auth.go@a8aab75f68c9 |
children | aaf85ae1f942 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/auth/auth.go Thu Mar 13 17:41:42 2025 +0000 @@ -0,0 +1,195 @@ +package auth + +import ( + "encoding/json" + "log" + "net/http" + "net/url" +) + +// TODO: Change unmarshall to JSON DECODE + +func GetAuthUrl() string { + config := ReadConfig() + + baseUrl := &url.URL{ + Scheme: "https", + Host: "id.twitch.tv", + Path: "/oauth2/authorize", + } + + params := url.Values{} + params.Add("client_id", config.ClientId) + params.Add("force_verify", "true") + params.Add("redirect_uri", "http://localhost:8080/twitch-auth-code-callback") + params.Add("response_type", "code") + params.Add("scope", "channel:bot user:read:chat") + params.Add("state", "c3ab8aa609ea11e793ae92361f002671") + + baseUrl.RawQuery = params.Encode() + + return baseUrl.String() +} + +func GetAuthToken(authCode string) AuthRes { + config := ReadConfig() + + baseUrl := &url.URL{ + Scheme: "https", + Host: "id.twitch.tv", + Path: "/oauth2/token", + } + + formData := url.Values{} + formData.Add("client_id", config.ClientId) + formData.Add("client_secret", config.ClientSecret) + formData.Add("code", authCode) + formData.Add("grant_type", "authorization_code") + formData.Add("redirect_uri", "http://localhost:8080/twitch-auth-code-callback") + + res, err := http.PostForm(baseUrl.String(), formData) + + if err != nil { + log.Fatal(err) + } + + defer res.Body.Close() + + if res.StatusCode != 200 { + log.Fatal("GetAuthToken") + } + + var authRes AuthRes + + err = json.NewDecoder(res.Body).Decode(&authRes) + + if err != nil { + log.Fatal(err) + } + + return authRes +} + +func IsAuthTokenValid(authToken string) bool { + baseUrl := &url.URL{ + Scheme: "https", + Host: "id.twitch.tv", + Path: "oauth2/validate", + } + + req, err := http.NewRequest("GET", baseUrl.String(), nil) + + if err != nil { + log.Fatal(err) + } + + req.Header.Set("Authorization", "OAuth "+authToken) + + client := &http.Client{} + resp, err := client.Do(req) + + if err != nil { + log.Fatal(err) + } + + defer resp.Body.Close() + + return resp.StatusCode == 200 +} + +func RevokeAuthToken(authToken string) { + config := ReadConfig() + + baseUrl := &url.URL{ + Scheme: "https", + Host: "id.twitch.tv", + Path: "oauth2/revoke", + } + + data := url.Values{} + data.Add("client_id", config.ClientId) + data.Add("token", authToken) + + res, err := http.PostForm(baseUrl.String(), data) + + if err != nil { + log.Fatal(err) + } + + defer res.Body.Close() +} + +func RefreshAuthToken(authToken, refreshToken string) AuthRes { + config := ReadConfig() + + baseUrl := &url.URL{ + Scheme: "https", + Host: "id.twitch.tv", + Path: "oauth2/token", + } + + data := url.Values{} + data.Add("grant_type", "refresh_token") + data.Add("refresh_token", refreshToken) + data.Add("client_id", config.ClientId) + data.Add("client_secret", config.ClientSecret) + + res, err := http.PostForm(baseUrl.String(), data) + + if err != nil { + log.Fatal(err) + } + + defer res.Body.Close() + + var authRes AuthRes + + err = json.NewDecoder(res.Body).Decode(&authRes) + + if err != nil { + log.Fatal(err) + } + + return authRes +} + +func GetUser(userName, authToken string) UserRes { + config := ReadConfig() + + baseUrl := &url.URL{ + Scheme: "https", + Host: "api.twitch.tv", + Path: "helix/users", + } + + params := url.Values{} + params.Add("login", userName) + + req, err := http.NewRequest("GET", baseUrl.String(), nil) + + if err != nil { + log.Fatal(err) + } + + req.Header.Set("Client-ID", config.ClientId) + req.Header.Set("Authorization", "Bearer "+authToken) + + client := &http.Client{} + res, err := client.Do(req) + + if err != nil { + log.Fatal(err) + } + + defer res.Body.Close() + + var userRes UserRes + + err = json.NewDecoder(res.Body).Decode(&userRes) + + if err != nil { + log.Fatal(err) + } + + return userRes +}