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 }