souleyez 2.23.0__py3-none-any.whl → 2.24.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 CHANGED
@@ -1 +1 @@
1
- __version__ = '2.23.0'
1
+ __version__ = '2.24.0'
@@ -29,15 +29,25 @@ logger = logging.getLogger(__name__)
29
29
 
30
30
  def get_msf_database_config() -> Optional[Dict[str, Any]]:
31
31
  """
32
- Get MSF database configuration from ~/.msf4/database.yml
32
+ Get MSF database configuration from ~/.msf4/database.yml or system-wide config.
33
+
34
+ Checks user config first, then falls back to system-wide config (Kali Linux).
33
35
 
34
36
  Returns:
35
37
  Dictionary with database config or None if not found/parseable
36
38
  """
37
- db_yml_path = Path.home() / ".msf4" / "database.yml"
38
-
39
- if not db_yml_path.exists():
40
- logger.debug(f"MSF database.yml not found at {db_yml_path}")
39
+ # Check user config first, then system-wide config (Kali uses system-wide)
40
+ user_db_path = Path.home() / ".msf4" / "database.yml"
41
+ system_db_path = Path('/usr/share/metasploit-framework/config/database.yml')
42
+
43
+ db_yml_path = None
44
+ if user_db_path.exists():
45
+ db_yml_path = user_db_path
46
+ elif system_db_path.exists():
47
+ db_yml_path = system_db_path
48
+
49
+ if not db_yml_path:
50
+ logger.debug("MSF database.yml not found in user or system config")
41
51
  return None
42
52
 
43
53
  try:
souleyez/docs/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # SoulEyez Documentation
2
2
 
3
- **Version:** 2.23.0
4
- **Last Updated:** January 7, 2026
3
+ **Version:** 2.24.0
4
+ **Last Updated:** January 8, 2026
5
5
  **Organization:** CyberSoul Security
6
6
 
7
7
  Welcome to the SoulEyez documentation! This documentation covers architecture, development, user guides, and operational information for the SoulEyez penetration testing platform.
souleyez/main.py CHANGED
@@ -173,7 +173,7 @@ def _check_privileged_tools():
173
173
 
174
174
 
175
175
  @click.group()
176
- @click.version_option(version='2.23.0')
176
+ @click.version_option(version='2.24.0')
177
177
  def cli():
178
178
  """SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
179
179
  from souleyez.log_config import init_logging
@@ -1388,19 +1388,24 @@ def _run_doctor(fix=False, verbose=False):
1388
1388
  path_dirs = os.environ.get('PATH', '').split(':')
1389
1389
  pipx_bin = str(Path.home() / '.local' / 'bin')
1390
1390
  go_bin = str(Path.home() / 'go' / 'bin')
1391
+
1392
+ # Detect shell config file (zsh for Kali, bash for others)
1393
+ shell = os.environ.get('SHELL', '/bin/bash')
1394
+ shell_rc = '~/.zshrc' if 'zsh' in shell else '~/.bashrc'
1395
+
1391
1396
  if pipx_bin in path_dirs:
1392
1397
  if verbose:
1393
1398
  check_pass("PATH includes ~/.local/bin (pipx)")
1394
1399
  else:
1395
1400
  if Path(pipx_bin).exists() and any(Path(pipx_bin).iterdir()):
1396
- check_warn("~/.local/bin not in PATH", "Add to ~/.bashrc: export PATH=\"$HOME/.local/bin:$PATH\"")
1401
+ check_warn("~/.local/bin not in PATH", f"Add to {shell_rc}: export PATH=\"$HOME/.local/bin:$PATH\"")
1397
1402
 
1398
1403
  if go_bin in path_dirs:
1399
1404
  if verbose:
1400
1405
  check_pass("PATH includes ~/go/bin")
1401
1406
  else:
1402
1407
  if Path(go_bin).exists() and any(Path(go_bin).iterdir()):
1403
- check_warn("~/go/bin not in PATH", "Add to ~/.bashrc: export PATH=\"$HOME/go/bin:$PATH\"")
1408
+ check_warn("~/go/bin not in PATH", f"Add to {shell_rc}: export PATH=\"$HOME/go/bin:$PATH\"")
1404
1409
 
1405
1410
  # Check database is writable
1406
1411
  if db_path.exists():
@@ -1430,8 +1435,10 @@ def _run_doctor(fix=False, verbose=False):
1430
1435
  # Section 7: MSF Database (if msfconsole available)
1431
1436
  if shutil.which('msfconsole'):
1432
1437
  click.echo(click.style("Metasploit", bold=True))
1438
+ # Check user config first, then system-wide config (Kali uses system-wide)
1433
1439
  msf_db = Path.home() / '.msf4' / 'database.yml'
1434
- if msf_db.exists():
1440
+ system_msf_db = Path('/usr/share/metasploit-framework/config/database.yml')
1441
+ if msf_db.exists() or system_msf_db.exists():
1435
1442
  check_pass("MSF database configured")
1436
1443
  else:
1437
1444
  check_fail("MSF database not initialized", "msfdb init")
souleyez/ui/tool_setup.py CHANGED
@@ -542,6 +542,9 @@ def run_tool_setup(check_only: bool = False, install_all: bool = False):
542
542
 
543
543
  def _run_post_install_tasks(console, distro: str):
544
544
  """Run tasks that should happen after tool installation or when all tools are present."""
545
+ # Ensure PATH is configured in shell rc files
546
+ _add_paths_to_shell_rc()
547
+
545
548
  # Configure passwordless sudo for privileged scans
546
549
  _configure_sudoers(console)
547
550
 
@@ -721,6 +721,7 @@ def check_msfdb_status() -> Dict[str, any]:
721
721
  - message: str - Human-readable status message
722
722
  """
