github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/eval_penalty_box_conditions.go (about)

     1  package appsec
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  )
     8  
     9  type (
    10  	// EvalPenaltyBoxConditions interface supports retrieving or modifying the evaluation penalty box conditions for
    11  	// a specified security policy in evaluation mode.
    12  	EvalPenaltyBoxConditions interface {
    13  		// GetEvalPenaltyBoxConditions returns the eval penalty box conditions for a security policy in evaluation mode.
    14  		GetEvalPenaltyBoxConditions(ctx context.Context, params GetPenaltyBoxConditionsRequest) (*GetPenaltyBoxConditionsResponse, error)
    15  
    16  		// UpdateEvalPenaltyBoxConditions modifies the eval penalty box conditions for a security policy.
    17  		UpdateEvalPenaltyBoxConditions(ctx context.Context, params UpdatePenaltyBoxConditionsRequest) (*UpdatePenaltyBoxConditionsResponse, error)
    18  	}
    19  )
    20  
    21  func (p *appsec) GetEvalPenaltyBoxConditions(ctx context.Context, params GetPenaltyBoxConditionsRequest) (*GetPenaltyBoxConditionsResponse, error) {
    22  	logger := p.Log(ctx)
    23  	logger.Debug("GetEvalPenaltyBoxConditions")
    24  
    25  	if err := params.Validate(); err != nil {
    26  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    27  	}
    28  
    29  	uri := fmt.Sprintf(
    30  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box/conditions",
    31  		params.ConfigID,
    32  		params.Version,
    33  		params.PolicyID)
    34  
    35  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    36  	if err != nil {
    37  		return nil, fmt.Errorf("failed to create GetEvalPenaltyBoxConditions request: %w", err)
    38  	}
    39  
    40  	var result GetPenaltyBoxConditionsResponse
    41  	resp, err := p.Exec(req, &result)
    42  	if err != nil {
    43  		return nil, fmt.Errorf("get eval penalty box conditions request failed: %w", err)
    44  	}
    45  	if resp.StatusCode != http.StatusOK {
    46  		return nil, p.Error(resp)
    47  	}
    48  
    49  	return &result, nil
    50  }
    51  
    52  func (p *appsec) UpdateEvalPenaltyBoxConditions(ctx context.Context, params UpdatePenaltyBoxConditionsRequest) (*UpdatePenaltyBoxConditionsResponse, error) {
    53  	logger := p.Log(ctx)
    54  	logger.Debug("UpdateEvalPenaltyBoxConditions")
    55  
    56  	if err := params.Validate(); err != nil {
    57  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    58  	}
    59  
    60  	uri := fmt.Sprintf(
    61  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box/conditions",
    62  		params.ConfigID,
    63  		params.Version,
    64  		params.PolicyID,
    65  	)
    66  
    67  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
    68  	if err != nil {
    69  		return nil, fmt.Errorf("failed to create UpdateEvalPenaltyBoxConditions request: %w", err)
    70  	}
    71  
    72  	var result UpdatePenaltyBoxConditionsResponse
    73  	resp, err := p.Exec(req, &result, params.ConditionsPayload)
    74  	if err != nil {
    75  		return nil, fmt.Errorf("update eval penalty box conditions request failed: %w", err)
    76  	}
    77  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
    78  		return nil, p.Error(resp)
    79  	}
    80  
    81  	return &result, nil
    82  }