Skip to content

Commit

Permalink
GH-111 Migrate Group Permissions to REST API v2.0 (#118)
Browse files Browse the repository at this point in the history
With the underlying go-bitbucket module providing support for Group Permissions via Bitbucket's REST API v2.0, we can remove our REST API v1.0 implementation.
  • Loading branch information
zahiar authored Aug 29, 2022
1 parent 94b2c83 commit c716d34
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 294 deletions.
6 changes: 2 additions & 4 deletions bitbucket/api/v1/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,8 @@ type Client struct {
ApiBaseUrl *url.URL
HttpClient *http.Client

Groups *Groups
GroupMembers *GroupMembers
GroupPrivileges *GroupPrivileges
Groups *Groups
GroupMembers *GroupMembers
}

type Auth struct {
Expand All @@ -34,7 +33,6 @@ func NewClient(auth *Auth) *Client {
}
client.Groups = &Groups{client: client}
client.GroupMembers = &GroupMembers{client: client}
client.GroupPrivileges = &GroupPrivileges{client: client}
client.HttpClient = new(http.Client)

return client
Expand Down
1 change: 0 additions & 1 deletion bitbucket/api/v1/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,5 @@ func TestNewClient(t *testing.T) {
assert.Equal(t, "https://api.bitbucket.org/1.0", client.ApiBaseUrl.String())
assert.Equal(t, auth, client.Auth)
assert.IsType(t, &Groups{}, client.Groups)
assert.IsType(t, &GroupPrivileges{}, client.GroupPrivileges)
assert.IsType(t, &http.Client{}, client.HttpClient)
}
121 changes: 0 additions & 121 deletions bitbucket/api/v1/group_privileges.go

This file was deleted.

131 changes: 0 additions & 131 deletions bitbucket/api/v1/group_privileges_test.go

This file was deleted.

69 changes: 32 additions & 37 deletions bitbucket/resource_bitbucket_group_permission.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"

v1 "github.com/zahiar/terraform-provider-bitbucket/bitbucket/api/v1"
"github.com/ktrysmt/go-bitbucket"
)

func resourceBitbucketGroupPermission() *schema.Resource {
Expand Down Expand Up @@ -57,17 +56,15 @@ func resourceBitbucketGroupPermission() *schema.Resource {
}

func resourceBitbucketGroupPermissionCreate(ctx context.Context, resourceData *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*Clients).V1

_, err := client.GroupPrivileges.Create(
&v1.GroupPrivilegeOptions{
WorkspaceId: resourceData.Get("workspace").(string),
RepoSlug: resourceData.Get("repository").(string),
GroupOwner: resourceData.Get("workspace").(string),
GroupSlug: resourceData.Get("group").(string),
Privilege: resourceData.Get("permission").(string),
},
)
client := meta.(*Clients).V2

_, err := client.Repositories.Repository.SetGroupPermissions(&bitbucket.RepositoryGroupPermissionsOptions{
Owner: resourceData.Get("workspace").(string),
RepoSlug: resourceData.Get("repository").(string),
Group: resourceData.Get("group").(string),
Permission: resourceData.Get("permission").(string),
})

if err != nil {
return diag.FromErr(fmt.Errorf("unable to create group permission with error: %s", err))
}
Expand All @@ -76,41 +73,39 @@ func resourceBitbucketGroupPermissionCreate(ctx context.Context, resourceData *s
}

func resourceBitbucketGroupPermissionRead(ctx context.Context, resourceData *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*Clients).V1

groupPermission, err := client.GroupPrivileges.Get(
&v1.GroupPrivilegeOptions{
WorkspaceId: resourceData.Get("workspace").(string),
RepoSlug: resourceData.Get("repository").(string),
GroupOwner: resourceData.Get("workspace").(string),
GroupSlug: resourceData.Get("group").(string),
},
)
client := meta.(*Clients).V2

workspace := resourceData.Get("workspace").(string)
repository := resourceData.Get("repository").(string)

groupPermission, err := client.Repositories.Repository.GetGroupPermissions(&bitbucket.RepositoryGroupPermissionsOptions{
Owner: workspace,
RepoSlug: repository,
Group: resourceData.Get("group").(string),
Permission: resourceData.Get("permission").(string),
})
if err != nil {
return diag.FromErr(fmt.Errorf("unable to get group permission with error: %s", err))
}

_ = resourceData.Set("workspace", groupPermission.Group.Owner.Uuid)
_ = resourceData.Set("repository", groupPermission.Repository.Slug)
_ = resourceData.Set("group", groupPermission.Group.Slug)
_ = resourceData.Set("permission", groupPermission.Privilege)
_ = resourceData.Set("permission", groupPermission.Permission)

resourceData.SetId(generateGroupPermissionResourceId(groupPermission.Group.Owner.Uuid, groupPermission.Repository.Slug, groupPermission.Group.Slug))
resourceData.SetId(generateGroupPermissionResourceId(workspace, repository, groupPermission.Group.Slug))

return nil
}

func resourceBitbucketGroupPermissionDelete(ctx context.Context, resourceData *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*Clients).V1

err := client.GroupPrivileges.Delete(
&v1.GroupPrivilegeOptions{
WorkspaceId: resourceData.Get("workspace").(string),
RepoSlug: resourceData.Get("repository").(string),
GroupOwner: resourceData.Get("workspace").(string),
GroupSlug: resourceData.Get("group").(string),
},
)
client := meta.(*Clients).V2

_, err := client.Repositories.Repository.DeleteGroupPermissions(&bitbucket.RepositoryGroupPermissionsOptions{
Owner: resourceData.Get("workspace").(string),
RepoSlug: resourceData.Get("repository").(string),
Group: resourceData.Get("group").(string),
Permission: resourceData.Get("permission").(string),
})

if err != nil {
return diag.FromErr(fmt.Errorf("unable to delete group permission with error: %s", err))
}
Expand Down

0 comments on commit c716d34

Please sign in to comment.