1
0
Quellcode durchsuchen

[http] Stricter behaviour with l=

Blallo vor 5 Jahren
Ursprung
Commit
4838f45f13
1 geänderte Dateien mit 20 neuen und 28 gelöschten Zeilen
  1. 20 28
      cmd/circologd/http.go

+ 20 - 28
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++
 		}
 	}
 }