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 }