github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/edgeworkers/permission_group.go (about) 1 package edgeworkers 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "net/http" 8 9 validation "github.com/go-ozzo/ozzo-validation/v4" 10 ) 11 12 type ( 13 // PermissionGroups is an edgeworkers permission groups API interface 14 PermissionGroups interface { 15 // GetPermissionGroup gets details on the capabilities enabled within a specified group 16 // 17 // See: https://techdocs.akamai.com/edgeworkers/reference/get-group 18 GetPermissionGroup(context.Context, GetPermissionGroupRequest) (*PermissionGroup, error) 19 20 // ListPermissionGroups lists groups and the associated permission capabilities 21 // 22 // See: https://techdocs.akamai.com/edgeworkers/reference/get-groups 23 ListPermissionGroups(context.Context) (*ListPermissionGroupsResponse, error) 24 } 25 26 // GetPermissionGroupRequest contains parameters used to get a permission group 27 GetPermissionGroupRequest struct { 28 GroupID string 29 } 30 31 // PermissionGroup represents a single permission group object 32 PermissionGroup struct { 33 ID int64 `json:"groupId"` 34 Name string `json:"groupName"` 35 Capabilities []string `json:"capabilities"` 36 } 37 38 // ListPermissionGroupsResponse represents a response object returned by ListPermissionGroups 39 ListPermissionGroupsResponse struct { 40 PermissionGroups []PermissionGroup `json:"groups"` 41 } 42 ) 43 44 // Validate validates GetPermissionGroupRequest 45 func (g GetPermissionGroupRequest) Validate() error { 46 return validation.Errors{ 47 "GroupID": validation.Validate(g.GroupID, validation.Required), 48 }.Filter() 49 } 50 51 var ( 52 // ErrGetPermissionGroup is returned in case an error occurs on GetPermissionGroup operation 53 ErrGetPermissionGroup = errors.New("get a permission group") 54 // ErrListPermissionGroups is returned in case an error occurs on ListPermissionGroups operation 55 ErrListPermissionGroups = errors.New("list permission groups") 56 ) 57 58 func (e *edgeworkers) GetPermissionGroup(ctx context.Context, params GetPermissionGroupRequest) (*PermissionGroup, error) { 59 logger := e.Log(ctx) 60 logger.Debug("GetPermissionGroup") 61 62 if err := params.Validate(); err != nil { 63 return nil, fmt.Errorf("%s: %w: %s", ErrGetPermissionGroup, ErrStructValidation, err) 64 } 65 66 uri := fmt.Sprintf("/edgeworkers/v1/groups/%s", params.GroupID) 67 68 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 69 if err != nil { 70 return nil, fmt.Errorf("%w: failed to create request: %s", ErrGetPermissionGroup, err) 71 } 72 73 var result PermissionGroup 74 resp, err := e.Exec(req, &result) 75 if err != nil { 76 return nil, fmt.Errorf("%w: request failed: %s", ErrGetPermissionGroup, err) 77 } 78 79 if resp.StatusCode != http.StatusOK { 80 return nil, fmt.Errorf("%s: %w", ErrGetPermissionGroup, e.Error(resp)) 81 } 82 83 return &result, nil 84 } 85 86 func (e *edgeworkers) ListPermissionGroups(ctx context.Context) (*ListPermissionGroupsResponse, error) { 87 logger := e.Log(ctx) 88 logger.Debug("ListPermissionGroups") 89 90 uri := fmt.Sprintf("/edgeworkers/v1/groups") 91 92 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 93 if err != nil { 94 return nil, fmt.Errorf("%w: failed to create request: %s", ErrListPermissionGroups, err) 95 } 96 97 var result ListPermissionGroupsResponse 98 resp, err := e.Exec(req, &result) 99 if err != nil { 100 return nil, fmt.Errorf("%w: request failed: %s", ErrListPermissionGroups, err) 101 } 102 103 if resp.StatusCode != http.StatusOK { 104 return nil, fmt.Errorf("%s: %w", ErrListPermissionGroups, e.Error(resp)) 105 } 106 107 return &result, nil 108 }