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