github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/eval_group.go (about) 1 package appsec 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 ) 8 9 type ( 10 // The EvalGroup interface supports creating, modifying and retrieving attack groups for evaluation. 11 EvalGroup interface { 12 // GetEvalGroups retrieves all attack groups currently under evaluation. 13 GetEvalGroups(ctx context.Context, params GetAttackGroupsRequest) (*GetAttackGroupsResponse, error) 14 15 // GetEvalGroups retrieves a specific attack group currently under evaluation. 16 GetEvalGroup(ctx context.Context, params GetAttackGroupRequest) (*GetAttackGroupResponse, error) 17 18 // UpdateEvalGroup supports updating the condition and exception information for an attack group under evaluation. 19 UpdateEvalGroup(ctx context.Context, params UpdateAttackGroupRequest) (*UpdateAttackGroupResponse, error) 20 } 21 ) 22 23 func (p *appsec) GetEvalGroup(ctx context.Context, params GetAttackGroupRequest) (*GetAttackGroupResponse, error) { 24 logger := p.Log(ctx) 25 logger.Debug("GetEvalGroup") 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-groups/%s?includeConditionException=true", 33 params.ConfigID, 34 params.Version, 35 params.PolicyID, 36 params.Group) 37 38 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 39 if err != nil { 40 return nil, fmt.Errorf("failed to create GetEvalGroup request: %w", err) 41 } 42 43 var result GetAttackGroupResponse 44 resp, err := p.Exec(req, &result) 45 if err != nil { 46 return nil, fmt.Errorf("get eval group request failed: %w", err) 47 } 48 if resp.StatusCode != http.StatusOK { 49 return nil, p.Error(resp) 50 } 51 52 return &result, nil 53 } 54 55 func (p *appsec) GetEvalGroups(ctx context.Context, params GetAttackGroupsRequest) (*GetAttackGroupsResponse, error) { 56 logger := p.Log(ctx) 57 logger.Debug("GetEvalGroups") 58 59 if err := params.Validate(); err != nil { 60 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 61 } 62 63 uri := fmt.Sprintf( 64 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-groups?includeConditionException=true", 65 params.ConfigID, 66 params.Version, 67 params.PolicyID) 68 69 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 70 if err != nil { 71 return nil, fmt.Errorf("failed to create GetEvalGroups request: %w", err) 72 } 73 74 var result GetAttackGroupsResponse 75 resp, err := p.Exec(req, &result) 76 if err != nil { 77 return nil, fmt.Errorf("get eval groups request failed: %w", err) 78 } 79 if resp.StatusCode != http.StatusOK { 80 return nil, p.Error(resp) 81 } 82 83 if params.Group != "" { 84 var filteredResult GetAttackGroupsResponse 85 for k, val := range result.AttackGroups { 86 if val.Group == params.Group { 87 filteredResult.AttackGroups = append(filteredResult.AttackGroups, result.AttackGroups[k]) 88 } 89 } 90 return &filteredResult, nil 91 } 92 93 return &result, nil 94 } 95 96 func (p *appsec) UpdateEvalGroup(ctx context.Context, params UpdateAttackGroupRequest) (*UpdateAttackGroupResponse, error) { 97 logger := p.Log(ctx) 98 logger.Debug("UpdateEvalGroup") 99 100 if err := params.Validate(); err != nil { 101 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 102 } 103 104 uri := fmt.Sprintf( 105 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-groups/%s/action-condition-exception", 106 params.ConfigID, 107 params.Version, 108 params.PolicyID, 109 params.Group, 110 ) 111 112 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 113 if err != nil { 114 return nil, fmt.Errorf("failed to create UpdateEvalGroup request: %w", err) 115 } 116 117 var result UpdateAttackGroupResponse 118 resp, err := p.Exec(req, &result, params) 119 if err != nil { 120 return nil, fmt.Errorf("update eval group request failed: %w", err) 121 } 122 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 123 return nil, p.Error(resp) 124 } 125 126 return &result, nil 127 }