github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/reputation_profile_action.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 ReputationProfileAction interface supports retrieving and modifying the action associated with
    13  	// a specified reputation profile, or with all reputation profiles in a security policy.
    14  	//
    15  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#reputationprofileactiongroup
    16  	ReputationProfileAction interface {
    17  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getreputationprofileactions
    18  		GetReputationProfileActions(ctx context.Context, params GetReputationProfileActionsRequest) (*GetReputationProfileActionsResponse, error)
    19  
    20  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#getreputationprofileaction
    21  		GetReputationProfileAction(ctx context.Context, params GetReputationProfileActionRequest) (*GetReputationProfileActionResponse, error)
    22  
    23  		// https://developer.akamai.com/api/cloud_security/application_security/v1.html#putreputationprofileaction
    24  		UpdateReputationProfileAction(ctx context.Context, params UpdateReputationProfileActionRequest) (*UpdateReputationProfileActionResponse, error)
    25  	}
    26  
    27  	// GetReputationProfileActionsRequest is used to retrieve the list of reputation profiles and their associated actions.
    28  	GetReputationProfileActionsRequest struct {
    29  		ConfigID            int    `json:"configId"`
    30  		Version             int    `json:"version"`
    31  		PolicyID            string `json:"policyId"`
    32  		ReputationProfileID int    `json:"id"`
    33  		Action              string `json:"action"`
    34  	}
    35  
    36  	// GetReputationProfileActionsResponse is returned from a call to GetReputationProfileActions.
    37  	GetReputationProfileActionsResponse struct {
    38  		ReputationProfiles []struct {
    39  			Action string `json:"action,omitempty"`
    40  			ID     int    `json:"id,omitempty"`
    41  		} `json:"reputationProfiles,omitempty"`
    42  	}
    43  
    44  	// GetReputationProfileActionRequest is used to retrieve the details for a specific reputation profile.
    45  	GetReputationProfileActionRequest struct {
    46  		ConfigID            int    `json:"configId"`
    47  		Version             int    `json:"version"`
    48  		PolicyID            string `json:"policyId"`
    49  		ReputationProfileID int    `json:"id"`
    50  		Action              string `json:"action"`
    51  	}
    52  
    53  	// GetReputationProfileActionResponse is returned from a call to GetReputationProfileAction.
    54  	GetReputationProfileActionResponse struct {
    55  		Action string `json:"action,omitempty"`
    56  	}
    57  
    58  	// UpdateReputationProfileActionRequest is used to modify the details for a specific reputation profile.
    59  	UpdateReputationProfileActionRequest struct {
    60  		ConfigID            int    `json:"-"`
    61  		Version             int    `json:"-"`
    62  		PolicyID            string `json:"-"`
    63  		ReputationProfileID int    `json:"-"`
    64  		Action              string `json:"action"`
    65  	}
    66  
    67  	// UpdateReputationProfileActionResponse is returned from a call to UpdateReputationProfileAction.
    68  	UpdateReputationProfileActionResponse struct {
    69  		Action string `json:"action"`
    70  	}
    71  
    72  	// ReputationProfileActionPost is currently unused.
    73  	ReputationProfileActionPost struct {
    74  		Action string `json:"action"`
    75  	}
    76  )
    77  
    78  // Validate validates a GetReputationProfileActionRequest.
    79  func (v GetReputationProfileActionRequest) Validate() error {
    80  	return validation.Errors{
    81  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    82  		"Version":  validation.Validate(v.Version, validation.Required),
    83  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    84  	}.Filter()
    85  }
    86  
    87  // Validate validates a GetReputationProfileActionsRequest.
    88  func (v GetReputationProfileActionsRequest) Validate() error {
    89  	return validation.Errors{
    90  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    91  		"Version":  validation.Validate(v.Version, validation.Required),
    92  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    93  	}.Filter()
    94  }
    95  
    96  // Validate validates an UpdateReputationProfileActionRequest.
    97  func (v UpdateReputationProfileActionRequest) Validate() error {
    98  	return validation.Errors{
    99  		"ConfigID":            validation.Validate(v.ConfigID, validation.Required),
   100  		"Version":             validation.Validate(v.Version, validation.Required),
   101  		"PolicyID":            validation.Validate(v.PolicyID, validation.Required),
   102  		"ReputationProfileID": validation.Validate(v.ReputationProfileID, validation.Required),
   103  	}.Filter()
   104  }
   105  
   106  func (p *appsec) GetReputationProfileAction(ctx context.Context, params GetReputationProfileActionRequest) (*GetReputationProfileActionResponse, error) {
   107  	logger := p.Log(ctx)
   108  	logger.Debug("GetReputationProfileAction")
   109  
   110  	if err := params.Validate(); err != nil {
   111  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   112  	}
   113  
   114  	uri := fmt.Sprintf(
   115  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-profiles/%d",
   116  		params.ConfigID,
   117  		params.Version,
   118  		params.PolicyID,
   119  		params.ReputationProfileID)
   120  
   121  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   122  	if err != nil {
   123  		return nil, fmt.Errorf("failed to create GetReputationProfileAction request: %w", err)
   124  	}
   125  
   126  	var result GetReputationProfileActionResponse
   127  	resp, err := p.Exec(req, &result)
   128  	if err != nil {
   129  		return nil, fmt.Errorf("get reputation profile action request failed: %w", err)
   130  	}
   131  	if resp.StatusCode != http.StatusOK {
   132  		return nil, p.Error(resp)
   133  	}
   134  
   135  	return &result, nil
   136  }
   137  
   138  func (p *appsec) GetReputationProfileActions(ctx context.Context, params GetReputationProfileActionsRequest) (*GetReputationProfileActionsResponse, error) {
   139  	logger := p.Log(ctx)
   140  	logger.Debug("GetReputationProfileActions")
   141  
   142  	if err := params.Validate(); err != nil {
   143  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   144  	}
   145  
   146  	uri := fmt.Sprintf(
   147  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-profiles",
   148  		params.ConfigID,
   149  		params.Version,
   150  		params.PolicyID)
   151  
   152  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
   153  	if err != nil {
   154  		return nil, fmt.Errorf("failed to create GetReputationProfileActions request: %w", err)
   155  	}
   156  
   157  	var result GetReputationProfileActionsResponse
   158  	resp, err := p.Exec(req, &result)
   159  	if err != nil {
   160  		return nil, fmt.Errorf("get reputation profile actions request failed: %w", err)
   161  	}
   162  	if resp.StatusCode != http.StatusOK {
   163  		return nil, p.Error(resp)
   164  	}
   165  
   166  	if params.ReputationProfileID != 0 {
   167  		var filteredResult GetReputationProfileActionsResponse
   168  		for _, val := range result.ReputationProfiles {
   169  			if val.ID == params.ReputationProfileID {
   170  				filteredResult.ReputationProfiles = append(filteredResult.ReputationProfiles, val)
   171  			}
   172  		}
   173  		return &filteredResult, nil
   174  	}
   175  
   176  	return &result, nil
   177  }
   178  
   179  func (p *appsec) UpdateReputationProfileAction(ctx context.Context, params UpdateReputationProfileActionRequest) (*UpdateReputationProfileActionResponse, error) {
   180  	logger := p.Log(ctx)
   181  	logger.Debug("UpdateReputationProfileAction")
   182  
   183  	if err := params.Validate(); err != nil {
   184  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   185  	}
   186  
   187  	uri := fmt.Sprintf(
   188  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-profiles/%d",
   189  		params.ConfigID,
   190  		params.Version,
   191  		params.PolicyID,
   192  		params.ReputationProfileID,
   193  	)
   194  
   195  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   196  	if err != nil {
   197  		return nil, fmt.Errorf("failed to create UpdateReputationProfileAction request: %w", err)
   198  	}
   199  
   200  	var result UpdateReputationProfileActionResponse
   201  	resp, err := p.Exec(req, &result, params)
   202  	if err != nil {
   203  		return nil, fmt.Errorf("update reputation profile action request failed: %w", err)
   204  	}
   205  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   206  		return nil, p.Error(resp)
   207  	}
   208  
   209  	return &result, nil
   210  }