diff options
author | Mike Crute <mike@crute.us> | 2021-11-22 18:42:45 -0800 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2021-11-22 18:42:45 -0800 |
commit | 853cab121191a2cf4dd37c68149fc23b64235464 (patch) | |
tree | eb8e0ceb21daa457e7bd98e12379c6706379c26c /app/controllers/api_user_list.go | |
parent | 22819ad3543b6bad4f6efcedbebb8437292cae3b (diff) | |
download | cloud-identity-broker-853cab121191a2cf4dd37c68149fc23b64235464.tar.bz2 cloud-identity-broker-853cab121191a2cf4dd37c68149fc23b64235464.tar.xz cloud-identity-broker-853cab121191a2cf4dd37c68149fc23b64235464.zip |
Add user endpoints
Diffstat (limited to 'app/controllers/api_user_list.go')
-rw-r--r-- | app/controllers/api_user_list.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/app/controllers/api_user_list.go b/app/controllers/api_user_list.go new file mode 100644 index 0000000..ba6dff5 --- /dev/null +++ b/app/controllers/api_user_list.go | |||
@@ -0,0 +1,56 @@ | |||
1 | package controllers | ||
2 | |||
3 | import ( | ||
4 | "context" | ||
5 | "net/http" | ||
6 | "time" | ||
7 | |||
8 | "code.crute.us/mcrute/cloud-identity-broker/app/models" | ||
9 | |||
10 | glecho "code.crute.us/mcrute/golib/echo" | ||
11 | "code.crute.us/mcrute/golib/echo/controller" | ||
12 | "github.com/labstack/echo/v4" | ||
13 | ) | ||
14 | |||
15 | type jsonListUser struct { | ||
16 | Username string `bson:"_id" json:"key_id"` | ||
17 | IsAdmin bool `json:"is_admin"` | ||
18 | IsService bool `json:"is_service"` | ||
19 | SelfLink string `json:"self"` | ||
20 | Deleted *time.Time `json:"deleted,omitempty"` | ||
21 | } | ||
22 | |||
23 | type APIUserListHandler struct { | ||
24 | store models.UserStore | ||
25 | } | ||
26 | |||
27 | func NewAPIUserListHandler(s models.UserStore) echo.HandlerFunc { | ||
28 | al := &APIUserListHandler{store: s} | ||
29 | h := &controller.ContentTypeNegotiatingHandler{ | ||
30 | DefaultHandler: al.Handle, | ||
31 | Handlers: map[string]echo.HandlerFunc{ | ||
32 | contentTypeV2: al.Handle, | ||
33 | }, | ||
34 | } | ||
35 | return h.Handle | ||
36 | } | ||
37 | |||
38 | func (h *APIUserListHandler) Handle(c echo.Context) error { | ||
39 | users, err := h.store.List(context.Background()) | ||
40 | if err != nil { | ||
41 | return echo.ErrInternalServerError | ||
42 | } | ||
43 | |||
44 | out := map[string]*jsonListUser{} | ||
45 | for _, v := range users { | ||
46 | out[v.Username] = &jsonListUser{ | ||
47 | Username: v.Username, | ||
48 | IsAdmin: v.IsAdmin, | ||
49 | IsService: v.IsService, | ||
50 | SelfLink: glecho.URLFor(c, "/api/user", v.Username).String(), | ||
51 | Deleted: v.Deleted, | ||
52 | } | ||
53 | } | ||
54 | |||
55 | return c.JSON(http.StatusOK, out) | ||
56 | } | ||