From 7ec5c2ee79b8867113f46424542fcb8a46522a99 Mon Sep 17 00:00:00 2001 From: Philippe-Adrien Nousse Date: Thu, 5 Jul 2018 16:15:51 +0200 Subject: [PATCH] Added User's group actions --- README.md | 35 +++++++++++++++---- client/types/responses.go | 13 +++++++ client/users.go | 72 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7670fa7..8898847 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,12 @@ A simple Client for Nextcloud's API in Go. - ~~delete~~ - ~~enable~~ - ~~disable~~ - - get groups - - add to group - - remove from group - - get subadmin group - - promote subadmin - - demote subadmin + - ~~get groups~~ + - ~~add to group~~ + - ~~remove from group~~ + - ~~get subadmin group~~ + - ~~promote subadmin~~ + - ~~demote subadmin~~ - ~~send welcome mail~~ - [Groups](#groups) - create @@ -104,6 +104,29 @@ func (c *Client) UserUpdatePassword(name string, password string) error func (c *Client) UserUpdateQuota(name string, quota string) error ``` +Groups +```go +func (c *Client) UserGroupList(name string) ([]string, error) +``` +```go +func (c *Client) UserGroupAdd(name string, group string) error +``` +```go +func (c *Client) UserGroupRemove(name string, group string) error +``` +```go +func (c *Client) UserGroupPromote(name string, group string) error +``` +```go +func (c *Client) UserGroupDemote(name string, group string) error +``` +```go +func (c *Client) UserGroupSubAdminList(name string) ([]string, error) +``` +Welcome Mail +```go +func (c *Client) UserSendWelcomeEmail(name string) error +``` ## Groups TODO diff --git a/client/types/responses.go b/client/types/responses.go index 1bc9b7a..c17ef84 100644 --- a/client/types/responses.go +++ b/client/types/responses.go @@ -41,6 +41,19 @@ type UserResponse struct { } `json:"ocs"` } +type SubAdminResponse struct { + Ocs struct { + Meta struct { + Status string `json:"status"` + Statuscode int `json:"statuscode"` + Message string `json:"message"` + Totalitems string `json:"totalitems"` + Itemsperpage string `json:"itemsperpage"` + } `json:"meta"` + Data []string `json:"data"` + } `json:"ocs"` +} + type GroupListResponse struct { Ocs struct { Meta struct { diff --git a/client/users.go b/client/users.go index c0eb948..486b978 100644 --- a/client/users.go +++ b/client/users.go @@ -124,6 +124,78 @@ func (c *Client) UserUpdateQuota(name string, quota string) error { return c.userUpdateAttribute(name, "quota", quota) } +func (c *Client) UserGroupList(name string) ([]string, error) { + if !c.loggedIn() { + return nil, unauthorized + } + u := c.baseURL.ResolveReference(routes.users) + u.Path = path.Join(u.Path, name, "groups") + res, err := c.session.Get(u.String(), nil) + if err != nil { + return nil, err + } + var r types.GroupListResponse + res.JSON(&r) + if r.Ocs.Meta.Statuscode != 100 { + return nil, fmt.Errorf(r.Ocs.Meta.Message) + } + return r.Ocs.Data.Groups, nil +} + +func (c *Client) UserGroupAdd(name string, group string) error { + ro := &req.RequestOptions{ + Data: map[string]string{ + "groupid": group, + }, + } + return c.userBaseRequest(name, "groups", ro, http.MethodPost) +} + +func (c *Client) UserGroupRemove(name string, group string) error { + ro := &req.RequestOptions{ + Data: map[string]string{ + "groupid": group, + }, + } + return c.userBaseRequest(name, "groups", ro, http.MethodDelete) +} + +func (c *Client) UserGroupPromote(name string, group string) error { + ro := &req.RequestOptions{ + Data: map[string]string{ + "groupid": group, + }, + } + return c.userBaseRequest(name, "subadmins", ro, http.MethodPost) +} + +func (c *Client) UserGroupDemote(name string, group string) error { + ro := &req.RequestOptions{ + Data: map[string]string{ + "groupid": group, + }, + } + return c.userBaseRequest(name, "subadmins", ro, http.MethodDelete) +} + +func (c *Client) UserGroupSubAdminList(name string) ([]string, error) { + if !c.loggedIn() { + return nil, unauthorized + } + u := c.baseURL.ResolveReference(routes.users) + u.Path = path.Join(u.Path, name, "subadmins") + res, err := c.session.Get(u.String(), nil) + if err != nil { + return nil, err + } + var r types.SubAdminResponse + res.JSON(&r) + if r.Ocs.Meta.Statuscode != 100 { + return nil, fmt.Errorf(r.Ocs.Meta.Message) + } + return r.Ocs.Data, nil +} + func (c *Client) userUpdateAttribute(name string, key string, value string) error { ro := &req.RequestOptions{ Data: map[string]string{