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  }