From d8a01f0b1ba725d9c8132ef24fe743020c122c91 Mon Sep 17 00:00:00 2001 From: Ilja Smelich Date: Thu, 18 Feb 2021 10:56:23 +0200 Subject: [PATCH 1/3] added a new endpoint, /local-user-store/api/v1/users to the userstore --- api/userstore/client.go | 20 ++++++++++++++++++++ api/userstore/model.go | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/api/userstore/client.go b/api/userstore/client.go index 463bb80..96ce9f8 100644 --- a/api/userstore/client.go +++ b/api/userstore/client.go @@ -16,11 +16,31 @@ type UserStore struct { api restapi.Connector } +type usersResult struct { + Count int `json:"count"` + Items []User `json:"items"` +} + // New creates a new user-store client instance func New(api restapi.Connector) *UserStore { return &UserStore{api: api} } +// GetLocalUsers get a local user with details +func (store *UserStore) GetLocalUsers(filters ...string) ([]User, error) { + result := usersResult{} + offset := filters[0] + limit := filters[1] + id := filters[2] + name := filters[3] + + _, err := store.api. + URL("/local-user-store/api/v1/users?offset=%s&limit=%s&username=%s&id=%s", offset, limit, name, id). + Get(&result) + + return result.Items, err +} + // CreateTrustedClient registers new client to PrivX func (store *UserStore) CreateTrustedClient(client TrustedClient) (string, error) { var id struct { diff --git a/api/userstore/model.go b/api/userstore/model.go index ca4f1fe..7160f58 100644 --- a/api/userstore/model.go +++ b/api/userstore/model.go @@ -57,3 +57,23 @@ type APIClient struct { Created string `json:"created,omitempty"` Author string `json:"author,omitempty"` } + +// User definition +type User struct { + ID string `json:"id,omnitempty"` + Created string `json:"created,omitempty"` + Updated string `json:"updated,omitempty"` + UpdatedBy string `json:"updated_by,omitempty"` + Author string `json:"author,omitempty"` + Comment string `json:"comment,omitempty"` + Tags []string `json:"tags,omitempty"` + Username string `json:"username,omitempty"` + GivenName string `json:"given_name,omitempty"` + FullName string `json:"full_name,omitempty"` + JobTitle string `json:"job_title,omitempty"` + Company string `json:"company,omitempty"` + Department string `json:"department,omitempty"` + Email string `json:"email,omitempty"` + Telephone string `json:"telephone,omitempty"` + Locale string `json:"locale,omitempty"` +} From 6f77a67c30fbe77cf8ea9a85042a970d77f66a50 Mon Sep 17 00:00:00 2001 From: Ilja Smelich Date: Thu, 18 Feb 2021 13:58:39 +0200 Subject: [PATCH 2/3] removed the variadic function --- api/userstore/client.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/api/userstore/client.go b/api/userstore/client.go index 96ce9f8..9f6952f 100644 --- a/api/userstore/client.go +++ b/api/userstore/client.go @@ -27,17 +27,12 @@ func New(api restapi.Connector) *UserStore { } // GetLocalUsers get a local user with details -func (store *UserStore) GetLocalUsers(filters ...string) ([]User, error) { +func (store *UserStore) GetLocalUsers(offset, limit, userID, username string) ([]User, error) { result := usersResult{} - offset := filters[0] - limit := filters[1] - id := filters[2] - name := filters[3] _, err := store.api. - URL("/local-user-store/api/v1/users?offset=%s&limit=%s&username=%s&id=%s", offset, limit, name, id). + URL("/local-user-store/api/v1/users?offset=%s&limit=%s&username=%s&id=%s", offset, limit, username, userID). Get(&result) - return result.Items, err } From d308e6621f45dbb66a4eabcb0c4caedd93bf9191 Mon Sep 17 00:00:00 2001 From: Ilja Smelich Date: Fri, 19 Feb 2021 11:46:40 +0200 Subject: [PATCH 3/3] created Params and FilterUser struct inside model, used the Query function for local user queries --- api/userstore/client.go | 18 ++++++++++++++---- api/userstore/model.go | 17 +++++++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/api/userstore/client.go b/api/userstore/client.go index 9f6952f..004a187 100644 --- a/api/userstore/client.go +++ b/api/userstore/client.go @@ -17,8 +17,8 @@ type UserStore struct { } type usersResult struct { - Count int `json:"count"` - Items []User `json:"items"` + Count int `json:"count"` + Items []LocalUser `json:"items"` } // New creates a new user-store client instance @@ -27,12 +27,22 @@ func New(api restapi.Connector) *UserStore { } // GetLocalUsers get a local user with details -func (store *UserStore) GetLocalUsers(offset, limit, userID, username string) ([]User, error) { +func (store *UserStore) GetLocalUsers(offset, limit, userID, username string) ([]LocalUser, error) { result := usersResult{} + filters := FilterUser{ + Params: Params{ + Offset: offset, + Limit: limit, + }, + UserID: userID, + Username: username, + } _, err := store.api. - URL("/local-user-store/api/v1/users?offset=%s&limit=%s&username=%s&id=%s", offset, limit, username, userID). + URL("/local-user-store/api/v1/users"). + Query(&filters). Get(&result) + return result.Items, err } diff --git a/api/userstore/model.go b/api/userstore/model.go index 7160f58..2c6fff7 100644 --- a/api/userstore/model.go +++ b/api/userstore/model.go @@ -17,6 +17,19 @@ const ( ClientHostProvisioning = ClientType("HOST_PROVISIONING") ) +// Params struct for pagination queries. +type Params struct { + Offset string `json:"offset,omitempty"` + Limit string `json:"limit,omitempty"` +} + +// FilterUser struct for local users queries. +type FilterUser struct { + Params + UserID string `json:"id,omitempty"` + Username string `json:"username,omitempty"` +} + // TrustedClient definition type TrustedClient struct { ID string `json:"id,omitempty"` @@ -58,8 +71,8 @@ type APIClient struct { Author string `json:"author,omitempty"` } -// User definition -type User struct { +// LocalUser definition +type LocalUser struct { ID string `json:"id,omnitempty"` Created string `json:"created,omitempty"` Updated string `json:"updated,omitempty"`