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  }