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