Mercurial > gemma
annotate pkg/controllers/user.go @ 5591:0011f50cf216 surveysperbottleneckid
Removed no longer used alternative api for surveys/ endpoint.
As bottlenecks in the summary for SR imports are now identified by
their id and no longer by the (not guarantied to be unique!) name,
there is no longer the need to request survey data by the name+date
tuple (which isn't reliable anyway). So the workaround was now
reversed.
author | Sascha Wilde <wilde@sha-bang.de> |
---|---|
date | Wed, 06 Apr 2022 13:30:29 +0200 |
parents | 79155213c4da |
children | 6270951dda28 |
rev | line source |
---|---|
1017
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
2 // without warranty, see README.md and license for details. |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
3 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
6 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
7 // Copyright (C) 2018 by via donau |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
9 // Software engineering by Intevation GmbH |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
10 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
11 // Author(s): |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
13 // * Tom Gottfried <tom.gottfried@intevation.de> |
1317
5443f5c9154c
Added missing authors names in Go files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1017
diff
changeset
|
14 // * Sascha Wilde <sascha.wilde@intevation.de> |
1017
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
827
diff
changeset
|
15 |
226
63dd5216eee4
Refactored gemma server to be more REST-like.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
218
diff
changeset
|
16 package controllers |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 |
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 import ( |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
19 "bytes" |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "database/sql" |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
21 "fmt" |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 "net/http" |
5345
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
23 "strconv" |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
24 "strings" |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
25 "text/template" |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
26 "time" |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 |
241
3b688fe04c39
No omitempty if JSON serialising PostgreSQL errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
240
diff
changeset
|
28 "github.com/gorilla/mux" |
3b688fe04c39
No omitempty if JSON serialising PostgreSQL errors.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
240
diff
changeset
|
29 |
414
c1047fd04a3a
Moved project specific Go packages to new pkg folder.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
343
diff
changeset
|
30 "gemma.intevation.de/gemma/pkg/auth" |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5372
diff
changeset
|
31 "gemma.intevation.de/gemma/pkg/log" |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
32 "gemma.intevation.de/gemma/pkg/misc" |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
33 "gemma.intevation.de/gemma/pkg/models" |
4062
6c760abcff0e
Move handling of PostgreSQL errors to own package
Tom Gottfried <tom@intevation.de>
parents:
4059
diff
changeset
|
34 "gemma.intevation.de/gemma/pkg/pgxutils" |
1544
5f80ec319a4f
If a user is removed or renamed kill her/his schedule. Needs more case on renaming.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1317
diff
changeset
|
35 "gemma.intevation.de/gemma/pkg/scheduler" |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
36 |
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
37 mw "gemma.intevation.de/gemma/pkg/middleware" |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 ) |
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 |
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 const ( |
343
5b03f420957d
Use INSTEAD OF trigger for user creation
Tom Gottfried <tom@intevation.de>
parents:
342
diff
changeset
|
41 createUserSQL = `INSERT INTO users.list_users |
5499
a30b6c6541e0
Moved logic to delete deactivate users into plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5498
diff
changeset
|
42 VALUES ($1, $2, $3, $4, NULL, $5, $6, true)` |
343
5b03f420957d
Use INSTEAD OF trigger for user creation
Tom Gottfried <tom@intevation.de>
parents:
342
diff
changeset
|
43 createUserExtentSQL = `INSERT INTO users.list_users |
5b03f420957d
Use INSTEAD OF trigger for user creation
Tom Gottfried <tom@intevation.de>
parents:
342
diff
changeset
|
44 VALUES ($1, $2, $3, $4, |
5499
a30b6c6541e0
Moved logic to delete deactivate users into plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5498
diff
changeset
|
45 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9, $10, true)` |
235
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
46 |
327
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
47 updateUserUnprivSQL = `UPDATE users.list_users |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
48 SET (pw, map_extent, email_address) |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
49 = ($2, ST_MakeBox2D(ST_Point($3, $4), ST_Point($5, $6)), $7) |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
50 WHERE username = $1` |
307
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
51 updateUserSQL = `UPDATE users.list_users |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
52 SET (rolname, username, pw, country, map_extent, email_address, report_reciever) |
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
53 = ($2, $3, $4, $5, NULL, $6, $7) |
307
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
54 WHERE username = $1` |
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
55 updateUserExtentSQL = `UPDATE users.list_users |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
56 SET (rolname, username, pw, country, map_extent, email_address, report_reciever) |
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
57 = ($2, $3, $4, $5, ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10, $11) |
307
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
58 WHERE username = $1` |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
59 |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
60 deleteUserSQL = ` |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
61 WITH del AS ( |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
62 DELETE FROM users.list_users |
5505
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
63 WHERE username = $1 AND ( |
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
64 rolname NOT IN ('waterway_admin', 'sys_admin') |
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
65 OR NOT EXISTS (SELECT 1 FROM import.imports WHERE username = $1)) |
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
66 RETURNING * |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
67 ), |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
68 up AS ( |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
69 UPDATE users.list_users |
5505
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
70 SET (email_address, report_reciever, active) = ('nomail@example.com', false, false) |
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
71 WHERE username = $1 AND NOT EXISTS (SELECT * FROM del) |
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
72 RETURNING * |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
73 ) |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
74 SELECT |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
75 EXISTS (SELECT * FROM del) AS deleted, |
5505
2604beecbd1a
Fixed whitespace in SQL statement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5504
diff
changeset
|
76 EXISTS (SELECT * FROM up) AS updated` |
5498
59cbd1b48c3a
Implemented delete a user if its a none admin user or a admin w/o imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5490
diff
changeset
|
77 |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
78 listUsersSQL = `SELECT |
253
322c3d0e05ef
The column in sys_admin.list_users is called rolname not rolename.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
250
diff
changeset
|
79 rolname, |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
80 username, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
81 country, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
82 email_address, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
83 ST_XMin(map_extent), ST_YMin(map_extent), |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
84 ST_XMax(map_extent), ST_YMax(map_extent), |
5498
59cbd1b48c3a
Implemented delete a user if its a none admin user or a admin w/o imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5490
diff
changeset
|
85 report_reciever, |
59cbd1b48c3a
Implemented delete a user if its a none admin user or a admin w/o imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5490
diff
changeset
|
86 active |
279
d89a19c297e0
list_users is now in users schema.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
261
diff
changeset
|
87 FROM users.list_users` |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
88 |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
89 listUserSQL = `SELECT |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
90 rolname, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
91 country, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
92 email_address, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
93 ST_XMin(map_extent), ST_YMin(map_extent), |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
94 ST_XMax(map_extent), ST_YMax(map_extent), |
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
95 report_reciever |
279
d89a19c297e0
list_users is now in users schema.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
261
diff
changeset
|
96 FROM users.list_users |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
97 WHERE username = $1` |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
98 ) |
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
99 |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
100 var ( |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
101 testSysadminNotifyMailTmpl = template.Must( |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
102 template.New("sysadmin").Parse(`Dear {{ .User }}, |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
103 |
5372
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
104 this is a test email from the Gemma System Errors notification service. You |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
105 recieved this mail, because a System Administrator triggered the test mail |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
106 sending function at {{ .Timestamp }}. |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
107 |
5372
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
108 When a critical system error is detected an automated mail will be sent to |
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
109 {{ .Email }} with details on the error condition.`)) |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
110 |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
111 testWWAdminNotifyMailTmpl = template.Must( |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
112 template.New("waterwayadmin").Parse(`Dear {{ .User }}, |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
113 |
5372
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
114 this is a test email from the Gemma System Mail notification service. You |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
115 recieved this mail, because a System Administrator triggered the test mail |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
116 sending function at {{ .Timestamp }}. |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
117 |
5372
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
118 When the status of a data import managed by you changes an automated mail will |
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
119 be sent to {{ .Email }} with details on the new import status |
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
120 (including import errors) and details on the corresponding import.`)) |
5370
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
121 |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
122 testWWUserNotifyMailTmpl = template.Must( |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
123 template.New("waterwayuser").Parse(`Dear {{ .User }}, |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
124 |
5372
5d6aa584b4fb
Streamlined the text templates for test emails.
Thomas Junk <thomas.junk@intevation.de>
parents:
5370
diff
changeset
|
125 this is a test email from the Gemma System Mail notification service. You |
5370
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
126 recieved this mail, because a System Administrator triggered the test mail |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
127 sending function at {{ .Timestamp }}.`)) |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
128 ) |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
129 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
130 func deleteUser(req *http.Request) (jr mw.JSONResult, err error) { |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
131 |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
132 user := mux.Vars(req)["user"] |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
133 if !models.UserName(user).IsValid() { |
4506
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
134 err = mw.JSONError{ |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
135 Code: http.StatusBadRequest, |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
136 Message: "error: user invalid", |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
137 } |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
138 return |
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 |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
141 session, _ := auth.GetSession(req) |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
142 if session.User == user { |
4506
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
143 err = mw.JSONError{ |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
144 Code: http.StatusBadRequest, |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
145 Message: "error: cannot delete yourself", |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
146 } |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
147 return |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
148 } |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
149 |
1660
f32e8a973b48
Scheduler: Moved code to figure out the scheduled jobs per user from the database to a more suited place.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1654
diff
changeset
|
150 ctx := req.Context() |
f32e8a973b48
Scheduler: Moved code to figure out the scheduled jobs per user from the database to a more suited place.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1654
diff
changeset
|
151 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
152 db := mw.JSONConn(req) |
4242
1458c9b0fdaa
Made the sql.Conn in function accessible via the context of the request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4148
diff
changeset
|
153 |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
154 // Remove scheduled tasks. |
1660
f32e8a973b48
Scheduler: Moved code to figure out the scheduled jobs per user from the database to a more suited place.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1654
diff
changeset
|
155 ids, err2 := scheduler.ScheduledUserIDs(ctx, db, user) |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
156 if err2 == nil { |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
157 if len(ids) > 0 { |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
158 go func() { scheduler.UnbindByIDs(ids) }() |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
159 } |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
160 } else { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5372
diff
changeset
|
161 log.Errorf("%v\n", err2) |
1654
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
162 } |
85386ad17d34
Scheduled imports: Don't track the user in the running scheduler.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1544
diff
changeset
|
163 |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
164 var deleted, updated bool |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
165 if err = db.QueryRowContext(ctx, deleteUserSQL, user).Scan(&deleted, &updated); err != nil { |
342
c6bd6ed18942
Use INSTEAD OF trigger for user deletion
Tom Gottfried <tom@intevation.de>
parents:
328
diff
changeset
|
166 return |
c6bd6ed18942
Use INSTEAD OF trigger for user deletion
Tom Gottfried <tom@intevation.de>
parents:
328
diff
changeset
|
167 } |
c6bd6ed18942
Use INSTEAD OF trigger for user deletion
Tom Gottfried <tom@intevation.de>
parents:
328
diff
changeset
|
168 |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
169 var action string |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
170 |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
171 switch { |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
172 case !deleted && !updated: |
5499
a30b6c6541e0
Moved logic to delete deactivate users into plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5498
diff
changeset
|
173 err = mw.JSONError{ |
a30b6c6541e0
Moved logic to delete deactivate users into plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5498
diff
changeset
|
174 Code: http.StatusNotFound, |
a30b6c6541e0
Moved logic to delete deactivate users into plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5498
diff
changeset
|
175 Message: fmt.Sprintf("Cannot find user %s.", user), |
342
c6bd6ed18942
Use INSTEAD OF trigger for user deletion
Tom Gottfried <tom@intevation.de>
parents:
328
diff
changeset
|
176 } |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
177 return |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
178 case deleted: |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
179 action = "deleted" |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
180 case updated: |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
181 action = "deactivated" |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
182 default: |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
183 log.Errorf("Should not happen: user '%s' updated and deleted.\n", user) |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
184 action = "deleted" |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
185 } |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
186 |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
187 // Running in a go routine should not be necessary. |
493
8a0737aa6ab6
The connection pool is now only a session store.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
486
diff
changeset
|
188 go func() { auth.Sessions.Logout(user) }() |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
189 |
5553
0717168c1978
Distinguish in logging if user was deleted or deactivated.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5552
diff
changeset
|
190 log.Infof("User '%s' %s.\n", user, action) |
5552
5680c44ff6c0
Log if user was created/modified/deactivated/deleted.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5505
diff
changeset
|
191 |
5504
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
192 jr = mw.JSONResult{ |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
193 Result: struct { |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
194 Action string `json:"action"` |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
195 }{ |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
196 Action: action, |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
197 }, |
5e3e3d9e2c23
Removed delete_user plpgsql function.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5500
diff
changeset
|
198 } |
240
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
199 return |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
200 } |
9012e4045da4
Implemented /user delete controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
237
diff
changeset
|
201 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
202 func updateUser(req *http.Request) (jr mw.JSONResult, err error) { |
235
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
203 |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
204 user := models.UserName(mux.Vars(req)["user"]) |
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
205 if !user.IsValid() { |
4506
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
206 err = mw.JSONError{ |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
207 Code: http.StatusBadRequest, |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
208 Message: "error: user invalid", |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
209 } |
235
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
210 return |
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
211 } |
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
212 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
213 newUser := mw.JSONInput(req).(*models.User) |
307
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
214 var res sql.Result |
235
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
215 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
216 db := mw.JSONConn(req) |
4242
1458c9b0fdaa
Made the sql.Conn in function accessible via the context of the request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4148
diff
changeset
|
217 |
326
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
218 if s, _ := auth.GetSession(req); s.Roles.Has("sys_admin") { |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
219 if newUser.Extent == nil { |
486
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
220 res, err = db.ExecContext( |
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
221 req.Context(), |
326
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
222 updateUserSQL, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
223 user, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
224 newUser.Role, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
225 newUser.User, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
226 newUser.Password, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
227 newUser.Country, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
228 newUser.Email, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
229 newUser.Reports, |
326
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
230 ) |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
231 } else { |
486
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
232 res, err = db.ExecContext( |
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
233 req.Context(), |
326
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
234 updateUserExtentSQL, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
235 user, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
236 newUser.Role, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
237 newUser.User, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
238 newUser.Password, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
239 newUser.Country, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
240 newUser.Extent.X1, newUser.Extent.Y1, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
241 newUser.Extent.X2, newUser.Extent.Y2, |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
242 newUser.Email, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
243 newUser.Reports, |
326
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
244 ) |
a7b2db8b3d18
Added type for roles.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
314
diff
changeset
|
245 } |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
246 } else { |
328
003243ec5ce5
Don't crash if we doing update as unprivileged user without a bounding box.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
247 if newUser.Extent == nil { |
4506
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
248 err = mw.JSONError{ |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
249 Code: http.StatusBadRequest, |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
250 Message: "extent is mandatory", |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
251 } |
328
003243ec5ce5
Don't crash if we doing update as unprivileged user without a bounding box.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
252 return |
003243ec5ce5
Don't crash if we doing update as unprivileged user without a bounding box.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
327
diff
changeset
|
253 } |
486
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
254 res, err = db.ExecContext( |
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
255 req.Context(), |
327
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
256 updateUserUnprivSQL, |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
257 user, |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
258 newUser.Password, |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
259 newUser.Extent.X1, newUser.Extent.Y1, |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
260 newUser.Extent.X2, newUser.Extent.Y2, |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
261 newUser.Email, |
363983d5c567
Allow Waterway User to update a limited set of profile attributes
Tom Gottfried <tom@intevation.de>
parents:
326
diff
changeset
|
262 ) |
235
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
263 } |
7d1f0ffdfa41
Implemented /users update controller.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
226
diff
changeset
|
264 |
311
74559e12a59f
sql.Result.RowsAffected is a driver specific feature. Check
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
307
diff
changeset
|
265 if err != nil { |
74559e12a59f
sql.Result.RowsAffected is a driver specific feature. Check
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
307
diff
changeset
|
266 return |
74559e12a59f
sql.Result.RowsAffected is a driver specific feature. Check
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
307
diff
changeset
|
267 } |
74559e12a59f
sql.Result.RowsAffected is a driver specific feature. Check
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
307
diff
changeset
|
268 |
74559e12a59f
sql.Result.RowsAffected is a driver specific feature. Check
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
307
diff
changeset
|
269 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
270 err = mw.JSONError{ |
307
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
271 Code: http.StatusNotFound, |
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
272 Message: fmt.Sprintf("Cannot find user %s.", user), |
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
273 } |
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
274 return |
750a9c9cd965
Use SQL UPDATE to update users
Tom Gottfried <tom@intevation.de>
parents:
288
diff
changeset
|
275 } |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
276 |
261
ab9859981ee3
If a user got renamed kick her/him from the connection pool.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
257
diff
changeset
|
277 if user != newUser.User { |
ab9859981ee3
If a user got renamed kick her/him from the connection pool.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
257
diff
changeset
|
278 // Running in a go routine should not be necessary. |
493
8a0737aa6ab6
The connection pool is now only a session store.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
486
diff
changeset
|
279 go func() { auth.Sessions.Logout(string(user)) }() |
261
ab9859981ee3
If a user got renamed kick her/him from the connection pool.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
257
diff
changeset
|
280 } |
ab9859981ee3
If a user got renamed kick her/him from the connection pool.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
257
diff
changeset
|
281 |
5552
5680c44ff6c0
Log if user was created/modified/deactivated/deleted.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5505
diff
changeset
|
282 log.Infof("User '%s' updated.\n", user) |
5680c44ff6c0
Log if user was created/modified/deactivated/deleted.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5505
diff
changeset
|
283 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
284 jr = mw.JSONResult{ |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
285 Code: http.StatusCreated, |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
286 Result: struct { |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
287 Result string `json:"result"` |
314
adceb47920fb
Cosmetics. Little less structure bloat.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
311
diff
changeset
|
288 }{"success"}, |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
289 } |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
290 return |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
291 } |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
292 |
5345
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
293 func patchUser(req *http.Request) (jr mw.JSONResult, err error) { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
294 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
295 user := models.UserName(mux.Vars(req)["user"]) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
296 if !user.IsValid() { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
297 err = mw.JSONError{ |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
298 Code: http.StatusBadRequest, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
299 Message: "error: user invalid", |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
300 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
301 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
302 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
303 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
304 s, ok := auth.GetSession(req) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
305 if !ok { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
306 err = mw.JSONError{ |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
307 Code: http.StatusUnauthorized, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
308 Message: "error: not logged in", |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
309 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
310 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
311 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
312 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
313 priv := s.Roles.Has("sys_admin") |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
314 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
315 if !priv && s.User != string(user) { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
316 err = mw.JSONError{ |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
317 Code: http.StatusUnauthorized, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
318 Message: "error: not allowed to modify someone else", |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
319 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
320 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
321 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
322 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
323 var ( |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
324 columns []string |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
325 positions []string |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
326 args []interface{} |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
327 ) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
328 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
329 update := func(column string, value interface{}) { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
330 columns = append(columns, column) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
331 positions = append(positions, "$"+strconv.Itoa(len(positions)+1)) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
332 args = append(args, value) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
333 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
334 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
335 updateBox := func(column string, extent *models.BoundingBox) { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
336 columns = append(columns, column) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
337 pos := len(positions) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
338 position := fmt.Sprintf("ST_MakeBox2D(ST_Point($%d, $%d), ST_Point($%d, $%d))", |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
339 pos+1, pos+2, pos+3, pos+4) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
340 positions = append(positions, position) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
341 args = append(args, extent.X1, extent.Y1, extent.X2, extent.Y2) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
342 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
343 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
344 patch := mw.JSONInput(req).(*models.UserPatch) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
345 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
346 if patch.User != nil && priv { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
347 update("user", *patch.User) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
348 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
349 if patch.Role != nil && priv { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
350 update("rolname", *patch.Role) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
351 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
352 if patch.Password != nil { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
353 update("pw", *patch.Password) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
354 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
355 if patch.Email != nil { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
356 update("email_address", *patch.Email) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
357 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
358 if patch.Country != nil && priv { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
359 update("country", *patch.Country) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
360 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
361 if patch.Reports != nil && priv { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
362 update("report_reciever", *patch.Reports) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
363 } |
5500
f0c668bc4082
Moved active login/nologin to triggers. Allow /user PATCH endpoint to modify the field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5499
diff
changeset
|
364 if patch.Active != nil && priv { |
f0c668bc4082
Moved active login/nologin to triggers. Allow /user PATCH endpoint to modify the field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5499
diff
changeset
|
365 update("active", *patch.Active) |
f0c668bc4082
Moved active login/nologin to triggers. Allow /user PATCH endpoint to modify the field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5499
diff
changeset
|
366 } |
5345
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
367 if patch.Extent != nil { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
368 updateBox("map_extent", patch.Extent) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
369 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
370 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
371 var colsS, posS string |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
372 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
373 switch len(columns) { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
374 case 0: // Nothing to do |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
375 jr = mw.JSONResult{ |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
376 Code: http.StatusCreated, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
377 Result: struct { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
378 Result string `json:"result"` |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
379 }{"success"}, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
380 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
381 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
382 case 1: // No brackets if there is only one argument. |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
383 colsS = columns[0] |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
384 posS = positions[0] |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
385 default: |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
386 colsS = "(" + strings.Join(columns, ",") + ")" |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
387 posS = "(" + strings.Join(positions, ",") + ")" |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
388 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
389 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
390 stmt := fmt.Sprintf( |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
391 `UPDATE users.list_users SET %s = %s WHERE username = $%d`, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
392 colsS, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
393 posS, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
394 len(positions)+1) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
395 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
396 args = append(args, user) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
397 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
398 db := mw.JSONConn(req) |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
399 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
400 var res sql.Result |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
401 if res, err = db.ExecContext(req.Context(), stmt, args...); err != nil { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
402 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
403 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
404 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
405 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
406 err = mw.JSONError{ |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
407 Code: http.StatusNotFound, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
408 Message: fmt.Sprintf("Cannot find user %s.", user), |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
409 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
410 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
411 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
412 |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
413 if patch.User != nil && *patch.User != user { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
414 // Running in a go routine should not be necessary. |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
415 go func() { auth.Sessions.Logout(string(user)) }() |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
416 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
417 |
5554
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
418 // Log if the user should be reactivated, even if he is already active. |
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
419 var reactivated string |
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
420 if patch.Active != nil && *patch.Active && priv { |
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
421 reactivated = " (reactivation requested)" |
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
422 } |
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
423 |
79155213c4da
Log if the modification of the user includes an reactivation request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5553
diff
changeset
|
424 log.Infof("User '%s' modified%s.\n", user, reactivated) |
5552
5680c44ff6c0
Log if user was created/modified/deactivated/deleted.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5505
diff
changeset
|
425 |
5345
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
426 jr = mw.JSONResult{ |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
427 Code: http.StatusCreated, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
428 Result: struct { |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
429 Result string `json:"result"` |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
430 }{"success"}, |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
431 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
432 return |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
433 } |
95dafb72a288
Added a PATCH endpoint for /api/users/{user}
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5330
diff
changeset
|
434 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
435 func createUser(req *http.Request) (jr mw.JSONResult, err error) { |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
436 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
437 user := mw.JSONInput(req).(*models.User) |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
438 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
439 db := mw.JSONConn(req) |
4242
1458c9b0fdaa
Made the sql.Conn in function accessible via the context of the request.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4148
diff
changeset
|
440 |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
441 if user.Extent == nil { |
486
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
442 _, err = db.ExecContext( |
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
443 req.Context(), |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
444 createUserSQL, |
243
d39f897fae16
Made models for email, user and country driver.Valuer to get rid of some conversions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
241
diff
changeset
|
445 user.Role, |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
446 user.User, |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
447 user.Password, |
243
d39f897fae16
Made models for email, user and country driver.Valuer to get rid of some conversions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
241
diff
changeset
|
448 user.Country, |
d39f897fae16
Made models for email, user and country driver.Valuer to get rid of some conversions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
241
diff
changeset
|
449 user.Email, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
450 user.Reports, |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
451 ) |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
452 } else { |
486
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
453 _, err = db.ExecContext( |
b2dc9c2f69e0
First stab to use the metamorphic db to do all database stuff.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
442
diff
changeset
|
454 req.Context(), |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
455 createUserExtentSQL, |
243
d39f897fae16
Made models for email, user and country driver.Valuer to get rid of some conversions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
241
diff
changeset
|
456 user.Role, |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
457 user.User, |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
458 user.Password, |
243
d39f897fae16
Made models for email, user and country driver.Valuer to get rid of some conversions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
241
diff
changeset
|
459 user.Country, |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
460 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
|
461 user.Extent.X2, user.Extent.Y2, |
243
d39f897fae16
Made models for email, user and country driver.Valuer to get rid of some conversions.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
241
diff
changeset
|
462 user.Email, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
463 user.Reports, |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
464 ) |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
465 } |
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
466 |
187
51addc0533fe
More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
186
diff
changeset
|
467 if err != nil { |
4148
1b1218bbd414
Made 'go vet' happy with controllers again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4071
diff
changeset
|
468 m, c := pgxutils.ReadableError{Err: err}.MessageAndCode() |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
469 err = mw.JSONError{Code: c, Message: m} |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
470 return |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
471 } |
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
472 |
5552
5680c44ff6c0
Log if user was created/modified/deactivated/deleted.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5505
diff
changeset
|
473 log.Infof("User '%s' created.\n", user.User) |
5680c44ff6c0
Log if user was created/modified/deactivated/deleted.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5505
diff
changeset
|
474 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
475 jr = mw.JSONResult{ |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
476 Code: http.StatusCreated, |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
477 Result: struct { |
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
478 Result string `json:"result"` |
314
adceb47920fb
Cosmetics. Little less structure bloat.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
311
diff
changeset
|
479 }{"success"}, |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
480 } |
237
3771788d3dae
Reduce boilerplate code when writing JSON parsing/generating endpoints.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
235
diff
changeset
|
481 return |
186
fe3a88f00b0a
Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
482 } |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
483 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
484 func listUsers(req *http.Request) (jr mw.JSONResult, err error) { |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
485 |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
486 var rows *sql.Rows |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
487 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
488 rows, err = mw.JSONConn(req).QueryContext(req.Context(), listUsersSQL) |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
489 if err != nil { |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
490 return |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
491 } |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
492 defer rows.Close() |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
493 |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
494 var users []*models.User |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
495 |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
496 for rows.Next() { |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
497 user := &models.User{Extent: &models.BoundingBox{}} |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
498 if err = rows.Scan( |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
499 &user.Role, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
500 &user.User, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
501 &user.Country, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
502 &user.Email, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
503 &user.Extent.X1, &user.Extent.Y1, |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
504 &user.Extent.X2, &user.Extent.Y2, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
505 &user.Reports, |
5498
59cbd1b48c3a
Implemented delete a user if its a none admin user or a admin w/o imports.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5490
diff
changeset
|
506 &user.Active, |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
507 ); err != nil { |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
508 return |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
509 } |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
510 users = append(users, user) |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
511 } |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
512 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
513 jr = mw.JSONResult{ |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
514 Result: struct { |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
515 Users []*models.User `json:"users"` |
314
adceb47920fb
Cosmetics. Little less structure bloat.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
311
diff
changeset
|
516 }{users}, |
250
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
517 } |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
518 return |
deabc2712634
Implemented /users GET as list of users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
243
diff
changeset
|
519 } |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
520 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
521 func listUser(req *http.Request) (jr mw.JSONResult, err error) { |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
522 |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
523 user := models.UserName(mux.Vars(req)["user"]) |
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
524 if !user.IsValid() { |
4506
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
525 err = mw.JSONError{ |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
526 Code: http.StatusBadRequest, |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
527 Message: "error: user invalid", |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
528 } |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
529 return |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
530 } |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
531 |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
532 result := &models.User{ |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
533 User: user, |
442
fc37e7072022
Moved some models used in controllers to to model package because they may be needed elsewhere (e.g. GeoServer config).
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
425
diff
changeset
|
534 Extent: &models.BoundingBox{}, |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
535 } |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
536 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
537 err = mw.JSONConn(req).QueryRowContext(req.Context(), listUserSQL, user).Scan( |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
538 &result.Role, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
539 &result.Country, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
540 &result.Email, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
541 &result.Extent.X1, &result.Extent.Y1, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
542 &result.Extent.X2, &result.Extent.Y2, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
543 &result.Reports, |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
544 ) |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
545 |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
546 switch { |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
547 case err == sql.ErrNoRows: |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
548 err = mw.JSONError{ |
254
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
549 Code: http.StatusNotFound, |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
550 Message: fmt.Sprintf("Cannot find user %s.", user), |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
551 } |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
552 return |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
553 case err != nil: |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
554 return |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
555 } |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
556 |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
557 jr.Result = result |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
558 return |
de6fdb316b8f
Implemented /users/{user} GET a listing of given user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
253
diff
changeset
|
559 } |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
560 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
561 func sendTestMail(req *http.Request) (jr mw.JSONResult, err error) { |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
562 |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
563 user := models.UserName(mux.Vars(req)["user"]) |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
564 if !user.IsValid() { |
4506
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
565 err = mw.JSONError{ |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
566 Code: http.StatusBadRequest, |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
567 Message: "error: user invalid", |
e020e6e34ad7
Made 'go vet' happy again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4244
diff
changeset
|
568 } |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
569 return |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
570 } |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
571 |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
572 userData := &models.User{ |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
573 User: user, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
574 Extent: &models.BoundingBox{}, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
575 } |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
576 |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
577 err = mw.JSONConn(req).QueryRowContext(req.Context(), listUserSQL, user).Scan( |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
578 &userData.Role, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
579 &userData.Country, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
580 &userData.Email, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
581 &userData.Extent.X1, &userData.Extent.Y1, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
582 &userData.Extent.X2, &userData.Extent.Y2, |
5330
b1b9b384540d
Adjust user model and controller to handle reports field.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4506
diff
changeset
|
583 &userData.Reports, |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
584 ) |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
585 |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
586 switch { |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
587 case err == sql.ErrNoRows: |
4244
4394daeea96a
Moved JSONHandler into middleware package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4243
diff
changeset
|
588 err = mw.JSONError{ |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
589 Code: http.StatusNotFound, |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
590 Message: fmt.Sprintf("Cannot find user %s.", user), |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
591 } |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
592 return |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
593 case err != nil: |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
594 return |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
595 } |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
596 |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
597 var subject string |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
598 |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
599 var tmplVars = struct { |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
600 User string |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
601 Timestamp string |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
602 Email string |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
603 }{ |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
604 User: string(user), |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
605 Timestamp: time.Now().Format("2006-01-02 15:04:05"), |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
606 Email: string(userData.Email), |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
607 } |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
608 |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
609 var bodyTmpl *template.Template |
5370
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
610 switch userData.Role { |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
611 case "sys_admin": |
2895
92812bf2f008
Improve notification email contents
Bernhard Reiter <bernhard@intevation.de>
parents:
2326
diff
changeset
|
612 subject = "Gemma: Sysadmin Notification TEST" |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
613 bodyTmpl = testSysadminNotifyMailTmpl |
5370
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
614 case "waterway_admin": |
2895
92812bf2f008
Improve notification email contents
Bernhard Reiter <bernhard@intevation.de>
parents:
2326
diff
changeset
|
615 subject = "Gemma: Waterway Admin Notification TEST" |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
616 bodyTmpl = testWWAdminNotifyMailTmpl |
5370
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
617 default: |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
618 subject = "Gemma: Waterway User Notification TEST" |
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
619 bodyTmpl = testWWUserNotifyMailTmpl |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
620 } |
5370
566c8063223b
Allow test mail sinding for waterway users, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5345
diff
changeset
|
621 |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
622 var buf bytes.Buffer |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
623 if err := bodyTmpl.Execute(&buf, &tmplVars); err != nil { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5372
diff
changeset
|
624 log.Errorf("%v\n", err) |
827
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
625 } |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
626 |
f3adc0f3a20a
Use templating to make somewhat more interesting test notification mails.
Sascha Wilde <wilde@intevation.de>
parents:
822
diff
changeset
|
627 err = misc.SendMail(string(userData.Email), subject, buf.String()) |
822
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
628 if err != nil { |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
629 return |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
630 } |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
631 |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
632 jr.Result = &struct { |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
633 Message string `json:"message"` |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
634 }{"Sending test mail."} |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
635 |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
636 return |
8926c413db21
Started implementation of test mail end point.
Sascha Wilde <wilde@intevation.de>
parents:
493
diff
changeset
|
637 } |