package main import ( "bytes" "context" "encoding/json" "fmt" "io" "log" "net/http" "net/url" "golang.org/x/oauth2/clientcredentials" "golang.org/x/oauth2/twitch" ) type UserTokenResponse struct { AccessToken string `json:"access_token"` ExpiresIn int `json:"expires_in"` RefreshToken string `json:"refresh_token"` Scope []string `json:"scope"` TokenType string `json:"token_type"` } func GetUserToken(authCode string) UserTokenResponse{ apiURL := "https://id.twitch.tv/oauth2/token" data := url.Values{} data.Set("client_id", clientSecrets.ClientID) data.Set("client_secret", clientSecrets.ClientSecret) data.Set("code", authCode) data.Set("grant_type", "authorization_code") data.Set("redirect_uri", "http://localhost:3000") req, err := http.NewRequest("POST", apiURL, bytes.NewBufferString(data.Encode())) if err != nil { fmt.Println("Error creating request:", err) panic(err) } req.Header.Set("Content-Type", "application/x-www-form-urlencoded") client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) panic(err) } defer resp.Body.Close() if DEBUG { fmt.Println("Response Status:", resp.Status) } body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println("Error reading response body:", err) panic(err) } var userTokenResponse UserTokenResponse err = json.Unmarshal([]byte(body), &userTokenResponse) if err != nil { fmt.Println("Error unmarshaling JSON:", err) panic(err) } return userTokenResponse } func GetAppToken() string{ oauth2Config = &clientcredentials.Config{ ClientID: clientSecrets.ClientID, ClientSecret: clientSecrets.ClientSecret, TokenURL: twitch.Endpoint.TokenURL, } token, err := oauth2Config.Token(context.Background()) if err != nil { log.Fatal(err) } return token.AccessToken }