From c69ac0b8d9a7ae972f95106267fc4321bf4fc281 Mon Sep 17 00:00:00 2001 From: Christian Groschupp Date: Thu, 10 Jun 2021 09:14:59 +0200 Subject: [PATCH] add groupprivileges --- client.go | 20 ++++---- groupprivileges.go | 112 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 9 deletions(-) create mode 100644 groupprivileges.go diff --git a/client.go b/client.go index 949911d..b9b9393 100644 --- a/client.go +++ b/client.go @@ -35,15 +35,16 @@ func apiBaseUrl() string { } type Client struct { - Auth *auth - Users users - User user - Teams teams - Repositories *Repositories - Workspaces *Workspace - Pagelen uint64 - MaxDepth uint64 - apiBaseURL string + Auth *auth + Users users + User user + Teams teams + Repositories *Repositories + Workspaces *Workspace + GroupPrivileges *GroupPrivileges + Pagelen uint64 + MaxDepth uint64 + apiBaseURL *url.URL HttpClient *http.Client } @@ -152,6 +153,7 @@ func injectClient(a *auth) *Client { c.User = &User{c: c} c.Teams = &Teams{c: c} c.Workspaces = &Workspace{c: c, Repositories: c.Repositories, Permissions: &Permission{c: c}} + c.GroupPrivileges = &GroupPrivileges{c: c} c.HttpClient = new(http.Client) return c } diff --git a/groupprivileges.go b/groupprivileges.go new file mode 100644 index 0000000..089eff4 --- /dev/null +++ b/groupprivileges.go @@ -0,0 +1,112 @@ +package bitbucket + +import ( + "fmt" + + "github.com/mitchellh/mapstructure" +) + +type GroupPrivileges struct { + c *Client +} + +type GroupPrivilegesOptions struct { + Owner string + RepoSlug string + Group string + GroupOwner string + Permission string +} + +type GroupPrivilege struct { + Repo string `mapstructure:"repo"` + Privilege string `mapstructure:"privilege"` + Group struct { + Owner struct { + DisplayName string `mapstructure:"display_name"` + UUID string `mapstructure:"uuid"` + IsActive bool `mapstructure:"is_active"` + IsTeam bool `mapstructure:"is_team"` + MentionID string `mapstructure:"mention_id"` + Avatar string `mapstructure:"avatar"` + Nickname string `mapstructure:"nickname"` + AccountID string `mapstructure:"account_id"` + } `mapstructure:"owner"` + Name string `mapstructure:"name"` + Members []interface{} `mapstructure:"members"` + Slug string `mapstructure:"slug"` + } `mapstructure:"group"` + Repository struct { + Owner struct { + DisplayName string `mapstructure:"display_name"` + UUID string `mapstructure:"uuid"` + IsActive bool `mapstructure:"is_active"` + IsTeam bool `mapstructure:"is_team"` + MentionID string `mapstructure:"mention_id"` + Avatar string `mapstructure:"avatar"` + Nickname string `mapstructure:"nickname"` + AccountID string `mapstructure:"account_id"` + } `mapstructure:"owner"` + Name string `mapstructure:"name"` + Slug string `mapstructure:"slug"` + } `mapstructure:"repository"` +} + +func (g *GroupPrivileges) List(workspace, repoSlug string) ([]GroupPrivilege, error) { + urlStr := fmt.Sprintf("%s/1.0/group-privileges/%s/%s", g.c.GetApiHostnameURL(), workspace, repoSlug) + data, err := g.c.execute("GET", urlStr, "") + if err != nil { + return nil, err + } + + return g.decodeGroupPrivileges(data) +} + +func (g *GroupPrivileges) Add(gpo GroupPrivilegesOptions) ([]GroupPrivilege, error) { + groupOwner := gpo.GroupOwner + if gpo.GroupOwner == "" { + groupOwner = gpo.Owner + + } + urlStr := fmt.Sprintf("%s/1.0/group-privileges/%s/%s/%s/%s/", g.c.GetApiHostnameURL(), gpo.Owner, gpo.RepoSlug, groupOwner, gpo.Group) + data, err := g.c.executeContentType("PUT", urlStr, gpo.Permission, "application/x-www-form-urlencoded") + if err != nil { + return nil, err + } + + return g.decodeGroupPrivileges(data) +} + +func (g *GroupPrivileges) Get(gpo GroupPrivilegesOptions) ([]GroupPrivilege, error) { + groupOwner := gpo.GroupOwner + if gpo.GroupOwner == "" { + groupOwner = gpo.Owner + + } + urlStr := fmt.Sprintf("%s/1.0/group-privileges/%s/%s/%s/%s/", g.c.GetApiHostnameURL(), gpo.Owner, gpo.RepoSlug, groupOwner, gpo.Group) + data, err := g.c.execute("GET", urlStr, "") + if err != nil { + return nil, err + } + + return g.decodeGroupPrivileges(data) +} + +func (g *GroupPrivileges) Delete(gpo GroupPrivilegesOptions) (interface{}, error) { + groupOwner := gpo.GroupOwner + if gpo.GroupOwner == "" { + groupOwner = gpo.Owner + + } + urlStr := fmt.Sprintf("%s/1.0/group-privileges/%s/%s/%s/%s/", g.c.GetApiHostnameURL(), gpo.Owner, gpo.RepoSlug, groupOwner, gpo.Group) + return g.c.execute("DELETE", urlStr, "") +} + +func (g *GroupPrivileges) decodeGroupPrivileges(response interface{}) ([]GroupPrivilege, error) { + var gp []GroupPrivilege + err := mapstructure.Decode(response, &gp) + if err != nil { + return nil, err + } + return gp, nil +}