Mercurial > public > pacobot
view 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 source
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 }