diff options
Diffstat (limited to 'oauth.go')
-rw-r--r-- | oauth.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/oauth.go b/oauth.go new file mode 100644 index 0000000..f41dde3 --- /dev/null +++ b/oauth.go @@ -0,0 +1,57 @@ +package main + +import ( + "fmt" + "net/http" + "os/exec" +) + +func openBrowser(url string) error { + cmd := exec.Command("xdg-open", url) + return cmd.Start() +} + +func startServer(codeChannel chan string) { + // Step 5: Start a web server that listens on localhost:3000 + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + // Extract the code parameter from the query string + code := r.URL.Query().Get("code") + if code != "" { + // Send the authorization code to the channel + codeChannel <- code + + // Respond to the browser + fmt.Fprintf(w, "Authorization successful! You can now close this window.") + } else { + // If there's no code, display an error + http.Error(w, "Authorization failed", http.StatusBadRequest) + } + }) + + // Start the server + err := http.ListenAndServe(":3000", nil) + if err != nil { + fmt.Printf("Error starting server: %v\n", err) + } +} + +func GetOAuth(clientID string) (string, error) { + // Step 1: Construct the URL with the provided client_id + url := fmt.Sprintf("https://id.twitch.tv/oauth2/authorize?response_type=code&client_id=%s&redirect_uri=http://localhost:3000&scope=user%%3Aread%%3Afollows&state=xsscheckbasic101", clientID) + + // Step 2: Open the URL in the default web browser using xdg-open + err := openBrowser(url) + if err != nil { + return "", fmt.Errorf("failed to open browser: %v", err) + } + + // Step 3: Start the HTTP server to capture the response + codeChannel := make(chan string) + go startServer(codeChannel) + + // Step 4: Wait for the authorization code to be received + code := <-codeChannel + + // Return the authorization code + return code, nil +} |