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