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 }