| @@ 274-399 (lines=126) @@ | ||
| 271 | cmd.set_attribute("details", "1") |
|
| 272 | return self._send_xml_command(cmd) |
|
| 273 | ||
| 274 | def modify_task( |
|
| 275 | self, |
|
| 276 | task_id: str, |
|
| 277 | *, |
|
| 278 | name: Optional[str] = None, |
|
| 279 | config_id: Optional[str] = None, |
|
| 280 | target_id: Optional[str] = None, |
|
| 281 | scanner_id: Optional[str] = None, |
|
| 282 | alterable: Optional[bool] = None, |
|
| 283 | hosts_ordering: Optional[HostsOrdering] = None, |
|
| 284 | schedule_id: Optional[str] = None, |
|
| 285 | schedule_periods: Optional[int] = None, |
|
| 286 | comment: Optional[str] = None, |
|
| 287 | alert_ids: Optional[List[str]] = None, |
|
| 288 | observers: Optional[List[str]] = None, |
|
| 289 | preferences: Optional[dict] = None, |
|
| 290 | ) -> Any: |
|
| 291 | """Modifies an existing task. |
|
| 292 | ||
| 293 | Arguments: |
|
| 294 | task_id: UUID of task to modify. |
|
| 295 | name: The name of the task. |
|
| 296 | config_id: UUID of scan config to use by the task |
|
| 297 | target_id: UUID of target to be scanned |
|
| 298 | scanner_id: UUID of scanner to use for scanning the target |
|
| 299 | comment: The comment on the task. |
|
| 300 | alert_ids: List of UUIDs for alerts to be applied to the task |
|
| 301 | hosts_ordering: The order hosts are scanned in |
|
| 302 | schedule_id: UUID of a schedule when the task should be run. |
|
| 303 | schedule_periods: A limit to the number of times the task will be |
|
| 304 | scheduled, or 0 for no limit. |
|
| 305 | observers: List of names or ids of users which should be allowed to |
|
| 306 | observe this task |
|
| 307 | preferences: Name/Value pairs of scanner preferences. |
|
| 308 | ||
| 309 | Returns: |
|
| 310 | The response. See :py:meth:`send_command` for details. |
|
| 311 | """ |
|
| 312 | if not task_id: |
|
| 313 | raise RequiredArgument( |
|
| 314 | function=self.modify_task.__name__, argument='task_id argument' |
|
| 315 | ) |
|
| 316 | ||
| 317 | cmd = XmlCommand("modify_task") |
|
| 318 | cmd.set_attribute("task_id", task_id) |
|
| 319 | ||
| 320 | if name: |
|
| 321 | cmd.add_element("name", name) |
|
| 322 | ||
| 323 | if comment: |
|
| 324 | cmd.add_element("comment", comment) |
|
| 325 | ||
| 326 | if config_id: |
|
| 327 | cmd.add_element("config", attrs={"id": config_id}) |
|
| 328 | ||
| 329 | if target_id: |
|
| 330 | cmd.add_element("target", attrs={"id": target_id}) |
|
| 331 | ||
| 332 | if alterable is not None: |
|
| 333 | cmd.add_element("alterable", to_bool(alterable)) |
|
| 334 | ||
| 335 | if hosts_ordering: |
|
| 336 | if not isinstance(hosts_ordering, HostsOrdering): |
|
| 337 | raise InvalidArgumentType( |
|
| 338 | function=self.modify_task.__name__, |
|
| 339 | argument='hosts_ordering', |
|
| 340 | arg_type=HostsOrdering.__name__, |
|
| 341 | ) |
|
| 342 | cmd.add_element("hosts_ordering", hosts_ordering.value) |
|
| 343 | ||
| 344 | if scanner_id: |
|
| 345 | cmd.add_element("scanner", attrs={"id": scanner_id}) |
|
| 346 | ||
| 347 | if schedule_id: |
|
| 348 | cmd.add_element("schedule", attrs={"id": schedule_id}) |
|
| 349 | ||
| 350 | if schedule_periods is not None: |
|
| 351 | if ( |
|
| 352 | not isinstance(schedule_periods, Integral) |
|
| 353 | or schedule_periods < 0 |
|
| 354 | ): |
|
| 355 | raise InvalidArgument( |
|
| 356 | "schedule_periods must be an integer greater or equal " |
|
| 357 | "than 0" |
|
| 358 | ) |
|
| 359 | cmd.add_element("schedule_periods", str(schedule_periods)) |
|
| 360 | ||
| 361 | if alert_ids is not None: |
|
| 362 | if not is_list_like(alert_ids): |
|
| 363 | raise InvalidArgumentType( |
|
| 364 | function=self.modify_task.__name__, |
|
| 365 | argument='alert_ids', |
|
| 366 | arg_type='list', |
|
| 367 | ) |
|
| 368 | ||
| 369 | if len(alert_ids) == 0: |
|
| 370 | cmd.add_element("alert", attrs={"id": "0"}) |
|
| 371 | else: |
|
| 372 | for alert in alert_ids: |
|
| 373 | cmd.add_element("alert", attrs={"id": str(alert)}) |
|
| 374 | ||
| 375 | if observers is not None: |
|
| 376 | if not is_list_like(observers): |
|
| 377 | raise InvalidArgumentType( |
|
| 378 | function=self.modify_task.__name__, |
|
| 379 | argument='observers', |
|
| 380 | arg_type='list', |
|
| 381 | ) |
|
| 382 | ||
| 383 | cmd.add_element("observers", to_comma_list(observers)) |
|
| 384 | ||
| 385 | if preferences is not None: |
|
| 386 | if not isinstance(preferences, Mapping): |
|
| 387 | raise InvalidArgumentType( |
|
| 388 | function=self.modify_task.__name__, |
|
| 389 | argument='preferences', |
|
| 390 | arg_type=Mapping.__name__, |
|
| 391 | ) |
|
| 392 | ||
| 393 | _xmlprefs = cmd.add_element("preferences") |
|
| 394 | for pref_name, pref_value in preferences.items(): |
|
| 395 | _xmlpref = _xmlprefs.add_element("preference") |
|
| 396 | _xmlpref.add_element("scanner_name", pref_name) |
|
| 397 | _xmlpref.add_element("value", str(pref_value)) |
|
| 398 | ||
| 399 | return self._send_xml_command(cmd) |
|
| 400 | ||
| 401 | def move_task(self, task_id: str, *, slave_id: Optional[str] = None) -> Any: |
|
| 402 | """Move an existing task to another GMP slave scanner or the master |
|
| @@ 266-391 (lines=126) @@ | ||
| 263 | cmd.set_attribute("details", "1") |
|
| 264 | return self._send_xml_command(cmd) |
|
| 265 | ||
| 266 | def modify_audit( |
|
| 267 | self, |
|
| 268 | audit_id: str, |
|
| 269 | *, |
|
| 270 | name: Optional[str] = None, |
|
| 271 | policy_id: Optional[str] = None, |
|
| 272 | target_id: Optional[str] = None, |
|
| 273 | scanner_id: Optional[str] = None, |
|
| 274 | alterable: Optional[bool] = None, |
|
| 275 | hosts_ordering: Optional[HostsOrdering] = None, |
|
| 276 | schedule_id: Optional[str] = None, |
|
| 277 | schedule_periods: Optional[int] = None, |
|
| 278 | comment: Optional[str] = None, |
|
| 279 | alert_ids: Optional[List[str]] = None, |
|
| 280 | observers: Optional[List[str]] = None, |
|
| 281 | preferences: Optional[dict] = None, |
|
| 282 | ) -> Any: |
|
| 283 | """Modifies an existing task. |
|
| 284 | ||
| 285 | Arguments: |
|
| 286 | audit_id: UUID of audit to modify. |
|
| 287 | name: The name of the audit. |
|
| 288 | policy_id: UUID of policy to use by the audit |
|
| 289 | target_id: UUID of target to be scanned |
|
| 290 | scanner_id: UUID of scanner to use for scanning the target |
|
| 291 | comment: The comment on the audit. |
|
| 292 | alert_ids: List of UUIDs for alerts to be applied to the audit |
|
| 293 | hosts_ordering: The order hosts are scanned in |
|
| 294 | schedule_id: UUID of a schedule when the audit should be run. |
|
| 295 | schedule_periods: A limit to the number of times the audit will be |
|
| 296 | scheduled, or 0 for no limit. |
|
| 297 | observers: List of names or ids of users which should be allowed to |
|
| 298 | observe this audit |
|
| 299 | preferences: Name/Value pairs of scanner preferences. |
|
| 300 | ||
| 301 | Returns: |
|
| 302 | The response. See :py:meth:`send_command` for details. |
|
| 303 | """ |
|
| 304 | if not audit_id: |
|
| 305 | raise RequiredArgument( |
|
| 306 | function=self.modify_task.__name__, argument='task_id argument' |
|
| 307 | ) |
|
| 308 | ||
| 309 | cmd = XmlCommand("modify_task") |
|
| 310 | cmd.set_attribute("task_id", audit_id) |
|
| 311 | ||
| 312 | if name: |
|
| 313 | cmd.add_element("name", name) |
|
| 314 | ||
| 315 | if comment: |
|
| 316 | cmd.add_element("comment", comment) |
|
| 317 | ||
| 318 | if policy_id: |
|
| 319 | cmd.add_element("config", attrs={"id": policy_id}) |
|
| 320 | ||
| 321 | if target_id: |
|
| 322 | cmd.add_element("target", attrs={"id": target_id}) |
|
| 323 | ||
| 324 | if alterable is not None: |
|
| 325 | cmd.add_element("alterable", to_bool(alterable)) |
|
| 326 | ||
| 327 | if hosts_ordering: |
|
| 328 | if not isinstance(hosts_ordering, HostsOrdering): |
|
| 329 | raise InvalidArgumentType( |
|
| 330 | function=self.modify_task.__name__, |
|
| 331 | argument='hosts_ordering', |
|
| 332 | arg_type=HostsOrdering.__name__, |
|
| 333 | ) |
|
| 334 | cmd.add_element("hosts_ordering", hosts_ordering.value) |
|
| 335 | ||
| 336 | if scanner_id: |
|
| 337 | cmd.add_element("scanner", attrs={"id": scanner_id}) |
|
| 338 | ||
| 339 | if schedule_id: |
|
| 340 | cmd.add_element("schedule", attrs={"id": schedule_id}) |
|
| 341 | ||
| 342 | if schedule_periods is not None: |
|
| 343 | if ( |
|
| 344 | not isinstance(schedule_periods, Integral) |
|
| 345 | or schedule_periods < 0 |
|
| 346 | ): |
|
| 347 | raise InvalidArgument( |
|
| 348 | "schedule_periods must be an integer greater or equal " |
|
| 349 | "than 0" |
|
| 350 | ) |
|
| 351 | cmd.add_element("schedule_periods", str(schedule_periods)) |
|
| 352 | ||
| 353 | if alert_ids is not None: |
|
| 354 | if not is_list_like(alert_ids): |
|
| 355 | raise InvalidArgumentType( |
|
| 356 | function=self.modify_task.__name__, |
|
| 357 | argument='alert_ids', |
|
| 358 | arg_type='list', |
|
| 359 | ) |
|
| 360 | ||
| 361 | if len(alert_ids) == 0: |
|
| 362 | cmd.add_element("alert", attrs={"id": "0"}) |
|
| 363 | else: |
|
| 364 | for alert in alert_ids: |
|
| 365 | cmd.add_element("alert", attrs={"id": str(alert)}) |
|
| 366 | ||
| 367 | if observers is not None: |
|
| 368 | if not is_list_like(observers): |
|
| 369 | raise InvalidArgumentType( |
|
| 370 | function=self.modify_task.__name__, |
|
| 371 | argument='observers', |
|
| 372 | arg_type='list', |
|
| 373 | ) |
|
| 374 | ||
| 375 | cmd.add_element("observers", to_comma_list(observers)) |
|
| 376 | ||
| 377 | if preferences is not None: |
|
| 378 | if not isinstance(preferences, Mapping): |
|
| 379 | raise InvalidArgumentType( |
|
| 380 | function=self.modify_task.__name__, |
|
| 381 | argument='preferences', |
|
| 382 | arg_type=Mapping.__name__, |
|
| 383 | ) |
|
| 384 | ||
| 385 | _xmlprefs = cmd.add_element("preferences") |
|
| 386 | for pref_name, pref_value in preferences.items(): |
|
| 387 | _xmlpref = _xmlprefs.add_element("preference") |
|
| 388 | _xmlpref.add_element("scanner_name", pref_name) |
|
| 389 | _xmlpref.add_element("value", str(pref_value)) |
|
| 390 | ||
| 391 | return self._send_xml_command(cmd) |
|
| 392 | ||
| 393 | def resume_audit(self, audit_id: str) -> Any: |
|
| 394 | """Resume an existing stopped audit |
|