github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/reputation_analysis.go (about)

     1  package appsec
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	validation "github.com/go-ozzo/ozzo-validation/v4"
     9  )
    10  
    11  type (
    12  	// The ReputationAnalysis interface supports retrieving and modifying the reputation analysis
    13  	// settings for a configuration and policy.
    14  	//
    15  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#reputationanalysis
    16  	ReputationAnalysis interface {
    17  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getreputationanalysis
    18  		GetReputationAnalysis(ctx context.Context, params GetReputationAnalysisRequest) (*GetReputationAnalysisResponse, error)
    19  
    20  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putreputationanalysis
    21  		UpdateReputationAnalysis(ctx context.Context, params UpdateReputationAnalysisRequest) (*UpdateReputationAnalysisResponse, error)
    22  
    23  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putreputationanalysis
    24  		RemoveReputationAnalysis(ctx context.Context, params RemoveReputationAnalysisRequest) (*RemoveReputationAnalysisResponse, error)
    25  	}
    26  
    27  	// GetReputationAnalysisRequest is used to retrieve the reputation analysis settings for a security policy.
    28  	GetReputationAnalysisRequest struct {
    29  		ConfigID int    `json:"configId"`
    30  		Version  int    `json:"version"`
    31  		PolicyID string `json:"policyId"`
    32  	}
    33  
    34  	// GetReputationAnalysisResponse is returned from a call to GetReputationAnalysis.
    35  	GetReputationAnalysisResponse struct {
    36  		ConfigID                           int    `json:"-"`
    37  		Version                            int    `json:"-"`
    38  		PolicyID                           string `json:"-"`
    39  		ForwardToHTTPHeader                bool   `json:"forwardToHTTPHeader"`
    40  		ForwardSharedIPToHTTPHeaderAndSIEM bool   `json:"forwardSharedIPToHTTPHeaderAndSIEM"`
    41  	}
    42  
    43  	// UpdateReputationAnalysisRequest is used to modify the reputation analysis settings for a security poliyc.
    44  	UpdateReputationAnalysisRequest struct {
    45  		ConfigID                           int    `json:"-"`
    46  		Version                            int    `json:"-"`
    47  		PolicyID                           string `json:"-"`
    48  		ForwardToHTTPHeader                bool   `json:"forwardToHTTPHeader"`
    49  		ForwardSharedIPToHTTPHeaderAndSIEM bool   `json:"forwardSharedIPToHTTPHeaderAndSIEM"`
    50  	}
    51  
    52  	// UpdateReputationAnalysisResponse is returned from a call to UpdateReputationAnalysis.
    53  	UpdateReputationAnalysisResponse struct {
    54  		ForwardToHTTPHeader                bool `json:"forwardToHTTPHeader"`
    55  		ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"`
    56  	}
    57  
    58  	// RemoveReputationAnalysisRequest is used to remove the reputation analysis settings for a security policy.
    59  	RemoveReputationAnalysisRequest struct {
    60  		ConfigID                           int    `json:"-"`
    61  		Version                            int    `json:"-"`
    62  		PolicyID                           string `json:"-"`
    63  		ForwardToHTTPHeader                bool   `json:"forwardToHTTPHeader"`
    64  		ForwardSharedIPToHTTPHeaderAndSIEM bool   `json:"forwardSharedIPToHTTPHeaderAndSIEM"`
    65  	}
    66  
    67  	// RemoveReputationAnalysisResponse is returned from a call to RemoveReputationAnalysis.
    68  	RemoveReputationAnalysisResponse struct {
    69  		ForwardToHTTPHeader                bool `json:"forwardToHTTPHeader"`
    70  		ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"`
    71  	}
    72  )
    73  
    74  // Validate validates a GetReputationAnalysisRequest.
    75  func (v GetReputationAnalysisRequest) Validate() error {
    76  	return validation.Errors{
    77  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    78  		"Version":  validation.Validate(v.Version, validation.Required),
    79  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    80  	}.Filter()
    81  }
    82  
    83  // Validate validates an UpdateReputationAnalysisRequest.
    84  func (v UpdateReputationAnalysisRequest) Validate() error {
    85  	return validation.Errors{
    86  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    87  		"Version":  validation.Validate(v.Version, validation.Required),
    88  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    89  	}.Filter()
    90  }
    91  
    92  // Validate validates a RemoveReputationAnalysisRequest.
    93  func (v RemoveReputationAnalysisRequest) Validate() error {
    94  	return validation.Errors{
    95  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    96  		"Version":  validation.Validate(v.Version, validation.Required),
    97  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    98  	}.Filter()
    99  }
   100  
   101  func (p *appsec) GetReputationAnalysis(ctx context.Context, params GetReputationAnalysisRequest) (*GetReputationAnalysisResponse, error) {
   102  	logger := p.Log(ctx)
   103  	logger.Debug("GetReputationAnalysis")
   104  
   105  	if err := params.Validate(); err != nil {
   106  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   107  	}
   108  
   109  	uri := fmt.Sprintf(
   110  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-analysis",
   111  		params.ConfigID,
   112  		params.Version,
   113  		params.PolicyID)
   114  
   115  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   116  	if err != nil {
   117  		return nil, fmt.Errorf("failed to create GetReputationAnalysis request: %w", err)
   118  	}
   119  
   120  	var result GetReputationAnalysisResponse
   121  	resp, err := p.Exec(req, &result)
   122  	if err != nil {
   123  		return nil, fmt.Errorf("get reputation analysis request failed: %w", err)
   124  	}
   125  	if resp.StatusCode != http.StatusOK {
   126  		return nil, p.Error(resp)
   127  	}
   128  
   129  	return &result, nil
   130  }
   131  
   132  func (p *appsec) UpdateReputationAnalysis(ctx context.Context, params UpdateReputationAnalysisRequest) (*UpdateReputationAnalysisResponse, error) {
   133  	logger := p.Log(ctx)
   134  	logger.Debug("UpdateReputationAnalysis")
   135  
   136  	if err := params.Validate(); err != nil {
   137  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   138  	}
   139  
   140  	uri := fmt.Sprintf(
   141  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-analysis",
   142  		params.ConfigID,
   143  		params.Version,
   144  		params.PolicyID,
   145  	)
   146  
   147  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   148  	if err != nil {
   149  		return nil, fmt.Errorf("failed to create UpdateReputationAnalysis request: %w", err)
   150  	}
   151  
   152  	var result UpdateReputationAnalysisResponse
   153  	resp, err := p.Exec(req, &result, params)
   154  	if err != nil {
   155  		return nil, fmt.Errorf("update reputation analysis request failed: %w", err)
   156  	}
   157  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   158  		return nil, p.Error(resp)
   159  	}
   160  
   161  	return &result, nil
   162  }
   163  
   164  func (p *appsec) RemoveReputationAnalysis(ctx context.Context, params RemoveReputationAnalysisRequest) (*RemoveReputationAnalysisResponse, error) {
   165  	logger := p.Log(ctx)
   166  	logger.Debug("RemoveReputationAnalysis")
   167  
   168  	uri := fmt.Sprintf(
   169  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-analysis",
   170  		params.ConfigID,
   171  		params.Version,
   172  		params.PolicyID,
   173  	)
   174  
   175  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   176  	if err != nil {
   177  		return nil, fmt.Errorf("failed to create RemoveReputationAnalysis request: %w", err)
   178  	}
   179  
   180  	var result RemoveReputationAnalysisResponse
   181  	resp, err := p.Exec(req, &result, params)
   182  	if err != nil {
   183  		return nil, fmt.Errorf("remove reputation analysis request failed: %w", err)
   184  	}
   185  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   186  		return nil, p.Error(resp)
   187  	}
   188  
   189  	return &result, nil
   190  }