github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/eval_penalty_box.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 ) 8 9 type ( 10 // The EvalPenaltyBox interface supports retrieving or modifying the evaluation penalty box settings for 11 // a specified security policy in evaluation mode. 12 // 13 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#evalpenaltybox 14 EvalPenaltyBox interface { 15 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#getpenaltybox 16 GetEvalPenaltyBox(ctx context.Context, params GetPenaltyBoxRequest) (*GetPenaltyBoxResponse, error) 17 18 // https://developer.akamai.com/api/cloud_security/application_security/v1.html#putpenaltybox 19 UpdateEvalPenaltyBox(ctx context.Context, params UpdatePenaltyBoxRequest) (*UpdatePenaltyBoxResponse, error) 20 } 21 ) 22 23 func (p *appsec) GetEvalPenaltyBox(ctx context.Context, params GetPenaltyBoxRequest) (*GetPenaltyBoxResponse, error) { 24 logger := p.Log(ctx) 25 logger.Debug("GetEvalPenaltyBox") 26 27 if err := params.Validate(); err != nil { 28 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 29 } 30 31 uri := fmt.Sprintf( 32 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box", 33 params.ConfigID, 34 params.Version, 35 params.PolicyID) 36 37 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 38 if err != nil { 39 return nil, fmt.Errorf("failed to create GetEvalPenaltyBox request: %w", err) 40 } 41 42 var result GetPenaltyBoxResponse 43 resp, err := p.Exec(req, &result) 44 if err != nil { 45 return nil, fmt.Errorf("get eval penalty box request failed: %w", err) 46 } 47 if resp.StatusCode != http.StatusOK { 48 return nil, p.Error(resp) 49 } 50 51 return &result, nil 52 } 53 54 func (p *appsec) UpdateEvalPenaltyBox(ctx context.Context, params UpdatePenaltyBoxRequest) (*UpdatePenaltyBoxResponse, error) { 55 logger := p.Log(ctx) 56 logger.Debug("UpdateEvalPenaltyBox") 57 58 if err := params.Validate(); err != nil { 59 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 60 } 61 62 uri := fmt.Sprintf( 63 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box", 64 params.ConfigID, 65 params.Version, 66 params.PolicyID, 67 ) 68 69 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 70 if err != nil { 71 return nil, fmt.Errorf("failed to create UpdateEvalPenaltyBox request: %w", err) 72 } 73 74 var result UpdatePenaltyBoxResponse 75 resp, err := p.Exec(req, &result, params) 76 if err != nil { 77 return nil, fmt.Errorf("update eval penalty box request failed: %w", err) 78 } 79 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 80 return nil, p.Error(resp) 81 } 82 83 return &result, nil 84 }