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  }