# HG changeset patch # User Sascha L. Teichmann # Date 1532063111 -7200 # Node ID 51addc0533fe37d6b5be95b14728f725cc57e475 # Parent fe3a88f00b0ae3c3a04c88dd8cdbe2e022fdada2 More complete show case for creating users. diff -r fe3a88f00b0a -r 51addc0533fe cmd/tokenserver/user.go --- a/cmd/tokenserver/user.go Thu Jul 19 18:33:52 2018 +0200 +++ b/cmd/tokenserver/user.go Fri Jul 20 07:05:11 2018 +0200 @@ -3,10 +3,12 @@ import ( "database/sql" "encoding/json" + "fmt" "log" "net/http" "gemma.intevation.de/gemma/auth" + "github.com/jackc/pgx" ) type BoundingBox struct { @@ -26,7 +28,9 @@ } const ( - createUserSQL = `SELECT create_user($1, $2, $3, $4, $5, $6)` + createUserSQL = `SELECT create_user($1, $2, $3, $4, NULL, $5)` + createUserExtentSQL = `SELECT create_user($1, $2, $3, $4, + ST_SetSRID(ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), 4326), $9)` ) func createUser(rw http.ResponseWriter, req *http.Request) { @@ -41,32 +45,55 @@ } 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 + 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 }) - if err != nil { - log.Printf("err: %v\n", err) - http.Error(rw, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) - return + var res struct { + Result string `json:"result"` + Code string `json:"code,omitempty"` + Message string `json:"message,omitempty"` } - var result = struct { - Result string `json:"result"` - }{ - Result: "success", + 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(&result); err != nil { + if err := json.NewEncoder(rw).Encode(&res); err != nil { log.Printf("error: %v\n", err) } }