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 }