github.com/akamai/AkamaiOPEN-edgegrid-golang/v2@v2.17.0/pkg/appsec/threat_intel.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 ThreatIntel interface supports retrieving and modifying the operational settings for adaptive intelligence.
    13  	//
    14  	// https://developer.akamai.com/api/cloud_security/application_security/v1.html#threatintel
    15  	ThreatIntel interface {
    16  		// GetThreatIntel retrieves the current threat intel settings.
    17  		GetThreatIntel(ctx context.Context, params GetThreatIntelRequest) (*GetThreatIntelResponse, error)
    18  
    19  		// UpdateThreatIntel modifies the current threat intel settings.
    20  		UpdateThreatIntel(ctx context.Context, params UpdateThreatIntelRequest) (*UpdateThreatIntelResponse, error)
    21  	}
    22  
    23  	// GetThreatIntelRequest is used to retrieve the threat intel settings.
    24  	GetThreatIntelRequest struct {
    25  		ConfigID int    `json:"-"`
    26  		Version  int    `json:"-"`
    27  		PolicyID string `json:"-"`
    28  	}
    29  
    30  	// GetThreatIntelResponse is returned from a call to GetThreatIntel.
    31  	GetThreatIntelResponse struct {
    32  		ThreatIntel string `json:"threatIntel,omitempty"`
    33  	}
    34  
    35  	// UpdateThreatIntelRequest is used to update the threat intel settings.
    36  	UpdateThreatIntelRequest struct {
    37  		ConfigID    int    `json:"-"`
    38  		Version     int    `json:"-"`
    39  		PolicyID    string `json:"-"`
    40  		ThreatIntel string `json:"threatIntel"`
    41  	}
    42  
    43  	// UpdateThreatIntelResponse is returned from a call to UpdateThreatIntel.
    44  	UpdateThreatIntelResponse struct {
    45  		ThreatIntel string `json:"threatIntel,omitempty"`
    46  	}
    47  )
    48  
    49  // Validate validates a GetAttackGroupConditionExceptionRequest.
    50  func (v GetThreatIntelRequest) Validate() error {
    51  	return validation.Errors{
    52  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    53  		"Version":  validation.Validate(v.Version, validation.Required),
    54  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    55  	}.Filter()
    56  }
    57  
    58  // Validate validates an UpdateAttackGroupConditionExceptionRequest.
    59  func (v UpdateThreatIntelRequest) Validate() error {
    60  	return validation.Errors{
    61  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    62  		"Version":  validation.Validate(v.Version, validation.Required),
    63  		"PolicyID": validation.Validate(v.PolicyID, validation.Required),
    64  	}.Filter()
    65  }
    66  
    67  func (p *appsec) GetThreatIntel(ctx context.Context, params GetThreatIntelRequest) (*GetThreatIntelResponse, error) {
    68  	logger := p.Log(ctx)
    69  	logger.Debug("GetThreatIntel")
    70  
    71  	if err := params.Validate(); err != nil {
    72  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    73  	}
    74  
    75  	uri := fmt.Sprintf(
    76  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/threat-intel",
    77  		params.ConfigID,
    78  		params.Version,
    79  		params.PolicyID)
    80  
    81  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    82  	if err != nil {
    83  		return nil, fmt.Errorf("failed to create GetThreatIntel request: %w", err)
    84  	}
    85  
    86  	var result GetThreatIntelResponse
    87  	resp, err := p.Exec(req, &result)
    88  	if err != nil {
    89  		return nil, fmt.Errorf("get threat intel request failed: %w", err)
    90  	}
    91  	if resp.StatusCode != http.StatusOK {
    92  		return nil, p.Error(resp)
    93  	}
    94  
    95  	return &result, nil
    96  }
    97  
    98  func (p *appsec) UpdateThreatIntel(ctx context.Context, params UpdateThreatIntelRequest) (*UpdateThreatIntelResponse, error) {
    99  	logger := p.Log(ctx)
   100  	logger.Debug("UpdateThreatIntel")
   101  
   102  	if err := params.Validate(); err != nil {
   103  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
   104  	}
   105  
   106  	uri := fmt.Sprintf(
   107  		"/appsec/v1/configs/%d/versions/%d/security-policies/%s/threat-intel",
   108  		params.ConfigID,
   109  		params.Version,
   110  		params.PolicyID,
   111  	)
   112  
   113  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil)
   114  	if err != nil {
   115  		return nil, fmt.Errorf("failed to create UpdateThreatIntel request: %w", err)
   116  	}
   117  
   118  	var result UpdateThreatIntelResponse
   119  	resp, err := p.Exec(req, &result, params)
   120  	if err != nil {
   121  		return nil, fmt.Errorf("update threat intel request failed: %w", err)
   122  	}
   123  	if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated {
   124  		return nil, p.Error(resp)
   125  	}
   126  
   127  	return &result, nil
   128  }