Mercurial > gemma
comparison controllers/user.go @ 235:7d1f0ffdfa41
Implemented /users update controller.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 26 Jul 2018 15:42:57 +0200 |
parents | 63dd5216eee4 |
children | 3771788d3dae |
comparison
equal
deleted
inserted
replaced
231:694f959ba3e7 | 235:7d1f0ffdfa41 |
---|---|
8 "net/http" | 8 "net/http" |
9 "regexp" | 9 "regexp" |
10 "strings" | 10 "strings" |
11 | 11 |
12 "gemma.intevation.de/gemma/auth" | 12 "gemma.intevation.de/gemma/auth" |
13 "github.com/gorilla/mux" | |
13 "github.com/jackc/pgx" | 14 "github.com/jackc/pgx" |
14 ) | 15 ) |
15 | 16 |
16 type ( | 17 type ( |
17 Email string | 18 Email string |
37 | 38 |
38 const ( | 39 const ( |
39 createUserSQL = `SELECT sys_admin.create_user($1, $2, $3, $4, NULL, $5)` | 40 createUserSQL = `SELECT sys_admin.create_user($1, $2, $3, $4, NULL, $5)` |
40 createUserExtentSQL = `SELECT sys_admin.create_user($1, $2, $3, $4, | 41 createUserExtentSQL = `SELECT sys_admin.create_user($1, $2, $3, $4, |
41 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)` | 42 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)` |
43 | |
44 updateUserSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5, NULL, $6)` | |
45 updateUserExtentSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5, | |
46 ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10)` | |
42 ) | 47 ) |
43 | 48 |
44 var ( | 49 var ( |
45 // https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression | 50 // https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression |
46 emailRe = regexp.MustCompile( | 51 emailRe = regexp.MustCompile( |
113 } | 118 } |
114 } | 119 } |
115 return errNoValidRole | 120 return errNoValidRole |
116 } | 121 } |
117 | 122 |
123 func updateUser(rw http.ResponseWriter, req *http.Request) { | |
124 | |
125 user := mux.Vars(req)["user"] | |
126 if user == "" { | |
127 http.Error(rw, "error: user empty", http.StatusBadRequest) | |
128 return | |
129 } | |
130 | |
131 var newUser User | |
132 | |
133 defer req.Body.Close() | |
134 if err := json.NewDecoder(req.Body).Decode(&newUser); err != nil { | |
135 http.Error(rw, "error: "+err.Error(), http.StatusBadRequest) | |
136 return | |
137 } | |
138 | |
139 token, _ := auth.GetToken(req) | |
140 err := auth.ConnPool.Do(token, func(db *sql.DB) (err error) { | |
141 if newUser.Extent == nil { | |
142 _, err = db.Exec( | |
143 updateUserSQL, | |
144 user, | |
145 string(newUser.Role), | |
146 newUser.User, | |
147 newUser.Password, | |
148 string(newUser.Country), | |
149 string(newUser.Email), | |
150 ) | |
151 } else { | |
152 _, err = db.Exec( | |
153 updateUserExtentSQL, | |
154 user, | |
155 string(newUser.Role), | |
156 newUser.User, | |
157 newUser.Password, | |
158 string(newUser.Country), | |
159 newUser.Extent.X1, newUser.Extent.Y1, | |
160 newUser.Extent.X2, newUser.Extent.Y2, | |
161 string(newUser.Email), | |
162 ) | |
163 } | |
164 return | |
165 }) | |
166 | |
167 var res struct { | |
168 Result string `json:"result"` | |
169 Code string `json:"code,omitempty"` | |
170 Message string `json:"message,omitempty"` | |
171 } | |
172 | |
173 if err != nil { | |
174 if pgErr, ok := err.(pgx.PgError); ok { | |
175 res.Result = "failure" | |
176 res.Code = pgErr.Code | |
177 res.Message = pgErr.Message | |
178 } else { | |
179 log.Printf("err: %v\n", err) | |
180 http.Error(rw, | |
181 "error: "+err.Error(), | |
182 http.StatusInternalServerError) | |
183 return | |
184 } | |
185 } else { | |
186 res.Result = "success" | |
187 } | |
188 | |
189 rw.Header().Set("Content-Type", "application/json") | |
190 if err := json.NewEncoder(rw).Encode(&res); err != nil { | |
191 log.Printf("error: %v\n", err) | |
192 } | |
193 } | |
194 | |
118 func createUser(rw http.ResponseWriter, req *http.Request) { | 195 func createUser(rw http.ResponseWriter, req *http.Request) { |
119 | 196 |
120 var user User | 197 var user User |
121 | 198 |
122 defer req.Body.Close() | 199 defer req.Body.Close() |