Mercurial > gemma
view 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 |
line wrap: on
line source
package main import ( "database/sql" "encoding/json" "fmt" "log" "net/http" "gemma.intevation.de/gemma/auth" "github.com/jackc/pgx" ) type BoundingBox struct { X1 float64 `json:"x1"` Y1 float64 `json:"y1"` X2 float64 `json:"x2"` Y2 float64 `json:"y2"` } type User struct { User string `json:"user"` Role string `json:"role"` Password string `json:"password"` Email string `json:"email"` Country string `json:"country"` Extent *BoundingBox `json:"extent"` } const ( createUserSQL = `SELECT create_user($1, $2, $3, $4, NULL, $5)` createUserExtentSQL = `SELECT create_user($1, $2, $3, $4, ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)` ) func createUser(rw http.ResponseWriter, req *http.Request) { var user User defer req.Body.Close() if err := json.NewDecoder(req.Body).Decode(&user); err != nil { log.Printf("err: %v\n", err) http.Error(rw, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } token, _ := auth.GetToken(req) err := auth.ConnPool.Do(token, func(db *sql.DB) (err error) { if user.Extent == nil { _, err = db.Exec( createUserSQL, user.Role, user.User, user.Password, user.Country, user.Email, ) } else { _, err = db.Exec( createUserSQL, user.Role, user.User, user.Password, user.Country, user.Extent.X1, user.Extent.Y1, user.Extent.X2, user.Extent.Y2, user.Email, ) } return }) var res struct { Result string `json:"result"` Code string `json:"code,omitempty"` Message string `json:"message,omitempty"` } if err != nil { if pgErr, ok := err.(pgx.PgError); ok { res.Result = "failure" res.Code = pgErr.Code res.Message = pgErr.Message } else { log.Printf("err: %v\n", err) http.Error(rw, fmt.Sprintf("error: %s", err.Error()), http.StatusInternalServerError) return } } else { res.Result = "success" } rw.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(rw).Encode(&res); err != nil { log.Printf("error: %v\n", err) } }