github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_attack_payload_logging.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "net/http" 8 9 "github.com/akamai/AkamaiOPEN-edgegrid-golang/v8/pkg/edgegriderr" 10 validation "github.com/go-ozzo/ozzo-validation/v4" 11 ) 12 13 type ( 14 // The AdvancedSettingsAttackPayloadLogging interface supports retrieving, updating or removing settings 15 // related to Attack Payload logging. 16 AdvancedSettingsAttackPayloadLogging interface { 17 // GetAdvancedSettingsAttackPayloadLogging lists the attack payload logging settings for a configuration or policy. If 18 // the request specifies a policy, then the settings for that policy will be returned, otherwise the 19 // settings for the configuration will be returned. 20 // 21 // See: https://techdocs.akamai.com/application-security/reference/get-advanced-settings-attack-payload-logging 22 GetAdvancedSettingsAttackPayloadLogging(ctx context.Context, params GetAdvancedSettingsAttackPayloadLoggingRequest) (*GetAdvancedSettingsAttackPayloadLoggingResponse, error) 23 24 // UpdateAdvancedSettingsAttackPayloadLogging enables, disables, or updates the attack payload logging settings for a 25 // configuration or policy. If the request specifies a policy, then the settings for that policy will be 26 // updated, otherwise the settings for the configuration will be updated. 27 // 28 // See: https://techdocs.akamai.com/application-security/reference/put-advanced-settings-attack-payload-logging 29 UpdateAdvancedSettingsAttackPayloadLogging(ctx context.Context, params UpdateAdvancedSettingsAttackPayloadLoggingRequest) (*UpdateAdvancedSettingsAttackPayloadLoggingResponse, error) 30 31 // RemoveAdvancedSettingsAttackPayloadLogging disables attack payload logging for a configuration or policy. If the request 32 // specifies a policy, then attack payload logging will be disabled for that policy, otherwise logging will be 33 // disabled for the configuration. 34 // 35 // See: https://techdocs.akamai.com/application-security/reference/put-advanced-settings-attack-payload-logging 36 RemoveAdvancedSettingsAttackPayloadLogging(ctx context.Context, params RemoveAdvancedSettingsAttackPayloadLoggingRequest) (*RemoveAdvancedSettingsAttackPayloadLoggingResponse, error) 37 } 38 39 // GetAdvancedSettingsAttackPayloadLoggingRequest is used to retrieve the Attack Payload logging settings for a configuration or policy. 40 GetAdvancedSettingsAttackPayloadLoggingRequest struct { 41 ConfigID int 42 Version int 43 PolicyID string 44 } 45 46 // GetAdvancedSettingsAttackPayloadLoggingResponse is returned from a call to GetAdvancedSettingsAttackPayloadLogging. 47 GetAdvancedSettingsAttackPayloadLoggingResponse struct { 48 Override *bool `json:"override,omitempty"` 49 Enabled bool `json:"enabled"` 50 RequestBody AttackPayloadLoggingRequestBody `json:"requestBody"` 51 ResponseBody AttackPayloadLoggingResponseBody `json:"responseBody"` 52 } 53 54 // AttackPayloadLoggingRequestBody Type field represents whether attack payload is logged or not logged for RequestBody. 55 AttackPayloadLoggingRequestBody struct { 56 Type AttackPayloadType `json:"type"` 57 } 58 59 // AttackPayloadLoggingResponseBody Type field represents whether attack payload is logged or not logged for ResponseBody. 60 AttackPayloadLoggingResponseBody struct { 61 Type AttackPayloadType `json:"type"` 62 } 63 64 // UpdateAdvancedSettingsAttackPayloadLoggingRequest is used to update the Attack Payload logging settings for a configuration or policy. 65 UpdateAdvancedSettingsAttackPayloadLoggingRequest struct { 66 ConfigID int 67 Version int 68 PolicyID string 69 JSONPayloadRaw json.RawMessage `json:"-"` 70 } 71 72 // UpdateAdvancedSettingsAttackPayloadLoggingResponse is returned from a call to UpdateAdvancedSettingsAttackPayloadLogging. 73 UpdateAdvancedSettingsAttackPayloadLoggingResponse struct { 74 Override *bool `json:"override,omitempty"` 75 Enabled bool `json:"enabled"` 76 RequestBody AttackPayloadLoggingRequestBody `json:"requestBody"` 77 ResponseBody AttackPayloadLoggingResponseBody `json:"responseBody"` 78 } 79 80 // RemoveAdvancedSettingsAttackPayloadLoggingRequest is used to disable Attack Payload logging for a configuration or policy. 81 RemoveAdvancedSettingsAttackPayloadLoggingRequest struct { 82 ConfigID int 83 Version int 84 PolicyID string 85 Override bool `json:"override"` 86 Enabled bool `json:"enabled"` 87 RequestBody AttackPayloadLoggingRequestBody `json:"requestBody"` 88 ResponseBody AttackPayloadLoggingResponseBody `json:"responseBody"` 89 } 90 91 // RemoveAdvancedSettingsAttackPayloadLoggingResponse is returned from a call to RemoveAdvancedSettingsAttackPayloadLogging. 92 RemoveAdvancedSettingsAttackPayloadLoggingResponse struct { 93 Override *bool `json:"override,omitempty"` 94 Enabled bool `json:"enabled"` 95 RequestBody AttackPayloadLoggingRequestBody `json:"requestBody"` 96 ResponseBody AttackPayloadLoggingResponseBody `json:"responseBody"` 97 } 98 99 // AttackPayloadType is used to create an "enum" of possible types ATTACK_PAYLOAD or NONE 100 AttackPayloadType string 101 ) 102 103 const ( 104 // AttackPayload AttackPayloadType 105 AttackPayload AttackPayloadType = "ATTACK_PAYLOAD" 106 // None AttackPayloadType 107 None AttackPayloadType = "NONE" 108 ) 109 110 // Validate validates a GetAdvancedSettingsAttackPayloadLoggingRequest. 111 func (v GetAdvancedSettingsAttackPayloadLoggingRequest) Validate() error { 112 return edgegriderr.ParseValidationErrors(validation.Errors{ 113 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 114 "Version": validation.Validate(v.Version, validation.Required), 115 }) 116 } 117 118 // Validate validates an UpdateAdvancedSettingsAttackPayloadLoggingRequest. 119 func (v UpdateAdvancedSettingsAttackPayloadLoggingRequest) Validate() error { 120 return edgegriderr.ParseValidationErrors(validation.Errors{ 121 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 122 "Version": validation.Validate(v.Version, validation.Required), 123 }) 124 } 125 126 // Validate validates a RemoveAdvancedSettingsAttackPayloadLoggingRequest. 127 func (v RemoveAdvancedSettingsAttackPayloadLoggingRequest) Validate() error { 128 return edgegriderr.ParseValidationErrors(validation.Errors{ 129 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 130 "Version": validation.Validate(v.Version, validation.Required), 131 }) 132 } 133 134 func (a *appsec) GetAdvancedSettingsAttackPayloadLogging(ctx context.Context, params GetAdvancedSettingsAttackPayloadLoggingRequest) (*GetAdvancedSettingsAttackPayloadLoggingResponse, error) { 135 logger := a.Log(ctx) 136 logger.Debug("GetAdvancedSettingsAttackPayloadLogging") 137 138 if err := params.Validate(); err != nil { 139 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 140 } 141 142 uri := getURI(params.ConfigID, params.Version, params.PolicyID) 143 144 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 145 if err != nil { 146 return nil, fmt.Errorf("failed to create GetAdvancedSettingsAttackPayloadLogging request: %w", err) 147 } 148 149 var result GetAdvancedSettingsAttackPayloadLoggingResponse 150 resp, err := a.Exec(req, &result) 151 if err != nil { 152 return nil, fmt.Errorf("get advanced settings attack payload logging request failed: %w", err) 153 } 154 155 if resp.StatusCode != http.StatusOK { 156 return nil, a.Error(resp) 157 } 158 159 return &result, nil 160 } 161 162 func (a *appsec) UpdateAdvancedSettingsAttackPayloadLogging(ctx context.Context, params UpdateAdvancedSettingsAttackPayloadLoggingRequest) (*UpdateAdvancedSettingsAttackPayloadLoggingResponse, error) { 163 logger := a.Log(ctx) 164 logger.Debug("UpdateAdvancedSettingsAttackPayloadLogging") 165 166 if err := params.Validate(); err != nil { 167 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 168 } 169 170 uri := getURI(params.ConfigID, params.Version, params.PolicyID) 171 172 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 173 if err != nil { 174 return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsAttackPayloadLogging request: %w", err) 175 } 176 177 var result UpdateAdvancedSettingsAttackPayloadLoggingResponse 178 resp, err := a.Exec(req, &result, params.JSONPayloadRaw) 179 if err != nil { 180 return nil, fmt.Errorf("update advanced settings attack payload logging request failed: %w", err) 181 } 182 183 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 184 return nil, a.Error(resp) 185 } 186 187 return &result, nil 188 } 189 190 func (a *appsec) RemoveAdvancedSettingsAttackPayloadLogging(ctx context.Context, params RemoveAdvancedSettingsAttackPayloadLoggingRequest) (*RemoveAdvancedSettingsAttackPayloadLoggingResponse, error) { 191 192 if err := params.Validate(); err != nil { 193 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 194 } 195 196 uri := getURI(params.ConfigID, params.Version, params.PolicyID) 197 198 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 199 if err != nil { 200 return nil, fmt.Errorf("failed to create RemoveAdvancedSettingsAttackPayloadLogging request: %w", err) 201 } 202 203 var result RemoveAdvancedSettingsAttackPayloadLoggingResponse 204 resp, err := a.Exec(req, &result, params) 205 if err != nil { 206 return nil, fmt.Errorf("remove advanced settings attack payload logging request failed: %w", err) 207 } 208 209 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 210 return nil, a.Error(resp) 211 } 212 213 return &result, nil 214 } 215 216 func getURI(configID, configVersion int, policyID string) string { 217 var uri string 218 if policyID != "" { 219 uri = fmt.Sprintf( 220 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/logging/attack-payload", configID, configVersion, policyID) 221 } else { 222 uri = fmt.Sprintf( 223 "/appsec/v1/configs/%d/versions/%d/advanced-settings/logging/attack-payload", configID, configVersion) 224 } 225 return uri 226 }