|
11 | 11 | from rich.progress import Progress, TaskID
|
12 | 12 | from rich.prompt import Confirm, Prompt
|
13 | 13 |
|
| 14 | +from censys.asm.saved_queries import SavedQueries |
14 | 15 | from censys.asm.seeds import SEED_TYPES, Seeds
|
15 | 16 | from censys.cli.utils import console
|
16 | 17 | from censys.common.config import DEFAULT, get_config, write_config
|
17 | 18 | from censys.common.exceptions import (
|
| 19 | + CensysAsmException, |
18 | 20 | CensysSeedNotFoundException,
|
19 | 21 | CensysUnauthorizedException,
|
20 | 22 | )
|
@@ -437,6 +439,97 @@ def add_seed_arguments(parser: argparse._SubParsersAction, is_delete=False) -> N
|
437 | 439 | )
|
438 | 440 |
|
439 | 441 |
|
| 442 | +def cli_list_saved_queries(args: argparse.Namespace): |
| 443 | + """List saved queries subcommand. |
| 444 | +
|
| 445 | + Args: |
| 446 | + args (Namespace): Argparse Namespace. |
| 447 | + """ |
| 448 | + s = SavedQueries(args.api_key) |
| 449 | + try: |
| 450 | + res = s.get_saved_queries( |
| 451 | + args.query_name_prefix, args.page_size, args.page, args.filter_term |
| 452 | + ) |
| 453 | + |
| 454 | + if args.csv: |
| 455 | + console.print("queryId,queryName,query,createdAt") |
| 456 | + for query in res["results"]: |
| 457 | + console.print( |
| 458 | + f"{query['queryId']},{query['queryName']},{query['query']},{query['createdAt']}" # noqa: E231 |
| 459 | + ) |
| 460 | + else: |
| 461 | + console.print_json(json.dumps(res)) |
| 462 | + except KeyError: |
| 463 | + console.print("Failed to get saved queries.") |
| 464 | + sys.exit(1) |
| 465 | + |
| 466 | + |
| 467 | +def cli_add_saved_query(args: argparse.Namespace): |
| 468 | + """Add saved query subcommand. |
| 469 | +
|
| 470 | + Args: |
| 471 | + args (Namespace): Argparse Namespace. |
| 472 | + """ |
| 473 | + s = SavedQueries(args.api_key) |
| 474 | + res = s.add_saved_query(args.query, args.query_name) |
| 475 | + try: |
| 476 | + console.print( |
| 477 | + f"Added saved query.\nQuery name: {res['result']['queryName']}\nQuery: {res['result']['query']}\nQuery ID: {res['result']['queryId']}\nCreated at: {res['result']['createdAt']}" |
| 478 | + ) |
| 479 | + except (KeyError, CensysAsmException): |
| 480 | + console.print("Failed to add saved query.") |
| 481 | + sys.exit(1) |
| 482 | + |
| 483 | + |
| 484 | +def cli_get_saved_query_by_id(args: argparse.Namespace): |
| 485 | + """Get saved query by id subcommand. |
| 486 | +
|
| 487 | + Args: |
| 488 | + args (Namespace): Argparse Namespace. |
| 489 | + """ |
| 490 | + s = SavedQueries(args.api_key) |
| 491 | + res = s.get_saved_query_by_id(args.query_id) |
| 492 | + try: |
| 493 | + console.print( |
| 494 | + f"Query name: {res['result']['queryName']}\nQuery: {res['result']['query']}\nQuery ID: {res['result']['queryId']}\nCreated at: {res['result']['createdAt']}" |
| 495 | + ) |
| 496 | + except (KeyError, CensysAsmException): |
| 497 | + console.print("Failed to get saved query.") |
| 498 | + sys.exit(1) |
| 499 | + |
| 500 | + |
| 501 | +def cli_edit_saved_query_by_id(args: argparse.Namespace): |
| 502 | + """Edit saved query by id subcommand. |
| 503 | +
|
| 504 | + Args: |
| 505 | + args (Namespace): Argparse Namespace. |
| 506 | + """ |
| 507 | + s = SavedQueries(args.api_key) |
| 508 | + res = s.edit_saved_query_by_id(args.query_id, args.query, args.query_name) |
| 509 | + try: |
| 510 | + console.print( |
| 511 | + f"Edited saved query.\nQuery name: {res['result']['queryName']}\nQuery: {res['result']['query']}\nQuery ID: {res['result']['queryId']}\nCreated at: {res['result']['createdAt']}" |
| 512 | + ) |
| 513 | + except (KeyError, CensysAsmException): |
| 514 | + console.print("Failed to edit saved query.") |
| 515 | + sys.exit(1) |
| 516 | + |
| 517 | + |
| 518 | +def cli_delete_saved_query_by_id(args: argparse.Namespace): |
| 519 | + """Delete saved query by id subcommand. |
| 520 | +
|
| 521 | + Args: |
| 522 | + args (Namespace): Argparse Namespace. |
| 523 | + """ |
| 524 | + s = SavedQueries(args.api_key) |
| 525 | + res = s.delete_saved_query_by_id(args.query_id) |
| 526 | + if res == {}: |
| 527 | + console.print(f"Deleted saved query with ID {args.query_id}.") |
| 528 | + else: |
| 529 | + console.print("Failed to delete saved query.") |
| 530 | + sys.exit(1) |
| 531 | + |
| 532 | + |
440 | 533 | def include(parent_parser: argparse._SubParsersAction, parents: dict):
|
441 | 534 | """Include this subcommand into the parent parser.
|
442 | 535 |
|
@@ -568,3 +661,117 @@ def add_verbose(parser):
|
568 | 661 | )
|
569 | 662 | add_verbose(list_parser)
|
570 | 663 | list_parser.set_defaults(func=cli_list_seeds)
|
| 664 | + |
| 665 | + list_saved_queries_parser = asm_subparser.add_parser( |
| 666 | + "list-saved-queries", |
| 667 | + description="List all ASM saved queries, optionally filtered by query name prefix and filter term", |
| 668 | + help="list saved queries", |
| 669 | + parents=[parents["asm_auth"]], |
| 670 | + ) |
| 671 | + list_saved_queries_parser.add_argument( |
| 672 | + "--query-name-prefix", |
| 673 | + help="Prefix for the saved query name to filter by", |
| 674 | + type=str, |
| 675 | + default="", |
| 676 | + ) |
| 677 | + list_saved_queries_parser.add_argument( |
| 678 | + "--filter-term", |
| 679 | + help="Term used to filter the list of saved query names and the saved queries", |
| 680 | + type=str, |
| 681 | + default="", |
| 682 | + ) |
| 683 | + list_saved_queries_parser.add_argument( |
| 684 | + "--page-size", |
| 685 | + help="Number of results to return. Defaults to 50.", |
| 686 | + type=int, |
| 687 | + default=50, |
| 688 | + ) |
| 689 | + list_saved_queries_parser.add_argument( |
| 690 | + "--page", |
| 691 | + help="Page number to begin at when searching. Defaults to 1.", |
| 692 | + type=int, |
| 693 | + default=1, |
| 694 | + ) |
| 695 | + list_saved_queries_parser.add_argument( |
| 696 | + "--csv", help="output in CSV format (otherwise JSON)", action="store_true" |
| 697 | + ) |
| 698 | + add_verbose(list_saved_queries_parser) |
| 699 | + list_saved_queries_parser.set_defaults(func=cli_list_saved_queries) |
| 700 | + |
| 701 | + add_saved_query_parser = asm_subparser.add_parser( |
| 702 | + "add-saved-query", |
| 703 | + description="Add a saved query to ASM", |
| 704 | + help="add saved query", |
| 705 | + parents=[parents["asm_auth"]], |
| 706 | + ) |
| 707 | + add_saved_query_parser.add_argument( |
| 708 | + "--query-name", |
| 709 | + help="Name of the saved query", |
| 710 | + type=str, |
| 711 | + required=True, |
| 712 | + ) |
| 713 | + add_saved_query_parser.add_argument( |
| 714 | + "--query", |
| 715 | + help="Query string", |
| 716 | + type=str, |
| 717 | + required=True, |
| 718 | + ) |
| 719 | + add_verbose(add_saved_query_parser) |
| 720 | + add_saved_query_parser.set_defaults(func=cli_add_saved_query) |
| 721 | + |
| 722 | + get_saved_query_by_id_parser = asm_subparser.add_parser( |
| 723 | + "get-saved-query-by-id", |
| 724 | + description="Get a saved query by ID", |
| 725 | + help="get saved query by ID", |
| 726 | + parents=[parents["asm_auth"]], |
| 727 | + ) |
| 728 | + get_saved_query_by_id_parser.add_argument( |
| 729 | + "--query-id", |
| 730 | + help="ID of the saved query", |
| 731 | + type=str, |
| 732 | + required=True, |
| 733 | + ) |
| 734 | + add_verbose(get_saved_query_by_id_parser) |
| 735 | + get_saved_query_by_id_parser.set_defaults(func=cli_get_saved_query_by_id) |
| 736 | + |
| 737 | + edit_saved_query_by_id_parser = asm_subparser.add_parser( |
| 738 | + "edit-saved-query-by-id", |
| 739 | + description="Edit a saved query by ID", |
| 740 | + help="edit saved query by ID", |
| 741 | + parents=[parents["asm_auth"]], |
| 742 | + ) |
| 743 | + edit_saved_query_by_id_parser.add_argument( |
| 744 | + "--query-id", |
| 745 | + help="ID of the saved query", |
| 746 | + type=str, |
| 747 | + required=True, |
| 748 | + ) |
| 749 | + edit_saved_query_by_id_parser.add_argument( |
| 750 | + "--query-name", |
| 751 | + help="Name of the saved query", |
| 752 | + type=str, |
| 753 | + required=True, |
| 754 | + ) |
| 755 | + edit_saved_query_by_id_parser.add_argument( |
| 756 | + "--query", |
| 757 | + help="Query string", |
| 758 | + type=str, |
| 759 | + required=True, |
| 760 | + ) |
| 761 | + add_verbose(edit_saved_query_by_id_parser) |
| 762 | + edit_saved_query_by_id_parser.set_defaults(func=cli_edit_saved_query_by_id) |
| 763 | + |
| 764 | + delete_saved_query_by_id_parser = asm_subparser.add_parser( |
| 765 | + "delete-saved-query-by-id", |
| 766 | + description="Delete a saved query by ID", |
| 767 | + help="delete saved query by ID", |
| 768 | + parents=[parents["asm_auth"]], |
| 769 | + ) |
| 770 | + delete_saved_query_by_id_parser.add_argument( |
| 771 | + "--query-id", |
| 772 | + help="ID of the saved query", |
| 773 | + type=str, |
| 774 | + required=True, |
| 775 | + ) |
| 776 | + add_verbose(delete_saved_query_by_id_parser) |
| 777 | + delete_saved_query_by_id_parser.set_defaults(func=cli_delete_saved_query_by_id) |
0 commit comments