github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_pragma_header.go (about)

     1  package appsec
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"net/http"
     8  
     9  	validation "github.com/go-ozzo/ozzo-validation/v4"
    10  )
    11  
    12  type (
    13  	// The AdvancedSettingsPragma interface supports retrieving or modifying the pragma header
    14  	// excluded conditions for a configuration or policy.
    15  	AdvancedSettingsPragma interface {
    16  		// GetAdvancedSettingsPragma returns the Pragma header's excluded conditions.
    17  		//
    18  		// See:https://techdocs.akamai.com/application-security/reference/get-policies-pragma-header
    19  		GetAdvancedSettingsPragma(ctx context.Context, params GetAdvancedSettingsPragmaRequest) (*GetAdvancedSettingsPragmaResponse, error)
    20  
    21  		// UpdateAdvancedSettingsPragma updates the pragma header excluded conditions.
    22  		//
    23  		// See: https://techdocs.akamai.com/application-security/reference/put-policies-pragma-header
    24  		UpdateAdvancedSettingsPragma(ctx context.Context, params UpdateAdvancedSettingsPragmaRequest) (*UpdateAdvancedSettingsPragmaResponse, error)
    25  	}
    26  
    27  	// GetAdvancedSettingsPragmaRequest is used to retrieve the pragma settings for a security policy.
    28  	GetAdvancedSettingsPragmaRequest struct {
    29  		ConfigID int    `json:"-"`
    30  		Version  int    `json:"-"`
    31  		PolicyID string `json:"-"`
    32  		Group    string `json:"group"`
    33  	}
    34  
    35  	// GetAdvancedSettingsPragmaResponse is returned from a call to GetAdvancedSettingsPragma.
    36  	GetAdvancedSettingsPragmaResponse struct {
    37  		Action            string             `json:"action,,omitempty"`
    38  		ConditionOperator string             `json:"conditionOperator,omitempty"`
    39  		ExcludeCondition  []ExcludeCondition `json:"excludeCondition,omitempty"`
    40  	}
    41  
    42  	// ExcludeCondition describes the pragma header's excluded conditions.
    43  	ExcludeCondition struct {
    44  		Type          string   `json:"type"`
    45  		PositiveMatch bool     `json:"positiveMatch"`
    46  		Header        string   `json:"header"`
    47  		Value         []string `json:"value"`
    48  		Name          string   `json:"name"`
    49  		ValueCase     bool     `json:"valueCase"`
    50  		ValueWildcard bool     `json:"valueWildcard"`
    51  		UseHeaders    bool     `json:"useHeaders"`
    52  	}
    53  
    54  	// UpdateAdvancedSettingsPragmaRequest is used to modify the pragma settings for a security policy.
    55  	UpdateAdvancedSettingsPragmaRequest struct {
    56  		ConfigID       int             `json:"-"`
    57  		Version        int             `json:"-"`
    58  		PolicyID       string          `json:"-"`
    59  		JsonPayloadRaw json.RawMessage `json:"-"`
    60  	}
    61  
    62  	// UpdateAdvancedSettingsPragmaResponse is returned from a call to UpdateAdvancedSettingsPragma.
    63  	UpdateAdvancedSettingsPragmaResponse struct {
    64  		Action            string             `json:"action"`
    65  		ConditionOperator string             `json:"conditionOperator"`
    66  		ExcludeCondition  []ExcludeCondition `json:"excludeCondition"`
    67  	}
    68  )
    69  
    70  // Validate validates a GetAdvancedSettingsPragmaRequest.
    71  func (v GetAdvancedSettingsPragmaRequest) Validate() error {
    72  	return validation.Errors{
    73  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    74  		"Version":  validation.Validate(v.Version, validation.Required),
    75  	}.Filter()
    76  }
    77  
    78  // Validate validates an UpdateAdvancedSettingsPragmaRequest.
    79  func (v UpdateAdvancedSettingsPragmaRequest) Validate() error {
    80  	return validation.Errors{
    81  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    82  		"Version":  validation.Validate(v.Version, validation.Required),
    83  	}.Filter()
    84  }
    85  
    86  func (p *appsec) GetAdvancedSettingsPragma(ctx context.Context, params GetAdvancedSettingsPragmaRequest) (*GetAdvancedSettingsPragmaResponse, error) {
    87  	logger := p.Log(ctx)
    88  	logger.Debug("GetAdvancedSettingsPragma")
    89  
    90  	if err := params.Validate(); err != nil {
    91  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    92  	}
    93  
    94  	var uri string
    95  	if params.PolicyID != "" {
    96  		uri = fmt.Sprintf(
    97  			"/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/pragma-header",
    98  			params.ConfigID,
    99  			params.Version,
   100  			params.PolicyID)
   101  	} else {
   102  		uri = fmt.Sprintf(
   103  			"/appsec/v1/configs/%d/versions/%d/advanced-settings/pragma-header",
   104  			params.ConfigID,
   105  			params.Version)
   106  	}
   107  
   108  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   109  	if err != nil {
   110  		return nil, fmt.Errorf("failed to create GetAdvancedSettingsPragma request: %w", err)
   111  	}
   112  	req.Header.Set("Content-Type", "application/json")
   113  
   114  	var result GetAdvancedSettingsPragmaResponse
   115  	resp, err := p.Exec(req, &result)
   116  	if err != nil {
   117  		return nil, fmt.Errorf("get advanced settings pragma request failed: %w", err)
   118  	}
   119  
   120  	if resp.StatusCode != http.StatusOK {
   121  		return nil, p.Error(resp)
   122  	}
   123  
   124  	return &result, nil
   125  }
   126  
   127  func (p *appsec) UpdateAdvancedSettingsPragma(ctx context.Context, params UpdateAdvancedSettingsPragmaRequest) (*UpdateAdvancedSettingsPragmaResponse, error) {
   128  	logger := p.Log(ctx)
   129  	logger.Debug("UpdateAdvancedSettingsPragma")
   130  
   131  	if err := params.Validate(); err != nil {
   132  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   133  	}
   134  
   135  	var uri string
   136  	if params.PolicyID != "" {
   137  		uri = fmt.Sprintf(
   138  			"/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/pragma-header",
   139  			params.ConfigID,
   140  			params.Version,
   141  			params.PolicyID)
   142  	} else {
   143  		uri = fmt.Sprintf(
   144  			"/appsec/v1/configs/%d/versions/%d/advanced-settings/pragma-header",
   145  			params.ConfigID,
   146  			params.Version)
   147  	}
   148  
   149  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   150  	if err != nil {
   151  		return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsPragma request: %w", err)
   152  	}
   153  
   154  	var result UpdateAdvancedSettingsPragmaResponse
   155  	resp, err := p.Exec(req, &result, params.JsonPayloadRaw)
   156  	if err != nil {
   157  		return nil, fmt.Errorf("update advanced settings pragma request failed: %w", err)
   158  	}
   159  
   160  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   161  		return nil, p.Error(resp)
   162  	}
   163  
   164  	return &result, nil
   165  }