souleyez 2.31.0__tar.gz → 2.32.0__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.
- {souleyez-2.31.0 → souleyez-2.32.0}/BETA_README.md +2 -2
- {souleyez-2.31.0/souleyez.egg-info → souleyez-2.32.0}/PKG-INFO +3 -3
- {souleyez-2.31.0 → souleyez-2.32.0}/pyproject.toml +1 -1
- souleyez-2.32.0/souleyez/__init__.py +1 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/README.md +1 -1
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/wazuh/config.py +141 -18
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/main.py +1 -1
- souleyez-2.32.0/souleyez/storage/migrations/_027_multi_siem_persistence.py +119 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/__init__.py +2 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/schema.sql +8 -4
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/interactive.py +56 -13
- {souleyez-2.31.0 → souleyez-2.32.0/souleyez.egg-info}/PKG-INFO +3 -3
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez.egg-info/SOURCES.txt +1 -0
- souleyez-2.31.0/souleyez/__init__.py +0 -1
- {souleyez-2.31.0 → souleyez-2.32.0}/LICENSE +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/MANIFEST.in +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/README.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/setup.cfg +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/action_mapper.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/chain_advisor.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/claude_provider.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/context_builder.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/executor.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/feedback_handler.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/llm_factory.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/llm_provider.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/ollama_provider.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/ollama_service.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/path_scorer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/recommender.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/report_context.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/report_prompts.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/report_service.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/result_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ai/safety.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/assets/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/assets/souleyez-icon.png +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/auth/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/auth/audit.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/auth/engagement_access.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/auth/permissions.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/auth/session_manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/auth/user_manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/audit.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/auth.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/deliverables.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/engagement.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/license.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/screenshots.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/commands/user.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/config.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/credential_tester.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/cve_mappings.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/cve_matcher.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_auto_mapper.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_chain_engine.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_database.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_integration.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_rpc_client.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_rpc_manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/msf_sync_manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/network_utils.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/parser_handler.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/pending_chains.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/templates.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/tool_chaining.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/version_utils.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/vuln_correlation.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/core/web_utils.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/README.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/active_directory.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/cis_controls_v8.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/cloud_security.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/cmmc_2.0.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/external_network.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/ffiec_cat.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/gdpr_article32.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/glba_safeguards.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/hipaa_security.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/hitrust_csf.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/internal_network.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/iso27001.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/nerc_cip.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/nist_csf.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/owasp_top10_2021.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/pci_dss_4.0.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/ptes_standard.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/red_team.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/soc2_type2.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/templates/webapp_advanced.json +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/README.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/all_users.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/api_endpoints.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/default_credentials.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/macos_users.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/router_passwords.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/router_users.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/soul_pass.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/soul_users.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/subdomains_common.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/top100.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/top20_quick.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/vnc_passwords.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/web_dirs_common.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/web_extensions.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/data/wordlists/web_files_common.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/detection/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/detection/attack_signatures.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/detection/mitre_mappings.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/detection/validator.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/devtools.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/api-reference/cli-commands.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/api-reference/engagement-api.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/api-reference/integration-guide.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/api-reference/parser-formats.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/architecture/decisions/000-template.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/architecture/decisions/001-local-llm-over-cloud.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/architecture/decisions/002-master-password-approach.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/architecture/decisions/003-database-schema-design.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/architecture/overview.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/database/MIGRATIONS.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/database/SCHEMA.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/database/SCHEMA_ERD.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/developer-guide/test_coverage_plan.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/developer-guide/ui-design-system.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/images/README.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/security/best-practices.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/security/credential-encryption.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/security/password-protected-commands.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/security/secure-defaults.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/security/threat-model.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/ai-integration.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/attack-surface.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/auto-chaining.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/configuration.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/deliverables-screenshots.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/dependencies.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/evidence-vault.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/exploit-suggestions.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/getting-started.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/installation.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/metasploit-integration.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/rbac.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/report-generation.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/scope-management.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/siem-integration.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/tools-reference.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/troubleshooting.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/uninstall.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/worker-management.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/docs/user-guide/workflows.md +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/background.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/base.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/job_status.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/loader.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/log_sanitizer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/result_handler.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/engine/worker_manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/export/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/export/evidence_bundle.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/feature_flags/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/feature_flags/features.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/feature_flags.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/history.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/importers/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/importers/msf_importer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/importers/smart_importer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/base.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/elastic.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/factory.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/rule_mappings/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/rule_mappings/wazuh_rules.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/sentinel.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/splunk.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/siem/wazuh.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/wazuh/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/wazuh/client.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/wazuh/host_mapper.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/integrations/wazuh/sync.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/correlation_analyzer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/exploit_knowledge.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/exploit_suggestions.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/gap_analyzer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/gap_detector.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/sensitive_tables.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/service_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/surface_analyzer.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/intelligence/target_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/licensing/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/licensing/validator.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/log_config.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/migrations/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/migrations/fix_job_counter.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/bloodhound_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/crackmapexec_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/dalfox_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/dnsrecon_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/enum4linux_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/ffuf_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/gobuster_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/hashcat_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/http_fingerprint_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/hydra_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/impacket_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/john_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/msf_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/nikto_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/nmap_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/nuclei_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/responder_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/searchsploit_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/smbmap_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/sqlmap_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/theharvester_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/whois_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/parsers/wpscan_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/afp.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/afp_brute.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/ard.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/bloodhound.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/crackmapexec.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/dalfox.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/dns_hijack.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/dnsrecon.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/enum4linux.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/ffuf.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/firmware_extract.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/gobuster.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/hashcat.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/http_fingerprint.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/hydra.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/impacket_getnpusers.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/impacket_psexec.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/impacket_secretsdump.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/impacket_smbclient.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/john.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/macos_ssh.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/mdns.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/msf_auxiliary.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/msf_exploit.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/nikto.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/nmap.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/nuclei.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/plugin_base.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/plugin_template.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/responder.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/router_http_brute.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/router_ssh_brute.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/router_telnet_brute.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/routersploit.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/routersploit_exploit.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/searchsploit.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/smbmap.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/sqlmap.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/theharvester.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/tr069.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/upnp.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/upnp_abuse.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/vnc_access.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/vnc_brute.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/whois.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/plugins/wpscan.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/attack_chain.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/charts.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/compliance_mappings.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/detection_report.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/formatters.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/generator.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/reporting/metrics.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/scanner.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/security/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/security/scope_validator.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/security/validation.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/security.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/credentials.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/crypto.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/database.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/db.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/deliverable_evidence.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/deliverable_exporter.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/deliverable_templates.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/deliverables.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/engagements.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/evidence.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/execution_log.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/exploit_attempts.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/exploits.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/findings.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/hosts.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrate_to_engagements.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_001_add_credential_enhancements.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_002_add_status_tracking.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_003_add_execution_log.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_005_screenshots.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_006_deliverables.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_007_deliverable_templates.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_008_add_nuclei_table.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_009_add_cme_tables.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_010_evidence_linking.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_011_timeline_tracking.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_012_team_collaboration.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_013_add_host_tags.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_014_exploit_attempts.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_015_add_mac_os_fields.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_016_add_domain_field.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_017_msf_sessions.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_018_add_osint_target.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_019_add_engagement_type.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_020_add_rbac.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_021_wazuh_integration.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_022_wazuh_indexer_columns.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_023_fix_detection_results_fk.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_025_multi_siem_support.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/_026_add_engagement_scope.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/migrations/migration_manager.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/msf_sessions.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/osint.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/recommendation_engine.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/screenshots.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/smb_shares.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/sqlmap_data.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/team_collaboration.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/timeline_tracker.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/wazuh_vulns.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/storage/web_paths.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/testing/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/testing/credential_tester.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/ai_quotes.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/attack_surface.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/chain_rules_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/correlation_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/dashboard.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/deliverables_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/design_system.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/errors.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/evidence_linking_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/evidence_vault.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/exploit_suggestions_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/export_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/gap_analysis_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/help_system.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/intelligence_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/interactive_selector.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/log_formatter.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/menu_components.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/msf_auxiliary_menu.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/pending_chains_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/progress_indicators.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/recommendations_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/rule_builder.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/setup_wizard.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/shortcuts.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/splunk_gap_analysis_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/splunk_vulns_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/team_dashboard.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/template_selector.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/terminal.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/timeline_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/tool_setup.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/tutorial.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/tutorial_state.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui/wazuh_vulns_view.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/ui.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/utils/__init__.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/utils/tool_checker.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/utils.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez/wordlists.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez.egg-info/dependency_links.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez.egg-info/entry_points.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez.egg-info/requires.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/souleyez.egg-info/top_level.txt +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_config.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_config_enhanced.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_crypto.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_database_100_final.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_engagements.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_engagements_simple.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_job_status_tracking.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_logging.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_network_utils.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_ollama_service.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_plugin_base.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_recommender.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_result_handler_sqlmap.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_schema.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_scope_integration.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_scope_validator.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_security_hardening.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_security_validation.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_sqlmap_parser.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_storage.py +0 -0
- {souleyez-2.31.0 → souleyez-2.32.0}/tests/test_version_utils.py +0 -0
|
@@ -27,7 +27,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
27
27
|
|
|
28
28
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
29
29
|
|
|
30
|
-
## Version: 2.
|
|
30
|
+
## Version: 2.32.0
|
|
31
31
|
|
|
32
32
|
### What's Included
|
|
33
33
|
|
|
@@ -265,4 +265,4 @@ Happy hacking! 🛡️
|
|
|
265
265
|
|
|
266
266
|
---
|
|
267
267
|
|
|
268
|
-
**Version**: 2.
|
|
268
|
+
**Version**: 2.32.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: souleyez
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.32.0
|
|
4
4
|
Summary: AI-Powered Penetration Testing Platform with 40+ integrated tools
|
|
5
5
|
Author-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
6
6
|
Maintainer-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
@@ -78,7 +78,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
78
78
|
|
|
79
79
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
80
80
|
|
|
81
|
-
## Version: 2.
|
|
81
|
+
## Version: 2.32.0
|
|
82
82
|
|
|
83
83
|
### What's Included
|
|
84
84
|
|
|
@@ -316,4 +316,4 @@ Happy hacking! 🛡️
|
|
|
316
316
|
|
|
317
317
|
---
|
|
318
318
|
|
|
319
|
-
**Version**: 2.
|
|
319
|
+
**Version**: 2.32.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '2.32.0'
|
|
@@ -22,10 +22,14 @@ class WazuhConfig:
|
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
24
|
@staticmethod
|
|
25
|
-
def get_config(engagement_id: int) -> Optional[Dict[str, Any]]:
|
|
25
|
+
def get_config(engagement_id: int, siem_type: str = None) -> Optional[Dict[str, Any]]:
|
|
26
26
|
"""
|
|
27
27
|
Get SIEM config for an engagement.
|
|
28
28
|
|
|
29
|
+
Args:
|
|
30
|
+
engagement_id: Engagement ID
|
|
31
|
+
siem_type: Optional SIEM type to filter by. If None, returns first/active config.
|
|
32
|
+
|
|
29
33
|
Returns:
|
|
30
34
|
Config dict or None if not configured
|
|
31
35
|
"""
|
|
@@ -33,19 +37,31 @@ class WazuhConfig:
|
|
|
33
37
|
conn = db.get_connection()
|
|
34
38
|
cursor = conn.cursor()
|
|
35
39
|
|
|
36
|
-
# Check if new columns exist (migration 025)
|
|
40
|
+
# Check if new columns exist (migration 025+)
|
|
37
41
|
cursor.execute("PRAGMA table_info(wazuh_config)")
|
|
38
42
|
columns = [col[1] for col in cursor.fetchall()]
|
|
39
43
|
has_new_columns = 'siem_type' in columns
|
|
40
44
|
|
|
41
45
|
# Query with or without new columns
|
|
42
46
|
if has_new_columns:
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
if siem_type:
|
|
48
|
+
cursor.execute("""
|
|
49
|
+
SELECT api_url, api_user, api_password, indexer_url, indexer_user,
|
|
50
|
+
indexer_password, verify_ssl, enabled, siem_type, config_json
|
|
51
|
+
FROM wazuh_config
|
|
52
|
+
WHERE engagement_id = ? AND siem_type = ?
|
|
53
|
+
""", (engagement_id, siem_type))
|
|
54
|
+
else:
|
|
55
|
+
# Get most recently updated config (the "current" selected SIEM)
|
|
56
|
+
# Not filtering by enabled - user may have selected but not configured yet
|
|
57
|
+
cursor.execute("""
|
|
58
|
+
SELECT api_url, api_user, api_password, indexer_url, indexer_user,
|
|
59
|
+
indexer_password, verify_ssl, enabled, siem_type, config_json
|
|
60
|
+
FROM wazuh_config
|
|
61
|
+
WHERE engagement_id = ?
|
|
62
|
+
ORDER BY updated_at DESC
|
|
63
|
+
LIMIT 1
|
|
64
|
+
""", (engagement_id,))
|
|
49
65
|
else:
|
|
50
66
|
cursor.execute("""
|
|
51
67
|
SELECT api_url, api_user, api_password, indexer_url, indexer_user,
|
|
@@ -190,7 +206,7 @@ class WazuhConfig:
|
|
|
190
206
|
pass
|
|
191
207
|
config_json_str = json.dumps(encrypted_config)
|
|
192
208
|
|
|
193
|
-
# Upsert config
|
|
209
|
+
# Upsert config - keyed by (engagement_id, siem_type) for multi-SIEM support
|
|
194
210
|
cursor.execute("""
|
|
195
211
|
INSERT INTO wazuh_config (
|
|
196
212
|
engagement_id, api_url, api_user, api_password, indexer_url,
|
|
@@ -198,7 +214,7 @@ class WazuhConfig:
|
|
|
198
214
|
siem_type, config_json
|
|
199
215
|
)
|
|
200
216
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
201
|
-
ON CONFLICT(engagement_id) DO UPDATE SET
|
|
217
|
+
ON CONFLICT(engagement_id, siem_type) DO UPDATE SET
|
|
202
218
|
api_url = excluded.api_url,
|
|
203
219
|
api_user = excluded.api_user,
|
|
204
220
|
api_password = excluded.api_password,
|
|
@@ -207,8 +223,8 @@ class WazuhConfig:
|
|
|
207
223
|
indexer_password = excluded.indexer_password,
|
|
208
224
|
verify_ssl = excluded.verify_ssl,
|
|
209
225
|
enabled = excluded.enabled,
|
|
210
|
-
|
|
211
|
-
|
|
226
|
+
config_json = excluded.config_json,
|
|
227
|
+
updated_at = CURRENT_TIMESTAMP
|
|
212
228
|
""", (
|
|
213
229
|
engagement_id, api_url, api_user, encrypted_api_password,
|
|
214
230
|
indexer_url, indexer_user or 'admin', encrypted_indexer_password,
|
|
@@ -262,17 +278,124 @@ class WazuhConfig:
|
|
|
262
278
|
)
|
|
263
279
|
|
|
264
280
|
@staticmethod
|
|
265
|
-
def delete_config(engagement_id: int) -> bool:
|
|
266
|
-
"""
|
|
281
|
+
def delete_config(engagement_id: int, siem_type: str = None) -> bool:
|
|
282
|
+
"""
|
|
283
|
+
Delete SIEM config for an engagement.
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
engagement_id: Engagement ID
|
|
287
|
+
siem_type: Optional SIEM type. If None, deletes ALL SIEM configs for engagement.
|
|
288
|
+
"""
|
|
267
289
|
db = get_db()
|
|
268
290
|
conn = db.get_connection()
|
|
269
291
|
cursor = conn.cursor()
|
|
270
|
-
|
|
292
|
+
if siem_type:
|
|
293
|
+
cursor.execute(
|
|
294
|
+
"DELETE FROM wazuh_config WHERE engagement_id = ? AND siem_type = ?",
|
|
295
|
+
(engagement_id, siem_type)
|
|
296
|
+
)
|
|
297
|
+
else:
|
|
298
|
+
cursor.execute("DELETE FROM wazuh_config WHERE engagement_id = ?", (engagement_id,))
|
|
271
299
|
conn.commit()
|
|
272
300
|
return cursor.rowcount > 0
|
|
273
301
|
|
|
274
302
|
@staticmethod
|
|
275
|
-
def is_configured(engagement_id: int) -> bool:
|
|
276
|
-
"""Check if
|
|
277
|
-
config = WazuhConfig.get_config(engagement_id)
|
|
303
|
+
def is_configured(engagement_id: int, siem_type: str = None) -> bool:
|
|
304
|
+
"""Check if SIEM is configured for an engagement."""
|
|
305
|
+
config = WazuhConfig.get_config(engagement_id, siem_type)
|
|
278
306
|
return config is not None and config.get("enabled", False)
|
|
307
|
+
|
|
308
|
+
@staticmethod
|
|
309
|
+
def list_configured_siems(engagement_id: int) -> List[Dict[str, Any]]:
|
|
310
|
+
"""
|
|
311
|
+
List all configured SIEMs for an engagement.
|
|
312
|
+
|
|
313
|
+
Returns:
|
|
314
|
+
List of dicts with siem_type, enabled, and api_url for each configured SIEM
|
|
315
|
+
"""
|
|
316
|
+
db = get_db()
|
|
317
|
+
conn = db.get_connection()
|
|
318
|
+
cursor = conn.cursor()
|
|
319
|
+
|
|
320
|
+
cursor.execute("PRAGMA table_info(wazuh_config)")
|
|
321
|
+
columns = [col[1] for col in cursor.fetchall()]
|
|
322
|
+
|
|
323
|
+
if 'siem_type' not in columns:
|
|
324
|
+
# Old schema - only one config possible
|
|
325
|
+
cursor.execute("""
|
|
326
|
+
SELECT 'wazuh' as siem_type, enabled, api_url
|
|
327
|
+
FROM wazuh_config
|
|
328
|
+
WHERE engagement_id = ?
|
|
329
|
+
""", (engagement_id,))
|
|
330
|
+
else:
|
|
331
|
+
cursor.execute("""
|
|
332
|
+
SELECT siem_type, enabled, api_url, updated_at
|
|
333
|
+
FROM wazuh_config
|
|
334
|
+
WHERE engagement_id = ?
|
|
335
|
+
ORDER BY siem_type
|
|
336
|
+
""", (engagement_id,))
|
|
337
|
+
|
|
338
|
+
rows = cursor.fetchall()
|
|
339
|
+
return [
|
|
340
|
+
{
|
|
341
|
+
'siem_type': row[0],
|
|
342
|
+
'enabled': bool(row[1]),
|
|
343
|
+
'api_url': row[2],
|
|
344
|
+
'updated_at': row[3] if len(row) > 3 else None
|
|
345
|
+
}
|
|
346
|
+
for row in rows
|
|
347
|
+
]
|
|
348
|
+
|
|
349
|
+
@staticmethod
|
|
350
|
+
def get_all_configs(engagement_id: int) -> Dict[str, Dict[str, Any]]:
|
|
351
|
+
"""
|
|
352
|
+
Get all SIEM configs for an engagement, keyed by siem_type.
|
|
353
|
+
|
|
354
|
+
Returns:
|
|
355
|
+
Dict mapping siem_type to config dict
|
|
356
|
+
"""
|
|
357
|
+
configs = {}
|
|
358
|
+
for siem in SIEM_TYPES:
|
|
359
|
+
config = WazuhConfig.get_config(engagement_id, siem)
|
|
360
|
+
if config:
|
|
361
|
+
configs[siem] = config
|
|
362
|
+
return configs
|
|
363
|
+
|
|
364
|
+
@staticmethod
|
|
365
|
+
def get_current_siem_type(engagement_id: int) -> str:
|
|
366
|
+
"""
|
|
367
|
+
Get the currently selected SIEM type for an engagement.
|
|
368
|
+
|
|
369
|
+
Returns the most recently selected SIEM type, even if not fully configured.
|
|
370
|
+
|
|
371
|
+
Returns:
|
|
372
|
+
SIEM type string ('wazuh', 'splunk', etc.) or 'wazuh' as default
|
|
373
|
+
"""
|
|
374
|
+
config = WazuhConfig.get_config(engagement_id)
|
|
375
|
+
if config:
|
|
376
|
+
return config.get('siem_type', 'wazuh')
|
|
377
|
+
return 'wazuh'
|
|
378
|
+
|
|
379
|
+
@staticmethod
|
|
380
|
+
def set_current_siem(engagement_id: int, siem_type: str) -> bool:
|
|
381
|
+
"""
|
|
382
|
+
Set a SIEM type as current by updating its timestamp.
|
|
383
|
+
|
|
384
|
+
This makes the specified SIEM the "active" one without changing its config.
|
|
385
|
+
|
|
386
|
+
Args:
|
|
387
|
+
engagement_id: Engagement ID
|
|
388
|
+
siem_type: SIEM type to make current
|
|
389
|
+
|
|
390
|
+
Returns:
|
|
391
|
+
True if successful
|
|
392
|
+
"""
|
|
393
|
+
db = get_db()
|
|
394
|
+
conn = db.get_connection()
|
|
395
|
+
cursor = conn.cursor()
|
|
396
|
+
cursor.execute(
|
|
397
|
+
"UPDATE wazuh_config SET updated_at = CURRENT_TIMESTAMP WHERE engagement_id = ? AND siem_type = ?",
|
|
398
|
+
(engagement_id, siem_type)
|
|
399
|
+
)
|
|
400
|
+
conn.commit()
|
|
401
|
+
return cursor.rowcount > 0
|
|
@@ -173,7 +173,7 @@ def _check_privileged_tools():
|
|
|
173
173
|
|
|
174
174
|
|
|
175
175
|
@click.group()
|
|
176
|
-
@click.version_option(version='2.
|
|
176
|
+
@click.version_option(version='2.32.0')
|
|
177
177
|
def cli():
|
|
178
178
|
"""SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
|
|
179
179
|
from souleyez.log_config import init_logging
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Migration 027: Multi-SIEM Persistence
|
|
3
|
+
|
|
4
|
+
Changes wazuh_config table to support multiple SIEM configs per engagement.
|
|
5
|
+
- Removes UNIQUE constraint on engagement_id
|
|
6
|
+
- Adds UNIQUE constraint on (engagement_id, siem_type)
|
|
7
|
+
- Allows each engagement to have separate configs for Wazuh, Splunk, etc.
|
|
8
|
+
"""
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def upgrade(conn):
|
|
13
|
+
"""Migrate to multi-SIEM persistence."""
|
|
14
|
+
cursor = conn.cursor()
|
|
15
|
+
|
|
16
|
+
# Check if siem_type column exists (from migration 025)
|
|
17
|
+
cursor.execute("PRAGMA table_info(wazuh_config)")
|
|
18
|
+
columns = [col[1] for col in cursor.fetchall()]
|
|
19
|
+
|
|
20
|
+
if 'siem_type' not in columns:
|
|
21
|
+
cursor.execute("ALTER TABLE wazuh_config ADD COLUMN siem_type TEXT DEFAULT 'wazuh'")
|
|
22
|
+
if 'config_json' not in columns:
|
|
23
|
+
cursor.execute("ALTER TABLE wazuh_config ADD COLUMN config_json TEXT")
|
|
24
|
+
|
|
25
|
+
# Create new table with correct constraint
|
|
26
|
+
cursor.execute("""
|
|
27
|
+
CREATE TABLE IF NOT EXISTS siem_config_new (
|
|
28
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
29
|
+
engagement_id INTEGER NOT NULL,
|
|
30
|
+
siem_type TEXT NOT NULL DEFAULT 'wazuh',
|
|
31
|
+
api_url TEXT,
|
|
32
|
+
api_user TEXT,
|
|
33
|
+
api_password TEXT,
|
|
34
|
+
indexer_url TEXT,
|
|
35
|
+
indexer_user TEXT DEFAULT 'admin',
|
|
36
|
+
indexer_password TEXT,
|
|
37
|
+
verify_ssl BOOLEAN DEFAULT 0,
|
|
38
|
+
enabled BOOLEAN DEFAULT 1,
|
|
39
|
+
config_json TEXT,
|
|
40
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
41
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
42
|
+
FOREIGN KEY (engagement_id) REFERENCES engagements(id) ON DELETE CASCADE,
|
|
43
|
+
UNIQUE(engagement_id, siem_type)
|
|
44
|
+
)
|
|
45
|
+
""")
|
|
46
|
+
|
|
47
|
+
# Copy existing data
|
|
48
|
+
cursor.execute("""
|
|
49
|
+
INSERT OR IGNORE INTO siem_config_new (
|
|
50
|
+
id, engagement_id, siem_type, api_url, api_user, api_password,
|
|
51
|
+
indexer_url, indexer_user, indexer_password, verify_ssl, enabled,
|
|
52
|
+
config_json, created_at, updated_at
|
|
53
|
+
)
|
|
54
|
+
SELECT
|
|
55
|
+
id, engagement_id, COALESCE(siem_type, 'wazuh'), api_url, api_user, api_password,
|
|
56
|
+
indexer_url, indexer_user, indexer_password, verify_ssl, enabled,
|
|
57
|
+
config_json, created_at, updated_at
|
|
58
|
+
FROM wazuh_config
|
|
59
|
+
""")
|
|
60
|
+
|
|
61
|
+
# Drop old table and rename new one
|
|
62
|
+
cursor.execute("DROP TABLE wazuh_config")
|
|
63
|
+
cursor.execute("ALTER TABLE siem_config_new RENAME TO wazuh_config")
|
|
64
|
+
|
|
65
|
+
# Recreate index
|
|
66
|
+
cursor.execute("CREATE INDEX IF NOT EXISTS idx_wazuh_config_engagement ON wazuh_config(engagement_id)")
|
|
67
|
+
cursor.execute("CREATE INDEX IF NOT EXISTS idx_wazuh_config_siem_type ON wazuh_config(siem_type)")
|
|
68
|
+
|
|
69
|
+
conn.commit()
|
|
70
|
+
|
|
71
|
+
if not os.environ.get('SOULEYEZ_MIGRATION_SILENT'):
|
|
72
|
+
print("Migration 027: Multi-SIEM persistence enabled")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def downgrade(conn):
|
|
76
|
+
"""Revert to single SIEM per engagement (lossy - keeps only first config per engagement)."""
|
|
77
|
+
cursor = conn.cursor()
|
|
78
|
+
|
|
79
|
+
cursor.execute("""
|
|
80
|
+
CREATE TABLE IF NOT EXISTS wazuh_config_old (
|
|
81
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
82
|
+
engagement_id INTEGER NOT NULL UNIQUE,
|
|
83
|
+
api_url TEXT NOT NULL,
|
|
84
|
+
api_user TEXT NOT NULL,
|
|
85
|
+
api_password TEXT,
|
|
86
|
+
indexer_url TEXT,
|
|
87
|
+
indexer_user TEXT DEFAULT 'admin',
|
|
88
|
+
indexer_password TEXT,
|
|
89
|
+
verify_ssl BOOLEAN DEFAULT 0,
|
|
90
|
+
enabled BOOLEAN DEFAULT 1,
|
|
91
|
+
siem_type TEXT DEFAULT 'wazuh',
|
|
92
|
+
config_json TEXT,
|
|
93
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
94
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
95
|
+
FOREIGN KEY (engagement_id) REFERENCES engagements(id) ON DELETE CASCADE
|
|
96
|
+
)
|
|
97
|
+
""")
|
|
98
|
+
|
|
99
|
+
# Copy only first config per engagement
|
|
100
|
+
cursor.execute("""
|
|
101
|
+
INSERT OR IGNORE INTO wazuh_config_old (
|
|
102
|
+
engagement_id, api_url, api_user, api_password,
|
|
103
|
+
indexer_url, indexer_user, indexer_password, verify_ssl, enabled,
|
|
104
|
+
siem_type, config_json, created_at, updated_at
|
|
105
|
+
)
|
|
106
|
+
SELECT
|
|
107
|
+
engagement_id, api_url, api_user, api_password,
|
|
108
|
+
indexer_url, indexer_user, indexer_password, verify_ssl, enabled,
|
|
109
|
+
siem_type, config_json, created_at, updated_at
|
|
110
|
+
FROM wazuh_config
|
|
111
|
+
GROUP BY engagement_id
|
|
112
|
+
""")
|
|
113
|
+
|
|
114
|
+
cursor.execute("DROP TABLE wazuh_config")
|
|
115
|
+
cursor.execute("ALTER TABLE wazuh_config_old RENAME TO wazuh_config")
|
|
116
|
+
cursor.execute("CREATE INDEX IF NOT EXISTS idx_wazuh_config_engagement ON wazuh_config(engagement_id)")
|
|
117
|
+
|
|
118
|
+
conn.commit()
|
|
119
|
+
print("Migration 027: Reverted to single SIEM per engagement")
|
|
@@ -31,6 +31,7 @@ from . import (
|
|
|
31
31
|
_024_wazuh_vulnerabilities,
|
|
32
32
|
_025_multi_siem_support,
|
|
33
33
|
_026_add_engagement_scope,
|
|
34
|
+
_027_multi_siem_persistence,
|
|
34
35
|
)
|
|
35
36
|
|
|
36
37
|
# Migration registry - maps version to module
|
|
@@ -60,6 +61,7 @@ MIGRATIONS_REGISTRY = {
|
|
|
60
61
|
'024': _024_wazuh_vulnerabilities,
|
|
61
62
|
'025': _025_multi_siem_support,
|
|
62
63
|
'026': _026_add_engagement_scope,
|
|
64
|
+
'027': _027_multi_siem_persistence,
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
|
|
@@ -504,18 +504,21 @@ CREATE INDEX IF NOT EXISTS idx_msf_sessions_active ON msf_sessions(is_active);
|
|
|
504
504
|
-- Wazuh SIEM Integration (Detection Validation)
|
|
505
505
|
CREATE TABLE IF NOT EXISTS wazuh_config (
|
|
506
506
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
507
|
-
engagement_id INTEGER NOT NULL
|
|
508
|
-
|
|
509
|
-
|
|
507
|
+
engagement_id INTEGER NOT NULL,
|
|
508
|
+
siem_type TEXT NOT NULL DEFAULT 'wazuh',
|
|
509
|
+
api_url TEXT,
|
|
510
|
+
api_user TEXT,
|
|
510
511
|
api_password TEXT,
|
|
511
512
|
indexer_url TEXT,
|
|
512
513
|
indexer_user TEXT DEFAULT 'admin',
|
|
513
514
|
indexer_password TEXT,
|
|
514
515
|
verify_ssl BOOLEAN DEFAULT 0,
|
|
515
516
|
enabled BOOLEAN DEFAULT 1,
|
|
517
|
+
config_json TEXT,
|
|
516
518
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
517
519
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
518
|
-
FOREIGN KEY (engagement_id) REFERENCES engagements(id) ON DELETE CASCADE
|
|
520
|
+
FOREIGN KEY (engagement_id) REFERENCES engagements(id) ON DELETE CASCADE,
|
|
521
|
+
UNIQUE(engagement_id, siem_type)
|
|
519
522
|
);
|
|
520
523
|
|
|
521
524
|
-- Detection validation results per job
|
|
@@ -539,6 +542,7 @@ CREATE TABLE IF NOT EXISTS detection_results (
|
|
|
539
542
|
);
|
|
540
543
|
|
|
541
544
|
CREATE INDEX IF NOT EXISTS idx_wazuh_config_engagement ON wazuh_config(engagement_id);
|
|
545
|
+
CREATE INDEX IF NOT EXISTS idx_wazuh_config_siem_type ON wazuh_config(siem_type);
|
|
542
546
|
CREATE INDEX IF NOT EXISTS idx_detection_results_job ON detection_results(job_id);
|
|
543
547
|
CREATE INDEX IF NOT EXISTS idx_detection_results_engagement ON detection_results(engagement_id);
|
|
544
548
|
CREATE INDEX IF NOT EXISTS idx_detection_results_status ON detection_results(detection_status);
|
|
@@ -8152,6 +8152,40 @@ def manage_engagements_menu():
|
|
|
8152
8152
|
click.echo(click.style(f" ✓ Created engagement '{ws_name}' (ID: {ws_id})", fg='green'))
|
|
8153
8153
|
if selected_template:
|
|
8154
8154
|
click.echo(click.style(f" ✓ Applied preset: {selected_template.name}", fg='green'))
|
|
8155
|
+
|
|
8156
|
+
# Save scope to engagement_scope table if provided
|
|
8157
|
+
if ws_scope.strip():
|
|
8158
|
+
from souleyez.security.scope_validator import ScopeManager
|
|
8159
|
+
import ipaddress
|
|
8160
|
+
scope_mgr = ScopeManager()
|
|
8161
|
+
scope_value = ws_scope.strip()
|
|
8162
|
+
|
|
8163
|
+
# Determine scope type
|
|
8164
|
+
scope_type = None
|
|
8165
|
+
try:
|
|
8166
|
+
# Check if CIDR
|
|
8167
|
+
ipaddress.ip_network(scope_value, strict=False)
|
|
8168
|
+
scope_type = 'cidr'
|
|
8169
|
+
except ValueError:
|
|
8170
|
+
try:
|
|
8171
|
+
# Check if single IP
|
|
8172
|
+
ipaddress.ip_address(scope_value)
|
|
8173
|
+
scope_type = 'cidr'
|
|
8174
|
+
scope_value = f"{scope_value}/32" # Convert single IP to CIDR
|
|
8175
|
+
except ValueError:
|
|
8176
|
+
# Check if URL
|
|
8177
|
+
if scope_value.startswith(('http://', 'https://')):
|
|
8178
|
+
scope_type = 'url'
|
|
8179
|
+
else:
|
|
8180
|
+
# Assume domain
|
|
8181
|
+
scope_type = 'domain'
|
|
8182
|
+
|
|
8183
|
+
try:
|
|
8184
|
+
scope_mgr.add_scope(ws_id, scope_type, scope_value, description="Added during engagement creation")
|
|
8185
|
+
click.echo(click.style(f" ✓ Added scope: {scope_type}={scope_value}", fg='green'))
|
|
8186
|
+
except Exception as scope_err:
|
|
8187
|
+
click.echo(click.style(f" ⚠ Could not save scope: {scope_err}", fg='yellow'))
|
|
8188
|
+
|
|
8155
8189
|
click.echo()
|
|
8156
8190
|
|
|
8157
8191
|
# Show next steps based on preset
|
|
@@ -8929,19 +8963,28 @@ def _select_siem_type(engagement_id: int):
|
|
|
8929
8963
|
if new_type == current_type:
|
|
8930
8964
|
click.echo(f"\n {info['name']} is already selected.")
|
|
8931
8965
|
else:
|
|
8932
|
-
#
|
|
8933
|
-
|
|
8934
|
-
|
|
8935
|
-
|
|
8936
|
-
|
|
8937
|
-
|
|
8938
|
-
engagement_id
|
|
8939
|
-
|
|
8940
|
-
|
|
8941
|
-
|
|
8942
|
-
|
|
8943
|
-
|
|
8944
|
-
|
|
8966
|
+
# Check if this SIEM type already has a config
|
|
8967
|
+
existing_config = WazuhConfig.get_config(engagement_id, new_type)
|
|
8968
|
+
|
|
8969
|
+
if existing_config and existing_config.get('enabled'):
|
|
8970
|
+
# Already configured - just make it current by updating timestamp
|
|
8971
|
+
click.echo(f"\n Switching to {click.style(info['name'], bold=True)}...")
|
|
8972
|
+
WazuhConfig.set_current_siem(engagement_id, new_type)
|
|
8973
|
+
click.echo(click.style(f"\n ✓ Switched to {info['name']} (existing config restored)", fg='green'))
|
|
8974
|
+
else:
|
|
8975
|
+
# Not configured - create placeholder
|
|
8976
|
+
click.echo(f"\n Switching to {click.style(info['name'], bold=True)}...")
|
|
8977
|
+
click.echo(" You'll need to configure the connection settings.")
|
|
8978
|
+
|
|
8979
|
+
# Save minimal config to set the SIEM type
|
|
8980
|
+
WazuhConfig.save_siem_config(
|
|
8981
|
+
engagement_id=engagement_id,
|
|
8982
|
+
siem_type=new_type,
|
|
8983
|
+
config={'siem_type': new_type},
|
|
8984
|
+
enabled=False # Not enabled until configured
|
|
8985
|
+
)
|
|
8986
|
+
click.echo(click.style(f"\n ✓ SIEM type set to {info['name']}", fg='green'))
|
|
8987
|
+
click.echo(" Use 'Configure Connection' to set up credentials.")
|
|
8945
8988
|
else:
|
|
8946
8989
|
click.echo(click.style("\n ✗ Invalid choice", fg='red'))
|
|
8947
8990
|
except ValueError:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: souleyez
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.32.0
|
|
4
4
|
Summary: AI-Powered Penetration Testing Platform with 40+ integrated tools
|
|
5
5
|
Author-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
6
6
|
Maintainer-email: CyberSoul Security <contact@cybersoulsecurity.com>
|
|
@@ -78,7 +78,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
|
|
|
78
78
|
|
|
79
79
|
> ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
|
|
80
80
|
|
|
81
|
-
## Version: 2.
|
|
81
|
+
## Version: 2.32.0
|
|
82
82
|
|
|
83
83
|
### What's Included
|
|
84
84
|
|
|
@@ -316,4 +316,4 @@ Happy hacking! 🛡️
|
|
|
316
316
|
|
|
317
317
|
---
|
|
318
318
|
|
|
319
|
-
**Version**: 2.
|
|
319
|
+
**Version**: 2.32.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
|
|
@@ -336,6 +336,7 @@ souleyez/storage/migrations/_023_fix_detection_results_fk.py
|
|
|
336
336
|
souleyez/storage/migrations/_024_wazuh_vulnerabilities.py
|
|
337
337
|
souleyez/storage/migrations/_025_multi_siem_support.py
|
|
338
338
|
souleyez/storage/migrations/_026_add_engagement_scope.py
|
|
339
|
+
souleyez/storage/migrations/_027_multi_siem_persistence.py
|
|
339
340
|
souleyez/storage/migrations/__init__.py
|
|
340
341
|
souleyez/storage/migrations/migration_manager.py
|
|
341
342
|
souleyez/testing/__init__.py
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '2.31.0'
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|