github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.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 EvalPenaltyBox interface { 13 // GetEvalPenaltyBox returns the penalty box settings for a security policy in evaluation mode. 14 // 15 // See: https://techdocs.akamai.com/application-security/reference/get-eval-policy-penalty-box 16 GetEvalPenaltyBox(ctx context.Context, params GetPenaltyBoxRequest) (*GetPenaltyBoxResponse, error) 17 18 // UpdateEvalPenaltyBox updates the penalty box settings for a security policy in evaluation mode. 19 // 20 // See: https://techdocs.akamai.com/application-security/reference/put-eval-policy-penalty-box 21 UpdateEvalPenaltyBox(ctx context.Context, params UpdatePenaltyBoxRequest) (*UpdatePenaltyBoxResponse, error) 22 } 23 ) 24 25 func (p *appsec) GetEvalPenaltyBox(ctx context.Context, params GetPenaltyBoxRequest) (*GetPenaltyBoxResponse, error) { 26 logger := p.Log(ctx) 27 logger.Debug("GetEvalPenaltyBox") 28 29 if err := params.Validate(); err != nil { 30 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 31 } 32 33 uri := fmt.Sprintf( 34 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box", 35 params.ConfigID, 36 params.Version, 37 params.PolicyID) 38 39 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 40 if err != nil { 41 return nil, fmt.Errorf("failed to create GetEvalPenaltyBox request: %w", err) 42 } 43 44 var result GetPenaltyBoxResponse 45 resp, err := p.Exec(req, &result) 46 if err != nil { 47 return nil, fmt.Errorf("get eval penalty box request failed: %w", err) 48 } 49 if resp.StatusCode != http.StatusOK { 50 return nil, p.Error(resp) 51 } 52 53 return &result, nil 54 } 55 56 func (p *appsec) UpdateEvalPenaltyBox(ctx context.Context, params UpdatePenaltyBoxRequest) (*UpdatePenaltyBoxResponse, error) { 57 logger := p.Log(ctx) 58 logger.Debug("UpdateEvalPenaltyBox") 59 60 if err := params.Validate(); err != nil { 61 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 62 } 63 64 uri := fmt.Sprintf( 65 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box", 66 params.ConfigID, 67 params.Version, 68 params.PolicyID, 69 ) 70 71 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 72 if err != nil { 73 return nil, fmt.Errorf("failed to create UpdateEvalPenaltyBox request: %w", err) 74 } 75 76 var result UpdatePenaltyBoxResponse 77 resp, err := p.Exec(req, &result, params) 78 if err != nil { 79 return nil, fmt.Errorf("update eval penalty box request failed: %w", err) 80 } 81 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 82 return nil, p.Error(resp) 83 } 84 85 return &result, nil 86 }