Skip to content

Commit

Permalink
Merge pull request #109 from ctreminiom/feature/confluence-space-perm…
Browse files Browse the repository at this point in the history
…issions

✨ Added the Space Permission service.
  • Loading branch information
ctreminiom authored Mar 8, 2022
2 parents 4f29d49 + d7a5bd3 commit c94c19e
Show file tree
Hide file tree
Showing 7 changed files with 667 additions and 4 deletions.
6 changes: 5 additions & 1 deletion confluence/confluence.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ func New(httpClient *http.Client, site string) (client *Client, err error) {
Version: &ContentVersionService{client: client},
}

client.Space = &SpaceService{client: client}
client.Space = &SpaceService{
client: client,
Permission: &SpacePermissionService{client: client},
}

client.Label = &LabelService{client: client}
client.Search = &SearchService{client: client}
return
Expand Down
12 changes: 12 additions & 0 deletions confluence/mocks/space-permission-v2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"id": 2154,
"subject": {
"type": "user",
"identifier": "<string>"
},
"operation": {
"key": "administer",
"target": "page"
},
"_links": {}
}
3 changes: 2 additions & 1 deletion confluence/space.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import (
)

type SpaceService struct {
client *Client
client *Client
Permission *SpacePermissionService
}

// Gets returns all spaces. The returned spaces are ordered alphabetically in ascending order by space key.
Expand Down
98 changes: 98 additions & 0 deletions confluence/spacePermission.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
package confluence

import (
"context"
"fmt"
"github.com/ctreminiom/go-atlassian/pkg/infra/models"
"net/http"
)

type SpacePermissionService struct{ client *Client }

// Add adds new permission to space. If the permission to be added is a group permission, the group can be identified by its group name or group id.
// Docs: https://docs.go-atlassian.io/confluence-cloud/space/permissions#add-new-permission-to-space
func (s *SpacePermissionService) Add(ctx context.Context, spaceKey string, payload *models.SpacePermissionPayloadScheme) (
result *models.SpacePermissionV2Scheme, response *ResponseScheme, err error) {

if len(spaceKey) == 0 {
return nil, nil, models.ErrNoSpaceKeyError
}

endpoint := fmt.Sprintf("/wiki/rest/api/space/%v/permission", spaceKey)

payloadAsReader, err := transformStructToReader(payload)
if err != nil {
return nil, nil, err
}

request, err := s.client.newRequest(ctx, http.MethodPost, endpoint, payloadAsReader)
if err != nil {
return nil, nil, err
}

request.Header.Set("Accept", "application/json")
request.Header.Set("Content-Type", "application/json")

response, err = s.client.Call(request, &result)
if err != nil {
return nil, response, err
}

return
}

// Bulk adds new custom content permission to space.
// If the permission to be added is a group permission, the group can be identified by its group name or group id.
// Docs: https://docs.go-atlassian.io/confluence-cloud/space/permissions#add-new-custom-content-permission-to-space
func (s *SpacePermissionService) Bulk(ctx context.Context, spaceKey string, payload *models.SpacePermissionArrayPayloadScheme) (response *ResponseScheme, err error) {

if len(spaceKey) == 0 {
return nil, models.ErrNoSpaceKeyError
}

endpoint := fmt.Sprintf("/wiki/rest/api/space/%v/permission/custom-content", spaceKey)

payloadAsReader, err := transformStructToReader(payload)
if err != nil {
return nil, err
}

request, err := s.client.newRequest(ctx, http.MethodPost, endpoint, payloadAsReader)
if err != nil {
return nil, err
}

request.Header.Set("Accept", "application/json")
request.Header.Set("Content-Type", "application/json")

response, err = s.client.Call(request, nil)
if err != nil {
return response, err
}

return
}

// Remove removes a space permission.
// Note that removing Read Space permission for a user or group will remove all the space permissions for that user or group.
// Docs: https://docs.go-atlassian.io/confluence-cloud/space/permissions#remove-a-space-permission
func (s *SpacePermissionService) Remove(ctx context.Context, spaceKey string, permissionId int) (response *ResponseScheme, err error) {

if len(spaceKey) == 0 {
return nil, models.ErrNoSpaceKeyError
}

endpoint := fmt.Sprintf("/wiki/rest/api/space/%v/permission/%v", spaceKey, permissionId)

request, err := s.client.newRequest(ctx, http.MethodDelete, endpoint, nil)
if err != nil {
return nil, err
}

response, err = s.client.Call(request, nil)
if err != nil {
return response, err
}

return
}
Loading

0 comments on commit c94c19e

Please sign in to comment.