723
723
  import subprocess
724
+ from pathlib import Path
724
725
 
725
726
  result = {
726
727
  'initialized': False,
@@ -734,6 +735,32 @@ def check_msfdb_status() -> Dict[str, any]:
734
735
  result['message'] = 'msfdb command not found - Metasploit may not be installed'
735
736
  return result
736
737
 
738
+ # Helper to check if PostgreSQL is running
739
+ def check_postgresql_running() -> bool:
740
+ try:
741
+ proc = subprocess.run(
742
+ ['systemctl', 'is-active', 'postgresql'],
743
+ capture_output=True,
744
+ text=True,
745
+ timeout=5
746
+ )
747
+ return proc.returncode == 0 and 'active' in proc.stdout.lower()
748
+ except Exception:
749
+ return False
750
+
751
+ # Helper to check system-wide MSF database config (Kali fallback)
752
+ def check_system_config() -> bool:
753
+ """Check if system-wide database.yml exists with valid PostgreSQL config."""
754
+ config_path = Path('/usr/share/metasploit-framework/config/database.yml')
755
+ if config_path.exists():
756
+ try:
757
+ content = config_path.read_text()
758
+ # Check for PostgreSQL adapter configuration
759
+ return 'adapter: postgresql' in content and 'database: msf' in content
760
+ except Exception:
761
+ return False
762
+ return False
763
+
737
764
  try:
738
765
  # Run msfdb status
739
766
  proc = subprocess.run(
@@ -743,10 +770,23 @@ def check_msfdb_status() -> Dict[str, any]:
743
770
  timeout=10
744
771
  )
745
772
  output = proc.stdout + proc.stderr
746
-
747
- # Parse output for status indicators
748
773
  output_lower = output.lower()
749
774
 
775
+ # Check if msfdb requires root (common on Kali)
776
+ if 'run as root' in output_lower or (proc.returncode != 0 and 'error' in output_lower):
777
+ # Fall back to checking system config file and PostgreSQL status
778
+ result['running'] = check_postgresql_running()
779
+ if check_system_config():
780
+ result['initialized'] = True
781
+ if result['running']:
782
+ result['connected'] = True
783
+ result['message'] = 'Database initialized and running'
784
+ else:
785
+ result['message'] = 'Database initialized but PostgreSQL not running - run: sudo systemctl start postgresql'
786
+ else:
787
+ result['message'] = 'Need sudo to verify - run: sudo msfdb status'
788
+ return result
789
+
750
790
  # Check if database is initialized
751
791
  if 'no database' in output_lower or 'not initialized' in output_lower:
752
792
  result['message'] = 'Database not initialized - run: msfdb init'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: souleyez
3
- Version: 2.23.0
3
+ Version: 2.24.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>
@@ -72,7 +72,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
72
72
 
73
73
  > ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
74
74
 
75
- ## Version: 2.23.0
75
+ ## Version: 2.24.0
76
76
 
77
77
  ### What's Included
78
78
 
@@ -299,4 +299,4 @@ Happy hacking! 🛡️
299
299
 
300
300
  ---
301
301
 
302
- **Version**: 2.23.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
302
+ **Version**: 2.24.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
@@ -1,10 +1,10 @@
1
- souleyez/__init__.py,sha256=Gfo1bPtx3vXPruBuKBhFTBXQMeD59Ul8vKsAH84yQsk,23
1
+ souleyez/__init__.py,sha256=sIT006uMNit4Q9eFyGhgp_bwaM2S573cnnpqwUjTwVs,23
2
2
  souleyez/config.py,sha256=av357I3GYRWAklv8Dto-9-5Db699Wq5znez7zo7241Q,11595
3
3
  souleyez/devtools.py,sha256=rptmUY4a5eVvYjdEc6273MSagL-D9xibPOFgohVqUno,3508
4
4
  souleyez/feature_flags.py,sha256=mo6YAq07lc6sR3lEFKmIwTKxXZ2JPxwa5X97uR_mu50,4642
5
5
  souleyez/history.py,sha256=gzs5I_j-3OigIP6yfmBChdqxaFmyUIxvTpzWUPe_Q6c,2853
6
6
  souleyez/log_config.py,sha256=MMhPAJOqgXDfuE-xm5g0RxAfWndcmbhFHvIEMm1a_Wo,5830
7
- souleyez/main.py,sha256=apVMU33AxgtFm1DF_AzHeM4fDAxtQ8xG1TIzicrEWDI,118990
7
+ souleyez/main.py,sha256=LPbIditsOKFHf8N9tUfNnn0JCWp6G8TrOSzAWsGimDw,119362
8
8
  souleyez/scanner.py,sha256=U3IWHRrJ5aQ32dSHiVAHB60w1R_z0E0QxfM99msYNlw,3124
9
9
  souleyez/security.py,sha256=S84m1QmnKz_6NgH2I6IBIAorMHxRPNYVFSnks5xjihQ,2479
10
10
  souleyez/ui.py,sha256=15pfsqoDPnojAqr5S0TZHJE2ZkSHzkHpNVfVvsRj66A,34301
@@ -52,7 +52,7 @@ souleyez/core/msf_database.py,sha256=xaGt0wMX15CQv3-s2NobLK8niHgrE98qAkmS9zhrLe8
52
52
  souleyez/core/msf_integration.py,sha256=J9EXecxq72q65Itv1lBqjSkhh8Zx6SbZO2VPtlZXuOg,64842
53
53
  souleyez/core/msf_rpc_client.py,sha256=DL-_uJz_6G1pQud8iTg3_SjRJmgl4-W1YWmb0xg6f8Q,15994
54
54
  souleyez/core/msf_rpc_manager.py,sha256=8irWzXdiASVIokGSTf8DV57Uh_DUJ3Q6L-2oR9y8qeI,15572
55
- souleyez/core/msf_sync_manager.py,sha256=iEZ8_CJNdFAaEpp4PecIqrqslSH5oR23qrfJnrPntOg,27354
55
+ souleyez/core/msf_sync_manager.py,sha256=1alAqM2jHiMxbBdPTQL9Vjzbl8XVhrnS2VYhVdfNwUw,27779
56
56
  souleyez/core/network_utils.py,sha256=-4WgUE91RBzyXDFgGTxMa0zsWowJ47cEOAKXNeVa-Wc,4555
57
57
  souleyez/core/parser_handler.py,sha256=cyZtEDctqMdWgubsU0Jg6o4XqBgyfaJ_AeBHQmmv4hM,5564
58
58
  souleyez/core/pending_chains.py,sha256=Dnka7JK7A8gTWCGpTu6qrIgIDIXprkZmwJ0Rm2oWqRE,10972
@@ -102,7 +102,7 @@ souleyez/detection/__init__.py,sha256=QIhvXjFdjrquQ6A0VQ7GZQkK_EXB59t8Dv9PKXhEUe
102
102
  souleyez/detection/attack_signatures.py,sha256=akgWwiIkh6WYnghCuLhRV0y6FS0SQ0caGF8tZUc49oA,6965
103
103
  souleyez/detection/mitre_mappings.py,sha256=xejE80YK-g8kKaeQoo-vBl8P3t8RTTItbfN0NaVZw6s,20558
104
104
  souleyez/detection/validator.py,sha256=-AJ7QSJ3-6jFKLnPG_Rc34IXyF4JPyI82BFUgTA9zw0,15641
105
- souleyez/docs/README.md,sha256=0lxLcTBckFxVigWPoKJ-_PZnqidWk9An7LQKfK2bjrE,7183
105
+ souleyez/docs/README.md,sha256=CTxwJFGPz0ZYlyO0l0ZKmF_cxtZlGZB5jYjfPw3ha4o,7183
106
106
  souleyez/docs/api-reference/cli-commands.md,sha256=lTLFnILN3YRVdqCaag7WgsYXfDGglb1TuPexkxDsVdE,12917
107
107
  souleyez/docs/api-reference/engagement-api.md,sha256=nd-EvQMtiJrobg2bzFEADp853HP1Uhb9dmgok0_-neE,11672
108
108
  souleyez/docs/api-reference/integration-guide.md,sha256=c96uX79ukHyYotLa54wZ20Kx-EUZnrKegTeGkfLD-pw,16285
@@ -355,15 +355,15 @@ souleyez/ui/team_dashboard.py,sha256=ejM_44nbJbEIPxxxdEK7SCPcqQtcuJLjoO-C53qED2Y
355
355
  souleyez/ui/template_selector.py,sha256=qQJkFNnVjYctb-toeYlupP_U1asGrJWYi5-HR89Ab9g,19103
356
356
  souleyez/ui/terminal.py,sha256=Sw9ma1-DZclJE1sENjTZ3Q7r-Ct1NiB3Lpmv-RZW5tE,2372
357
357
  souleyez/ui/timeline_view.py,sha256=Ze8Mev9VE4_ECdNFEJwZK2V42EBguR83uCCdwAbJqmc,11111
358
- souleyez/ui/tool_setup.py,sha256=1PEWz0CpgeLjn0QZergH9Hzsd0qJZNXjV4e3gyzc-bE,32511
358
+ souleyez/ui/tool_setup.py,sha256=pkOUr-1inZlYnvaIc8Kj-Qaxk2KHWR2opJAgI_Er-Wo,32591
359
359
  souleyez/ui/tutorial.py,sha256=GGbBsze0ioL00WBWKEwPKy1ikegP1eusI2REDVMx4gY,14262
360
360
  souleyez/ui/tutorial_state.py,sha256=Thf7_qCj4VKjG7UqgJqa9kjIqiFUU-7Q7kG4v-u2B4A,8123
361
361
  souleyez/ui/wazuh_vulns_view.py,sha256=3vJJEmrjgS2wD6EDB7ZV7WxgytBHTm-1WqNDjp7lVEI,21830
362
362
  souleyez/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
363
- souleyez/utils/tool_checker.py,sha256=98G61Mp62P0wzzQ8QAdbnse3Ld2eKFe84PjrFHnXboY,28955
364
- souleyez-2.23.0.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
365
- souleyez-2.23.0.dist-info/METADATA,sha256=b8F6zhXI0yv8Got_iyRNJ87Eo2IJUXRIOMu6KPRpMSc,10171
366
- souleyez-2.23.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
367
- souleyez-2.23.0.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
368
- souleyez-2.23.0.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
369
- souleyez-2.23.0.dist-info/RECORD,,
363
+ souleyez/utils/tool_checker.py,sha256=kQcXJVY5NiO-orQAUnpHhpQvR5UOBNHJ0PaT0fBxYoQ,30782
364
+ souleyez-2.24.0.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
365
+ souleyez-2.24.0.dist-info/METADATA,sha256=AAMZ0WSeavH4Ijo3hKdL3r5LNX7U4qpePbLHEGCaAjU,10171
366
+ souleyez-2.24.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
367
+ souleyez-2.24.0.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
368
+ souleyez-2.24.0.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
369
+ souleyez-2.24.0.dist-info/RECORD,,