annotate controllers/user.go @ 237:3771788d3dae

Reduce boilerplate code when writing JSON parsing/generating endpoints.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 26 Jul 2018 17:07:03 +0200
parents 7d1f0ffdfa41
children 9012e4045da4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
226
63dd5216eee4 Refactored gemma server to be more REST-like.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 218
diff changeset
1 package controllers
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import (
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 "database/sql"
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 "encoding/json"
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
6 "errors"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 "net/http"
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
8 "regexp"
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
9 "strings"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
11 "github.com/gorilla/mux"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 )
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
14 type (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
15 Email string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
16 Country string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
17 Role string
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
19 BoundingBox struct {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
20 X1 float64 `json:"x1"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
21 Y1 float64 `json:"y1"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
22 X2 float64 `json:"x2"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
23 Y2 float64 `json:"y2"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
24 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
25
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
26 User struct {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
27 User string `json:"user"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
28 Role Role `json:"role"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
29 Password string `json:"password"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
30 Email Email `json:"email"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
31 Country Country `json:"country"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
32 Extent *BoundingBox `json:"extent"`
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
33 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
34 )
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 const (
216
494a257e7715 Called schema prefixed sys_admin.create_user instead of create_user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 206
diff changeset
37 createUserSQL = `SELECT sys_admin.create_user($1, $2, $3, $4, NULL, $5)`
494a257e7715 Called schema prefixed sys_admin.create_user instead of create_user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 206
diff changeset
38 createUserExtentSQL = `SELECT sys_admin.create_user($1, $2, $3, $4,
188
ee3093966a6d ST_SetSRID should be not need as the map extent column does not have any SRID code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 187
diff changeset
39 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)`
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
40
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
41 updateUserSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5, NULL, $6)`
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
42 updateUserExtentSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5,
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
43 ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10)`
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 )
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
46 var (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
47 // https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
48 emailRe = regexp.MustCompile(
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
49 `(?:[a-z0-9!#$%&'*+/=?^_` + "`" +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
50 `{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_` + "`" +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
51 `{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]` +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
52 `|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")` +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
53 `@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?` +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
54 `|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}` +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
55 `(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]` +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
56 `:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]` +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
57 `|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])`)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
58 errNoEmailAddress = errors.New("Not a valid email address")
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
59 )
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
60
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
61 func (e *Email) UnmarshalJSON(data []byte) error {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
62 var s string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
63 if err := json.Unmarshal(data, &s); err != nil {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
64 return err
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
65 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
66 if !emailRe.MatchString(s) {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
67 return errNoEmailAddress
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
68 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
69 *e = Email(s)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
70 return nil
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
71 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
72
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
73 var (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
74 validCountries = []string{
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
75 "AT", "BG", "DE", "HU", "HR",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
76 "MD", "RO", "RS", "SK", "UA",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
77 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
78 errNoValidCountry = errors.New("Not a valid country")
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
79 )
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
80
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
81 func (c *Country) UnmarshalJSON(data []byte) error {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
82 var s string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
83 if err := json.Unmarshal(data, &s); err != nil {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
84 return err
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
85 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
86 s = strings.ToUpper(s)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
87 for _, v := range validCountries {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
88 if v == s {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
89 *c = Country(v)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
90 return nil
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
91 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
92 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
93 return errNoValidCountry
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
94 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
95
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
96 var (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
97 validRoles = []string{
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
98 "waterway_user",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
99 "waterway_admin",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
100 "sys_admin",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
101 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
102 errNoValidRole = errors.New("Not a valid role")
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
103 )
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
104
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
105 func (r *Role) UnmarshalJSON(data []byte) error {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
106 var s string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
107 if err := json.Unmarshal(data, &s); err != nil {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
108 return err
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
109 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
110 s = strings.ToLower(s)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
111 for _, v := range validRoles {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
112 if v == s {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
113 *r = Role(v)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
114 return nil
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
115 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
116 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
117 return errNoValidRole
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
118 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
119
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
120 func updateUser(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
121 rw http.ResponseWriter, req *http.Request,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
122 input interface{},
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
123 db *sql.DB,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
124 ) (jr JSONResult, err error) {
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
125
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
126 user := mux.Vars(req)["user"]
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
127 if user == "" {
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
128 err = JSONError{http.StatusBadRequest, "error: user empty"}
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
129 return
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
130 }
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
131
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
132 newUser := input.(*User)
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
133
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
134 if newUser.Extent == nil {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
135 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
136 updateUserSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
137 user,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
138 string(newUser.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
139 newUser.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
140 newUser.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
141 string(newUser.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
142 string(newUser.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
143 )
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
144 } else {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
145 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
146 updateUserExtentSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
147 user,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
148 string(newUser.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
149 newUser.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
150 newUser.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
151 string(newUser.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
152 newUser.Extent.X1, newUser.Extent.Y1,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
153 newUser.Extent.X2, newUser.Extent.Y2,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
154 string(newUser.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
155 )
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
156 }
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
157
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
158 if err != nil {
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
159 return
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
160 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
161
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
162 jr = JSONResult{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
163 Code: http.StatusCreated,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
164 Result: struct {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
165 Result string `json:"result"`
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
166 }{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
167 Result: "success",
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
168 },
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
169 }
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
170 return
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
171 }
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
172
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
173 func createUser(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
174 rw http.ResponseWriter, req *http.Request,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
175 input interface{},
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
176 db *sql.DB,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
177 ) (jr JSONResult, err error) {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
178
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
179 user := input.(*User)
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
180
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
181 if user.Extent == nil {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
182 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
183 createUserSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
184 string(user.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
185 user.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
186 user.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
187 string(user.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
188 string(user.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
189 )
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
190 } else {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
191 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
192 createUserExtentSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
193 string(user.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
194 user.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
195 user.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
196 string(user.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
197 user.Extent.X1, user.Extent.Y1,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
198 user.Extent.X2, user.Extent.Y2,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
199 string(user.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
200 )
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
201 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
202
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
203 if err != nil {
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
204 return
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
205 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
206
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
207 jr = JSONResult{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
208 Code: http.StatusCreated,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
209 Result: struct {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
210 Result string `json:"result"`
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
211 }{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
212 Result: "success",
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
213 },
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
214 }
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
215 return
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
216 }