github.com/akamai/AkamaiOPEN-edgegrid-golang/v4@v4.1.0/pkg/appsec/reputation_protection.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 ReputationProtection interface supports retrieving and updating reputation protection for a configuration and policy. 13 ReputationProtection interface { 14 // GetReputationProtections retrieves the current reputation protection setting for a configuration and policy. 15 // 16 // See: https://techdocs.akamai.com/application-security/reference/get-policy-protections 17 // Deprecated: this method will be removed in a future release. Use GetReputationProtection instead. 18 GetReputationProtections(ctx context.Context, params GetReputationProtectionsRequest) (*GetReputationProtectionsResponse, error) 19 20 // GetReputationProtection retrieves the current reputation protection setting for a configuration and policy. 21 // 22 // See: https://techdocs.akamai.com/application-security/reference/get-policy-protections 23 GetReputationProtection(ctx context.Context, params GetReputationProtectionRequest) (*GetReputationProtectionResponse, error) 24 25 // UpdateReputationProtection updates the reputation protection setting for a configuration and policy. 26 // 27 // See: https://techdocs.akamai.com/application-security/reference/put-policy-protections 28 UpdateReputationProtection(ctx context.Context, params UpdateReputationProtectionRequest) (*UpdateReputationProtectionResponse, error) 29 30 // RemoveReputationProtection removes reputation protection for a configuration and policy. 31 // 32 // See: https://techdocs.akamai.com/application-security/reference/put-policy-protections 33 // Deprecated: this method will be removed in a future release. Use UpdateReputationProtection instead. 34 RemoveReputationProtection(ctx context.Context, params RemoveReputationProtectionRequest) (*RemoveReputationProtectionResponse, error) 35 } 36 37 // GetReputationProtectionRequest is used to retrieve the reputation protection setting. 38 GetReputationProtectionRequest struct { 39 ConfigID int `json:"-"` 40 Version int `json:"-"` 41 PolicyID string `json:"-"` 42 ApplyReputationControls bool `json:"applyReputationControls"` 43 } 44 45 // GetReputationProtectionResponse is returned from a call to GetReputationProtection. 46 GetReputationProtectionResponse ProtectionsResponse 47 48 // GetReputationProtectionsRequest is used to retrieve the reputation protection setting. 49 // Deprecated: this struct will be removed in a future release. 50 GetReputationProtectionsRequest struct { 51 ConfigID int `json:"-"` 52 Version int `json:"-"` 53 PolicyID string `json:"-"` 54 ApplyReputationControls bool `json:"applyReputationControls"` 55 } 56 57 // GetReputationProtectionsResponse is returned from a call to GetReputationProtection. 58 // Deprecated: this struct will be removed in a future release. 59 GetReputationProtectionsResponse ProtectionsResponse 60 61 // UpdateReputationProtectionRequest is used to modify the reputation protection setting. 62 UpdateReputationProtectionRequest struct { 63 ConfigID int `json:"-"` 64 Version int `json:"-"` 65 PolicyID string `json:"-"` 66 ApplyReputationControls bool `json:"applyReputationControls"` 67 } 68 69 // UpdateReputationProtectionResponse is returned from a call to UpdateReputationProtection. 70 UpdateReputationProtectionResponse ProtectionsResponse 71 72 // RemoveReputationProtectionRequest is used to remove the reputation protection settings. 73 // Deprecated: this struct will be removed in a future release. 74 RemoveReputationProtectionRequest struct { 75 ConfigID int `json:"-"` 76 Version int `json:"-"` 77 PolicyID string `json:"-"` 78 ApplyReputationControls bool `json:"applyReputationControls"` 79 } 80 81 // RemoveReputationProtectionResponse is returned from a call to RemoveReputationProtection. 82 // Deprecated: this struct will be removed in a future release. 83 RemoveReputationProtectionResponse ProtectionsResponse 84 ) 85 86 // Validate validates a GetReputationProtectionRequest. 87 func (v GetReputationProtectionRequest) Validate() error { 88 return validation.Errors{ 89 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 90 "Version": validation.Validate(v.Version, validation.Required), 91 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 92 }.Filter() 93 } 94 95 // Validate validates a GetReputationProtectionsRequest. 96 func (v GetReputationProtectionsRequest) Validate() error { 97 return validation.Errors{ 98 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 99 "Version": validation.Validate(v.Version, validation.Required), 100 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 101 }.Filter() 102 } 103 104 // Validate validates an UpdateReputationProtectionRequest. 105 func (v UpdateReputationProtectionRequest) Validate() error { 106 return validation.Errors{ 107 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 108 "Version": validation.Validate(v.Version, validation.Required), 109 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 110 }.Filter() 111 } 112 113 // Validate validates a RemoveReputationProtectionRequest. 114 func (v RemoveReputationProtectionRequest) Validate() error { 115 return validation.Errors{ 116 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 117 "Version": validation.Validate(v.Version, validation.Required), 118 "PolicyID": validation.Validate(v.PolicyID, validation.Required), 119 }.Filter() 120 } 121 122 func (p *appsec) GetReputationProtection(ctx context.Context, params GetReputationProtectionRequest) (*GetReputationProtectionResponse, error) { 123 logger := p.Log(ctx) 124 logger.Debug("GetReputationProtection") 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/security-policies/%s/protections", 132 params.ConfigID, 133 params.Version, 134 params.PolicyID) 135 136 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 137 if err != nil { 138 return nil, fmt.Errorf("failed to create GetReputationProtection request: %w", err) 139 } 140 141 var result GetReputationProtectionResponse 142 resp, err := p.Exec(req, &result) 143 if err != nil { 144 return nil, fmt.Errorf("get reputation protection request failed: %w", err) 145 } 146 if resp.StatusCode != http.StatusOK { 147 return nil, p.Error(resp) 148 } 149 150 return &result, nil 151 } 152 153 func (p *appsec) GetReputationProtections(ctx context.Context, params GetReputationProtectionsRequest) (*GetReputationProtectionsResponse, error) { 154 logger := p.Log(ctx) 155 logger.Debug("GetReputationProtections") 156 157 if err := params.Validate(); err != nil { 158 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 159 } 160 161 uri := fmt.Sprintf( 162 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/protections", 163 params.ConfigID, 164 params.Version, 165 params.PolicyID) 166 167 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 168 if err != nil { 169 return nil, fmt.Errorf("failed to create GetReputationProtections request: %w", err) 170 } 171 172 var result GetReputationProtectionsResponse 173 resp, err := p.Exec(req, &result) 174 if err != nil { 175 return nil, fmt.Errorf("get reputation protections request failed: %w", err) 176 } 177 if resp.StatusCode != http.StatusOK { 178 return nil, p.Error(resp) 179 } 180 181 return &result, nil 182 } 183 184 func (p *appsec) UpdateReputationProtection(ctx context.Context, params UpdateReputationProtectionRequest) (*UpdateReputationProtectionResponse, error) { 185 logger := p.Log(ctx) 186 logger.Debug("UpdateReputationProtection") 187 188 if err := params.Validate(); err != nil { 189 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 190 } 191 192 uri := fmt.Sprintf( 193 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/protections", 194 params.ConfigID, 195 params.Version, 196 params.PolicyID, 197 ) 198 199 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 200 if err != nil { 201 return nil, fmt.Errorf("failed to create UpdateReputationProtection request: %w", err) 202 } 203 204 var result UpdateReputationProtectionResponse 205 resp, err := p.Exec(req, &result, params) 206 if err != nil { 207 return nil, fmt.Errorf("update reputation protection request failed: %w", err) 208 } 209 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 210 return nil, p.Error(resp) 211 } 212 213 return &result, nil 214 } 215 216 func (p *appsec) RemoveReputationProtection(ctx context.Context, params RemoveReputationProtectionRequest) (*RemoveReputationProtectionResponse, error) { 217 logger := p.Log(ctx) 218 logger.Debug("RemoveReputationProtection") 219 220 if err := params.Validate(); err != nil { 221 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 222 } 223 224 uri := fmt.Sprintf( 225 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/protections", 226 params.ConfigID, 227 params.Version, 228 params.PolicyID, 229 ) 230 231 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 232 if err != nil { 233 return nil, fmt.Errorf("failed to create RemoveReputationProtection request: %w", err) 234 } 235 236 var result RemoveReputationProtectionResponse 237 resp, err := p.Exec(req, &result, params) 238 if err != nil { 239 return nil, fmt.Errorf("remove reputation protection request failed: %w", err) 240 } 241 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 242 return nil, p.Error(resp) 243 } 244 245 return &result, nil 246 }