diff --git a/internal/server/server.go b/internal/server/server.go index 238afbfa184740433a3e6ed50ba46e4319943d5d..424e4164abbfa586d94989c4d2e5fa5652d1de47 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 93a28098baa040d15a36af40fd35098fc15a2295..7d81a330f7ca75579b11507a1847e2c9be56c889 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 738b40cd0cc9bb6b5882067eb6a1e7520fc2bf23..2d315d5eb36f68b1b5b0e9cf4405a40668bdc621 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>