github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/iam/blocked_properties.go (about) 1 package iam 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "net/http" 8 "net/url" 9 10 validation "github.com/go-ozzo/ozzo-validation/v4" 11 ) 12 13 type ( 14 // BlockedProperties is the IAM user blocked properties API interface 15 BlockedProperties interface { 16 // ListBlockedProperties returns all properties a user doesn't have access to in a group 17 // 18 // See: https://techdocs.akamai.com/iam-user-admin/reference/get-blocked-properties 19 ListBlockedProperties(context.Context, ListBlockedPropertiesRequest) ([]int64, error) 20 21 // UpdateBlockedProperties removes or grant user access to properties 22 // 23 // See: https://techdocs.akamai.com/iam-user-admin/reference/put-blocked-properties 24 UpdateBlockedProperties(context.Context, UpdateBlockedPropertiesRequest) ([]int64, error) 25 } 26 27 // ListBlockedPropertiesRequest contains the request parameters for the list blocked properties endpoint 28 ListBlockedPropertiesRequest struct { 29 IdentityID string 30 GroupID int64 31 } 32 33 // UpdateBlockedPropertiesRequest contains the request parameters for the update blocked properties endpoint 34 UpdateBlockedPropertiesRequest struct { 35 IdentityID string 36 GroupID int64 37 Properties []int64 38 } 39 ) 40 41 var ( 42 // ErrListBlockedProperties is returned when ListBlockedPropertiesRequest fails 43 ErrListBlockedProperties = errors.New("list blocked properties") 44 45 // ErrUpdateBlockedProperties is returned when UpdateBlockedPropertiesRequest fails 46 ErrUpdateBlockedProperties = errors.New("update blocked properties") 47 ) 48 49 // Validate validates ListBlockedPropertiesRequest 50 func (r ListBlockedPropertiesRequest) Validate() error { 51 return validation.Errors{ 52 "IdentityID": validation.Validate(r.IdentityID, validation.Required), 53 "GroupID": validation.Validate(r.GroupID, validation.Required), 54 }.Filter() 55 } 56 57 // Validate validates UpdateBlockedPropertiesRequest 58 func (r UpdateBlockedPropertiesRequest) Validate() error { 59 return validation.Errors{ 60 "IdentityID": validation.Validate(r.IdentityID, validation.Required), 61 "GroupID": validation.Validate(r.GroupID, validation.Required), 62 }.Filter() 63 } 64 65 func (i *iam) ListBlockedProperties(ctx context.Context, params ListBlockedPropertiesRequest) ([]int64, error) { 66 if err := params.Validate(); err != nil { 67 return nil, fmt.Errorf("%s: %w:\n%s", ErrListBlockedProperties, ErrStructValidation, err) 68 } 69 70 u, err := url.Parse(fmt.Sprintf("/identity-management/v2/user-admin/ui-identities/%s/groups/%d/blocked-properties", params.IdentityID, params.GroupID)) 71 if err != nil { 72 return nil, fmt.Errorf("%w: failed to parse url: %s", ErrListBlockedProperties, err) 73 } 74 75 req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), nil) 76 if err != nil { 77 return nil, fmt.Errorf("%w: failed to create request: %s", ErrListBlockedProperties, err) 78 } 79 80 var blockedProperties []int64 81 resp, err := i.Exec(req, &blockedProperties) 82 if err != nil { 83 return nil, fmt.Errorf("%w: request failed: %s", ErrListBlockedProperties, err) 84 } 85 86 if resp.StatusCode != http.StatusOK { 87 return nil, fmt.Errorf("%s: %w", ErrListBlockedProperties, i.Error(resp)) 88 } 89 90 return blockedProperties, nil 91 } 92 93 func (i *iam) UpdateBlockedProperties(ctx context.Context, params UpdateBlockedPropertiesRequest) ([]int64, error) { 94 if err := params.Validate(); err != nil { 95 return nil, fmt.Errorf("%s: %w:\n%s", ErrUpdateBlockedProperties, ErrStructValidation, err) 96 } 97 98 u, err := url.Parse(fmt.Sprintf("/identity-management/v2/user-admin/ui-identities/%s/groups/%d/blocked-properties", params.IdentityID, params.GroupID)) 99 if err != nil { 100 return nil, fmt.Errorf("%w: failed to parse url: %s", ErrUpdateBlockedProperties, err) 101 } 102 103 req, err := http.NewRequestWithContext(ctx, http.MethodPut, u.String(), nil) 104 if err != nil { 105 return nil, fmt.Errorf("%w: failed to create request: %s", ErrUpdateBlockedProperties, err) 106 } 107 108 var blockedProperties []int64 109 resp, err := i.Exec(req, &blockedProperties, params.Properties) 110 if err != nil { 111 return nil, fmt.Errorf("%w: request failed: %s", ErrUpdateBlockedProperties, err) 112 } 113 114 if resp.StatusCode != http.StatusOK { 115 return nil, fmt.Errorf("%s: %w", ErrUpdateBlockedProperties, i.Error(resp)) 116 } 117 118 return blockedProperties, nil 119 }