changeset 254:de6fdb316b8f

Implemented /users/{user} GET a listing of given user.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 27 Jul 2018 12:30:19 +0200
parents 322c3d0e05ef
children c36bd39782c1 dfc2b035e055
files controllers/routes.go controllers/user.go
diffstat 2 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/controllers/routes.go	Fri Jul 27 12:12:48 2018 +0200
+++ b/controllers/routes.go	Fri Jul 27 12:30:19 2018 +0200
@@ -24,6 +24,10 @@
 	})).Methods(http.MethodPost)
 
 	api.Handle("/users/{user}", sysAdmin(&JSONHandler{
+		Handle: listUser,
+	})).Methods(http.MethodGet)
+
+	api.Handle("/users/{user}", sysAdmin(&JSONHandler{
 		Input:  func() interface{} { return new(User) },
 		Handle: updateUser,
 	})).Methods(http.MethodPut)
--- a/controllers/user.go	Fri Jul 27 12:12:48 2018 +0200
+++ b/controllers/user.go	Fri Jul 27 12:30:19 2018 +0200
@@ -5,6 +5,7 @@
 	"database/sql/driver"
 	"encoding/json"
 	"errors"
+	"fmt"
 	"net/http"
 	"regexp"
 	"strings"
@@ -55,6 +56,15 @@
   ST_XMin(map_extent), ST_YMin(map_extent),
   ST_XMax(map_extent), ST_YMax(map_extent)
 FROM sys_admin.list_users`
+
+	listUserSQL = `SELECT
+  rolname,
+  country,
+  email_address,
+  ST_XMin(map_extent), ST_YMin(map_extent),
+  ST_XMax(map_extent), ST_YMax(map_extent)
+FROM sys_admin.list_users
+WHERE username = $1`
 )
 
 var errNoString = errors.New("Not a string")
@@ -335,3 +345,42 @@
 	}
 	return
 }
+
+func listUser(
+	rw http.ResponseWriter, req *http.Request,
+	input interface{}, db *sql.DB,
+) (jr JSONResult, err error) {
+
+	user := mux.Vars(req)["user"]
+	if user == "" {
+		err = JSONError{http.StatusBadRequest, "error: user empty"}
+		return
+	}
+
+	result := &User{
+		User:   user,
+		Extent: &BoundingBox{},
+	}
+
+	err = db.QueryRow(listUserSQL, user).Scan(
+		&result.Role,
+		&result.Country,
+		&result.Email,
+		&result.Extent.X1, &result.Extent.Y1,
+		&result.Extent.X2, &result.Extent.Y2,
+	)
+
+	switch {
+	case err == sql.ErrNoRows:
+		err = JSONError{
+			Code:    http.StatusNotFound,
+			Message: fmt.Sprintf("Cannot find user %s.", user),
+		}
+		return
+	case err != nil:
+		return
+	}
+
+	jr.Result = result
+	return
+}