github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.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 ReputationAnalysis interface { 15 // GetReputationAnalysis returns the current reputation analysis settings. 16 // 17 // See: https://techdocs.akamai.com/application-security/reference/get-reputation-analysis 18 GetReputationAnalysis(ctx context.Context, params GetReputationAnalysisRequest) (*GetReputationAnalysisResponse, error) 19 20 // UpdateReputationAnalysis updates the reputation analysis settings. 21 // 22 // See: https://techdocs.akamai.com/application-security/reference/put-reputation-analysis 23 UpdateReputationAnalysis(ctx context.Context, params UpdateReputationAnalysisRequest) (*UpdateReputationAnalysisResponse, error) 24 25 // RemoveReputationAnalysis removes the reputation analysis settings. 26 // 27 // See: https://techdocs.akamai.com/application-security/reference/put-reputation-analysis 28 RemoveReputationAnalysis(ctx context.Context, params RemoveReputationAnalysisRequest) (*RemoveReputationAnalysisResponse, error) 29 } 30 31 // GetReputationAnalysisRequest is used to retrieve the reputation analysis settings for a security policy. 32 GetReputationAnalysisRequest struct { 33 ConfigID int `json:"configId"` 34 Version int `json:"version"` 35 PolicyID string `json:"policyId"` 36 } 37 38 // GetReputationAnalysisResponse is returned from a call to GetReputationAnalysis. 39 GetReputationAnalysisResponse struct { 40 ConfigID int `json:"-"` 41 Version int `json:"-"` 42 PolicyID string `json:"-"` 43 ForwardToHTTPHeader bool `json:"forwardToHTTPHeader"` 44 ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"` 45 } 46 47 // UpdateReputationAnalysisRequest is used to modify the reputation analysis settings for a security poliyc. 48 UpdateReputationAnalysisRequest struct { 49 ConfigID int `json:"-"` 50 Version int `json:"-"` 51 PolicyID string `json:"-"` 52 ForwardToHTTPHeader bool `json:"forwardToHTTPHeader"` 53 ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"` 54 } 55 56 // UpdateReputationAnalysisResponse is returned from a call to UpdateReputationAnalysis. 57 UpdateReputationAnalysisResponse struct { 58 ForwardToHTTPHeader bool `json:"forwardToHTTPHeader"` 59 ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"` 60 } 61 62 // RemoveReputationAnalysisRequest is used to remove the reputation analysis settings for a security policy. 63 RemoveReputationAnalysisRequest struct { 64 ConfigID int `json:"-"` 65 Version int `json:"-"` 66 PolicyID string `json:"-"` 67 ForwardToHTTPHeader bool `json:"forwardToHTTPHeader"` 68 ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"` 69 } 70 71 // RemoveReputationAnalysisResponse is returned from a call to RemoveReputationAnalysis. 72 RemoveReputationAnalysisResponse struct { 73 ForwardToHTTPHeader bool `json:"forwardToHTTPHeader"` 74 ForwardSharedIPToHTTPHeaderAndSIEM bool `json:"forwardSharedIPToHTTPHeaderAndSIEM"` 75 } 76 ) 77 78 // Validate validates a GetReputationAnalysisRequest. 79 func (v GetReputationAnalysisRequest) 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 an UpdateReputationAnalysisRequest. 88 func (v UpdateReputationAnalysisRequest) 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 a RemoveReputationAnalysisRequest. 97 func (v RemoveReputationAnalysisRequest) 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 }.Filter() 103 } 104 105 func (p *appsec) GetReputationAnalysis(ctx context.Context, params GetReputationAnalysisRequest) (*GetReputationAnalysisResponse, error) { 106 logger := p.Log(ctx) 107 logger.Debug("GetReputationAnalysis") 108 109 if err := params.Validate(); err != nil { 110 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 111 } 112 113 uri := fmt.Sprintf( 114 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-analysis", 115 params.ConfigID, 116 params.Version, 117 params.PolicyID) 118 119 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 120 if err != nil { 121 return nil, fmt.Errorf("failed to create GetReputationAnalysis request: %w", err) 122 } 123 124 var result GetReputationAnalysisResponse 125 resp, err := p.Exec(req, &result) 126 if err != nil { 127 return nil, fmt.Errorf("get reputation analysis request failed: %w", err) 128 } 129 if resp.StatusCode != http.StatusOK { 130 return nil, p.Error(resp) 131 } 132 133 return &result, nil 134 } 135 136 func (p *appsec) UpdateReputationAnalysis(ctx context.Context, params UpdateReputationAnalysisRequest) (*UpdateReputationAnalysisResponse, error) { 137 logger := p.Log(ctx) 138 logger.Debug("UpdateReputationAnalysis") 139 140 if err := params.Validate(); err != nil { 141 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 142 } 143 144 uri := fmt.Sprintf( 145 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-analysis", 146 params.ConfigID, 147 params.Version, 148 params.PolicyID, 149 ) 150 151 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 152 if err != nil { 153 return nil, fmt.Errorf("failed to create UpdateReputationAnalysis request: %w", err) 154 } 155 156 var result UpdateReputationAnalysisResponse 157 resp, err := p.Exec(req, &result, params) 158 if err != nil { 159 return nil, fmt.Errorf("update reputation analysis request failed: %w", err) 160 } 161 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 162 return nil, p.Error(resp) 163 } 164 165 return &result, nil 166 } 167 168 func (p *appsec) RemoveReputationAnalysis(ctx context.Context, params RemoveReputationAnalysisRequest) (*RemoveReputationAnalysisResponse, error) { 169 logger := p.Log(ctx) 170 logger.Debug("RemoveReputationAnalysis") 171 172 uri := fmt.Sprintf( 173 "/appsec/v1/configs/%d/versions/%d/security-policies/%s/reputation-analysis", 174 params.ConfigID, 175 params.Version, 176 params.PolicyID, 177 ) 178 179 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 180 if err != nil { 181 return nil, fmt.Errorf("failed to create RemoveReputationAnalysis request: %w", err) 182 } 183 184 var result RemoveReputationAnalysisResponse 185 resp, err := p.Exec(req, &result, params) 186 if err != nil { 187 return nil, fmt.Errorf("remove reputation analysis request failed: %w", err) 188 } 189 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 190 return nil, p.Error(resp) 191 } 192 193 return &result, nil 194 }