# HG changeset patch # User Sascha Wilde # Date 1538128266 -7200 # Node ID 6902032757e474ea71320ba4d86adfbf3a8a18e5 # Parent 596ef3b46028423ed6e71eefcc040113a08edafc Added end point to set style (colour) information for feature. diff -r 596ef3b46028 -r 6902032757e4 pkg/controllers/routes.go --- a/pkg/controllers/routes.go Fri Sep 28 11:48:57 2018 +0200 +++ b/pkg/controllers/routes.go Fri Sep 28 11:51:06 2018 +0200 @@ -59,6 +59,11 @@ Handle: getFeatureStyle, })).Methods(http.MethodGet) + api.Handle("/system/style/{feature}/{attr}", any(&JSONHandler{ + Input: func() interface{} { return new(models.Colour) }, + Handle: setFeatureStyle, + })).Methods(http.MethodPut) + // Password resets. api.Handle("/users/passwordreset", &JSONHandler{ Input: func() interface{} { return new(models.PWResetUser) }, diff -r 596ef3b46028 -r 6902032757e4 pkg/controllers/system.go --- a/pkg/controllers/system.go Fri Sep 28 11:48:57 2018 +0200 +++ b/pkg/controllers/system.go Fri Sep 28 11:51:06 2018 +0200 @@ -15,6 +15,9 @@ getFeatureColourSQL = `SELECT r,g,b,a FROM systemconf.feature_colours WHERE feature_name = $1 AND style_attr = $2` + setFeatureColourSQL = `UPDATE systemconf.feature_colours +SET (r, g, b, a) = ($3, $4, $5, $6) +WHERE feature_name = $1 AND style_attr = $2` ) // System status end points @@ -97,3 +100,46 @@ }{c, fmt.Sprintf("rgba(%d, %d, %d, %g)", c.R, c.G, c.B, c.A)} return } + +func setFeatureStyle( + input interface{}, + req *http.Request, + db *sql.Conn, +) (jr JSONResult, err error) { + + feature := mux.Vars(req)["feature"] + 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( + req.Context(), + setFeatureColourSQL, + feature, attr, + c.R, c.G, c.B, c.A) + + if err != nil { + return + } + + if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { + err = JSONError{ + Code: http.StatusNotFound, + Message: "Requestes style not found.", + } + return + } + + jr = JSONResult{ + Code: http.StatusCreated, + Result: struct { + Result string `json:"result"` + }{"success"}, + } + return +} diff -r 596ef3b46028 -r 6902032757e4 pkg/models/system.go --- a/pkg/models/system.go Fri Sep 28 11:48:57 2018 +0200 +++ b/pkg/models/system.go Fri Sep 28 11:51:06 2018 +0200 @@ -8,3 +8,14 @@ A float32 `json:"a"` } ) + +func isByteRange(i int) bool { + return i >= 0 && i < 256 +} + +func (c Colour) IsValid() bool { + return isByteRange(c.R) && + isByteRange(c.G) && + isByteRange(c.B) && + c.A >= 0 && c.A <= 1 +} diff -r 596ef3b46028 -r 6902032757e4 schema/auth.sql --- a/schema/auth.sql Fri Sep 28 11:48:57 2018 +0200 +++ b/schema/auth.sql Fri Sep 28 11:51:06 2018 +0200 @@ -32,6 +32,7 @@ GRANT USAGE ON SCHEMA sys_admin TO sys_admin; GRANT SELECT ON ALL TABLES IN SCHEMA sys_admin TO sys_admin; GRANT UPDATE ON sys_admin.system_config TO sys_admin; +GRANT UPDATE ON systemconf.feature_colours TO sys_admin; GRANT INSERT, DELETE ON sys_admin.password_reset_requests TO sys_admin; GRANT INSERT, DELETE, UPDATE ON waterway.sounding_results_contour_lines TO sys_admin;