Mercurial > gemma
view cmd/tokenserver/user.go @ 186:fe3a88f00b0a
Experimental user creation support.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 19 Jul 2018 18:33:52 +0200 |
parents | |
children | 51addc0533fe |
line wrap: on
line source
package main import ( "database/sql" "encoding/json" "log" "net/http" "gemma.intevation.de/gemma/auth" ) 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, $5, $6)` ) 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) error { _, err := db.Exec( createUserSQL, user.Role, user.User, user.Password, user.Country, nil, ) return err }) if err != nil { log.Printf("err: %v\n", err) http.Error(rw, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } var result = struct { Result string `json:"result"` }{ Result: "success", } rw.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(rw).Encode(&result); err != nil { log.Printf("error: %v\n", err) } }