github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/iamuum/iamuumv2/dynamic_rules.go (about)

     1  package iamuumv2
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/IBM-Cloud/bluemix-go/client"
     7  )
     8  
     9  type CreateRuleRequest struct {
    10  	Name       string      `json:"name"`
    11  	Expiration int         `json:"expiration"`
    12  	RealmName  string      `json:"realm_name,omitempty"`
    13  	Conditions []Condition `json:"conditions,omitempty"`
    14  }
    15  
    16  type Condition struct {
    17  	Claim    string `json:"claim"`
    18  	Operator string `json:"operator"`
    19  	Value    string `json:"value,omitempty"`
    20  }
    21  
    22  type CreateRuleResponse struct {
    23  	CreateRuleRequest
    24  	RuleID           string `json:"id"`
    25  	AccessGroupID    string `json:"access_group_id"`
    26  	AccountID        string `json:"account_id"`
    27  	CreatedAt        string `json:"created_at"`
    28  	CreatedByID      string `json:"created_by_id"`
    29  	LastModifiedAt   string `json:"last_modified_at"`
    30  	LastModifiedByID string `json:"last_modified_by_id"`
    31  }
    32  
    33  type GetResponse struct {
    34  	Rules []CreateRuleResponse `json:"rules"`
    35  }
    36  
    37  type DynamicRuleRepository interface {
    38  	Create(groupID string, request CreateRuleRequest) (CreateRuleResponse, error)
    39  	List(groupID string) ([]CreateRuleResponse, error)
    40  	Get(groupID, ruleID string) (CreateRuleResponse, string, error)
    41  	Replace(groupID, ruleID string, request CreateRuleRequest, etag string) (CreateRuleResponse, error)
    42  	Delete(groupID, ruleID string) error
    43  }
    44  
    45  type dynamicRuleRepository struct {
    46  	client *client.Client
    47  }
    48  
    49  func NewDynamicRuleRepository(c *client.Client) DynamicRuleRepository {
    50  	return &dynamicRuleRepository{
    51  		client: c,
    52  	}
    53  }
    54  
    55  func (r *dynamicRuleRepository) Create(groupID string, request CreateRuleRequest) (CreateRuleResponse, error) {
    56  	res := CreateRuleResponse{}
    57  	_, err := r.client.Post(fmt.Sprintf("/v2/groups/%s/rules", groupID), &request, &res)
    58  	if err != nil {
    59  		return CreateRuleResponse{}, err
    60  	}
    61  	return res, nil
    62  }
    63  
    64  func (r *dynamicRuleRepository) List(groupID string) ([]CreateRuleResponse, error) {
    65  	res := GetResponse{}
    66  	_, err := r.client.Get(fmt.Sprintf("/v2/groups/%s/rules", groupID), &res)
    67  	if err != nil {
    68  		return []CreateRuleResponse{}, err
    69  	}
    70  	return res.Rules, nil
    71  }
    72  
    73  func (r *dynamicRuleRepository) Get(groupID, ruleID string) (CreateRuleResponse, string, error) {
    74  	res := CreateRuleResponse{}
    75  	response, err := r.client.Get(fmt.Sprintf("/v2/groups/%s/rules/%s", groupID, ruleID), &res)
    76  	if err != nil {
    77  		return CreateRuleResponse{}, "", err
    78  	}
    79  	return res, response.Header.Get("Etag"), nil
    80  }
    81  
    82  func (r *dynamicRuleRepository) Replace(groupID, ruleID string, request CreateRuleRequest, etag string) (CreateRuleResponse, error) {
    83  	res := CreateRuleResponse{}
    84  	header := make(map[string]string)
    85  
    86  	header["IF-Match"] = etag
    87  	_, err := r.client.Put(fmt.Sprintf("/v2/groups/%s/rules/%s", groupID, ruleID), &request, &res, header)
    88  	if err != nil {
    89  		return CreateRuleResponse{}, err
    90  	}
    91  	return res, nil
    92  }
    93  
    94  //Delete Function
    95  func (r *dynamicRuleRepository) Delete(groupID, ruleID string) error {
    96  	_, err := r.client.Delete(fmt.Sprintf("/v2/groups/%s/rules/%s", groupID, ruleID))
    97  	return err
    98  }