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 }