From 4838f45f1306a87666322350a8c5e1b4b3105efb Mon Sep 17 00:00:00 2001 From: Blallo Date: Mon, 5 Nov 2018 11:53:26 +0100 Subject: [PATCH] [http] Stricter behaviour with l= --- cmd/circologd/http.go | 48 ++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/cmd/circologd/http.go b/cmd/circologd/http.go index 5832a11..c5d3432 100644 --- a/cmd/circologd/http.go +++ b/cmd/circologd/http.go @@ -1,9 +1,8 @@ package main import ( - "fmt" + "log" "net/http" - "os" "strconv" "time" @@ -26,43 +25,36 @@ func getHTTPHandler(hub circolog.Hub) http.HandlerFunc { err := r.ParseForm() if err != nil { - fmt.Fprintln(os.Stderr, "error parsing http request", err) + log.Println("error parsing http request", err) } // Looking for known parameter in the request // TODO: write specialized function var requestMessageLen int if reqL, ok := r.Form["l"]; ok { - var err error - switch { - case len(reqL) == 1: + if len(reqL) == 1 { requestMessageLen, err = strconv.Atoi(reqL[0]) - if requestMessageLen <= 0 { - fmt.Fprintln(os.Stderr, "malformed request, l non positive:", requestMessageLen) - //requestMessageLen := 0 + if err != nil || requestMessageLen <= 0 { + log.Println("malformed request on parameter l") + requestMessageLen = -1 + w.WriteHeader(400) } - if err != nil { - fmt.Fprintln(os.Stderr, "malformed request on parameter l:", err) - } - case len(reqL) > 1: - requestMessageLen, err = strconv.Atoi(reqL[len(reqL)-1]) - fmt.Fprintln(os.Stderr, "multiple values of l parameter, taking last:", - requestMessageLen) - if err != nil { - fmt.Fprintln(os.Stderr, "malformed request on parameter l:", err) - } - default: - fmt.Fprintln(os.Stderr, "empty parameter l in request") + } else { + log.Println("malformed request on parameter l") + requestMessageLen = -1 + w.WriteHeader(400) } } - i := 1 - for x := range client.Messages { - w.Write([]byte(circolog.FormatSyslog(x))) - w.Write([]byte("\n")) - if requestMessageLen != 0 && i >= requestMessageLen { - break + if requestMessageLen >= 0 { + i := 1 + for x := range client.Messages { + w.Write([]byte(circolog.FormatSyslog(x))) + w.Write([]byte("\n")) + if requestMessageLen != 0 && i >= requestMessageLen { + break + } + i++ } - i++ } } }