github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/appsec/siem_settings.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 SiemSettings interface supports retrieving, modifying and removing the SIEM settings for a configuration. 13 SiemSettings interface { 14 // GetSiemSettings returns SIEM settings for a specific configuration. 15 // 16 // See: https://techdocs.akamai.com/application-security/reference/get-siem 17 GetSiemSettings(ctx context.Context, params GetSiemSettingsRequest) (*GetSiemSettingsResponse, error) 18 19 // UpdateSiemSettings updates SIEM settings for a specific configuration. 20 // 21 // See: https://techdocs.akamai.com/application-security/reference/put-siem 22 UpdateSiemSettings(ctx context.Context, params UpdateSiemSettingsRequest) (*UpdateSiemSettingsResponse, error) 23 24 // RemoveSiemSettings removes SIEM settings for a specific configuration. 25 // 26 // See: https://techdocs.akamai.com/application-security/reference/put-siem 27 // Deprecated: this method will be removed in a future release. 28 RemoveSiemSettings(ctx context.Context, params RemoveSiemSettingsRequest) (*RemoveSiemSettingsResponse, error) 29 } 30 31 // GetSiemSettingsRequest is used to retrieve the SIEM settings for a configuration. 32 GetSiemSettingsRequest struct { 33 ConfigID int `json:"-"` 34 Version int `json:"-"` 35 } 36 37 // GetSiemSettingsResponse is returned from a call to GetSiemSettings. 38 GetSiemSettingsResponse struct { 39 EnableForAllPolicies bool `json:"enableForAllPolicies"` 40 EnableSiem bool `json:"enableSiem"` 41 EnabledBotmanSiemEvents bool `json:"enabledBotmanSiemEvents"` 42 SiemDefinitionID int `json:"siemDefinitionId"` 43 FirewallPolicyIds []string `json:"firewallPolicyIds"` 44 } 45 46 // GetSiemSettingRequest is used to retrieve the SIEM settings for a configuration. 47 GetSiemSettingRequest struct { 48 ConfigID int `json:"-"` 49 Version int `json:"-"` 50 } 51 52 // GetSiemSettingResponse is returned from a call to GetSiemSettings. 53 GetSiemSettingResponse struct { 54 EnableForAllPolicies bool `json:"enableForAllPolicies"` 55 EnableSiem bool `json:"enableSiem"` 56 EnabledBotmanSiemEvents bool `json:"enabledBotmanSiemEvents"` 57 SiemDefinitionID int `json:"siemDefinitionId"` 58 FirewallPolicyIds []string `json:"firewallPolicyIds"` 59 } 60 61 // UpdateSiemSettingsRequest is used to modify the SIEM settings for a configuration. 62 UpdateSiemSettingsRequest struct { 63 ConfigID int `json:"-"` 64 Version int `json:"-"` 65 EnableForAllPolicies bool `json:"enableForAllPolicies"` 66 EnableSiem bool `json:"enableSiem"` 67 EnabledBotmanSiemEvents bool `json:"enabledBotmanSiemEvents"` 68 SiemDefinitionID int `json:"siemDefinitionId"` 69 FirewallPolicyIds []string `json:"firewallPolicyIds"` 70 } 71 72 // UpdateSiemSettingsResponse is returned from a call to UpdateSiemSettings. 73 UpdateSiemSettingsResponse struct { 74 EnableForAllPolicies bool `json:"enableForAllPolicies"` 75 EnableSiem bool `json:"enableSiem"` 76 EnabledBotmanSiemEvents bool `json:"enabledBotmanSiemEvents"` 77 SiemDefinitionID int `json:"siemDefinitionId"` 78 FirewallPolicyIds []string `json:"firewallPolicyIds"` 79 } 80 81 // RemoveSiemSettingsRequest is used to remove the SIEM settings for a configuration. 82 // Deprecated: this struct will be removed in a future release. 83 RemoveSiemSettingsRequest struct { 84 ConfigID int `json:"-"` 85 Version int `json:"-"` 86 EnableForAllPolicies bool `json:"-"` 87 EnableSiem bool `json:"enableSiem"` 88 EnabledBotmanSiemEvents bool `json:"-"` 89 SiemDefinitionID int `json:"-"` 90 FirewallPolicyIds []string `json:"-"` 91 } 92 93 // RemoveSiemSettingsResponse is returned from a call to RemoveSiemSettings. 94 // Deprecated: this struct will be removed in a future release. 95 RemoveSiemSettingsResponse struct { 96 EnableForAllPolicies bool `json:"enableForAllPolicies"` 97 EnableSiem bool `json:"enableSiem"` 98 EnabledBotmanSiemEvents bool `json:"enabledBotmanSiemEvents"` 99 SiemDefinitionID int `json:"siemDefinitionId"` 100 FirewallPolicyIds []string `json:"firewallPolicyIds"` 101 } 102 ) 103 104 // Validate validates a GetSiemSettingsRequest. 105 func (v GetSiemSettingsRequest) Validate() error { 106 return validation.Errors{ 107 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 108 "Version": validation.Validate(v.Version, validation.Required), 109 }.Filter() 110 } 111 112 // Validate validates an UpdateSiemSettingsRequest. 113 func (v UpdateSiemSettingsRequest) Validate() error { 114 return validation.Errors{ 115 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 116 "Version": validation.Validate(v.Version, validation.Required), 117 }.Filter() 118 } 119 120 // Validate validates a RemoveSiemSettingsRequest. 121 // Deprecated: this method will be removed in a future release. 122 func (v RemoveSiemSettingsRequest) Validate() error { 123 return validation.Errors{ 124 "ConfigID": validation.Validate(v.ConfigID, validation.Required), 125 "Version": validation.Validate(v.Version, validation.Required), 126 }.Filter() 127 } 128 129 func (p *appsec) GetSiemSettings(ctx context.Context, params GetSiemSettingsRequest) (*GetSiemSettingsResponse, error) { 130 logger := p.Log(ctx) 131 logger.Debug("GetSiemSettings") 132 133 if err := params.Validate(); err != nil { 134 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 135 } 136 137 uri := fmt.Sprintf( 138 "/appsec/v1/configs/%d/versions/%d/siem", 139 params.ConfigID, 140 params.Version, 141 ) 142 143 req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil) 144 if err != nil { 145 return nil, fmt.Errorf("failed to create GetSiemSettings request: %w", err) 146 } 147 148 var result GetSiemSettingsResponse 149 resp, err := p.Exec(req, &result) 150 if err != nil { 151 return nil, fmt.Errorf("get siem settings request failed: %w", err) 152 } 153 if resp.StatusCode != http.StatusOK { 154 return nil, p.Error(resp) 155 } 156 157 return &result, nil 158 } 159 160 func (p *appsec) UpdateSiemSettings(ctx context.Context, params UpdateSiemSettingsRequest) (*UpdateSiemSettingsResponse, error) { 161 logger := p.Log(ctx) 162 logger.Debug("UpdateSiemSettings") 163 164 if err := params.Validate(); err != nil { 165 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 166 } 167 168 uri := fmt.Sprintf( 169 "/appsec/v1/configs/%d/versions/%d/siem", 170 params.ConfigID, 171 params.Version, 172 ) 173 174 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 175 if err != nil { 176 return nil, fmt.Errorf("failed to create UpdateSiemSettings request: %w", err) 177 } 178 179 var result UpdateSiemSettingsResponse 180 resp, err := p.Exec(req, &result, params) 181 if err != nil { 182 return nil, fmt.Errorf("update siem settings request failed: %w", err) 183 } 184 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 185 return nil, p.Error(resp) 186 } 187 188 return &result, nil 189 } 190 191 // Deprecated: this method will be removed in a future release. 192 func (p *appsec) RemoveSiemSettings(ctx context.Context, params RemoveSiemSettingsRequest) (*RemoveSiemSettingsResponse, error) { 193 logger := p.Log(ctx) 194 logger.Debug("RemoveSiemSettings") 195 196 if err := params.Validate(); err != nil { 197 return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error()) 198 } 199 200 uri := fmt.Sprintf( 201 "/appsec/v1/configs/%d/versions/%d/siem", 202 params.ConfigID, 203 params.Version, 204 ) 205 206 req, err := http.NewRequestWithContext(ctx, http.MethodPut, uri, nil) 207 if err != nil { 208 return nil, fmt.Errorf("failed to create RemoveSiemSettings request: %w", err) 209 } 210 211 var result RemoveSiemSettingsResponse 212 resp, err := p.Exec(req, &result, params) 213 if err != nil { 214 return nil, fmt.Errorf("remove siem settings request failed: %w", err) 215 } 216 if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusCreated { 217 return nil, p.Error(resp) 218 } 219 220 return &result, nil 221 }