# HG changeset patch # User Sascha Wilde # Date 1538135835 -7200 # Node ID d464b777d98fd5b2f1417bd842d05d364f685c0a # Parent 83c271cb23441aa9404471d7e1154d7eb4a7bae2# Parent fb39ec3b95a82d7da6fd2144a5bd5f379c3538dc Merged diff -r fb39ec3b95a8 -r d464b777d98f pkg/controllers/system.go --- a/pkg/controllers/system.go Fri Sep 28 13:55:44 2018 +0200 +++ b/pkg/controllers/system.go Fri Sep 28 13:57:15 2018 +0200 @@ -111,6 +111,10 @@ attr := mux.Vars(req)["attr"] c := input.(*models.Colour) + if !c.IsValid() { + err = JSONError{http.StatusBadRequest, "error: invalid colours"} + return + } var res sql.Result res, err = db.ExecContext( diff -r fb39ec3b95a8 -r d464b777d98f pkg/models/system.go --- a/pkg/models/system.go Fri Sep 28 13:55:44 2018 +0200 +++ b/pkg/models/system.go Fri Sep 28 13:57:15 2018 +0200 @@ -1,49 +1,21 @@ package models -import ( - "database/sql/driver" - "encoding/json" - "errors" - "fmt" -) - type ( - AlphaValue float64 - Colour struct { - R byte `json:"r"` - G byte `json:"g"` - B byte `json:"b"` - A AlphaValue `json:"a"` + R int `json:"r"` + G int `json:"g"` + B int `json:"b"` + A float32 `json:"a"` } ) -var errInvalidAlphaValue = errors.New("Invalid alpha value.") - -func (a *AlphaValue) UnmarshalJSON(data []byte) error { - var f float64 - if err := json.Unmarshal(data, &f); err != nil { - return err - } - if f < 0 || f > 1 { - return errInvalidAlphaValue - } - *a = AlphaValue(f) - return nil +func isByteRange(i int) bool { + return i >= 0 && i < 256 } -func (a AlphaValue) Value() (driver.Value, error) { - return float64(a), nil +func (c Colour) IsValid() bool { + return isByteRange(c.R) && + isByteRange(c.G) && + isByteRange(c.B) && + c.A >= 0 && c.A <= 1 } - -func (a *AlphaValue) Scan(src interface{}) error { - switch v := src.(type) { - case int64: - *a = AlphaValue(v) - case float64: - *a = AlphaValue(v) - default: - return fmt.Errorf("Unexpected type %T", src) - } - return nil -}