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 }