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  }