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 }