github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/advanced_settings_prefetch.go (about)

     1  package appsec
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	validation "github.com/go-ozzo/ozzo-validation/v4"
     9  )
    10  
    11  type (
    12  	// The AdvancedSettingsPrefetch interface supports retrieving or modifying the prefetch request settings
    13  	// for a configuration.
    14  	AdvancedSettingsPrefetch interface {
    15  		// GetAdvancedSettingsPrefetch gets the Prefetch Request settings.
    16  		//
    17  		// See: https://techdocs.akamai.com/application-security/reference/get-advanced-settings-prefetch
    18  		GetAdvancedSettingsPrefetch(ctx context.Context, params GetAdvancedSettingsPrefetchRequest) (*GetAdvancedSettingsPrefetchResponse, error)
    19  
    20  		// UpdateAdvancedSettingsPrefetch updates the Prefetch Request settings.
    21  		//
    22  		// See: https://techdocs.akamai.com/application-security/reference/put-advanced-settings-prefetch
    23  		UpdateAdvancedSettingsPrefetch(ctx context.Context, params UpdateAdvancedSettingsPrefetchRequest) (*UpdateAdvancedSettingsPrefetchResponse, error)
    24  	}
    25  
    26  	// GetAdvancedSettingsPrefetchRequest is used to retrieve the prefetch request settings.
    27  	GetAdvancedSettingsPrefetchRequest struct {
    28  		ConfigID int    `json:"-"`
    29  		Version  int    `json:"-"`
    30  		PolicyID string `json:"-"`
    31  		Group    string `json:"group"`
    32  	}
    33  
    34  	// GetAdvancedSettingsPrefetchResponse is returned from a call to GetAdvancedSettingsPrefetch.
    35  	GetAdvancedSettingsPrefetchResponse struct {
    36  		AllExtensions      bool     `json:"allExtensions"`
    37  		EnableAppLayer     bool     `json:"enableAppLayer"`
    38  		EnableRateControls bool     `json:"enableRateControls"`
    39  		Extensions         []string `json:"extensions,omitempty"`
    40  	}
    41  
    42  	// UpdateAdvancedSettingsPrefetchRequest is used to modify the prefetch request settings.
    43  	UpdateAdvancedSettingsPrefetchRequest struct {
    44  		ConfigID           int      `json:"-"`
    45  		Version            int      `json:"-"`
    46  		AllExtensions      bool     `json:"allExtensions"`
    47  		EnableAppLayer     bool     `json:"enableAppLayer"`
    48  		EnableRateControls bool     `json:"enableRateControls"`
    49  		Extensions         []string `json:"extensions,omitempty"`
    50  	}
    51  
    52  	// UpdateAdvancedSettingsPrefetchResponse is returned from a call to UpdateAdvancedSettingsPrefetch.
    53  	UpdateAdvancedSettingsPrefetchResponse struct {
    54  		AllExtensions      bool     `json:"allExtensions"`
    55  		EnableAppLayer     bool     `json:"enableAppLayer"`
    56  		EnableRateControls bool     `json:"enableRateControls"`
    57  		Extensions         []string `json:"extensions,omitempty"`
    58  	}
    59  
    60  	// RemoveAdvancedSettingsPrefetchRequest is used to remove the prefetch request settings.
    61  	RemoveAdvancedSettingsPrefetchRequest struct {
    62  		ConfigID int    `json:"-"`
    63  		Version  int    `json:"-"`
    64  		PolicyID string `json:"-"`
    65  		Action   string `json:"action"`
    66  	}
    67  
    68  	// RemoveAdvancedSettingsPrefetchResponse is returned from a call to RemoveAdvancedSettingsPrefetch.
    69  	RemoveAdvancedSettingsPrefetchResponse struct {
    70  		Action string `json:"action"`
    71  	}
    72  )
    73  
    74  // Validate validates a GetAdvancedSettingsPrefetchRequest.
    75  func (v GetAdvancedSettingsPrefetchRequest) Validate() error {
    76  	return validation.Errors{
    77  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    78  		"Version":  validation.Validate(v.Version, validation.Required),
    79  	}.Filter()
    80  }
    81  
    82  // Validate validates an UpdateAdvancedSettingsPrefetchRequest.
    83  func (v UpdateAdvancedSettingsPrefetchRequest) Validate() error {
    84  	return validation.Errors{
    85  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    86  		"Version":  validation.Validate(v.Version, validation.Required),
    87  	}.Filter()
    88  }
    89  
    90  func (p *appsec) GetAdvancedSettingsPrefetch(ctx context.Context, params GetAdvancedSettingsPrefetchRequest) (*GetAdvancedSettingsPrefetchResponse, error) {
    91  	logger := p.Log(ctx)
    92  	logger.Debug("GetAdvancedSettingsPrefetch")
    93  
    94  	if err := params.Validate(); err != nil {
    95  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    96  	}
    97  
    98  	uri := fmt.Sprintf(
    99  		"/appsec/v1/configs/%d/versions/%d/advanced-settings/prefetch",
   100  		params.ConfigID,
   101  		params.Version,
   102  	)
   103  
   104  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   105  	if err != nil {
   106  		return nil, fmt.Errorf("failed to create GetAdvancedSettingsPrefetch request: %w", err)
   107  	}
   108  
   109  	var result GetAdvancedSettingsPrefetchResponse
   110  	resp, err := p.Exec(req, &result)
   111  	if err != nil {
   112  		return nil, fmt.Errorf("get advanced settings prefetch request failed: %w", err)
   113  	}
   114  
   115  	if resp.StatusCode != http.StatusOK {
   116  		return nil, p.Error(resp)
   117  	}
   118  
   119  	return &result, nil
   120  }
   121  
   122  func (p *appsec) UpdateAdvancedSettingsPrefetch(ctx context.Context, params UpdateAdvancedSettingsPrefetchRequest) (*UpdateAdvancedSettingsPrefetchResponse, error) {
   123  	logger := p.Log(ctx)
   124  	logger.Debug("UpdateAdvancedSettingsPrefetch")
   125  
   126  	if err := params.Validate(); err != nil {
   127  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   128  	}
   129  
   130  	uri := fmt.Sprintf(
   131  		"/appsec/v1/configs/%d/versions/%d/advanced-settings/prefetch",
   132  		params.ConfigID,
   133  		params.Version,
   134  	)
   135  
   136  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   137  	if err != nil {
   138  		return nil, fmt.Errorf("failed to create UpdateAdvancedSettingsPrefetch request: %w", err)
   139  	}
   140  
   141  	var result UpdateAdvancedSettingsPrefetchResponse
   142  	resp, err := p.Exec(req, &result, params)
   143  	if err != nil {
   144  		return nil, fmt.Errorf("update advanced settings prefetch request failed: %w", err)
   145  	}
   146  
   147  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   148  		return nil, p.Error(resp)
   149  	}
   150  
   151  	return &result, nil
   152  }