github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/rate_policy_action.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 validation "github.com/go-ozzo/ozzo-validation/v4" 9 ) 10 11 type ( 12 // The RatePolicyAction interface supports retrieving and modifying the action associated with 13 // a specified rate policy, or with all rate policies in a security policy. 14 RatePolicyAction interface { 15 // GetRatePolicyActions returns a list of all rate policies currently in use with the actions each policy takes when conditions are met. 16 // 17 // See: https://techdocs.akamai.com/application-security/reference/get-rate-policies-actions 18 GetRatePolicyActions(ctx context.Context, params GetRatePolicyActionsRequest) (*GetRatePolicyActionsResponse, error) 19 20 // GetRatePolicyAction returns a specified rate policy currently in use with the action. 21 // 22 // See: https://techdocs.akamai.com/application-security/reference/get-rate-policies-actions 23 // Deprecated: this method will be removed in a future release. Use GetRatePolicyActions instead. 24 GetRatePolicyAction(ctx context.Context, params GetRatePolicyActionRequest) (*GetRatePolicyActionResponse, error) 25 26 // UpdateRatePolicyAction 27 // 28 // See: https://techdocs.akamai.com/application-security/reference/put-rate-policy-action 29 UpdateRatePolicyAction(ctx context.Context, params UpdateRatePolicyActionRequest) (*UpdateRatePolicyActionResponse, error) 30 } 31 32 // GetRatePolicyActionsRequest is used to retrieve a configuration's rate policies and their associated actions. 33 GetRatePolicyActionsRequest struct { 34 ConfigID int `json:"configId"` 35 Version int `json:"version"` 36 PolicyID string `json:"policyId"` 37 RatePolicyID int `json:"id"` 38 Ipv4Action string `json:"ipv4Action"` 39 Ipv6Action string `json:"ipv6Action"` 40 } 41 42 // GetRatePolicyActionsResponse is returned from a call to GetRatePolicyActions. 43 GetRatePolicyActionsResponse struct { 44 RatePolicyActions []struct { 45 ID int `json:"id"` 46 Ipv4Action string `json:"ipv4Action,omitempty"` 47 Ipv6Action string `json:"ipv6Action,omitempty"` 48 } `json:"ratePolicyActions,omitempty"` 49 } 50 51 // GetRatePolicyActionRequest is used to retrieve a configuration's rate policies and their associated actions. 52 // Deprecated: this struct will be removed in a future release. 53 GetRatePolicyActionRequest struct { 54 ConfigID int `json:"configId"` 55 Version int `json:"version"` 56 PolicyID string `json:"policyId"` 57 ID int `json:"id"` 58 Ipv4Action string `json:"ipv4Action"` 59 Ipv6Action string `json:"ipv6Action"` 60 } 61 62 // GetRatePolicyActionResponse is returned from a call to GetRatePolicyAction. 63 // Deprecated: this struct will be removed in a future release. 64 GetRatePolicyActionResponse struct { 65 RatePolicyActions []struct { 66 ID int `json:"id"` 67 Ipv4Action string `json:"ipv4Action,omitempty"` 68 Ipv6Action string `json:"ipv6Action,omitempty"` 69 } `json:"ratePolicyActions"` 70 } 71 72 // UpdateRatePolicyActionRequest is used to update the actions for a rate policy. 73 UpdateRatePolicyActionRequest struct { 74 ConfigID int `json:"-"` 75 Version int `json:"-"` 76 PolicyID string `json:"-"` 77 RatePolicyID int `json:"-"` 78 Ipv4Action string `json:"ipv4Action"` 79 Ipv6Action string `json:"ipv6Action"` 80 } 81 82 // UpdateRatePolicyActionResponse is returned from a call to UpdateRatePolicy. 83 UpdateRatePolicyActionResponse struct { 84 ID int `json:"id"` 85 Ipv4Action string `json:"ipv4Action"` 86 Ipv6Action string `json:"ipv6Action"` 87 } 88 89 // RatePolicyActionPost is used to describe actions that may be taken as part of a rate policy. 90 RatePolicyActionPost struct { 91 ID int `json:"id"` 92 Ipv4Action string `json:"ipv4Action"` 93 Ipv6Action string `json:"ipv6Action"` 94 } 95 ) 96 97 // Validate validates a GetRatePolicyActionRequest. 98 // Deprecated: this method will be removed in a future release. 99 func (v GetRatePolicyActionRequest) Validate() error { 100 return validation.Errors{ 101 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 102 "Version": validation.Validate(v.Version, validation.Required), 103 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 104 }.Filter() 105 } 106 107 // Validate validates a GetRatePolicyActionsRequest. 108 func (v GetRatePolicyActionsRequest) Validate() error { 109 return validation.Errors{ 110 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 111 "Version": validation.Validate(v.Version, validation.Required), 112 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 113 }.Filter() 114 } 115 116 // Validate validates an UpdateRatePolicyActionRequest. 117 func (v UpdateRatePolicyActionRequest) Validate() error { 118 return validation.Errors{ 119 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 120 "Version": validation.Validate(v.Version, validation.Required), 121 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 122 "RatePolicyID": validation.Validate(v.RatePolicyID, validation.Required), 123 }.Filter() 124 } 125 126 // Deprecated: this method will be removed in a future release. 127 func (p *appsec) GetRatePolicyAction(ctx context.Context, params GetRatePolicyActionRequest) (*GetRatePolicyActionResponse, error) { 128 logger := p.Log(ctx) 129 logger.Debug("GetRatePolicyAction") 130 131 if err := params.Validate(); err != nil { 132 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 133 } 134 135 uri := fmt.Sprintf( 136 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/rate-policies", 137 params.ConfigID, 138 params.Version, 139 params.PolicyID) 140 141 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 142 if err != nil { 143 return nil, fmt.Errorf("failed to create GetRatePolicyAction request: %w", err) 144 } 145 146 var result GetRatePolicyActionResponse 147 resp, err := p.Exec(req, &result) 148 if err != nil { 149 return nil, fmt.Errorf("get rate policy action request failed: %w", err) 150 } 151 if resp.StatusCode != http.StatusOK { 152 return nil, p.Error(resp) 153 } 154 155 return &result, nil 156 } 157 158 func (p *appsec) GetRatePolicyActions(ctx context.Context, params GetRatePolicyActionsRequest) (*GetRatePolicyActionsResponse, error) { 159 logger := p.Log(ctx) 160 logger.Debug("GetRatePolicyActions") 161 162 if err := params.Validate(); err != nil { 163 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 164 } 165 166 uri := fmt.Sprintf( 167 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/rate-policies", 168 params.ConfigID, 169 params.Version, 170 params.PolicyID) 171 172 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 173 if err != nil { 174 return nil, fmt.Errorf("failed to create GetRatePolicyActions request: %w", err) 175 } 176 177 var result GetRatePolicyActionsResponse 178 resp, err := p.Exec(req, &result) 179 if err != nil { 180 return nil, fmt.Errorf("get rate policy actions request failed: %w", err) 181 } 182 if resp.StatusCode != http.StatusOK { 183 return nil, p.Error(resp) 184 } 185 186 if params.RatePolicyID != 0 { 187 var filteredResult GetRatePolicyActionsResponse 188 for _, val := range result.RatePolicyActions { 189 if val.ID == params.RatePolicyID { 190 filteredResult.RatePolicyActions = append(filteredResult.RatePolicyActions, val) 191 } 192 } 193 return &filteredResult, nil 194 } 195 196 return &result, nil 197 } 198 199 func (p *appsec) UpdateRatePolicyAction(ctx context.Context, params UpdateRatePolicyActionRequest) (*UpdateRatePolicyActionResponse, error) { 200 logger := p.Log(ctx) 201 logger.Debug("UpdateRatePolicyAction") 202 203 if err := params.Validate(); err != nil { 204 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 205 } 206 207 uri := fmt.Sprintf( 208 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/rate-policies/%d", 209 params.ConfigID, 210 params.Version, 211 params.PolicyID, 212 params.RatePolicyID, 213 ) 214 215 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 216 if err != nil { 217 return nil, fmt.Errorf("failed to create UpdateRatePolicyAction request: %w", err) 218 } 219 220 var result UpdateRatePolicyActionResponse 221 resp, err := p.Exec(req, &result, params) 222 if err != nil { 223 return nil, fmt.Errorf("update rate policy action request failed: %w", err) 224 } 225 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 226 return nil, p.Error(resp) 227 } 228 229 return &result, nil 230 }