github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_logging.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 AdvancedSettingsLogging interface supports retrieving, updating or removing settings 14 // related to HTTP header logging. 15 AdvancedSettingsLogging interface { 16 // GetAdvancedSettingsLogging lists the HTTP header logging 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-policies-logging 21 GetAdvancedSettingsLogging(ctx context.Context, params GetAdvancedSettingsLoggingRequest) (*GetAdvancedSettingsLoggingResponse, error) 22 23 // UpdateAdvancedSettingsLogging enables, disables, or updates the HTTP header logging 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-policies-logging 28 UpdateAdvancedSettingsLogging(ctx context.Context, params UpdateAdvancedSettingsLoggingRequest) (*UpdateAdvancedSettingsLoggingResponse, error) 29 30 // RemoveAdvancedSettingsLogging disables HTTP header logging for a configuration or policy. If the request 31 // specifies a policy, then header logging will be disabled for that policy, otherwise logging will be 32 // disabled for the configuration. 33 RemoveAdvancedSettingsLogging(ctx context.Context, params RemoveAdvancedSettingsLoggingRequest) (*RemoveAdvancedSettingsLoggingResponse, error) 34 } 35 36 // GetAdvancedSettingsLoggingRequest is used to retrieve the HTTP header logging settings for a configuration or policy. 37 GetAdvancedSettingsLoggingRequest struct { 38 ConfigID int `json:"-"` 39 Version int `json:"-"` 40 PolicyID string `json:"-"` 41 } 42 43 // GetAdvancedSettingsLoggingResponse is returned from a call to GetAdvancedSettingsLogging. 44 GetAdvancedSettingsLoggingResponse struct { 45 Override json.RawMessage `json:"override,omitempty"` 46 AllowSampling bool `json:"allowSampling"` 47 Cookies *AdvancedSettingsCookies `json:"cookies,omitempty"` 48 CustomHeaders *AdvancedSettingsCustomHeaders `json:"customHeaders,omitempty"` 49 StandardHeaders *AdvancedSettingsStandardHeaders `json:"standardHeaders,omitempty"` 50 } 51 52 // AdvancedSettingsCookies contains a list of cookie headers to be logged or not logged depending on the Type field. 53 AdvancedSettingsCookies struct { 54 Type string `json:"type"` 55 Values []string `json:"values,omitempty"` 56 } 57 58 // AdvancedSettingsCustomHeaders contains a list of custom headers to be logged or not logged depending on the Type field. 59 AdvancedSettingsCustomHeaders struct { 60 Type string `json:"type,omitempty"` 61 Values []string `json:"values,omitempty"` 62 } 63 64 // AdvancedSettingsStandardHeaders contains a list of standard headers to be logged or not logged depending on the Type field. 65 AdvancedSettingsStandardHeaders struct { 66 Type string `json:"type,omitempty"` 67 Values []string `json:"values,omitempty"` 68 } 69 70 // UpdateAdvancedSettingsLoggingRequest is used to update the HTTP header logging settings for a configuration or policy. 71 UpdateAdvancedSettingsLoggingRequest struct { 72 ConfigID int `json:"-"` 73 Version int `json:"-"` 74 PolicyID string `json:"-"` 75 JsonPayloadRaw json.RawMessage `json:"-"` 76 } 77 78 // UpdateAdvancedSettingsLoggingResponse is returned from a call to UpdateAdvancedSettingsLogging. 79 UpdateAdvancedSettingsLoggingResponse struct { 80 Override bool `json:"override"` 81 AllowSampling bool `json:"allowSampling"` 82 Cookies struct { 83 Type string `json:"type"` 84 Values []string `json:"values,omitempty"` 85 } `json:"cookies"` 86 CustomHeaders struct { 87 Type string `json:"type"` 88 Values []string `json:"values,omitempty"` 89 } `json:"customHeaders"` 90 StandardHeaders struct { 91 Type string `json:"type"` 92 Values []string `json:"values,omitempty"` 93 } `json:"standardHeaders"` 94 } 95 96 // RemoveAdvancedSettingsLoggingRequest is used to disable HTTP header logging for a configuration or policy. 97 RemoveAdvancedSettingsLoggingRequest struct { 98 ConfigID int `json:"-"` 99 Version int `json:"-"` 100 PolicyID string `json:"-"` 101 Override bool `json:"override"` 102 AllowSampling bool `json:"allowSampling"` 103 } 104 105 // RemoveAdvancedSettingsLoggingResponse is returned from a call to RemoveAdvancedSettingsLogging. 106 RemoveAdvancedSettingsLoggingResponse struct { 107 Override bool `json:"override"` 108 AllowSampling bool `json:"allowSampling"` 109 Cookies struct { 110 Type string `json:"type"` 111 } `json:"cookies"` 112 CustomHeaders struct { 113 Type string `json:"type"` 114 Values []string `json:"values,omitempty"` 115 } `json:"customHeaders"` 116 StandardHeaders struct { 117 Type string `json:"type"` 118 Values []string `json:"values,omitempty"` 119 } `json:"standardHeaders"` 120 } 121 ) 122 123 // Validate validates a GetAdvancedSettingsLoggingsRequest. 124 func (v GetAdvancedSettingsLoggingRequest) Validate() error { 125 return validation.Errors{ 126 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 127 "Version": validation.Validate(v.Version, validation.Required), 128 }.Filter() 129 } 130 131 // Validate validates an UpdateAdvancedSettingsLoggingRequest. 132 func (v UpdateAdvancedSettingsLoggingRequest) Validate() error { 133 return validation.Errors{ 134 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 135 "Version": validation.Validate(v.Version, validation.Required), 136 }.Filter() 137 } 138 139 // Validate validates a RemoveAdvancedSettingsLoggingRequest. 140 func (v RemoveAdvancedSettingsLoggingRequest) Validate() error { 141 return validation.Errors{ 142 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 143 "Version": validation.Validate(v.Version, validation.Required), 144 }.Filter() 145 } 146 147 func (p *appsec) GetAdvancedSettingsLogging(ctx context.Context, params GetAdvancedSettingsLoggingRequest) (*GetAdvancedSettingsLoggingResponse, error) { 148 logger := p.Log(ctx) 149 logger.Debug("GetAdvancedSettingsLogging") 150 151 if err := params.Validate(); err != nil { 152 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 153 } 154 155 var uri string 156 if params.PolicyID != "" { 157 uri = fmt.Sprintf( 158 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/logging", 159 params.ConfigID, 160 params.Version, 161 params.PolicyID) 162 } else { 163 uri = fmt.Sprintf( 164 "/appsec/v1/configs/%d/versions/%d/advanced-settings/logging", 165 params.ConfigID, 166 params.Version) 167 } 168 169 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 170 if err != nil { 171 return nil, fmt.Errorf("failed to create GetAdvancedSettingsLogging request: %w", err) 172 } 173 174 var result GetAdvancedSettingsLoggingResponse 175 resp, err := p.Exec(req, &result) 176 if err != nil { 177 return nil, fmt.Errorf("get advanced settings logging request failed: %w", err) 178 } 179 180 if resp.StatusCode != http.StatusOK { 181 return nil, p.Error(resp) 182 } 183 184 return &result, nil 185 } 186 187 func (p *appsec) UpdateAdvancedSettingsLogging(ctx context.Context, params UpdateAdvancedSettingsLoggingRequest) (*UpdateAdvancedSettingsLoggingResponse, error) { 188 logger := p.Log(ctx) 189 logger.Debug("UpdateAdvancedSettingsLogging") 190 191 if err := params.Validate(); err != nil { 192 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 193 } 194 195 var uri string 196 if params.PolicyID != "" { 197 uri = fmt.Sprintf( 198 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/logging", 199 params.ConfigID, 200 params.Version, 201 params.PolicyID) 202 } else { 203 uri = fmt.Sprintf( 204 "/appsec/v1/configs/%d/versions/%d/advanced-settings/logging", 205 params.ConfigID, 206 params.Version) 207 } 208 209 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 210 if err != nil { 211 return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsLogging request: %w", err) 212 } 213 req.Header.Set("Content-Type", "application/json") 214 215 var result UpdateAdvancedSettingsLoggingResponse 216 resp, err := p.Exec(req, &result, params.JsonPayloadRaw) 217 if err != nil { 218 return nil, fmt.Errorf("update advanced settings logging request failed: %w", err) 219 } 220 221 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 222 return nil, p.Error(resp) 223 } 224 225 return &result, nil 226 } 227 228 func (p *appsec) RemoveAdvancedSettingsLogging(ctx context.Context, params RemoveAdvancedSettingsLoggingRequest) (*RemoveAdvancedSettingsLoggingResponse, error) { 229 logger := p.Log(ctx) 230 logger.Debug("RemoveAdvancedSettingsLogging") 231 232 if err := params.Validate(); err != nil { 233 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 234 } 235 236 var uri string 237 if params.PolicyID != "" { 238 uri = fmt.Sprintf( 239 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/advanced-settings/logging", 240 params.ConfigID, 241 params.Version, 242 params.PolicyID) 243 } else { 244 uri = fmt.Sprintf( 245 "/appsec/v1/configs/%d/versions/%d/advanced-settings/logging", 246 params.ConfigID, 247 params.Version) 248 } 249 250 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 251 if err != nil { 252 return nil, fmt.Errorf("failed to create RemoveAdvancedSettingsLogging request: %w", err) 253 } 254 req.Header.Set("Content-Type", "application/json") 255 256 var result RemoveAdvancedSettingsLoggingResponse 257 resp, err := p.Exec(req, &result, params) 258 if err != nil { 259 return nil, fmt.Errorf("remove advanced settings logging request failed: %w", err) 260 } 261 262 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 263 return nil, p.Error(resp) 264 } 265 266 return &result, nil 267 }