github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_request_body.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 8 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/edgegriderr" 9 validation "github.com/go-ozzo/ozzo-validation/v4" 10 ) 11 12 type ( 13 // The AdvancedSettingsRequestBody interface supports retrieving, updating or removing settings 14 // related to Request Size Inspection Limit. 15 AdvancedSettingsRequestBody interface { 16 // GetAdvancedSettingsRequestBody lists the Request Size Inspection Limit settings for a configuration or policy. If 17 // the request specifies a policy, then the settings for that policy will be returned, otherwise the 18 // settings for the configuration will be returned. 19 // 20 // See: https://techdocs.akamai.com/application-security/reference/get-advanced-settings-request-body 21 GetAdvancedSettingsRequestBody(ctx context.Context, params GetAdvancedSettingsRequestBodyRequest) (*GetAdvancedSettingsRequestBodyResponse, error) 22 23 // UpdateAdvancedSettingsRequestBody updates the Request Size Inspection Limit settings for a 24 // configuration or policy. If the request specifies a policy, then the settings for that policy will be 25 // updated, otherwise the settings for the configuration will be updated. 26 // 27 // See: https://techdocs.akamai.com/application-security/reference/put-advanced-settings-request-body 28 UpdateAdvancedSettingsRequestBody(ctx context.Context, params UpdateAdvancedSettingsRequestBodyRequest) (*UpdateAdvancedSettingsRequestBodyResponse, error) 29 30 // RemoveAdvancedSettingsRequestBody updates the Request Size Inspection Limit settings to default for a 31 // configuration or policy. If the request specifies a policy, then the settings for that policy will be 32 // updated, otherwise the settings for the configuration will be updated. 33 // 34 // See: https://techdocs.akamai.com/application-security/reference/put-advanced-settings-request-body 35 RemoveAdvancedSettingsRequestBody(ctx context.Context, params RemoveAdvancedSettingsRequestBodyRequest) (*RemoveAdvancedSettingsRequestBodyResponse, error) 36 } 37 38 // GetAdvancedSettingsRequestBodyRequest is used to retrieve the Request Size Inspection Limit settings for a configuration or policy. 39 GetAdvancedSettingsRequestBodyRequest struct { 40 ConfigID int 41 Version int 42 PolicyID string 43 } 44 45 // GetAdvancedSettingsRequestBodyResponse is returned from a call to GetAdvancedSettingsRequestBody. 46 GetAdvancedSettingsRequestBodyResponse struct { 47 RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"` 48 } 49 50 // UpdateAdvancedSettingsRequestBodyRequest is used to update the Request body settings for a configuration or policy. 51 UpdateAdvancedSettingsRequestBodyRequest struct { 52 ConfigID int 53 Version int 54 PolicyID string 55 RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"` 56 } 57 58 // UpdateAdvancedSettingsRequestBodyResponse is returned from a call to UpdateAdvancedSettingsRequestBody. 59 UpdateAdvancedSettingsRequestBodyResponse struct { 60 RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"` 61 } 62 63 // RemoveAdvancedSettingsRequestBodyRequest is used to reset the Request body settings for a configuration or policy. 64 RemoveAdvancedSettingsRequestBodyRequest struct { 65 ConfigID int 66 Version int 67 PolicyID string 68 RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"` 69 } 70 71 // RemoveAdvancedSettingsRequestBodyResponse is returned from a call to RemoveAdvancedSettingsRequestBody. 72 RemoveAdvancedSettingsRequestBodyResponse struct { 73 RequestBodyInspectionLimitInKB RequestBodySizeLimit `json:"requestBodyInspectionLimitInKB"` 74 } 75 76 // RequestBodySizeLimit is used to create an "enum" of possible types default, 8, 16, 32 77 RequestBodySizeLimit string 78 ) 79 80 const ( 81 // Default RequestBodySize 82 Default RequestBodySizeLimit = "default" 83 // Limit8KB RequestBodySize 84 Limit8KB RequestBodySizeLimit = "8" 85 // Limit16KB RequestBodySize 86 Limit16KB RequestBodySizeLimit = "16" 87 // Limit32KB RequestBodySize 88 Limit32KB RequestBodySizeLimit = "32" 89 ) 90 91 // Validate validates a GetAdvancedSettingsRequestBodyRequest. 92 func (v GetAdvancedSettingsRequestBodyRequest) Validate() error { 93 return edgegriderr.ParseValidationErrors(validation.Errors{ 94 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 95 "Version": validation.Validate(v.Version, validation.Required), 96 }) 97 } 98 99 // Validate validates an UpdateAdvancedSettingsRequestBodyRequest. 100 func (v UpdateAdvancedSettingsRequestBodyRequest) Validate() error { 101 return edgegriderr.ParseValidationErrors(validation.Errors{ 102 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 103 "Version": validation.Validate(v.Version, validation.Required), 104 }) 105 } 106 107 // Validate validates an RemoveAdvancedSettingsRequestBodyRequest. 108 func (v RemoveAdvancedSettingsRequestBodyRequest) Validate() error { 109 return edgegriderr.ParseValidationErrors(validation.Errors{ 110 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 111 "Version": validation.Validate(v.Version, validation.Required), 112 }) 113 } 114 115 func (a *appsec) GetAdvancedSettingsRequestBody(ctx context.Context, params GetAdvancedSettingsRequestBodyRequest) (*GetAdvancedSettingsRequestBodyResponse, error) { 116 logger := a.Log(ctx) 117 logger.Debug("GetAdvancedSettingsRequestBody") 118 119 if err := params.Validate(); err != nil { 120 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 121 } 122 123 uri := getRequestBodyURI(params.ConfigID, params.Version, params.PolicyID) 124 125 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 126 if err != nil { 127 return nil, fmt.Errorf("failed to create GetAdvancedSettingsRequestBody request: %w", err) 128 } 129 130 var result GetAdvancedSettingsRequestBodyResponse 131 resp, err := a.Exec(req, &result) 132 if err != nil { 133 return nil, fmt.Errorf("get advanced settings request body request failed: %w", err) 134 } 135 136 if resp.StatusCode != http.StatusOK { 137 return nil, a.Error(resp) 138 } 139 140 return &result, nil 141 } 142 143 func (a *appsec) UpdateAdvancedSettingsRequestBody(ctx context.Context, params UpdateAdvancedSettingsRequestBodyRequest) (*UpdateAdvancedSettingsRequestBodyResponse, error) { 144 logger := a.Log(ctx) 145 logger.Debug("UpdateAdvancedSettingsRequestBody") 146 147 if err := params.Validate(); err != nil { 148 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 149 } 150 151 uri := getRequestBodyURI(params.ConfigID, params.Version, params.PolicyID) 152 153 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 154 if err != nil { 155 return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsRequestBody request: %w", err) 156 } 157 158 var result UpdateAdvancedSettingsRequestBodyResponse 159 resp, err := a.Exec(req, &result, params) 160 if err != nil { 161 return nil, fmt.Errorf("update advanced settings request body request failed: %w", err) 162 } 163 164 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 165 return nil, a.Error(resp) 166 } 167 168 return &result, nil 169 } 170 171 func (a *appsec) RemoveAdvancedSettingsRequestBody(ctx context.Context, params RemoveAdvancedSettingsRequestBodyRequest) (*RemoveAdvancedSettingsRequestBodyResponse, error) { 172 logger := a.Log(ctx) 173 logger.Debug("RemoveAdvancedSettingsRequestBody") 174 175 if err := params.Validate(); err != nil { 176 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 177 } 178 179 uri := getRequestBodyURI(params.ConfigID, params.Version, params.PolicyID) 180 181 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 182 if err != nil { 183 return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsRequestBody request: %w", err) 184 } 185 186 var result RemoveAdvancedSettingsRequestBodyResponse 187 resp, err := a.Exec(req, &result, params) 188 if err != nil { 189 return nil, fmt.Errorf("remove advanced settings request body request failed: %w", err) 190 } 191 192 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 193 return nil, a.Error(resp) 194 } 195 196 return &result, nil 197 } 198 199 func getRequestBodyURI(configID, configVersion int, policyID string) string { 200 var uri string 201 if policyID != "" { 202 uri = fmt.Sprintf( 203 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/request-body", configID, configVersion, policyID) 204 } else { 205 uri = fmt.Sprintf( 206 "/appsec/v1/configs/%d/versions/%d/advanced-settings/request-body", configID, configVersion) 207 } 208 return uri 209 }