summary refs log tree commit diff
path: root/oauth.go
diff options
context:
space:
mode:
Diffstat (limited to 'oauth.go')
-rw-r--r--oauth.go57
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
+}