annotate controllers/user.go @ 240:9012e4045da4

Implemented /user delete controller.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 26 Jul 2018 17:56:02 +0200
parents 3771788d3dae
children 3b688fe04c39
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
240
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
11 "gemma.intevation.de/gemma/auth"
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
12 "github.com/gorilla/mux"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 )
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
15 type (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
16 Email string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
17 Country string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
18 Role string
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
20 BoundingBox struct {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
21 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
22 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
23 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
24 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
25 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
26
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
27 User struct {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
28 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
29 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
30 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
31 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
32 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
33 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
34 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
35 )
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 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
38 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
39 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
40 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
41
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
42 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
43 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
44 ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10)`
240
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
45
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
46 deleteUserSQL = `SELECT sys_admin.delete_user($1)`
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 )
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48
189
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
49 var (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
50 // 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
51 emailRe = regexp.MustCompile(
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
52 `(?:[a-z0-9!#$%&'*+/=?^_` + "`" +
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!#$%&'*+/=?^_` + "`" +
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
54 `{|}~-]+)*|"(?:[\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
55 `|\\[\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
56 `@(?:(?:[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
57 `|\[(?:(?:(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
58 `(?:(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
59 `:(?:[\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
60 `|\\[\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
61 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
62 )
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
63
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
64 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
65 var s string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
66 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
67 return err
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 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
70 return errNoEmailAddress
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 *e = Email(s)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
73 return nil
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
74 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
75
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
76 var (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
77 validCountries = []string{
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
78 "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
79 "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
80 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
81 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
82 )
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
83
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
84 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
85 var s string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
86 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
87 return err
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
88 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
89 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
90 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
91 if v == s {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
92 *c = Country(v)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
93 return nil
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 return errNoValidCountry
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
97 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
98
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
99 var (
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
100 validRoles = []string{
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
101 "waterway_user",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
102 "waterway_admin",
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
103 "sys_admin",
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 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
106 )
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
107
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
108 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
109 var s string
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
110 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
111 return err
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
112 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
113 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
114 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
115 if v == s {
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
116 *r = Role(v)
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
117 return nil
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 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
120 return errNoValidRole
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
121 }
96bb671cdd98 Some input checking for email, roles and valid countries.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 188
diff changeset
122
240
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
123 func deleteUser(
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
124 rw http.ResponseWriter, req *http.Request,
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
125 input interface{}, db *sql.DB,
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
126 ) (jr JSONResult, err error) {
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
127
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
128 user := mux.Vars(req)["user"]
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
129 if user == "" {
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
130 err = JSONError{http.StatusBadRequest, "error: user empty"}
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
131 return
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
132 }
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
133
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
134 session, _ := auth.GetSession(req)
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
135 if session.User == user {
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
136 err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"}
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
137 return
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
138 }
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
139
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
140 if _, err = db.Exec(deleteUserSQL, user); err != nil {
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
141 return
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
142 }
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
143
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
144 // Running in a go routine should not be necessary.
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
145 go func() { auth.ConnPool.Logout(user) }()
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
146
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
147 jr = JSONResult{Code: http.StatusNoContent}
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
148 return
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
149 }
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
150
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
151 func updateUser(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
152 rw http.ResponseWriter, req *http.Request,
240
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
153 input interface{}, db *sql.DB,
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
154 ) (jr JSONResult, err error) {
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
155
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
156 user := mux.Vars(req)["user"]
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
157 if user == "" {
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
158 err = JSONError{http.StatusBadRequest, "error: user empty"}
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
159 return
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
160 }
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
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 newUser := input.(*User)
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
163
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
164 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
165 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
166 updateUserSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
167 user,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
168 string(newUser.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
169 newUser.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
170 newUser.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
171 string(newUser.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
172 string(newUser.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
173 )
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
174 } else {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
175 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
176 updateUserExtentSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
177 user,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
178 string(newUser.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
179 newUser.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
180 newUser.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
181 string(newUser.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
182 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
183 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
184 string(newUser.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
185 )
235
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
186 }
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
187
7d1f0ffdfa41 Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 226
diff changeset
188 if err != nil {
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
189 return
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
190 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
191
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
192 jr = JSONResult{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
193 Code: http.StatusCreated,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
194 Result: struct {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
195 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
196 }{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
197 Result: "success",
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
198 },
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
199 }
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
200 return
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
201 }
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
202
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
203 func createUser(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
204 rw http.ResponseWriter, req *http.Request,
240
9012e4045da4 Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 237
diff changeset
205 input interface{}, db *sql.DB,
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
206 ) (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
207
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
208 user := input.(*User)
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
209
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
210 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
211 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
212 createUserSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
213 string(user.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
214 user.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
215 user.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
216 string(user.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
217 string(user.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
218 )
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
219 } else {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
220 _, err = db.Exec(
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
221 createUserExtentSQL,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
222 string(user.Role),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
223 user.User,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
224 user.Password,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
225 string(user.Country),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
226 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
227 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
228 string(user.Email),
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
229 )
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
230 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
231
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
232 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
233 return
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
234 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
235
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
236 jr = JSONResult{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
237 Code: http.StatusCreated,
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
238 Result: struct {
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
239 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
240 }{
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
241 Result: "success",
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
242 },
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
243 }
237
3771788d3dae Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 235
diff changeset
244 return
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
245 }