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  }