Generate HTTP endpoints for environment sensors

- Move update request sanity checks to new method in handlers/util.go
- Change EnvironmentSensor.Value type because ParseFloat returns float64
This commit is contained in:
Bendodroid 2024-01-14 01:04:01 +01:00
commit 38710484f9
Signed by: bendodroid
GPG key ID: 3EEE19A0F73D5FFC
5 changed files with 102 additions and 27 deletions

39
handlers/sensors.go Normal file
View file

@ -0,0 +1,39 @@
package handlers
import (
"io"
"log"
"math"
"net/http"
"strconv"
"time"
"gitlab.hamburg.ccc.de/ccchh/spaceapid/config"
"gitlab.hamburg.ccc.de/ccchh/spaceapid/types"
)
func EnvironmentSensor(
authDB config.HTTPBACredentials, validCredentials []config.HTTPBACredentialID,
resp *types.EnvironmentSensor,
) func(http.ResponseWriter, *http.Request) {
return func(w http.ResponseWriter, r *http.Request) {
body := updateEndpointValidator(authDB, validCredentials, w, r)
// Parse request body
newState, err := strconv.ParseFloat(string(body), 64)
if err != nil || math.IsInf(newState, 0) {
log.Println("Failed to parse request body from", r.RemoteAddr)
w.WriteHeader(http.StatusBadRequest)
_, _ = io.WriteString(w, "HTTP request body has to be a valid float64 value != +/-Inf")
return
}
// Set SpaceAPI response values
resp.Value = newState
resp.LastChange = time.Now().Unix()
// Respond with OK
w.WriteHeader(http.StatusOK)
_, _ = io.WriteString(w, "Update Successful")
}
}