| @@ 333-445 (lines=113) @@ | ||
| 330 | cmd.add_element("copy", agent_id) |
|
| 331 | return self._send_xml_command(cmd) |
|
| 332 | ||
| 333 | def create_alert( |
|
| 334 | self, |
|
| 335 | name: str, |
|
| 336 | condition: AlertCondition, |
|
| 337 | event: AlertEvent, |
|
| 338 | method: AlertMethod, |
|
| 339 | *, |
|
| 340 | method_data: Optional[dict] = None, |
|
| 341 | event_data: Optional[dict] = None, |
|
| 342 | condition_data: Optional[dict] = None, |
|
| 343 | filter_id: Optional[int] = None, |
|
| 344 | comment: Optional[str] = None |
|
| 345 | ) -> Any: |
|
| 346 | """Create a new alert |
|
| 347 | ||
| 348 | Arguments: |
|
| 349 | name: Name of the new Alert |
|
| 350 | condition: The condition that must be satisfied for the alert |
|
| 351 | to occur; if the event is either 'Updated SecInfo arrived' or |
|
| 352 | 'New SecInfo arrived', condition must be 'Always'. Otherwise, |
|
| 353 | condition can also be on of 'Severity at least', 'Filter count |
|
| 354 | changed' or 'Filter count at least'. |
|
| 355 | event: The event that must happen for the alert to occur, one |
|
| 356 | of 'Task run status changed', 'Updated SecInfo arrived' or 'New |
|
| 357 | SecInfo arrived' |
|
| 358 | method: The method by which the user is alerted, one of 'SCP', |
|
| 359 | 'Send', 'SMB', 'SNMP', 'Syslog' or 'Email'; if the event is |
|
| 360 | neither 'Updated SecInfo arrived' nor 'New SecInfo arrived', |
|
| 361 | method can also be one of 'Start Task', 'HTTP Get', 'Sourcefire |
|
| 362 | Connector' or 'verinice Connector'. |
|
| 363 | condition_data: Data that defines the condition |
|
| 364 | event_data: Data that defines the event |
|
| 365 | method_data: Data that defines the method |
|
| 366 | filter_id: Filter to apply when executing alert |
|
| 367 | comment: Comment for the alert |
|
| 368 | ||
| 369 | Returns: |
|
| 370 | The response. See :py:meth:`send_command` for details. |
|
| 371 | """ |
|
| 372 | if not name: |
|
| 373 | raise RequiredArgument( |
|
| 374 | function=self.create_alert.__name__, argument='name' |
|
| 375 | ) |
|
| 376 | ||
| 377 | if not condition: |
|
| 378 | raise RequiredArgument( |
|
| 379 | function=self.create_alert.__name__, argument='condition' |
|
| 380 | ) |
|
| 381 | ||
| 382 | if not event: |
|
| 383 | raise RequiredArgument( |
|
| 384 | function=self.create_alert.__name__, argument='event' |
|
| 385 | ) |
|
| 386 | ||
| 387 | if not method: |
|
| 388 | raise RequiredArgument( |
|
| 389 | function=self.create_alert.__name__, argument='method' |
|
| 390 | ) |
|
| 391 | ||
| 392 | if not isinstance(condition, AlertCondition): |
|
| 393 | raise InvalidArgumentType( |
|
| 394 | function=self.create_alert.__name__, |
|
| 395 | argument='condition', |
|
| 396 | arg_type=AlertCondition.__name__, |
|
| 397 | ) |
|
| 398 | ||
| 399 | if not isinstance(event, AlertEvent): |
|
| 400 | raise InvalidArgumentType( |
|
| 401 | function=self.create_alert.__name__, |
|
| 402 | argument='even', |
|
| 403 | arg_type=AlertEvent.__name__, |
|
| 404 | ) |
|
| 405 | ||
| 406 | if not isinstance(method, AlertMethod): |
|
| 407 | raise InvalidArgumentType( |
|
| 408 | function=self.create_alert.__name__, |
|
| 409 | argument='method', |
|
| 410 | arg_type=AlertMethod.__name__, |
|
| 411 | ) |
|
| 412 | ||
| 413 | _check_event(event, condition, method) |
|
| 414 | ||
| 415 | cmd = XmlCommand("create_alert") |
|
| 416 | cmd.add_element("name", name) |
|
| 417 | ||
| 418 | conditions = cmd.add_element("condition", condition.value) |
|
| 419 | ||
| 420 | if condition_data is not None: |
|
| 421 | for key, value in condition_data.items(): |
|
| 422 | _data = conditions.add_element("data", value) |
|
| 423 | _data.add_element("name", key) |
|
| 424 | ||
| 425 | events = cmd.add_element("event", event.value) |
|
| 426 | ||
| 427 | if event_data is not None: |
|
| 428 | for key, value in event_data.items(): |
|
| 429 | _data = events.add_element("data", value) |
|
| 430 | _data.add_element("name", key) |
|
| 431 | ||
| 432 | methods = cmd.add_element("method", method.value) |
|
| 433 | ||
| 434 | if method_data is not None: |
|
| 435 | for key, value in method_data.items(): |
|
| 436 | _data = methods.add_element("data", value) |
|
| 437 | _data.add_element("name", key) |
|
| 438 | ||
| 439 | if filter_id: |
|
| 440 | cmd.add_element("filter", attrs={"id": filter_id}) |
|
| 441 | ||
| 442 | if comment: |
|
| 443 | cmd.add_element("comment", comment) |
|
| 444 | ||
| 445 | return self._send_xml_command(cmd) |
|
| 446 | ||
| 447 | def clone_alert(self, alert_id: str) -> Any: |
|
| 448 | """Clone an existing alert |
|
| @@ 156-268 (lines=113) @@ | ||
| 153 | # Is authenticated on gvmd |
|
| 154 | self._authenticated = False |
|
| 155 | ||
| 156 | def create_alert( |
|
| 157 | self, |
|
| 158 | name: str, |
|
| 159 | condition: AlertCondition, |
|
| 160 | event: AlertEvent, |
|
| 161 | method: AlertMethod, |
|
| 162 | *, |
|
| 163 | method_data: Optional[dict] = None, |
|
| 164 | event_data: Optional[dict] = None, |
|
| 165 | condition_data: Optional[dict] = None, |
|
| 166 | filter_id: Optional[int] = None, |
|
| 167 | comment: Optional[str] = None |
|
| 168 | ) -> Any: |
|
| 169 | """Create a new alert |
|
| 170 | ||
| 171 | Arguments: |
|
| 172 | name: Name of the new Alert |
|
| 173 | condition: The condition that must be satisfied for the alert |
|
| 174 | to occur; if the event is either 'Updated SecInfo arrived' or |
|
| 175 | 'New SecInfo arrived', condition must be 'Always'. Otherwise, |
|
| 176 | condition can also be on of 'Severity at least', 'Filter count |
|
| 177 | changed' or 'Filter count at least'. |
|
| 178 | event: The event that must happen for the alert to occur, one |
|
| 179 | of 'Task run status changed', 'Updated SecInfo arrived' or 'New |
|
| 180 | SecInfo arrived' |
|
| 181 | method: The method by which the user is alerted, one of 'SCP', |
|
| 182 | 'Send', 'SMB', 'SNMP', 'Syslog' or 'Email'; if the event is |
|
| 183 | neither 'Updated SecInfo arrived' nor 'New SecInfo arrived', |
|
| 184 | method can also be one of 'Start Task', 'HTTP Get', 'Sourcefire |
|
| 185 | Connector' or 'verinice Connector'. |
|
| 186 | condition_data: Data that defines the condition |
|
| 187 | event_data: Data that defines the event |
|
| 188 | method_data: Data that defines the method |
|
| 189 | filter_id: Filter to apply when executing alert |
|
| 190 | comment: Comment for the alert |
|
| 191 | ||
| 192 | Returns: |
|
| 193 | The response. See :py:meth:`send_command` for details. |
|
| 194 | """ |
|
| 195 | if not name: |
|
| 196 | raise RequiredArgument( |
|
| 197 | function=self.create_alert.__name__, argument='name' |
|
| 198 | ) |
|
| 199 | ||
| 200 | if not condition: |
|
| 201 | raise RequiredArgument( |
|
| 202 | function=self.create_alert.__name__, argument='condition' |
|
| 203 | ) |
|
| 204 | ||
| 205 | if not event: |
|
| 206 | raise RequiredArgument( |
|
| 207 | function=self.create_alert.__name__, argument='event' |
|
| 208 | ) |
|
| 209 | ||
| 210 | if not method: |
|
| 211 | raise RequiredArgument( |
|
| 212 | function=self.create_alert.__name__, argument='method' |
|
| 213 | ) |
|
| 214 | ||
| 215 | if not isinstance(condition, AlertCondition): |
|
| 216 | raise InvalidArgumentType( |
|
| 217 | function=self.create_alert.__name__, |
|
| 218 | argument='condition', |
|
| 219 | arg_type=AlertCondition.__name__, |
|
| 220 | ) |
|
| 221 | ||
| 222 | if not isinstance(event, AlertEvent): |
|
| 223 | raise InvalidArgumentType( |
|
| 224 | function=self.create_alert.__name__, |
|
| 225 | argument='even', |
|
| 226 | arg_type=AlertEvent.__name__, |
|
| 227 | ) |
|
| 228 | ||
| 229 | if not isinstance(method, AlertMethod): |
|
| 230 | raise InvalidArgumentType( |
|
| 231 | function=self.create_alert.__name__, |
|
| 232 | argument='method', |
|
| 233 | arg_type=AlertMethod.__name__, |
|
| 234 | ) |
|
| 235 | ||
| 236 | _check_event(event, condition, method) |
|
| 237 | ||
| 238 | cmd = XmlCommand("create_alert") |
|
| 239 | cmd.add_element("name", name) |
|
| 240 | ||
| 241 | conditions = cmd.add_element("condition", condition.value) |
|
| 242 | ||
| 243 | if condition_data is not None: |
|
| 244 | for key, value in condition_data.items(): |
|
| 245 | _data = conditions.add_element("data", value) |
|
| 246 | _data.add_element("name", key) |
|
| 247 | ||
| 248 | events = cmd.add_element("event", event.value) |
|
| 249 | ||
| 250 | if event_data is not None: |
|
| 251 | for key, value in event_data.items(): |
|
| 252 | _data = events.add_element("data", value) |
|
| 253 | _data.add_element("name", key) |
|
| 254 | ||
| 255 | methods = cmd.add_element("method", method.value) |
|
| 256 | ||
| 257 | if method_data is not None: |
|
| 258 | for key, value in method_data.items(): |
|
| 259 | _data = methods.add_element("data", value) |
|
| 260 | _data.add_element("name", key) |
|
| 261 | ||
| 262 | if filter_id: |
|
| 263 | cmd.add_element("filter", attrs={"id": filter_id}) |
|
| 264 | ||
| 265 | if comment: |
|
| 266 | cmd.add_element("comment", comment) |
|
| 267 | ||
| 268 | return self._send_xml_command(cmd) |
|
| 269 | ||
| 270 | def create_audit( |
|
| 271 | self, |
|