souleyez 2.43.29__py3-none-any.whl → 3.0.0__py3-none-any.whl
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/__init__.py +1 -2
- souleyez/ai/__init__.py +21 -15
- souleyez/ai/action_mapper.py +249 -150
- souleyez/ai/chain_advisor.py +116 -100
- souleyez/ai/claude_provider.py +29 -28
- souleyez/ai/context_builder.py +80 -62
- souleyez/ai/executor.py +158 -117
- souleyez/ai/feedback_handler.py +136 -121
- souleyez/ai/llm_factory.py +27 -20
- souleyez/ai/llm_provider.py +4 -2
- souleyez/ai/ollama_provider.py +6 -9
- souleyez/ai/ollama_service.py +44 -37
- souleyez/ai/path_scorer.py +91 -76
- souleyez/ai/recommender.py +176 -144
- souleyez/ai/report_context.py +74 -73
- souleyez/ai/report_service.py +84 -66
- souleyez/ai/result_parser.py +222 -229
- souleyez/ai/safety.py +67 -44
- souleyez/auth/__init__.py +23 -22
- souleyez/auth/audit.py +36 -26
- souleyez/auth/engagement_access.py +65 -48
- souleyez/auth/permissions.py +14 -3
- souleyez/auth/session_manager.py +54 -37
- souleyez/auth/user_manager.py +109 -64
- souleyez/commands/audit.py +40 -43
- souleyez/commands/auth.py +35 -15
- souleyez/commands/deliverables.py +55 -50
- souleyez/commands/engagement.py +47 -28
- souleyez/commands/license.py +32 -23
- souleyez/commands/screenshots.py +36 -32
- souleyez/commands/user.py +82 -36
- souleyez/config.py +52 -44
- souleyez/core/credential_tester.py +87 -81
- souleyez/core/cve_mappings.py +179 -192
- souleyez/core/cve_matcher.py +162 -148
- souleyez/core/msf_auto_mapper.py +100 -83
- souleyez/core/msf_chain_engine.py +294 -256
- souleyez/core/msf_database.py +153 -70
- souleyez/core/msf_integration.py +679 -673
- souleyez/core/msf_rpc_client.py +40 -42
- souleyez/core/msf_rpc_manager.py +77 -79
- souleyez/core/msf_sync_manager.py +241 -181
- souleyez/core/network_utils.py +22 -15
- souleyez/core/parser_handler.py +34 -25
- souleyez/core/pending_chains.py +114 -63
- souleyez/core/templates.py +158 -107
- souleyez/core/tool_chaining.py +9564 -2881
- souleyez/core/version_utils.py +79 -94
- souleyez/core/vuln_correlation.py +136 -89
- souleyez/core/web_utils.py +33 -32
- souleyez/data/wordlists/ad_users.txt +378 -0
- souleyez/data/wordlists/api_endpoints_large.txt +769 -0
- souleyez/data/wordlists/home_dir_sensitive.txt +39 -0
- souleyez/data/wordlists/lfi_payloads.txt +82 -0
- souleyez/data/wordlists/passwords_brute.txt +1548 -0
- souleyez/data/wordlists/passwords_crack.txt +2479 -0
- souleyez/data/wordlists/passwords_spray.txt +386 -0
- souleyez/data/wordlists/subdomains_large.txt +5057 -0
- souleyez/data/wordlists/usernames_common.txt +694 -0
- souleyez/data/wordlists/web_dirs_large.txt +4769 -0
- souleyez/detection/__init__.py +1 -1
- souleyez/detection/attack_signatures.py +12 -17
- souleyez/detection/mitre_mappings.py +61 -55
- souleyez/detection/validator.py +97 -86
- souleyez/devtools.py +23 -10
- souleyez/docs/README.md +4 -4
- souleyez/docs/api-reference/cli-commands.md +2 -2
- souleyez/docs/developer-guide/adding-new-tools.md +562 -0
- souleyez/docs/user-guide/auto-chaining.md +30 -8
- souleyez/docs/user-guide/getting-started.md +1 -1
- souleyez/docs/user-guide/installation.md +26 -3
- souleyez/docs/user-guide/metasploit-integration.md +2 -2
- souleyez/docs/user-guide/rbac.md +1 -1
- souleyez/docs/user-guide/scope-management.md +1 -1
- souleyez/docs/user-guide/siem-integration.md +1 -1
- souleyez/docs/user-guide/tools-reference.md +1 -8
- souleyez/docs/user-guide/worker-management.md +1 -1
- souleyez/engine/background.py +1239 -535
- souleyez/engine/base.py +4 -1
- souleyez/engine/job_status.py +17 -49
- souleyez/engine/log_sanitizer.py +103 -77
- souleyez/engine/manager.py +38 -7
- souleyez/engine/result_handler.py +2200 -1550
- souleyez/engine/worker_manager.py +50 -41
- souleyez/export/evidence_bundle.py +72 -62
- souleyez/feature_flags/features.py +16 -20
- souleyez/feature_flags.py +5 -9
- souleyez/handlers/__init__.py +11 -0
- souleyez/handlers/base.py +188 -0
- souleyez/handlers/bash_handler.py +277 -0
- souleyez/handlers/bloodhound_handler.py +243 -0
- souleyez/handlers/certipy_handler.py +311 -0
- souleyez/handlers/crackmapexec_handler.py +486 -0
- souleyez/handlers/dnsrecon_handler.py +344 -0
- souleyez/handlers/enum4linux_handler.py +400 -0
- souleyez/handlers/evil_winrm_handler.py +493 -0
- souleyez/handlers/ffuf_handler.py +815 -0
- souleyez/handlers/gobuster_handler.py +1114 -0
- souleyez/handlers/gpp_extract_handler.py +334 -0
- souleyez/handlers/hashcat_handler.py +444 -0
- souleyez/handlers/hydra_handler.py +564 -0
- souleyez/handlers/impacket_getuserspns_handler.py +343 -0
- souleyez/handlers/impacket_psexec_handler.py +222 -0
- souleyez/handlers/impacket_secretsdump_handler.py +426 -0
- souleyez/handlers/john_handler.py +286 -0
- souleyez/handlers/katana_handler.py +425 -0
- souleyez/handlers/kerbrute_handler.py +298 -0
- souleyez/handlers/ldapsearch_handler.py +636 -0
- souleyez/handlers/lfi_extract_handler.py +464 -0
- souleyez/handlers/msf_auxiliary_handler.py +409 -0
- souleyez/handlers/msf_exploit_handler.py +380 -0
- souleyez/handlers/nikto_handler.py +413 -0
- souleyez/handlers/nmap_handler.py +821 -0
- souleyez/handlers/nuclei_handler.py +359 -0
- souleyez/handlers/nxc_handler.py +417 -0
- souleyez/handlers/rdp_sec_check_handler.py +353 -0
- souleyez/handlers/registry.py +292 -0
- souleyez/handlers/responder_handler.py +232 -0
- souleyez/handlers/service_explorer_handler.py +434 -0
- souleyez/handlers/smbclient_handler.py +344 -0
- souleyez/handlers/smbmap_handler.py +510 -0
- souleyez/handlers/smbpasswd_handler.py +296 -0
- souleyez/handlers/sqlmap_handler.py +1116 -0
- souleyez/handlers/theharvester_handler.py +601 -0
- souleyez/handlers/web_login_test_handler.py +327 -0
- souleyez/handlers/whois_handler.py +277 -0
- souleyez/handlers/wpscan_handler.py +554 -0
- souleyez/history.py +32 -16
- souleyez/importers/msf_importer.py +106 -75
- souleyez/importers/smart_importer.py +208 -147
- souleyez/integrations/siem/__init__.py +10 -10
- souleyez/integrations/siem/base.py +17 -18
- souleyez/integrations/siem/elastic.py +108 -122
- souleyez/integrations/siem/factory.py +207 -80
- souleyez/integrations/siem/googlesecops.py +146 -154
- souleyez/integrations/siem/rule_mappings/__init__.py +1 -1
- souleyez/integrations/siem/rule_mappings/wazuh_rules.py +8 -5
- souleyez/integrations/siem/sentinel.py +107 -109
- souleyez/integrations/siem/splunk.py +246 -212
- souleyez/integrations/siem/wazuh.py +65 -71
- souleyez/integrations/wazuh/__init__.py +5 -5
- souleyez/integrations/wazuh/client.py +70 -93
- souleyez/integrations/wazuh/config.py +85 -57
- souleyez/integrations/wazuh/host_mapper.py +28 -36
- souleyez/integrations/wazuh/sync.py +78 -68
- souleyez/intelligence/__init__.py +4 -5
- souleyez/intelligence/correlation_analyzer.py +309 -295
- souleyez/intelligence/exploit_knowledge.py +661 -623
- souleyez/intelligence/exploit_suggestions.py +159 -139
- souleyez/intelligence/gap_analyzer.py +132 -97
- souleyez/intelligence/gap_detector.py +251 -214
- souleyez/intelligence/sensitive_tables.py +266 -129
- souleyez/intelligence/service_parser.py +137 -123
- souleyez/intelligence/surface_analyzer.py +407 -268
- souleyez/intelligence/target_parser.py +159 -162
- souleyez/licensing/__init__.py +6 -6
- souleyez/licensing/validator.py +17 -19
- souleyez/log_config.py +79 -54
- souleyez/main.py +1505 -687
- souleyez/migrations/fix_job_counter.py +16 -14
- souleyez/parsers/bloodhound_parser.py +41 -39
- souleyez/parsers/crackmapexec_parser.py +178 -111
- souleyez/parsers/dalfox_parser.py +72 -77
- souleyez/parsers/dnsrecon_parser.py +103 -91
- souleyez/parsers/enum4linux_parser.py +183 -153
- souleyez/parsers/ffuf_parser.py +29 -25
- souleyez/parsers/gobuster_parser.py +301 -41
- souleyez/parsers/hashcat_parser.py +324 -79
- souleyez/parsers/http_fingerprint_parser.py +350 -103
- souleyez/parsers/hydra_parser.py +131 -111
- souleyez/parsers/impacket_parser.py +231 -178
- souleyez/parsers/john_parser.py +98 -86
- souleyez/parsers/katana_parser.py +316 -0
- souleyez/parsers/msf_parser.py +943 -498
- souleyez/parsers/nikto_parser.py +346 -65
- souleyez/parsers/nmap_parser.py +262 -174
- souleyez/parsers/nuclei_parser.py +40 -44
- souleyez/parsers/responder_parser.py +26 -26
- souleyez/parsers/searchsploit_parser.py +74 -74
- souleyez/parsers/service_explorer_parser.py +279 -0
- souleyez/parsers/smbmap_parser.py +180 -124
- souleyez/parsers/sqlmap_parser.py +434 -308
- souleyez/parsers/theharvester_parser.py +75 -57
- souleyez/parsers/whois_parser.py +135 -94
- souleyez/parsers/wpscan_parser.py +278 -190
- souleyez/plugins/afp.py +44 -36
- souleyez/plugins/afp_brute.py +114 -46
- souleyez/plugins/ard.py +48 -37
- souleyez/plugins/bloodhound.py +95 -61
- souleyez/plugins/certipy.py +303 -0
- souleyez/plugins/crackmapexec.py +186 -85
- souleyez/plugins/dalfox.py +120 -59
- souleyez/plugins/dns_hijack.py +146 -41
- souleyez/plugins/dnsrecon.py +97 -61
- souleyez/plugins/enum4linux.py +91 -66
- souleyez/plugins/evil_winrm.py +291 -0
- souleyez/plugins/ffuf.py +166 -90
- souleyez/plugins/firmware_extract.py +133 -29
- souleyez/plugins/gobuster.py +387 -190
- souleyez/plugins/gpp_extract.py +393 -0
- souleyez/plugins/hashcat.py +100 -73
- souleyez/plugins/http_fingerprint.py +913 -267
- souleyez/plugins/hydra.py +566 -200
- souleyez/plugins/impacket_getnpusers.py +117 -69
- souleyez/plugins/impacket_psexec.py +84 -64
- souleyez/plugins/impacket_secretsdump.py +103 -69
- souleyez/plugins/impacket_smbclient.py +89 -75
- souleyez/plugins/john.py +86 -69
- souleyez/plugins/katana.py +313 -0
- souleyez/plugins/kerbrute.py +237 -0
- souleyez/plugins/lfi_extract.py +541 -0
- souleyez/plugins/macos_ssh.py +117 -48
- souleyez/plugins/mdns.py +35 -30
- souleyez/plugins/msf_auxiliary.py +253 -130
- souleyez/plugins/msf_exploit.py +239 -161
- souleyez/plugins/nikto.py +134 -78
- souleyez/plugins/nmap.py +275 -91
- souleyez/plugins/nuclei.py +180 -89
- souleyez/plugins/nxc.py +285 -0
- souleyez/plugins/plugin_base.py +35 -36
- souleyez/plugins/plugin_template.py +13 -5
- souleyez/plugins/rdp_sec_check.py +130 -0
- souleyez/plugins/responder.py +112 -71
- souleyez/plugins/router_http_brute.py +76 -65
- souleyez/plugins/router_ssh_brute.py +118 -41
- souleyez/plugins/router_telnet_brute.py +124 -42
- souleyez/plugins/routersploit.py +91 -59
- souleyez/plugins/routersploit_exploit.py +77 -55
- souleyez/plugins/searchsploit.py +91 -77
- souleyez/plugins/service_explorer.py +1160 -0
- souleyez/plugins/smbmap.py +122 -72
- souleyez/plugins/smbpasswd.py +215 -0
- souleyez/plugins/sqlmap.py +301 -113
- souleyez/plugins/theharvester.py +127 -75
- souleyez/plugins/tr069.py +79 -57
- souleyez/plugins/upnp.py +65 -47
- souleyez/plugins/upnp_abuse.py +73 -55
- souleyez/plugins/vnc_access.py +129 -42
- souleyez/plugins/vnc_brute.py +109 -38
- souleyez/plugins/web_login_test.py +417 -0
- souleyez/plugins/whois.py +77 -58
- souleyez/plugins/wpscan.py +219 -69
- souleyez/reporting/__init__.py +2 -1
- souleyez/reporting/attack_chain.py +411 -346
- souleyez/reporting/charts.py +436 -501
- souleyez/reporting/compliance_mappings.py +334 -201
- souleyez/reporting/detection_report.py +126 -125
- souleyez/reporting/formatters.py +828 -591
- souleyez/reporting/generator.py +386 -302
- souleyez/reporting/metrics.py +72 -75
- souleyez/scanner.py +35 -29
- souleyez/security/__init__.py +37 -11
- souleyez/security/scope_validator.py +175 -106
- souleyez/security/validation.py +237 -149
- souleyez/security.py +22 -6
- souleyez/storage/credentials.py +247 -186
- souleyez/storage/crypto.py +296 -129
- souleyez/storage/database.py +73 -50
- souleyez/storage/db.py +58 -36
- souleyez/storage/deliverable_evidence.py +177 -128
- souleyez/storage/deliverable_exporter.py +282 -246
- souleyez/storage/deliverable_templates.py +134 -116
- souleyez/storage/deliverables.py +135 -130
- souleyez/storage/engagements.py +109 -56
- souleyez/storage/evidence.py +181 -152
- souleyez/storage/execution_log.py +31 -17
- souleyez/storage/exploit_attempts.py +93 -57
- souleyez/storage/exploits.py +67 -36
- souleyez/storage/findings.py +48 -61
- souleyez/storage/hosts.py +176 -144
- souleyez/storage/migrate_to_engagements.py +43 -19
- souleyez/storage/migrations/_001_add_credential_enhancements.py +22 -12
- souleyez/storage/migrations/_002_add_status_tracking.py +10 -7
- souleyez/storage/migrations/_003_add_execution_log.py +14 -8
- souleyez/storage/migrations/_005_screenshots.py +13 -5
- souleyez/storage/migrations/_006_deliverables.py +13 -5
- souleyez/storage/migrations/_007_deliverable_templates.py +12 -7
- souleyez/storage/migrations/_008_add_nuclei_table.py +10 -4
- souleyez/storage/migrations/_010_evidence_linking.py +17 -10
- souleyez/storage/migrations/_011_timeline_tracking.py +20 -13
- souleyez/storage/migrations/_012_team_collaboration.py +34 -21
- souleyez/storage/migrations/_013_add_host_tags.py +12 -6
- souleyez/storage/migrations/_014_exploit_attempts.py +22 -10
- souleyez/storage/migrations/_015_add_mac_os_fields.py +15 -7
- souleyez/storage/migrations/_016_add_domain_field.py +10 -4
- souleyez/storage/migrations/_017_msf_sessions.py +16 -8
- souleyez/storage/migrations/_018_add_osint_target.py +10 -6
- souleyez/storage/migrations/_019_add_engagement_type.py +10 -6
- souleyez/storage/migrations/_020_add_rbac.py +36 -15
- souleyez/storage/migrations/_021_wazuh_integration.py +20 -8
- souleyez/storage/migrations/_022_wazuh_indexer_columns.py +6 -4
- souleyez/storage/migrations/_023_fix_detection_results_fk.py +16 -6
- souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +26 -10
- souleyez/storage/migrations/_025_multi_siem_support.py +3 -5
- souleyez/storage/migrations/_026_add_engagement_scope.py +31 -12
- souleyez/storage/migrations/_027_multi_siem_persistence.py +32 -15
- souleyez/storage/migrations/__init__.py +26 -26
- souleyez/storage/migrations/migration_manager.py +19 -19
- souleyez/storage/msf_sessions.py +100 -65
- souleyez/storage/osint.py +17 -24
- souleyez/storage/recommendation_engine.py +269 -235
- souleyez/storage/screenshots.py +33 -32
- souleyez/storage/smb_shares.py +136 -92
- souleyez/storage/sqlmap_data.py +183 -128
- souleyez/storage/team_collaboration.py +135 -141
- souleyez/storage/timeline_tracker.py +122 -94
- souleyez/storage/wazuh_vulns.py +64 -66
- souleyez/storage/web_paths.py +33 -37
- souleyez/testing/credential_tester.py +221 -205
- souleyez/ui/__init__.py +1 -1
- souleyez/ui/ai_quotes.py +12 -12
- souleyez/ui/attack_surface.py +2439 -1516
- souleyez/ui/chain_rules_view.py +914 -382
- souleyez/ui/correlation_view.py +312 -230
- souleyez/ui/dashboard.py +2382 -1130
- souleyez/ui/deliverables_view.py +148 -62
- souleyez/ui/design_system.py +13 -13
- souleyez/ui/errors.py +49 -49
- souleyez/ui/evidence_linking_view.py +284 -179
- souleyez/ui/evidence_vault.py +393 -285
- souleyez/ui/exploit_suggestions_view.py +555 -349
- souleyez/ui/export_view.py +100 -66
- souleyez/ui/gap_analysis_view.py +315 -171
- souleyez/ui/help_system.py +105 -97
- souleyez/ui/intelligence_view.py +436 -293
- souleyez/ui/interactive.py +23034 -10679
- souleyez/ui/interactive_selector.py +75 -68
- souleyez/ui/log_formatter.py +47 -39
- souleyez/ui/menu_components.py +22 -13
- souleyez/ui/msf_auxiliary_menu.py +184 -133
- souleyez/ui/pending_chains_view.py +336 -172
- souleyez/ui/progress_indicators.py +5 -3
- souleyez/ui/recommendations_view.py +195 -137
- souleyez/ui/rule_builder.py +343 -225
- souleyez/ui/setup_wizard.py +678 -284
- souleyez/ui/shortcuts.py +217 -165
- souleyez/ui/splunk_gap_analysis_view.py +452 -270
- souleyez/ui/splunk_vulns_view.py +139 -86
- souleyez/ui/team_dashboard.py +498 -335
- souleyez/ui/template_selector.py +196 -105
- souleyez/ui/terminal.py +6 -6
- souleyez/ui/timeline_view.py +198 -127
- souleyez/ui/tool_setup.py +264 -164
- souleyez/ui/tutorial.py +202 -72
- souleyez/ui/tutorial_state.py +40 -40
- souleyez/ui/wazuh_vulns_view.py +235 -141
- souleyez/ui/wordlist_browser.py +260 -107
- souleyez/ui.py +464 -312
- souleyez/utils/tool_checker.py +427 -367
- souleyez/utils.py +33 -29
- souleyez/wordlists.py +134 -167
- {souleyez-2.43.29.dist-info → souleyez-3.0.0.dist-info}/METADATA +2 -2
- souleyez-3.0.0.dist-info/RECORD +443 -0
- {souleyez-2.43.29.dist-info → souleyez-3.0.0.dist-info}/WHEEL +1 -1
- souleyez-2.43.29.dist-info/RECORD +0 -379
- {souleyez-2.43.29.dist-info → souleyez-3.0.0.dist-info}/entry_points.txt +0 -0
- {souleyez-2.43.29.dist-info → souleyez-3.0.0.dist-info}/licenses/LICENSE +0 -0
- {souleyez-2.43.29.dist-info → souleyez-3.0.0.dist-info}/top_level.txt +0 -0
souleyez/ui/errors.py
CHANGED
|
@@ -26,11 +26,13 @@ class ErrorHelper:
|
|
|
26
26
|
error_msg(ErrorType.CUSTOM, message="Something went wrong",
|
|
27
27
|
suggestions=["Try this", "Or this"])
|
|
28
28
|
"""
|
|
29
|
+
|
|
29
30
|
pass
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
class ErrorType:
|
|
33
34
|
"""Enum-like class for error types."""
|
|
35
|
+
|
|
34
36
|
ENGAGEMENT_NOT_FOUND = "engagement_not_found"
|
|
35
37
|
TOOL_NOT_FOUND = "tool_not_found"
|
|
36
38
|
DATABASE_ERROR = "database_error"
|
|
@@ -53,128 +55,116 @@ ERROR_DEFINITIONS = {
|
|
|
53
55
|
"suggestions": [
|
|
54
56
|
"Run 'souleyez interactive' to create or select an engagement",
|
|
55
57
|
"Use '[+] Create New' in the engagement menu",
|
|
56
|
-
"Check the engagement ID is correct"
|
|
58
|
+
"Check the engagement ID is correct",
|
|
57
59
|
],
|
|
58
|
-
"help_cmd": "souleyez interactive"
|
|
60
|
+
"help_cmd": "souleyez interactive",
|
|
59
61
|
},
|
|
60
|
-
|
|
61
62
|
ErrorType.NO_CURRENT_ENGAGEMENT: {
|
|
62
63
|
"message": "No engagement selected",
|
|
63
64
|
"suggestions": [
|
|
64
65
|
"Select an engagement first in the interactive menu",
|
|
65
66
|
"Create a new engagement with '[+] Create New'",
|
|
66
|
-
"Run 'souleyez interactive' to get started"
|
|
67
|
+
"Run 'souleyez interactive' to get started",
|
|
67
68
|
],
|
|
68
|
-
"help_cmd": "souleyez interactive"
|
|
69
|
+
"help_cmd": "souleyez interactive",
|
|
69
70
|
},
|
|
70
|
-
|
|
71
71
|
ErrorType.TOOL_NOT_FOUND: {
|
|
72
72
|
"message": "Tool not installed or not found in PATH",
|
|
73
73
|
"suggestions": [
|
|
74
74
|
"Run 'souleyez setup' to install pentesting tools",
|
|
75
75
|
"Check if the tool is installed: 'which {tool_name}'",
|
|
76
|
-
"Run 'souleyez doctor' to diagnose installation issues"
|
|
76
|
+
"Run 'souleyez doctor' to diagnose installation issues",
|
|
77
77
|
],
|
|
78
|
-
"help_cmd": "souleyez setup"
|
|
78
|
+
"help_cmd": "souleyez setup",
|
|
79
79
|
},
|
|
80
|
-
|
|
81
80
|
ErrorType.DATABASE_ERROR: {
|
|
82
81
|
"message": "Database error occurred",
|
|
83
82
|
"suggestions": [
|
|
84
83
|
"Run 'souleyez doctor' to check database health",
|
|
85
84
|
"Check ~/.souleyez/souleyez.db file permissions",
|
|
86
|
-
"Try backing up and recreating the database"
|
|
85
|
+
"Try backing up and recreating the database",
|
|
87
86
|
],
|
|
88
|
-
"help_cmd": "souleyez doctor"
|
|
87
|
+
"help_cmd": "souleyez doctor",
|
|
89
88
|
},
|
|
90
|
-
|
|
91
89
|
ErrorType.PERMISSION_DENIED: {
|
|
92
90
|
"message": "Permission denied",
|
|
93
91
|
"suggestions": [
|
|
94
92
|
"Check file/directory permissions",
|
|
95
93
|
"Some tools require sudo - try running with elevated privileges",
|
|
96
|
-
"Run 'souleyez doctor' to check for permission issues"
|
|
94
|
+
"Run 'souleyez doctor' to check for permission issues",
|
|
97
95
|
],
|
|
98
|
-
"help_cmd": "souleyez doctor"
|
|
96
|
+
"help_cmd": "souleyez doctor",
|
|
99
97
|
},
|
|
100
|
-
|
|
101
98
|
ErrorType.CONFIG_ERROR: {
|
|
102
99
|
"message": "Configuration error",
|
|
103
100
|
"suggestions": [
|
|
104
101
|
"Check ~/.souleyez/config.json for syntax errors",
|
|
105
102
|
"Run 'souleyez doctor' to validate configuration",
|
|
106
|
-
"Delete config file to reset to defaults: rm ~/.souleyez/config.json"
|
|
103
|
+
"Delete config file to reset to defaults: rm ~/.souleyez/config.json",
|
|
107
104
|
],
|
|
108
|
-
"help_cmd": "cat ~/.souleyez/config.json"
|
|
105
|
+
"help_cmd": "cat ~/.souleyez/config.json",
|
|
109
106
|
},
|
|
110
|
-
|
|
111
107
|
ErrorType.NETWORK_ERROR: {
|
|
112
108
|
"message": "Network connection error",
|
|
113
109
|
"suggestions": [
|
|
114
110
|
"Check your internet connection",
|
|
115
111
|
"Verify the target is reachable: ping {target}",
|
|
116
112
|
"Check if a firewall is blocking the connection",
|
|
117
|
-
"Try using a proxy if configured"
|
|
113
|
+
"Try using a proxy if configured",
|
|
118
114
|
],
|
|
119
|
-
"help_cmd": None
|
|
115
|
+
"help_cmd": None,
|
|
120
116
|
},
|
|
121
|
-
|
|
122
117
|
ErrorType.AUTH_REQUIRED: {
|
|
123
118
|
"message": "Authentication required",
|
|
124
119
|
"suggestions": [
|
|
125
120
|
"Log in with 'souleyez login'",
|
|
126
121
|
"Create an account if you don't have one",
|
|
127
|
-
"Check that your session hasn't expired"
|
|
122
|
+
"Check that your session hasn't expired",
|
|
128
123
|
],
|
|
129
|
-
"help_cmd": "souleyez login"
|
|
124
|
+
"help_cmd": "souleyez login",
|
|
130
125
|
},
|
|
131
|
-
|
|
132
126
|
ErrorType.SESSION_EXPIRED: {
|
|
133
127
|
"message": "Session expired",
|
|
134
128
|
"suggestions": [
|
|
135
129
|
"Log in again with 'souleyez login'",
|
|
136
130
|
"Increase session timeout in config if needed",
|
|
137
|
-
"Check security.session_timeout_minutes in config"
|
|
131
|
+
"Check security.session_timeout_minutes in config",
|
|
138
132
|
],
|
|
139
|
-
"help_cmd": "souleyez login"
|
|
133
|
+
"help_cmd": "souleyez login",
|
|
140
134
|
},
|
|
141
|
-
|
|
142
135
|
ErrorType.METASPLOIT_ERROR: {
|
|
143
136
|
"message": "Metasploit error",
|
|
144
137
|
"suggestions": [
|
|
145
138
|
"Check if Metasploit is installed: 'msfconsole -v'",
|
|
146
139
|
"Initialize the MSF database: 'msfdb init'",
|
|
147
140
|
"Run 'souleyez doctor --verbose' for MSF diagnostics",
|
|
148
|
-
"Try running msfconsole directly to see errors"
|
|
141
|
+
"Try running msfconsole directly to see errors",
|
|
149
142
|
],
|
|
150
|
-
"help_cmd": "souleyez doctor --verbose"
|
|
143
|
+
"help_cmd": "souleyez doctor --verbose",
|
|
151
144
|
},
|
|
152
|
-
|
|
153
145
|
ErrorType.ENCRYPTION_ERROR: {
|
|
154
146
|
"message": "Encryption/decryption error",
|
|
155
147
|
"suggestions": [
|
|
156
148
|
"Make sure you're using the correct master password",
|
|
157
149
|
"The credential vault may be locked - unlock it first",
|
|
158
|
-
"If you forgot your password, credentials cannot be recovered"
|
|
150
|
+
"If you forgot your password, credentials cannot be recovered",
|
|
159
151
|
],
|
|
160
|
-
"help_cmd": None
|
|
152
|
+
"help_cmd": None,
|
|
161
153
|
},
|
|
162
|
-
|
|
163
154
|
ErrorType.IMPORT_ERROR: {
|
|
164
155
|
"message": "Failed to import required module",
|
|
165
156
|
"suggestions": [
|
|
166
157
|
"Run 'pip install souleyez' or 'pip install -e .' to install dependencies",
|
|
167
158
|
"Check that all requirements are installed",
|
|
168
|
-
"Run 'souleyez doctor' to check for missing packages"
|
|
159
|
+
"Run 'souleyez doctor' to check for missing packages",
|
|
169
160
|
],
|
|
170
|
-
"help_cmd": "souleyez doctor"
|
|
161
|
+
"help_cmd": "souleyez doctor",
|
|
171
162
|
},
|
|
172
|
-
|
|
173
163
|
ErrorType.CUSTOM: {
|
|
174
164
|
"message": "An error occurred",
|
|
175
165
|
"suggestions": [],
|
|
176
|
-
"help_cmd": "souleyez doctor"
|
|
177
|
-
}
|
|
166
|
+
"help_cmd": "souleyez doctor",
|
|
167
|
+
},
|
|
178
168
|
}
|
|
179
169
|
|
|
180
170
|
|
|
@@ -183,7 +173,7 @@ def error_msg(
|
|
|
183
173
|
message: Optional[str] = None,
|
|
184
174
|
suggestions: Optional[List[str]] = None,
|
|
185
175
|
show_help: bool = True,
|
|
186
|
-
**context
|
|
176
|
+
**context,
|
|
187
177
|
) -> None:
|
|
188
178
|
"""
|
|
189
179
|
Display a user-friendly error message with fix suggestions.
|
|
@@ -207,13 +197,13 @@ def error_msg(
|
|
|
207
197
|
|
|
208
198
|
# Display error
|
|
209
199
|
click.echo()
|
|
210
|
-
click.echo(click.style(f" ✗ {final_message}", fg=
|
|
200
|
+
click.echo(click.style(f" ✗ {final_message}", fg="red", bold=True))
|
|
211
201
|
|
|
212
202
|
# Get and display suggestions
|
|
213
203
|
final_suggestions = suggestions or error_def["suggestions"]
|
|
214
204
|
if final_suggestions:
|
|
215
205
|
click.echo()
|
|
216
|
-
click.echo(click.style(" How to fix:", fg=
|
|
206
|
+
click.echo(click.style(" How to fix:", fg="yellow"))
|
|
217
207
|
for i, suggestion in enumerate(final_suggestions[:4], 1):
|
|
218
208
|
# Substitute context variables in suggestion
|
|
219
209
|
for key, value in context.items():
|
|
@@ -227,7 +217,10 @@ def error_msg(
|
|
|
227
217
|
for key, value in context.items():
|
|
228
218
|
help_cmd = help_cmd.replace(f"{{{key}}}", str(value))
|
|
229
219
|
click.echo()
|
|
230
|
-
click.echo(
|
|
220
|
+
click.echo(
|
|
221
|
+
click.style(f" Quick fix: ", fg="cyan")
|
|
222
|
+
+ click.style(help_cmd, fg="white", bold=True)
|
|
223
|
+
)
|
|
231
224
|
|
|
232
225
|
click.echo()
|
|
233
226
|
|
|
@@ -241,7 +234,7 @@ def warn_msg(message: str, suggestions: Optional[List[str]] = None) -> None:
|
|
|
241
234
|
suggestions: Optional list of suggestions
|
|
242
235
|
"""
|
|
243
236
|
click.echo()
|
|
244
|
-
click.echo(click.style(f" ⚠ {message}", fg=
|
|
237
|
+
click.echo(click.style(f" ⚠ {message}", fg="yellow", bold=True))
|
|
245
238
|
|
|
246
239
|
if suggestions:
|
|
247
240
|
click.echo()
|
|
@@ -260,11 +253,11 @@ def success_msg(message: str, next_steps: Optional[List[str]] = None) -> None:
|
|
|
260
253
|
next_steps: Optional list of next steps
|
|
261
254
|
"""
|
|
262
255
|
click.echo()
|
|
263
|
-
click.echo(click.style(f" ✓ {message}", fg=
|
|
256
|
+
click.echo(click.style(f" ✓ {message}", fg="green", bold=True))
|
|
264
257
|
|
|
265
258
|
if next_steps:
|
|
266
259
|
click.echo()
|
|
267
|
-
click.echo(click.style(" Next steps:", fg=
|
|
260
|
+
click.echo(click.style(" Next steps:", fg="cyan"))
|
|
268
261
|
for i, step in enumerate(next_steps[:3], 1):
|
|
269
262
|
click.echo(f" {i}. {step}")
|
|
270
263
|
|
|
@@ -280,7 +273,7 @@ def info_msg(message: str, details: Optional[List[str]] = None) -> None:
|
|
|
280
273
|
details: Optional list of details
|
|
281
274
|
"""
|
|
282
275
|
click.echo()
|
|
283
|
-
click.echo(click.style(f" ℹ {message}", fg=
|
|
276
|
+
click.echo(click.style(f" ℹ {message}", fg="cyan"))
|
|
284
277
|
|
|
285
278
|
if details:
|
|
286
279
|
for detail in details[:5]:
|
|
@@ -292,14 +285,21 @@ def info_msg(message: str, details: Optional[List[str]] = None) -> None:
|
|
|
292
285
|
# Convenience functions for common errors
|
|
293
286
|
def engagement_not_found(engagement_id: Optional[int] = None) -> None:
|
|
294
287
|
"""Show engagement not found error with fix suggestions."""
|
|
295
|
-
msg =
|
|
288
|
+
msg = (
|
|
289
|
+
f"Engagement ID {engagement_id} not found"
|
|
290
|
+
if engagement_id
|
|
291
|
+
else "Engagement not found"
|
|
292
|
+
)
|
|
296
293
|
error_msg(ErrorType.ENGAGEMENT_NOT_FOUND, message=msg)
|
|
297
294
|
|
|
298
295
|
|
|
299
296
|
def tool_not_found(tool_name: str) -> None:
|
|
300
297
|
"""Show tool not found error with fix suggestions."""
|
|
301
|
-
error_msg(
|
|
302
|
-
|
|
298
|
+
error_msg(
|
|
299
|
+
ErrorType.TOOL_NOT_FOUND,
|
|
300
|
+
tool_name=tool_name,
|
|
301
|
+
message=f"Tool '{tool_name}' not installed or not found in PATH",
|
|
302
|
+
)
|
|
303
303
|
|
|
304
304
|
|
|
305
305
|
def no_engagement_selected() -> None:
|