From 27e69eb7b82d64d57ab94a96c0fe58b77d358aca Mon Sep 17 00:00:00 2001 From: Tit Petric Date: Tue, 17 Jul 2018 13:09:18 +0200 Subject: [PATCH] upd(rbac): groundwork for users APIs --- rbac/client.go | 15 +++++++- rbac/{interfaces.go => interfaces.txt} | 0 rbac/types/structs.go | 7 ++++ rbac/users.go | 53 ++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) rename rbac/{interfaces.go => interfaces.txt} (100%) create mode 100644 rbac/types/structs.go create mode 100644 rbac/users.go diff --git a/rbac/client.go b/rbac/client.go index 556266117..57e95eb05 100644 --- a/rbac/client.go +++ b/rbac/client.go @@ -19,6 +19,8 @@ type ( } ) +func (c *Client) Users() *Users { return &Users{c} } + func New() (*Client, error) { if err := config.validate(); err != nil { return nil, err @@ -50,10 +52,18 @@ func New() (*Client, error) { } func (c *Client) Get(url string) (*http.Response, error) { - return c.Request("GET", url) + return c.Request("GET", url, nil) } -func (c *Client) Request(method string, url string) (*http.Response, error) { +func (c *Client) Post(url string, body interface{}) (*http.Response, error) { + return c.Request("POST", url, body) +} + +func (c *Client) Delete(url string) (*http.Response, error) { + return c.Request("DELETE", url, nil) +} + +func (c *Client) Request(method string, url string, body interface{}) (*http.Response, error) { link := strings.TrimRight(c.config.baseURL, "/") + "/" + strings.TrimLeft(url, "/") if c.isDebug { @@ -65,6 +75,7 @@ func (c *Client) Request(method string, url string) (*http.Response, error) { return nil, err } + req.Header.Add("Content-Type", "application/json") req.Header.Add("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(c.config.auth))) req.Header.Add("X-TENANT-ID", c.config.tenant) diff --git a/rbac/interfaces.go b/rbac/interfaces.txt similarity index 100% rename from rbac/interfaces.go rename to rbac/interfaces.txt diff --git a/rbac/types/structs.go b/rbac/types/structs.go new file mode 100644 index 000000000..7d5060404 --- /dev/null +++ b/rbac/types/structs.go @@ -0,0 +1,7 @@ +package types + +type ( + User struct { + username string + } +) diff --git a/rbac/users.go b/rbac/users.go new file mode 100644 index 000000000..0cc83c0c5 --- /dev/null +++ b/rbac/users.go @@ -0,0 +1,53 @@ +package rbac + +import ( + "encoding/json" + + "github.com/crusttech/crust/rbac/types" +) + +type ( + Users struct { + *Client + } + + UsersInterface interface { + Create(username, password string) error + Get(username string) (*types.User, error) + Delete(username string) error + } +) + +func (u *Users) Create(username, password string) error { + body := struct { + Password string `json:"password"` + }{password} + + resp, err := u.Client.Post("/users/"+username, body) + if err != nil { + return err + } + defer resp.Body.Close() + return nil +} + +func (u *Users) Get(username string) (*types.User, error) { + resp, err := u.Client.Get("/users/" + username) + if err != nil { + return nil, err + } + user := &types.User{} + defer resp.Body.Close() + return user, json.NewDecoder(resp.Body).Decode(user) +} + +func (u *Users) Delete(username string) error { + resp, err := u.Client.Delete("/users/" + username) + if err != nil { + return err + } + defer resp.Body.Close() + return nil +} + +var _ UsersInterface = &Users{}