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  }