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 }