cycode 3.10.3.dev2__tar.gz → 3.10.4.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/PKG-INFO +1 -1
- cycode-3.10.4.dev1/cycode/__init__.py +1 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/code_scanner.py +76 -4
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/commit_range_scanner.py +51 -8
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/consts.py +5 -2
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/zip_documents.py +5 -1
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/scan_batch.py +5 -1
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/scan_utils.py +5 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/models.py +20 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/scan_client.py +61 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/pyproject.toml +1 -1
- cycode-3.10.3.dev2/cycode/__init__.py +0 -1
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/LICENCE +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/README.md +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/__main__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/app.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/handlers.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/policy.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/response_builders.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/auth_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/auth_common.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/auth_manager.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/models.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/configure_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/consts.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/messages.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/prompts.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ignore/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ignore/ignore_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/mcp/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/mcp/mcp_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/report_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/common.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/report_import_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/sca_options.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/aggregation_report.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/detection_excluder.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/path/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/path/path_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/repository/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_parameters.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_result.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/get_cli_status.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/models.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/status_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/version_command.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/cli_types.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/config.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/console.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/custom_exceptions.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_errors.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/commit_range_documents.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/file_excluder.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/iac/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/models/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/path_documents.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/repository_documents.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/walk_ignore.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/logger.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/main.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/models.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/console_printer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/json_printer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/printer_base.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/rich_printer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table_models.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table_printer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table_printer_base.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/text_printer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_data.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/rich_helpers.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/base_file_manager.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/config_file_manager.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/configuration_manager.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/credentials_manager.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/jwt_creator.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/enum_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/get_api_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/git_proxy.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/ignore_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/jwt_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/path_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/progress_bar.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/shell_executor.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/string_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/task_timer.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/url_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/version_checker.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/yaml_utils.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/config.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/__init__.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/ai_security_manager_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/auth_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/base_token_auth_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/client_creator.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/config.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/config_dev.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_client_base.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_dev_based_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_token_based_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/headers.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/import_sbom_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/logger.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/report_client.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/scan_config_base.py +0 -0
- {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/logger.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '3.10.4.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
|
|
@@ -29,12 +29,15 @@ from cycode.cli.utils.scan_utils import (
|
|
|
29
29
|
generate_unique_scan_id,
|
|
30
30
|
is_cycodeignore_allowed_by_scan_config,
|
|
31
31
|
set_issue_detected_by_scan_results,
|
|
32
|
+
should_use_presigned_upload,
|
|
32
33
|
)
|
|
33
34
|
from cycode.cyclient.models import ZippedFileScanResult
|
|
34
35
|
from cycode.logger import get_logger
|
|
35
36
|
|
|
36
37
|
if TYPE_CHECKING:
|
|
37
38
|
from cycode.cli.files_collector.models.in_memory_zip import InMemoryZip
|
|
39
|
+
from cycode.cli.printers.console_printer import ConsolePrinter
|
|
40
|
+
from cycode.cli.utils.progress_bar import BaseProgressBar
|
|
38
41
|
from cycode.cyclient.scan_client import ScanClient
|
|
39
42
|
|
|
40
43
|
start_scan_time = time.time()
|
|
@@ -106,7 +109,10 @@ def _should_use_sync_flow(command_scan_type: str, scan_type: str, sync_option: b
|
|
|
106
109
|
|
|
107
110
|
|
|
108
111
|
def _get_scan_documents_thread_func(
|
|
109
|
-
ctx: typer.Context,
|
|
112
|
+
ctx: typer.Context,
|
|
113
|
+
is_git_diff: bool,
|
|
114
|
+
is_commit_range: bool,
|
|
115
|
+
scan_parameters: dict,
|
|
110
116
|
) -> Callable[[list[Document]], tuple[str, CliError, LocalScanResult]]:
|
|
111
117
|
cycode_client = ctx.obj['client']
|
|
112
118
|
scan_type = ctx.obj['scan_type']
|
|
@@ -180,6 +186,36 @@ def _get_scan_documents_thread_func(
|
|
|
180
186
|
return _scan_batch_thread_func
|
|
181
187
|
|
|
182
188
|
|
|
189
|
+
def _run_presigned_upload_scan(
|
|
190
|
+
scan_batch_thread_func: Callable,
|
|
191
|
+
scan_type: str,
|
|
192
|
+
documents_to_scan: list[Document],
|
|
193
|
+
progress_bar: 'BaseProgressBar',
|
|
194
|
+
printer: 'ConsolePrinter',
|
|
195
|
+
) -> tuple:
|
|
196
|
+
try:
|
|
197
|
+
# Try to zip all documents as a single batch; ZipTooLargeError raised if it exceeds the scan type's limit
|
|
198
|
+
zip_documents(scan_type, documents_to_scan)
|
|
199
|
+
# It fits: skip batching and upload everything as one ZIP
|
|
200
|
+
return run_parallel_batched_scan(
|
|
201
|
+
scan_batch_thread_func,
|
|
202
|
+
scan_type,
|
|
203
|
+
documents_to_scan,
|
|
204
|
+
progress_bar=progress_bar,
|
|
205
|
+
skip_batching=True,
|
|
206
|
+
)
|
|
207
|
+
except custom_exceptions.ZipTooLargeError:
|
|
208
|
+
printer.print_warning(
|
|
209
|
+
'The scan is too large to upload as a single file. This may result in corrupted scan results.'
|
|
210
|
+
)
|
|
211
|
+
return run_parallel_batched_scan(
|
|
212
|
+
scan_batch_thread_func,
|
|
213
|
+
scan_type,
|
|
214
|
+
documents_to_scan,
|
|
215
|
+
progress_bar=progress_bar,
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
183
219
|
def scan_documents(
|
|
184
220
|
ctx: typer.Context,
|
|
185
221
|
documents_to_scan: list[Document],
|
|
@@ -203,9 +239,15 @@ def scan_documents(
|
|
|
203
239
|
return
|
|
204
240
|
|
|
205
241
|
scan_batch_thread_func = _get_scan_documents_thread_func(ctx, is_git_diff, is_commit_range, scan_parameters)
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
242
|
+
|
|
243
|
+
if should_use_presigned_upload(scan_type):
|
|
244
|
+
errors, local_scan_results = _run_presigned_upload_scan(
|
|
245
|
+
scan_batch_thread_func, scan_type, documents_to_scan, progress_bar, printer
|
|
246
|
+
)
|
|
247
|
+
else:
|
|
248
|
+
errors, local_scan_results = run_parallel_batched_scan(
|
|
249
|
+
scan_batch_thread_func, scan_type, documents_to_scan, progress_bar=progress_bar
|
|
250
|
+
)
|
|
209
251
|
|
|
210
252
|
try_set_aggregation_report_url_if_needed(ctx, scan_parameters, ctx.obj['client'], scan_type)
|
|
211
253
|
|
|
@@ -217,6 +259,31 @@ def scan_documents(
|
|
|
217
259
|
print_local_scan_results(ctx, local_scan_results, errors)
|
|
218
260
|
|
|
219
261
|
|
|
262
|
+
def _perform_scan_v4_async(
|
|
263
|
+
cycode_client: 'ScanClient',
|
|
264
|
+
zipped_documents: 'InMemoryZip',
|
|
265
|
+
scan_type: str,
|
|
266
|
+
scan_parameters: dict,
|
|
267
|
+
is_git_diff: bool,
|
|
268
|
+
is_commit_range: bool,
|
|
269
|
+
) -> ZippedFileScanResult:
|
|
270
|
+
upload_link = cycode_client.get_upload_link(scan_type)
|
|
271
|
+
logger.debug('Got upload link, %s', {'upload_id': upload_link.upload_id})
|
|
272
|
+
|
|
273
|
+
cycode_client.upload_to_presigned_post(upload_link.url, upload_link.presigned_post_fields, zipped_documents)
|
|
274
|
+
logger.debug('Uploaded zip to presigned URL')
|
|
275
|
+
|
|
276
|
+
scan_async_result = cycode_client.scan_repository_from_upload_id(
|
|
277
|
+
scan_type, upload_link.upload_id, scan_parameters, is_git_diff, is_commit_range
|
|
278
|
+
)
|
|
279
|
+
logger.debug(
|
|
280
|
+
'Presigned upload scan request triggered, %s',
|
|
281
|
+
{'scan_id': scan_async_result.scan_id, 'upload_id': upload_link.upload_id},
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
return poll_scan_results(cycode_client, scan_async_result.scan_id, scan_type, scan_parameters)
|
|
285
|
+
|
|
286
|
+
|
|
220
287
|
def _perform_scan_async(
|
|
221
288
|
cycode_client: 'ScanClient',
|
|
222
289
|
zipped_documents: 'InMemoryZip',
|
|
@@ -262,6 +329,11 @@ def _perform_scan(
|
|
|
262
329
|
# it does not support commit range scans; should_use_sync_flow handles it
|
|
263
330
|
return _perform_scan_sync(cycode_client, zipped_documents, scan_type, scan_parameters, is_git_diff)
|
|
264
331
|
|
|
332
|
+
if should_use_presigned_upload(scan_type):
|
|
333
|
+
return _perform_scan_v4_async(
|
|
334
|
+
cycode_client, zipped_documents, scan_type, scan_parameters, is_git_diff, is_commit_range
|
|
335
|
+
)
|
|
336
|
+
|
|
265
337
|
return _perform_scan_async(cycode_client, zipped_documents, scan_type, scan_parameters, is_commit_range)
|
|
266
338
|
|
|
267
339
|
|
|
@@ -44,6 +44,7 @@ from cycode.cli.utils.scan_utils import (
|
|
|
44
44
|
generate_unique_scan_id,
|
|
45
45
|
is_cycodeignore_allowed_by_scan_config,
|
|
46
46
|
set_issue_detected_by_scan_results,
|
|
47
|
+
should_use_presigned_upload,
|
|
47
48
|
)
|
|
48
49
|
from cycode.cyclient.models import ZippedFileScanResult
|
|
49
50
|
from cycode.logger import get_logger
|
|
@@ -86,6 +87,38 @@ def _perform_commit_range_scan_async(
|
|
|
86
87
|
return poll_scan_results(cycode_client, scan_async_result.scan_id, scan_type, scan_parameters, timeout)
|
|
87
88
|
|
|
88
89
|
|
|
90
|
+
def _perform_commit_range_scan_v4_async(
|
|
91
|
+
cycode_client: 'ScanClient',
|
|
92
|
+
from_commit_zipped_documents: 'InMemoryZip',
|
|
93
|
+
to_commit_zipped_documents: 'InMemoryZip',
|
|
94
|
+
scan_type: str,
|
|
95
|
+
scan_parameters: dict,
|
|
96
|
+
timeout: Optional[int] = None,
|
|
97
|
+
) -> ZippedFileScanResult:
|
|
98
|
+
from_upload_link = cycode_client.get_upload_link(scan_type)
|
|
99
|
+
logger.debug('Got from-commit upload link, %s', {'upload_id': from_upload_link.upload_id})
|
|
100
|
+
|
|
101
|
+
cycode_client.upload_to_presigned_post(
|
|
102
|
+
from_upload_link.url, from_upload_link.presigned_post_fields, from_commit_zipped_documents
|
|
103
|
+
)
|
|
104
|
+
logger.debug('Uploaded from-commit zip')
|
|
105
|
+
|
|
106
|
+
to_upload_link = cycode_client.get_upload_link(scan_type)
|
|
107
|
+
logger.debug('Got to-commit upload link, %s', {'upload_id': to_upload_link.upload_id})
|
|
108
|
+
|
|
109
|
+
cycode_client.upload_to_presigned_post(
|
|
110
|
+
to_upload_link.url, to_upload_link.presigned_post_fields, to_commit_zipped_documents
|
|
111
|
+
)
|
|
112
|
+
logger.debug('Uploaded to-commit zip')
|
|
113
|
+
|
|
114
|
+
scan_async_result = cycode_client.commit_range_scan_from_upload_ids(
|
|
115
|
+
scan_type, from_upload_link.upload_id, to_upload_link.upload_id, scan_parameters
|
|
116
|
+
)
|
|
117
|
+
logger.debug('V4 commit range scan request triggered, %s', {'scan_id': scan_async_result.scan_id})
|
|
118
|
+
|
|
119
|
+
return poll_scan_results(cycode_client, scan_async_result.scan_id, scan_type, scan_parameters, timeout)
|
|
120
|
+
|
|
121
|
+
|
|
89
122
|
def _scan_commit_range_documents(
|
|
90
123
|
ctx: typer.Context,
|
|
91
124
|
from_documents_to_scan: list[Document],
|
|
@@ -118,14 +151,24 @@ def _scan_commit_range_documents(
|
|
|
118
151
|
# for SAST it is files with diff between from_commit and to_commit
|
|
119
152
|
to_commit_zipped_documents = zip_documents(scan_type, to_documents_to_scan)
|
|
120
153
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
154
|
+
if should_use_presigned_upload(scan_type):
|
|
155
|
+
scan_result = _perform_commit_range_scan_v4_async(
|
|
156
|
+
cycode_client,
|
|
157
|
+
from_commit_zipped_documents,
|
|
158
|
+
to_commit_zipped_documents,
|
|
159
|
+
scan_type,
|
|
160
|
+
scan_parameters,
|
|
161
|
+
timeout,
|
|
162
|
+
)
|
|
163
|
+
else:
|
|
164
|
+
scan_result = _perform_commit_range_scan_async(
|
|
165
|
+
cycode_client,
|
|
166
|
+
from_commit_zipped_documents,
|
|
167
|
+
to_commit_zipped_documents,
|
|
168
|
+
scan_type,
|
|
169
|
+
scan_parameters,
|
|
170
|
+
timeout,
|
|
171
|
+
)
|
|
129
172
|
enrich_scan_result_with_data_from_detection_rules(cycode_client, scan_result)
|
|
130
173
|
|
|
131
174
|
progress_bar.update(ScanProgressBarSection.SCAN)
|
|
@@ -192,15 +192,18 @@ EXCLUSIONS_BY_CVE_SECTION_NAME = 'cves'
|
|
|
192
192
|
# 5MB in bytes (in decimal)
|
|
193
193
|
FILE_MAX_SIZE_LIMIT_IN_BYTES = 5000000
|
|
194
194
|
|
|
195
|
+
PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES = 5 * 1024 * 1024 * 1024 # 5 GB (S3 presigned POST limit)
|
|
196
|
+
PRESIGNED_UPLOAD_SCAN_TYPES = {SAST_SCAN_TYPE}
|
|
197
|
+
|
|
195
198
|
DEFAULT_ZIP_MAX_SIZE_LIMIT_IN_BYTES = 20 * 1024 * 1024
|
|
196
199
|
ZIP_MAX_SIZE_LIMIT_IN_BYTES = {
|
|
197
200
|
SCA_SCAN_TYPE: 200 * 1024 * 1024,
|
|
198
|
-
SAST_SCAN_TYPE:
|
|
201
|
+
SAST_SCAN_TYPE: PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES,
|
|
199
202
|
}
|
|
200
203
|
|
|
201
204
|
# scan in batches
|
|
202
205
|
DEFAULT_SCAN_BATCH_MAX_SIZE_IN_BYTES = 9 * 1024 * 1024
|
|
203
|
-
SCAN_BATCH_MAX_SIZE_IN_BYTES = {SAST_SCAN_TYPE:
|
|
206
|
+
SCAN_BATCH_MAX_SIZE_IN_BYTES = {SAST_SCAN_TYPE: PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES}
|
|
204
207
|
SCAN_BATCH_MAX_SIZE_IN_BYTES_ENV_VAR_NAME = 'SCAN_BATCH_MAX_SIZE_IN_BYTES'
|
|
205
208
|
|
|
206
209
|
DEFAULT_SCAN_BATCH_MAX_FILES_COUNT = 1000
|
|
@@ -17,7 +17,11 @@ def _validate_zip_file_size(scan_type: str, zip_file_size: int) -> None:
|
|
|
17
17
|
raise custom_exceptions.ZipTooLargeError(max_size_limit)
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
def zip_documents(
|
|
20
|
+
def zip_documents(
|
|
21
|
+
scan_type: str,
|
|
22
|
+
documents: list[Document],
|
|
23
|
+
zip_file: Optional[InMemoryZip] = None,
|
|
24
|
+
) -> InMemoryZip:
|
|
21
25
|
if zip_file is None:
|
|
22
26
|
zip_file = InMemoryZip()
|
|
23
27
|
|
|
@@ -111,9 +111,13 @@ def run_parallel_batched_scan(
|
|
|
111
111
|
scan_type: str,
|
|
112
112
|
documents: list[Document],
|
|
113
113
|
progress_bar: 'BaseProgressBar',
|
|
114
|
+
skip_batching: bool = False,
|
|
114
115
|
) -> tuple[dict[str, 'CliError'], list['LocalScanResult']]:
|
|
115
116
|
# batching is disabled for SCA; requested by Mor
|
|
116
|
-
|
|
117
|
+
if scan_type == consts.SCA_SCAN_TYPE or skip_batching:
|
|
118
|
+
batches = [documents]
|
|
119
|
+
else:
|
|
120
|
+
batches = split_documents_into_batches(scan_type, documents)
|
|
117
121
|
|
|
118
122
|
progress_bar.set_section_length(ScanProgressBarSection.SCAN, len(batches)) # * 3
|
|
119
123
|
# TODO(MarshalX): we should multiply the count of batches in SCAN section because each batch has 3 steps:
|
|
@@ -5,6 +5,7 @@ from uuid import UUID, uuid4
|
|
|
5
5
|
|
|
6
6
|
import typer
|
|
7
7
|
|
|
8
|
+
from cycode.cli import consts
|
|
8
9
|
from cycode.cli.cli_types import SeverityOption
|
|
9
10
|
|
|
10
11
|
if TYPE_CHECKING:
|
|
@@ -31,6 +32,10 @@ def is_cycodeignore_allowed_by_scan_config(ctx: typer.Context) -> bool:
|
|
|
31
32
|
return scan_config.is_cycode_ignore_allowed if scan_config else True
|
|
32
33
|
|
|
33
34
|
|
|
35
|
+
def should_use_presigned_upload(scan_type: str) -> bool:
|
|
36
|
+
return scan_type in consts.PRESIGNED_UPLOAD_SCAN_TYPES
|
|
37
|
+
|
|
38
|
+
|
|
34
39
|
def generate_unique_scan_id() -> UUID:
|
|
35
40
|
if 'PYTEST_TEST_UNIQUE_ID' in os.environ:
|
|
36
41
|
return UUID(os.environ['PYTEST_TEST_UNIQUE_ID'])
|
|
@@ -114,6 +114,26 @@ class ScanResultSchema(Schema):
|
|
|
114
114
|
return ScanResult(**data)
|
|
115
115
|
|
|
116
116
|
|
|
117
|
+
@dataclass
|
|
118
|
+
class UploadLinkResponse:
|
|
119
|
+
upload_id: str
|
|
120
|
+
url: str
|
|
121
|
+
presigned_post_fields: dict[str, str]
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class UploadLinkResponseSchema(Schema):
|
|
125
|
+
class Meta:
|
|
126
|
+
unknown = EXCLUDE
|
|
127
|
+
|
|
128
|
+
upload_id = fields.String()
|
|
129
|
+
url = fields.String()
|
|
130
|
+
presigned_post_fields = fields.Dict(keys=fields.String(), values=fields.String())
|
|
131
|
+
|
|
132
|
+
@post_load
|
|
133
|
+
def build_dto(self, data: dict[str, Any], **_) -> 'UploadLinkResponse':
|
|
134
|
+
return UploadLinkResponse(**data)
|
|
135
|
+
|
|
136
|
+
|
|
117
137
|
class ScanInitializationResponse(Schema):
|
|
118
138
|
def __init__(self, scan_id: Optional[str] = None, err: Optional[str] = None) -> None:
|
|
119
139
|
super().__init__()
|
|
@@ -3,6 +3,7 @@ from copy import deepcopy
|
|
|
3
3
|
from typing import TYPE_CHECKING, Optional, Union
|
|
4
4
|
from uuid import UUID
|
|
5
5
|
|
|
6
|
+
import requests
|
|
6
7
|
from requests import Response
|
|
7
8
|
|
|
8
9
|
from cycode.cli import consts
|
|
@@ -25,6 +26,7 @@ class ScanClient:
|
|
|
25
26
|
self.scan_config = scan_config
|
|
26
27
|
|
|
27
28
|
self._SCAN_SERVICE_CLI_CONTROLLER_PATH = 'api/v1/cli-scan'
|
|
29
|
+
self._SCAN_SERVICE_V4_CLI_CONTROLLER_PATH = 'api/v4/scans/cli'
|
|
28
30
|
self._DETECTIONS_SERVICE_CLI_CONTROLLER_PATH = 'api/v1/detections/cli'
|
|
29
31
|
self._POLICIES_SERVICE_CONTROLLER_PATH_V3 = 'api/v3/policies'
|
|
30
32
|
|
|
@@ -56,6 +58,10 @@ class ScanClient:
|
|
|
56
58
|
)
|
|
57
59
|
return models.ScanReportUrlResponseSchema().build_dto(response.json())
|
|
58
60
|
|
|
61
|
+
def get_scan_service_v4_url_path(self, scan_type: str) -> str:
|
|
62
|
+
service_path = self.scan_config.get_service_name(scan_type)
|
|
63
|
+
return f'{service_path}/{self._SCAN_SERVICE_V4_CLI_CONTROLLER_PATH}'
|
|
64
|
+
|
|
59
65
|
def get_zipped_file_scan_async_url_path(self, scan_type: str, should_use_sync_flow: bool = False) -> str:
|
|
60
66
|
async_scan_type = self.scan_config.get_async_scan_type(scan_type)
|
|
61
67
|
async_entity_type = self.scan_config.get_async_entity_type(scan_type)
|
|
@@ -123,6 +129,40 @@ class ScanClient:
|
|
|
123
129
|
)
|
|
124
130
|
return models.ScanInitializationResponseSchema().load(response.json())
|
|
125
131
|
|
|
132
|
+
def get_upload_link(self, scan_type: str) -> models.UploadLinkResponse:
|
|
133
|
+
async_scan_type = self.scan_config.get_async_scan_type(scan_type)
|
|
134
|
+
url_path = f'{self.get_scan_service_v4_url_path(scan_type)}/{async_scan_type}/upload-link'
|
|
135
|
+
response = self.scan_cycode_client.get(url_path=url_path, hide_response_content_log=self._hide_response_log)
|
|
136
|
+
return models.UploadLinkResponseSchema().load(response.json())
|
|
137
|
+
|
|
138
|
+
def upload_to_presigned_post(self, url: str, fields: dict[str, str], zip_file: 'InMemoryZip') -> None:
|
|
139
|
+
multipart = {key: (None, value) for key, value in fields.items()}
|
|
140
|
+
multipart['file'] = (None, zip_file.read())
|
|
141
|
+
# We are not using Cycode client, as we are calling aws S3.
|
|
142
|
+
response = requests.post(url, files=multipart, timeout=self.scan_cycode_client.timeout)
|
|
143
|
+
response.raise_for_status()
|
|
144
|
+
|
|
145
|
+
def scan_repository_from_upload_id(
|
|
146
|
+
self,
|
|
147
|
+
scan_type: str,
|
|
148
|
+
upload_id: str,
|
|
149
|
+
scan_parameters: dict,
|
|
150
|
+
is_git_diff: bool = False,
|
|
151
|
+
is_commit_range: bool = False,
|
|
152
|
+
) -> models.ScanInitializationResponse:
|
|
153
|
+
async_scan_type = self.scan_config.get_async_scan_type(scan_type)
|
|
154
|
+
url_path = f'{self.get_scan_service_v4_url_path(scan_type)}/{async_scan_type}/repository'
|
|
155
|
+
response = self.scan_cycode_client.post(
|
|
156
|
+
url_path=url_path,
|
|
157
|
+
body={
|
|
158
|
+
'upload_id': upload_id,
|
|
159
|
+
'is_git_diff': is_git_diff,
|
|
160
|
+
'is_commit_range': is_commit_range,
|
|
161
|
+
'scan_parameters': json.dumps(scan_parameters),
|
|
162
|
+
},
|
|
163
|
+
)
|
|
164
|
+
return models.ScanInitializationResponseSchema().load(response.json())
|
|
165
|
+
|
|
126
166
|
def commit_range_scan_async(
|
|
127
167
|
self,
|
|
128
168
|
from_commit_zip_file: InMemoryZip,
|
|
@@ -161,6 +201,27 @@ class ScanClient:
|
|
|
161
201
|
)
|
|
162
202
|
return models.ScanInitializationResponseSchema().load(response.json())
|
|
163
203
|
|
|
204
|
+
def commit_range_scan_from_upload_ids(
|
|
205
|
+
self,
|
|
206
|
+
scan_type: str,
|
|
207
|
+
from_commit_upload_id: str,
|
|
208
|
+
to_commit_upload_id: str,
|
|
209
|
+
scan_parameters: dict,
|
|
210
|
+
is_git_diff: bool = False,
|
|
211
|
+
) -> models.ScanInitializationResponse:
|
|
212
|
+
async_scan_type = self.scan_config.get_async_scan_type(scan_type)
|
|
213
|
+
url_path = f'{self.get_scan_service_v4_url_path(scan_type)}/{async_scan_type}/commit-range'
|
|
214
|
+
response = self.scan_cycode_client.post(
|
|
215
|
+
url_path=url_path,
|
|
216
|
+
body={
|
|
217
|
+
'from_commit_upload_id': from_commit_upload_id,
|
|
218
|
+
'to_commit_upload_id': to_commit_upload_id,
|
|
219
|
+
'is_git_diff': is_git_diff,
|
|
220
|
+
'scan_parameters': json.dumps(scan_parameters),
|
|
221
|
+
},
|
|
222
|
+
)
|
|
223
|
+
return models.ScanInitializationResponseSchema().load(response.json())
|
|
224
|
+
|
|
164
225
|
def get_scan_details_path(self, scan_type: str, scan_id: str) -> str:
|
|
165
226
|
return f'{self.get_scan_service_url_path(scan_type)}/{scan_id}'
|
|
166
227
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '3.10.3.dev2' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/response_builders.py
RENAMED
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/print_remediation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/report_import_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/sbom/sbom_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/repository/repository_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|