handle bad requests - twitch-go - twitch.tv web application in Go
(HTM) git clone git://git.codemadness.org/twitch-go
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit c8815efa5feed2bb13b44286806eb568b3f13b3e
(DIR) parent e11fa18a7c6d467bbb58e57eea61bf300f008e26
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 17 May 2015 11:06:33 +0200
handle bad requests
Diffstat:
M handlers.go | 14 ++++++++++++--
M main.go | 13 ++++++++++---
2 files changed, 22 insertions(+), 5 deletions(-)
---
(DIR) diff --git a/handlers.go b/handlers.go
@@ -17,7 +17,11 @@ func FeaturedHandler(w http.ResponseWriter, r *http.Request) error {
func PlaylistHandler(w http.ResponseWriter, r *http.Request) error {
channel := r.FormValue("c")
- format := r.FormValue("f")
+ if channel == "" {
+ BadRequest(w, "No channel name specified")
+ return nil
+ }
+ format := r.FormValue("f") // if empty "redirect".
token, err := twitch.GetToken(channel)
if err != nil {
return err
@@ -35,13 +39,19 @@ func PlaylistHandler(w http.ResponseWriter, r *http.Request) error {
default: // redirect
w.Header().Set("Location", url)
w.WriteHeader(http.StatusFound)
- w.Write([]byte(url))
+ if r.Method == "GET" {
+ w.Write([]byte(url))
+ }
}
return nil
}
func GameHandler(w http.ResponseWriter, r *http.Request) error {
gamename := r.FormValue("g")
+ if gamename == "" {
+ BadRequest(w, "No game name specified")
+ return nil
+ }
game, err := twitch.GetGame(gamename)
if err != nil {
return err
(DIR) diff --git a/main.go b/main.go
@@ -28,6 +28,8 @@ type Config struct {
Pidfile string
}
+type TwitchHandler func(http.ResponseWriter, *http.Request) error
+
type Templates struct {
Pages map[string]*template.Template
Themes map[string]*template.Template
@@ -114,17 +116,22 @@ func (t *Templates) LoadTemplates(path string) (map[string]*template.Template, e
return m, err
}
-type TwitchHandler func(http.ResponseWriter, *http.Request) error
+func BadRequest(w http.ResponseWriter, err string) {
+ http.Error(w, "400 " + err, http.StatusBadRequest)
+}
func MakeHandler(h TwitchHandler) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
err := r.ParseForm()
if err == nil {
err = h(w, r)
+ } else {
+ BadRequest(w, "Can't parse form: " + err.Error())
+ return
}
+ // unhandled error so far: 500
if err != nil {
- w.WriteHeader(500)
- w.Write([]byte("500 " + err.Error()))
+ http.Error(w, "500 " + err.Error(), http.StatusInternalServerError)
}
}
}