github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.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  	//
    13  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#evalpenaltybox
    14  	EvalPenaltyBox interface {
    15  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getpenaltybox
    16  		GetEvalPenaltyBox(ctx context.Context, params GetPenaltyBoxRequest) (*GetPenaltyBoxResponse, error)
    17  
    18  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putpenaltybox
    19  		UpdateEvalPenaltyBox(ctx context.Context, params UpdatePenaltyBoxRequest) (*UpdatePenaltyBoxResponse, error)
    20  	}
    21  )
    22  
    23  func (p *appsec) GetEvalPenaltyBox(ctx context.Context, params GetPenaltyBoxRequest) (*GetPenaltyBoxResponse, error) {
    24  	logger := p.Log(ctx)
    25  	logger.Debug("GetEvalPenaltyBox")
    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-penalty-box",
    33  		params.ConfigID,
    34  		params.Version,
    35  		params.PolicyID)
    36  
    37  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    38  	if err != nil {
    39  		return nil, fmt.Errorf("failed to create GetEvalPenaltyBox request: %w", err)
    40  	}
    41  
    42  	var result GetPenaltyBoxResponse
    43  	resp, err := p.Exec(req, &result)
    44  	if err != nil {
    45  		return nil, fmt.Errorf("get eval penalty box request failed: %w", err)
    46  	}
    47  	if resp.StatusCode != http.StatusOK {
    48  		return nil, p.Error(resp)
    49  	}
    50  
    51  	return &result, nil
    52  }
    53  
    54  func (p *appsec) UpdateEvalPenaltyBox(ctx context.Context, params UpdatePenaltyBoxRequest) (*UpdatePenaltyBoxResponse, error) {
    55  	logger := p.Log(ctx)
    56  	logger.Debug("UpdateEvalPenaltyBox")
    57  
    58  	if err := params.Validate(); err != nil {
    59  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    60  	}
    61  
    62  	uri := fmt.Sprintf(
    63  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/eval-penalty-box",
    64  		params.ConfigID,
    65  		params.Version,
    66  		params.PolicyID,
    67  	)
    68  
    69  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
    70  	if err != nil {
    71  		return nil, fmt.Errorf("failed to create UpdateEvalPenaltyBox request: %w", err)
    72  	}
    73  
    74  	var result UpdatePenaltyBoxResponse
    75  	resp, err := p.Exec(req, &result, params)
    76  	if err != nil {
    77  		return nil, fmt.Errorf("update eval penalty box request failed: %w", err)
    78  	}
    79  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
    80  		return nil, p.Error(resp)
    81  	}
    82  
    83  	return &result, nil
    84  }