From 25034b1e43e9fd3ec0ed5a73ed67d5db7c849eca Mon Sep 17 00:00:00 2001
From: Simon Kirsten <skirsten@genesiscloud.com>
Date: Sat, 14 Mar 2020 17:28:58 +0100
Subject: [PATCH] Twitch helix api proxy patch

---
 internal/server/server.go  |  7 +----
 internal/server/twitch.go  | 64 +++++++++++---------------------------
 internal/static/index.html |  2 +-
 3 files changed, 20 insertions(+), 53 deletions(-)

diff --git a/internal/server/server.go b/internal/server/server.go
index 238afbf..424e416 100644
--- a/internal/server/server.go
+++ b/internal/server/server.go
@@ -11,12 +11,7 @@ import (
 func ListenAndServe(listenAddr string) error {
 	r := chi.NewRouter()
 
-	r.Route("/twitch", func(r chi.Router) {
-		r.Get("/getTopGames", twitchGetTopGamesHandler)
-		r.Get("/searchGames", twitchSearchGamesHandler)
-		r.Get("/getTopStreams", twitchGetTopStreamsHandler)
-		r.Get("/getFeaturedStreams", twitchGetFeaturedStreamsHandler)
-	})
+	r.Mount("/twitch", http.StripPrefix("/twitch/", http.HandlerFunc(twitchHandler)))
 
 	r.Get("/display", func(w http.ResponseWriter, r *http.Request) {
 		if r.Header.Get("Accept") == "text/event-stream" {
diff --git a/internal/server/twitch.go b/internal/server/twitch.go
index 93a2809..7d81a33 100644
--- a/internal/server/twitch.go
+++ b/internal/server/twitch.go
@@ -1,11 +1,14 @@
 package server
 
 import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
 	"net/http"
 	"os"
 	streamserver "stream-server"
 
-	"stream-server/internal/util"
 	"stream-server/pkg/twitch"
 )
 
@@ -22,70 +25,39 @@ func init() {
 	}
 }
 
-// twitchGetTopGamesHandler handles the GetTopGames endpoint
-func twitchGetTopGamesHandler(w http.ResponseWriter, r *http.Request) {
-	response, err := client.GetTopGames()
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusBadGateway)
-		return
-	}
+// twitchHandler proxies request to the helix twitch API
+func twitchHandler(w http.ResponseWriter, r *http.Request) {
 
-	util.ServeIndentedJSON(w, r, &response)
-}
+	url := fmt.Sprintf("https://api.twitch.tv/helix/%s", r.URL.RequestURI())
 
-// twitchSearchGamesHandler handles the SearchGames endpoint
-func twitchSearchGamesHandler(w http.ResponseWriter, r *http.Request) {
-	paramQuery, err := util.GetSingleQueryParam(r, "query")
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusBadRequest)
-		return
-	}
-
-	if paramQuery == nil || *paramQuery == "" {
-		http.Error(w, "Parameter 'query' is required and can not be empty.", http.StatusBadRequest)
-		return
-	}
+	fmt.Printf("url: %s\n", url)
 
-	response, err := client.SearchGames(*paramQuery)
+	req, err := http.NewRequest("GET", url, nil)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusBadGateway)
 		return
 	}
 
-	util.ServeIndentedJSON(w, r, &response)
-}
-
-// twitchGetTopStreamsHandler handles the GetTopStreams endpoint
-func twitchGetTopStreamsHandler(w http.ResponseWriter, r *http.Request) {
-	paramChannels := util.GetMultipleQueryParams(r, "channels")
-	game, err := util.GetSingleQueryParam(r, "game")
-	if err != nil {
-		http.Error(w, err.Error(), http.StatusBadRequest)
-		return
-	}
-
-	language, err := util.GetSingleQueryParam(r, "language")
+	req.Header.Add("Client-ID", client.ClientID)
+	resp, err := http.DefaultClient.Do(req)
 	if err != nil {
-		http.Error(w, err.Error(), http.StatusBadRequest)
+		http.Error(w, err.Error(), http.StatusBadGateway)
 		return
 	}
 
-	response, err := client.GetTopStreams(paramChannels, game, language)
+	defer resp.Body.Close()
+	body, err := ioutil.ReadAll(resp.Body)
 	if err != nil {
 		http.Error(w, err.Error(), http.StatusBadGateway)
 		return
 	}
 
-	util.ServeIndentedJSON(w, r, &response)
-}
-
-// twitchGetFeaturedStreamsHandler handles the GetFeaturedStreams endpoint
-func twitchGetFeaturedStreamsHandler(w http.ResponseWriter, r *http.Request) {
-	response, err := client.GetFeaturedStreams()
-	if err != nil {
+	var prettyJSON bytes.Buffer
+	error := json.Indent(&prettyJSON, body, "", "    ")
+	if error != nil {
 		http.Error(w, err.Error(), http.StatusBadGateway)
 		return
 	}
 
-	util.ServeIndentedJSON(w, r, &response)
+	w.Write(prettyJSON.Bytes())
 }
diff --git a/internal/static/index.html b/internal/static/index.html
index 738b40c..2d315d5 100644
--- a/internal/static/index.html
+++ b/internal/static/index.html
@@ -22,7 +22,7 @@
       <h2>Loading...</h2>
       <p>
         <a href="https://stream-server.h-da.io">Documentation</a> ยท
-        <a href="https://stream-server.h-da.io/reference">Reference</a>
+        <a href="https://dev.twitch.tv/docs/api/reference">Reference</a>
       </p>
       <small>
         <a href="javascript:toggleFullscreen()">toggle fullscreen</a>
-- 
GitLab