cycode 3.20.1.dev3__tar.gz → 3.21.1.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.20.1.dev3 → cycode-3.21.1.dev1}/PKG-INFO +16 -2
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/README.md +15 -1
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/__init__.py +1 -1
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/scan_command.py +5 -1
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/scan_parameters.py +1 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/cli_types.py +1 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/consts.py +1 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/rich_printer.py +3 -7
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/tables/sca_table_printer.py +15 -1
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/text_printer.py +2 -12
- cycode-3.21.1.dev1/cycode/cli/printers/utils/sca_ossf.py +23 -0
- cycode-3.21.1.dev1/cycode/cli/printers/utils/sca_policy_details.py +57 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/pyproject.toml +1 -1
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/LICENCE +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/__main__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/app.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/activation_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/_plugin_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/base.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/claude_code.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/codex.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/copilot.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/cursor.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/handlers.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/policy.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/session_start_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/api/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/api/api_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/api/openapi_spec.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/auth/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/auth/auth_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/auth/auth_common.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/auth/auth_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/auth/models.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/configure/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/configure/configure_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/configure/consts.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/configure/messages.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/configure/prompts.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ignore/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ignore/ignore_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/mcp/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/mcp/mcp_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/report_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/common.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report_import/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report_import/report_import_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/sca_options.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/aggregation_report.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/code_scanner.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/commit_range_scanner.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/detection_excluder.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/path/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/path/path_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/repository/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/scan_result.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/status/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/status/get_cli_status.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/status/models.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/status/status_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/status/version_command.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/config.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/console.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/custom_exceptions.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_errors.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/commit_range_documents.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/file_excluder.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/iac/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/models/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/path_documents.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/repository_documents.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/npm/restore_bun_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/python/restore_pip_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/python/restore_uv_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/walk_ignore.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/zip_documents.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/logger.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/main.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/models.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/console_printer.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/json_printer.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/printer_base.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/tables/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/tables/table.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/tables/table_models.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/tables/table_printer.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/tables/table_printer_base.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/detection_data.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/printers/utils/rich_helpers.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/user_settings/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/user_settings/base_file_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/user_settings/config_file_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/user_settings/configuration_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/user_settings/credentials_manager.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/user_settings/jwt_creator.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/binary_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/enum_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/get_api_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/git_proxy.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/host_info.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/ignore_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/jwt_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/path_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/progress_bar.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/scan_batch.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/scan_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/shell_executor.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/string_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/task_timer.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/trust_store.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/url_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/version_checker.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/utils/yaml_utils.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/config.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/__init__.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/ai_security_manager_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/auth_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/base_token_auth_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/cli_activation_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/client_creator.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/config.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/config_dev.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/cycode_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/cycode_client_base.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/cycode_dev_based_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/cycode_token_based_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/headers.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/import_sbom_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/logger.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/models.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/report_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/scan_client.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cyclient/scan_config_base.py +0 -0
- {cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/logger.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cycode
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.21.1.dev1
|
|
4
4
|
Summary: Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENCE
|
|
@@ -834,7 +834,7 @@ The Cycode CLI application offers several types of scans so that you can choose
|
|
|
834
834
|
| `--show-secret BOOLEAN` | Show secrets in plain text. See [Show/Hide Secrets](#showhide-secrets) section for more details. |
|
|
835
835
|
| `--soft-fail BOOLEAN` | Run scan without failing, always return a non-error status code. See [Soft Fail](#soft-fail) section for more details. |
|
|
836
836
|
| `--severity-threshold [INFO\|LOW\|MEDIUM\|HIGH\|CRITICAL]` | Show only violations at the specified level or higher. |
|
|
837
|
-
| `--sca-scan` | Specify the SCA scan you wish to execute (`package-vulnerabilities`/`license-compliance`). The default is
|
|
837
|
+
| `--sca-scan` | Specify the SCA scan you wish to execute (`package-vulnerabilities`/`license-compliance`/`unmaintained-packages`). The default is all. |
|
|
838
838
|
| `--monitor` | When specified, the scan results will be recorded in Cycode. |
|
|
839
839
|
| `--cycode-report` | Display a link to the scan report in the Cycode platform in the console output. |
|
|
840
840
|
| `--no-restore` | When specified, Cycode will not run the restore command. This will scan direct dependencies ONLY! |
|
|
@@ -912,6 +912,20 @@ In the previous example, if you wanted to only scan a branch named `dev`, you co
|
|
|
912
912
|
|
|
913
913
|
`cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev`
|
|
914
914
|
|
|
915
|
+
#### Unmaintained Packages Option
|
|
916
|
+
|
|
917
|
+
> [!NOTE]
|
|
918
|
+
> This option is only available to SCA scans.
|
|
919
|
+
|
|
920
|
+
To scan only for unmaintained packages (packages whose [OpenSSF Scorecard](https://scorecard.dev) `Maintained` check is low, meaning little or no recent commit and issue activity), add the argument `--sca-scan unmaintained-packages` following the `-t sca` or `--scan-type sca` option.
|
|
921
|
+
|
|
922
|
+
> [!NOTE]
|
|
923
|
+
> Whether unmaintained packages are reported at all is controlled by your organization's policy. This option narrows what a scan reports; it cannot enable a policy that is turned off for your tenant.
|
|
924
|
+
|
|
925
|
+
In the previous example, if you wanted to only run an SCA scan on unmaintained packages, you could execute the following:
|
|
926
|
+
|
|
927
|
+
`cycode scan -t sca --sca-scan unmaintained-packages repository ~/home/git/codebase`
|
|
928
|
+
|
|
915
929
|
#### Lock Restore Option
|
|
916
930
|
|
|
917
931
|
> [!NOTE]
|
|
@@ -789,7 +789,7 @@ The Cycode CLI application offers several types of scans so that you can choose
|
|
|
789
789
|
| `--show-secret BOOLEAN` | Show secrets in plain text. See [Show/Hide Secrets](#showhide-secrets) section for more details. |
|
|
790
790
|
| `--soft-fail BOOLEAN` | Run scan without failing, always return a non-error status code. See [Soft Fail](#soft-fail) section for more details. |
|
|
791
791
|
| `--severity-threshold [INFO\|LOW\|MEDIUM\|HIGH\|CRITICAL]` | Show only violations at the specified level or higher. |
|
|
792
|
-
| `--sca-scan` | Specify the SCA scan you wish to execute (`package-vulnerabilities`/`license-compliance`). The default is
|
|
792
|
+
| `--sca-scan` | Specify the SCA scan you wish to execute (`package-vulnerabilities`/`license-compliance`/`unmaintained-packages`). The default is all. |
|
|
793
793
|
| `--monitor` | When specified, the scan results will be recorded in Cycode. |
|
|
794
794
|
| `--cycode-report` | Display a link to the scan report in the Cycode platform in the console output. |
|
|
795
795
|
| `--no-restore` | When specified, Cycode will not run the restore command. This will scan direct dependencies ONLY! |
|
|
@@ -867,6 +867,20 @@ In the previous example, if you wanted to only scan a branch named `dev`, you co
|
|
|
867
867
|
|
|
868
868
|
`cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev`
|
|
869
869
|
|
|
870
|
+
#### Unmaintained Packages Option
|
|
871
|
+
|
|
872
|
+
> [!NOTE]
|
|
873
|
+
> This option is only available to SCA scans.
|
|
874
|
+
|
|
875
|
+
To scan only for unmaintained packages (packages whose [OpenSSF Scorecard](https://scorecard.dev) `Maintained` check is low, meaning little or no recent commit and issue activity), add the argument `--sca-scan unmaintained-packages` following the `-t sca` or `--scan-type sca` option.
|
|
876
|
+
|
|
877
|
+
> [!NOTE]
|
|
878
|
+
> Whether unmaintained packages are reported at all is controlled by your organization's policy. This option narrows what a scan reports; it cannot enable a policy that is turned off for your tenant.
|
|
879
|
+
|
|
880
|
+
In the previous example, if you wanted to only run an SCA scan on unmaintained packages, you could execute the following:
|
|
881
|
+
|
|
882
|
+
`cycode scan -t sca --sca-scan unmaintained-packages repository ~/home/git/codebase`
|
|
883
|
+
|
|
870
884
|
#### Lock Restore Option
|
|
871
885
|
|
|
872
886
|
> [!NOTE]
|
|
@@ -5,4 +5,4 @@ import time as _time
|
|
|
5
5
|
# end-to-end scan duration from the moment the user actually triggered it.
|
|
6
6
|
_BOOT_WALL: float = _time.time()
|
|
7
7
|
|
|
8
|
-
__version__ = '3.
|
|
8
|
+
__version__ = '3.21.1.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
|
|
@@ -93,7 +93,11 @@ def scan_command(
|
|
|
93
93
|
help='Specify the type of SCA scan you wish to execute.',
|
|
94
94
|
rich_help_panel=_SCA_RICH_HELP_PANEL,
|
|
95
95
|
),
|
|
96
|
-
] = (
|
|
96
|
+
] = (
|
|
97
|
+
ScaScanTypeOption.PACKAGE_VULNERABILITIES,
|
|
98
|
+
ScaScanTypeOption.LICENSE_COMPLIANCE,
|
|
99
|
+
ScaScanTypeOption.UNMAINTAINED_PACKAGES,
|
|
100
|
+
),
|
|
97
101
|
monitor: Annotated[
|
|
98
102
|
bool,
|
|
99
103
|
typer.Option(
|
|
@@ -16,6 +16,7 @@ def _get_default_scan_parameters(ctx: typer.Context) -> dict:
|
|
|
16
16
|
'report': ctx.obj.get('report'),
|
|
17
17
|
'package_vulnerabilities': ctx.obj.get('package-vulnerabilities'),
|
|
18
18
|
'license_compliance': ctx.obj.get('license-compliance'),
|
|
19
|
+
'maintainability': ctx.obj.get('unmaintained-packages', False),
|
|
19
20
|
'command_type': ctx.info_name.replace('-', '_'), # save backward compatibility
|
|
20
21
|
'aggregation_id': str(generate_unique_scan_id()),
|
|
21
22
|
'cli_start_time': _BOOT_WALL,
|
|
@@ -314,6 +314,7 @@ SCAN_ERROR_STATUS_CODE = 2
|
|
|
314
314
|
|
|
315
315
|
LICENSE_COMPLIANCE_POLICY_ID = '8f681450-49e1-4f7e-85b7-0c8fe84b3a35'
|
|
316
316
|
PACKAGE_VULNERABILITY_POLICY_ID = '9369d10a-9ac0-48d3-9921-5de7fe9a37a7'
|
|
317
|
+
UNMAINTAINED_PACKAGE_POLICY_ID = '7b45ee1f-ee08-4353-a00a-2586db27b0f1'
|
|
317
318
|
|
|
318
319
|
# Shortcut dependency paths by remove all middle dependencies
|
|
319
320
|
# between direct dependency and influence/vulnerable dependency.
|
|
@@ -16,6 +16,7 @@ from cycode.cli.printers.utils.detection_data import (
|
|
|
16
16
|
)
|
|
17
17
|
from cycode.cli.printers.utils.detection_ordering.common_ordering import sort_and_group_detections_from_scan_result
|
|
18
18
|
from cycode.cli.printers.utils.rich_helpers import get_columns_in_1_to_3_ratio, get_markdown_panel, get_panel
|
|
19
|
+
from cycode.cli.printers.utils.sca_policy_details import get_sca_policy_details
|
|
19
20
|
|
|
20
21
|
if TYPE_CHECKING:
|
|
21
22
|
from cycode.cli.models import CliError, Detection, Document, LocalScanResult
|
|
@@ -86,19 +87,14 @@ class RichPrinter(TextPrinter):
|
|
|
86
87
|
def __add_sca_scan_related_rows(details_table: Table, detection: 'Detection') -> None:
|
|
87
88
|
detection_details = detection.detection_details
|
|
88
89
|
|
|
89
|
-
details_table.add_row('CVEs', get_detection_clickable_cwe_cve(consts.SCA_SCAN_TYPE, detection))
|
|
90
90
|
details_table.add_row('Package', detection_details.get('package_name'))
|
|
91
91
|
details_table.add_row('Version', detection_details.get('package_version'))
|
|
92
92
|
|
|
93
|
-
if detection.has_alert:
|
|
94
|
-
patched_version = detection_details['alert'].get('first_patched_version')
|
|
95
|
-
details_table.add_row('First patched version', patched_version or 'Not fixed')
|
|
96
|
-
|
|
97
93
|
dependency_path = detection_details.get('dependency_paths')
|
|
98
94
|
details_table.add_row('Dependency path', dependency_path or 'N/A')
|
|
99
95
|
|
|
100
|
-
|
|
101
|
-
details_table.add_row(
|
|
96
|
+
for label, value in get_sca_policy_details(detection):
|
|
97
|
+
details_table.add_row(label, value)
|
|
102
98
|
|
|
103
99
|
@staticmethod
|
|
104
100
|
def __add_iac_scan_related_rows(details_table: Table, detection: 'Detection') -> None:
|
|
@@ -2,13 +2,18 @@ from collections import defaultdict
|
|
|
2
2
|
from typing import TYPE_CHECKING
|
|
3
3
|
|
|
4
4
|
from cycode.cli.cli_types import SeverityOption
|
|
5
|
-
from cycode.cli.consts import
|
|
5
|
+
from cycode.cli.consts import (
|
|
6
|
+
LICENSE_COMPLIANCE_POLICY_ID,
|
|
7
|
+
PACKAGE_VULNERABILITY_POLICY_ID,
|
|
8
|
+
UNMAINTAINED_PACKAGE_POLICY_ID,
|
|
9
|
+
)
|
|
6
10
|
from cycode.cli.models import Detection
|
|
7
11
|
from cycode.cli.printers.tables.table import Table
|
|
8
12
|
from cycode.cli.printers.tables.table_models import ColumnInfoBuilder
|
|
9
13
|
from cycode.cli.printers.tables.table_printer_base import TablePrinterBase
|
|
10
14
|
from cycode.cli.printers.utils import is_git_diff_based_scan
|
|
11
15
|
from cycode.cli.printers.utils.detection_ordering.sca_ordering import sort_and_group_detections
|
|
16
|
+
from cycode.cli.printers.utils.sca_ossf import get_maintained_score
|
|
12
17
|
from cycode.cli.utils.string_utils import shortcut_dependency_paths
|
|
13
18
|
|
|
14
19
|
if TYPE_CHECKING:
|
|
@@ -23,6 +28,7 @@ CODE_PROJECT_COLUMN = column_builder.build(name='Code Project', highlight=False)
|
|
|
23
28
|
ECOSYSTEM_COLUMN = column_builder.build(name='Ecosystem', highlight=False)
|
|
24
29
|
PACKAGE_COLUMN = column_builder.build(name='Package', highlight=False)
|
|
25
30
|
CVE_COLUMNS = column_builder.build(name='CVE', highlight=False)
|
|
31
|
+
MAINTAINED_SCORE_COLUMN = column_builder.build(name='Maintained Score', highlight=False)
|
|
26
32
|
DEPENDENCY_PATHS_COLUMN = column_builder.build(name='Dependency Paths')
|
|
27
33
|
UPGRADE_COLUMN = column_builder.build(name='Upgrade')
|
|
28
34
|
LICENSE_COLUMN = column_builder.build(name='License', highlight=False)
|
|
@@ -51,6 +57,8 @@ class ScaTablePrinter(TablePrinterBase):
|
|
|
51
57
|
return 'Dependency Vulnerabilities'
|
|
52
58
|
if policy_id == LICENSE_COMPLIANCE_POLICY_ID:
|
|
53
59
|
return 'License Compliance'
|
|
60
|
+
if policy_id == UNMAINTAINED_PACKAGE_POLICY_ID:
|
|
61
|
+
return 'Unmaintained Packages'
|
|
54
62
|
|
|
55
63
|
return 'Unknown'
|
|
56
64
|
|
|
@@ -62,6 +70,8 @@ class ScaTablePrinter(TablePrinterBase):
|
|
|
62
70
|
table.add_column(UPGRADE_COLUMN)
|
|
63
71
|
elif policy_id == LICENSE_COMPLIANCE_POLICY_ID:
|
|
64
72
|
table.add_column(LICENSE_COLUMN)
|
|
73
|
+
elif policy_id == UNMAINTAINED_PACKAGE_POLICY_ID:
|
|
74
|
+
table.add_column(MAINTAINED_SCORE_COLUMN)
|
|
65
75
|
|
|
66
76
|
if is_git_diff_based_scan(self.command_scan_type):
|
|
67
77
|
table.add_column(REPOSITORY_COLUMN)
|
|
@@ -120,6 +130,10 @@ class ScaTablePrinter(TablePrinterBase):
|
|
|
120
130
|
table.add_cell(CVE_COLUMNS, detection_details.get('vulnerability_id'))
|
|
121
131
|
table.add_cell(LICENSE_COLUMN, detection_details.get('license'))
|
|
122
132
|
|
|
133
|
+
if detection.detection_type_id == UNMAINTAINED_PACKAGE_POLICY_ID:
|
|
134
|
+
maintained_score = get_maintained_score(detection_details)
|
|
135
|
+
table.add_cell(MAINTAINED_SCORE_COLUMN, 'N/A' if maintained_score is None else str(maintained_score))
|
|
136
|
+
|
|
123
137
|
def _print_summary_issues(self, detections_count: int, title: str) -> None:
|
|
124
138
|
self.console.print(f'[bold]Cycode found {detections_count} violations of type: [cyan]{title}[/]')
|
|
125
139
|
|
|
@@ -7,6 +7,7 @@ from cycode.cli.printers.printer_base import PrinterBase
|
|
|
7
7
|
from cycode.cli.printers.utils.code_snippet_syntax import get_code_snippet_syntax, get_detection_line
|
|
8
8
|
from cycode.cli.printers.utils.detection_data import get_detection_title
|
|
9
9
|
from cycode.cli.printers.utils.detection_ordering.common_ordering import sort_and_group_detections_from_scan_result
|
|
10
|
+
from cycode.cli.printers.utils.sca_policy_details import get_sca_policy_details
|
|
10
11
|
|
|
11
12
|
if TYPE_CHECKING:
|
|
12
13
|
from cycode.cli.models import Detection, LocalScanResult
|
|
@@ -82,18 +83,7 @@ class TextPrinter(PrinterBase):
|
|
|
82
83
|
|
|
83
84
|
@staticmethod
|
|
84
85
|
def __get_sca_related_summary_lines(detection: 'Detection') -> list[str]:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if detection.has_alert:
|
|
88
|
-
patched_version = detection.detection_details['alert'].get('first_patched_version')
|
|
89
|
-
patched_version = patched_version or 'Not fixed'
|
|
90
|
-
|
|
91
|
-
summary_lines.append(f'First patched version: [cyan]{patched_version}[/]\n')
|
|
92
|
-
else:
|
|
93
|
-
package_license = detection.detection_details.get('license', 'N/A')
|
|
94
|
-
summary_lines.append(f'License: [cyan]{package_license}[/]\n')
|
|
95
|
-
|
|
96
|
-
return summary_lines
|
|
86
|
+
return [f'{label}: [cyan]{value}[/]\n' for label, value in get_sca_policy_details(detection)]
|
|
97
87
|
|
|
98
88
|
def __print_detection_code_segment(self, detection: 'Detection', document: Document) -> None:
|
|
99
89
|
self.console.print(
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from typing import Any, Optional
|
|
2
|
+
|
|
3
|
+
_MAINTAINED_CHECK_NAME = 'maintained'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _get_ossf_details(detection_details: dict) -> dict:
|
|
7
|
+
return detection_details.get('ossf') or {}
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_ossf_score(detection_details: dict) -> Optional[Any]:
|
|
11
|
+
return _get_ossf_details(detection_details).get('score')
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_ossf_report_url(detection_details: dict) -> Optional[str]:
|
|
15
|
+
return _get_ossf_details(detection_details).get('scorecard_report_url')
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_maintained_score(detection_details: dict) -> Optional[Any]:
|
|
19
|
+
for check in _get_ossf_details(detection_details).get('checks') or []:
|
|
20
|
+
if str(check.get('name', '')).lower() == _MAINTAINED_CHECK_NAME:
|
|
21
|
+
return check.get('score')
|
|
22
|
+
|
|
23
|
+
return None
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, Callable
|
|
2
|
+
|
|
3
|
+
from cycode.cli.consts import (
|
|
4
|
+
LICENSE_COMPLIANCE_POLICY_ID,
|
|
5
|
+
PACKAGE_VULNERABILITY_POLICY_ID,
|
|
6
|
+
SCA_SCAN_TYPE,
|
|
7
|
+
UNMAINTAINED_PACKAGE_POLICY_ID,
|
|
8
|
+
)
|
|
9
|
+
from cycode.cli.printers.utils.detection_data import get_detection_clickable_cwe_cve
|
|
10
|
+
from cycode.cli.printers.utils.sca_ossf import get_maintained_score, get_ossf_report_url, get_ossf_score
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from cycode.cyclient.models import Detection
|
|
14
|
+
|
|
15
|
+
_NOT_AVAILABLE = 'N/A'
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _package_vulnerability_details(detection: 'Detection') -> list[tuple[str, str]]:
|
|
19
|
+
alert = detection.detection_details.get('alert') or {}
|
|
20
|
+
return [
|
|
21
|
+
('CVEs', get_detection_clickable_cwe_cve(SCA_SCAN_TYPE, detection) or _NOT_AVAILABLE),
|
|
22
|
+
('First patched version', alert.get('first_patched_version') or 'Not fixed'),
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _license_compliance_details(detection: 'Detection') -> list[tuple[str, str]]:
|
|
27
|
+
return [('License', detection.detection_details.get('license') or _NOT_AVAILABLE)]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _unmaintained_package_details(detection: 'Detection') -> list[tuple[str, str]]:
|
|
31
|
+
detection_details = detection.detection_details
|
|
32
|
+
maintained_score = get_maintained_score(detection_details)
|
|
33
|
+
ossf_score = get_ossf_score(detection_details)
|
|
34
|
+
|
|
35
|
+
return [
|
|
36
|
+
('Maintained score', _NOT_AVAILABLE if maintained_score is None else str(maintained_score)),
|
|
37
|
+
('OSSF Scorecard score', _NOT_AVAILABLE if ossf_score is None else str(ossf_score)),
|
|
38
|
+
('Scorecard report', get_ossf_report_url(detection_details) or _NOT_AVAILABLE),
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
_DETAILS_BY_POLICY: dict[str, Callable[['Detection'], list[tuple[str, str]]]] = {
|
|
43
|
+
PACKAGE_VULNERABILITY_POLICY_ID: _package_vulnerability_details,
|
|
44
|
+
LICENSE_COMPLIANCE_POLICY_ID: _license_compliance_details,
|
|
45
|
+
UNMAINTAINED_PACKAGE_POLICY_ID: _unmaintained_package_details,
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def get_sca_policy_details(detection: 'Detection') -> list[tuple[str, str]]:
|
|
50
|
+
"""Labelled fields specific to the SCA policy that raised the detection, in display order.
|
|
51
|
+
|
|
52
|
+
A policy with no entry contributes nothing rather than borrowing another policy's fields, so a new one shows
|
|
53
|
+
no details until it is added here.
|
|
54
|
+
"""
|
|
55
|
+
build_details = _DETAILS_BY_POLICY.get(detection.detection_type_id)
|
|
56
|
+
|
|
57
|
+
return build_details(detection) if build_details else []
|
|
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.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/ides/_plugin_utils.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
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/session_start_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.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.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/report_import/report_import_command.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.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
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.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.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.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
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_ai_remediation_errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/exceptions/handle_report_sbom_errors.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/commit_range_documents.py
RENAMED
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/documents_walk_ignore.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/iac/tf_content_generator.py
RENAMED
|
File without changes
|
|
File without changes
|
{cycode-3.20.1.dev3 → cycode-3.21.1.dev1}/cycode/cli/files_collector/models/in_memory_zip.py
RENAMED
|
File without changes
|