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
+}