annotate cmd/tokenserver/user.go @ 188:ee3093966a6d

ST_SetSRID should be not need as the map extent column does not have any SRID code.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 20 Jul 2018 10:27:42 +0200
parents 51addc0533fe
children 96bb671cdd98
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package main
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import (
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 "database/sql"
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 "encoding/json"
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
6 "fmt"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 "log"
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 "net/http"
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 "gemma.intevation.de/gemma/auth"
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
11 "github.com/jackc/pgx"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 )
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 type BoundingBox struct {
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 X1 float64 `json:"x1"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 Y1 float64 `json:"y1"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 X2 float64 `json:"x2"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 Y2 float64 `json:"y2"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 type User struct {
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 User string `json:"user"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 Role string `json:"role"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 Password string `json:"password"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 Email string `json:"email"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 Country string `json:"country"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 Extent *BoundingBox `json:"extent"`
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 const (
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
31 createUserSQL = `SELECT create_user($1, $2, $3, $4, NULL, $5)`
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
32 createUserExtentSQL = `SELECT create_user($1, $2, $3, $4,
188
ee3093966a6d ST_SetSRID should be not need as the map extent column does not have any SRID code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 187
diff changeset
33 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)`
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 )
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 func createUser(rw http.ResponseWriter, req *http.Request) {
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 var user User
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 defer req.Body.Close()
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 if err := json.NewDecoder(req.Body).Decode(&user); err != nil {
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 log.Printf("err: %v\n", err)
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 http.Error(rw, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 return
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 token, _ := auth.GetToken(req)
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
48 err := auth.ConnPool.Do(token, func(db *sql.DB) (err error) {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
49 if user.Extent == nil {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
50 _, err = db.Exec(
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
51 createUserSQL,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
52 user.Role,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
53 user.User,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
54 user.Password,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
55 user.Country,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
56 user.Email,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
57 )
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
58 } else {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
59 _, err = db.Exec(
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
60 createUserSQL,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
61 user.Role,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
62 user.User,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
63 user.Password,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
64 user.Country,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
65 user.Extent.X1, user.Extent.Y1,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
66 user.Extent.X2, user.Extent.Y2,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
67 user.Email,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
68 )
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
69 }
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
70 return
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 })
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
73 var res struct {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
74 Result string `json:"result"`
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
75 Code string `json:"code,omitempty"`
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
76 Message string `json:"message,omitempty"`
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
79 if err != nil {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
80 if pgErr, ok := err.(pgx.PgError); ok {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
81 res.Result = "failure"
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
82 res.Code = pgErr.Code
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
83 res.Message = pgErr.Message
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
84 } else {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
85 log.Printf("err: %v\n", err)
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
86 http.Error(rw,
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
87 fmt.Sprintf("error: %s", err.Error()),
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
88 http.StatusInternalServerError)
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
89 return
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
90 }
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
91 } else {
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
92 res.Result = "success"
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
93 }
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
94
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
95 rw.Header().Set("Content-Type", "application/json")
187
51addc0533fe More complete show case for creating users.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 186
diff changeset
96 if err := json.NewEncoder(rw).Encode(&res); err != nil {
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 log.Printf("error: %v\n", err)
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 }