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  }