souleyez 2.30.0__py3-none-any.whl → 2.31.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.30.0'
1
+ __version__ = '2.31.0'
souleyez/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # SoulEyez Documentation
2
2
 
3
- **Version:** 2.30.0
3
+ **Version:** 2.31.0
4
4
  **Last Updated:** January 9, 2026
5
5
  **Organization:** CyberSoul Security
6
6
 
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.30.0')
176
+ @click.version_option(version='2.31.0')
177
177
  def cli():
178
178
  """SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
179
179
  from souleyez.log_config import init_logging
@@ -31,7 +31,7 @@ class Database:
31
31
  os.makedirs(db_dir, exist_ok=True)
32
32
 
33
33
  conn = sqlite3.connect(self.db_path, timeout=30.0)
34
-
34
+
35
35
  # Set secure permissions (owner read/write only)
36
36
  os.chmod(self.db_path, 0o600)
37
37
  conn.row_factory = sqlite3.Row
@@ -46,7 +46,44 @@ class Database:
46
46
  "foreign_keys": True
47
47
  })
48
48
 
49
+ # Check if this is an existing database (has tables)
50
+ cursor = conn.execute(
51
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='engagements'"
52
+ )
53
+ is_existing_db = cursor.fetchone() is not None
54
+ conn.close()
55
+
56
+ # For EXISTING databases: Run migrations FIRST
57
+ # This ensures new columns exist before schema.sql tries to create indexes on them
58
+ if is_existing_db:
59
+ try:
60
+ from .migrations.migration_manager import MigrationManager
61
+ manager = MigrationManager(self.db_path)
62
+ pending = manager.get_pending_migrations()
63
+ if pending:
64
+ logger.info("Running pending migrations for existing database", extra={
65
+ "pending_count": len(pending)
66
+ })
67
+ manager.migrate()
68
+ logger.info("Migrations completed successfully", extra={
69
+ "count": len(pending)
70
+ })
71
+ except Exception as migration_error:
72
+ logger.error("Failed to run migrations on existing database", extra={
73
+ "error": str(migration_error),
74
+ "error_type": type(migration_error).__name__,
75
+ "traceback": traceback.format_exc()
76
+ })
77
+ raise # Don't continue if migrations fail for existing DB
78
+
79
+ # Reconnect for schema loading
80
+ conn = sqlite3.connect(self.db_path, timeout=30.0)
81
+ conn.row_factory = sqlite3.Row
82
+ conn.execute("PRAGMA foreign_keys = ON")
83
+
49
84
  # Load and execute schema from the same directory as this file
85
+ # For fresh DBs: Creates all tables with current schema
86
+ # For existing DBs: CREATE TABLE IF NOT EXISTS is no-op, but ensures new tables/indexes
50
87
  schema_path = Path(__file__).parent / "schema.sql"
51
88
 
52
89
  if schema_path.exists():
@@ -228,26 +265,28 @@ class Database:
228
265
 
229
266
  conn.commit()
230
267
  conn.close()
231
-
232
- # Run pending migrations after schema.sql loads
233
- try:
234
- from .migrations.migration_manager import MigrationManager
235
- manager = MigrationManager(self.db_path)
236
- pending = manager.get_pending_migrations()
237
- if pending:
238
- logger.info("Running pending migrations for fresh database", extra={
239
- "pending_count": len(pending)
240
- })
241
- manager.migrate()
242
- logger.info("Migrations completed successfully", extra={
243
- "count": len(pending)
268
+
269
+ # For FRESH databases: Run migrations after schema.sql loads
270
+ # (Existing DBs already had migrations run before schema.sql)
271
+ if not is_existing_db:
272
+ try:
273
+ from .migrations.migration_manager import MigrationManager
274
+ manager = MigrationManager(self.db_path)
275
+ pending = manager.get_pending_migrations()
276
+ if pending:
277
+ logger.info("Running pending migrations for fresh database", extra={
278
+ "pending_count": len(pending)
279
+ })
280
+ manager.migrate()
281
+ logger.info("Migrations completed successfully", extra={
282
+ "count": len(pending)
283
+ })
284
+ except Exception as migration_error:
285
+ logger.error("Failed to run migrations", extra={
286
+ "error": str(migration_error),
287
+ "error_type": type(migration_error).__name__,
288
+ "traceback": traceback.format_exc()
244
289
  })
245
- except Exception as migration_error:
246
- logger.error("Failed to run migrations", extra={
247
- "error": str(migration_error),
248
- "error_type": type(migration_error).__name__,
249
- "traceback": traceback.format_exc()
250
- })
251
290
 
252
291
  except Exception as e:
253
292
  logger.error("Database initialization failed", extra={
@@ -29,6 +29,8 @@ from . import (
29
29
  _022_wazuh_indexer_columns,
30
30
  _023_fix_detection_results_fk,
31
31
  _024_wazuh_vulnerabilities,
32
+ _025_multi_siem_support,
33
+ _026_add_engagement_scope,
32
34
  )
33
35
 
34
36
  # Migration registry - maps version to module
@@ -56,6 +58,8 @@ MIGRATIONS_REGISTRY = {
56
58
  '022': _022_wazuh_indexer_columns,
57
59
  '023': _023_fix_detection_results_fk,
58
60
  '024': _024_wazuh_vulnerabilities,
61
+ '025': _025_multi_siem_support,
62
+ '026': _026_add_engagement_scope,
59
63
  }
60
64
 
61
65
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: souleyez
3
- Version: 2.30.0
3
+ Version: 2.31.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.30.0
81
+ ## Version: 2.31.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.30.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
319
+ **Version**: 2.31.0 | **Release Date**: January 2026 | **Maintainer**: CyberSoul Security
@@ -1,10 +1,10 @@
1
- souleyez/__init__.py,sha256=dmyFl_g4vr-DQ_-ZQmbE7uQXiVld6kjtm-s2LviwYVQ,23
1
+ souleyez/__init__.py,sha256=zq0ntjl0x0b8cZ5atHq4qdP41IgcQakOa5M3T83gsbU,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=1mR2u8hjpVd_n5h9ot_CnmmMaxJmAYQgB2hHtvi8GQw,130228
7
+ souleyez/main.py,sha256=atBSCuroBxewPPeq2ph0qRcU1O4nZqM2j3pjR-Hyluc,130228
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
@@ -104,7 +104,7 @@ souleyez/detection/__init__.py,sha256=QIhvXjFdjrquQ6A0VQ7GZQkK_EXB59t8Dv9PKXhEUe
104
104
  souleyez/detection/attack_signatures.py,sha256=akgWwiIkh6WYnghCuLhRV0y6FS0SQ0caGF8tZUc49oA,6965
105
105
  souleyez/detection/mitre_mappings.py,sha256=xejE80YK-g8kKaeQoo-vBl8P3t8RTTItbfN0NaVZw6s,20558
106
106
  souleyez/detection/validator.py,sha256=-AJ7QSJ3-6jFKLnPG_Rc34IXyF4JPyI82BFUgTA9zw0,15641
107
- souleyez/docs/README.md,sha256=b6c6iImCM09oAp_iKBUue2t531fMsxXC7zNZ9F9oBBI,7183
107
+ souleyez/docs/README.md,sha256=3jeh30cw-juNfg74y8-fPun3tGkVtqo2wYDVPWIzYI8,7183
108
108
  souleyez/docs/api-reference/cli-commands.md,sha256=lTLFnILN3YRVdqCaag7WgsYXfDGglb1TuPexkxDsVdE,12917
109
109
  souleyez/docs/api-reference/engagement-api.md,sha256=nd-EvQMtiJrobg2bzFEADp853HP1Uhb9dmgok0_-neE,11672
110
110
  souleyez/docs/api-reference/integration-guide.md,sha256=c96uX79ukHyYotLa54wZ20Kx-EUZnrKegTeGkfLD-pw,16285
@@ -275,7 +275,7 @@ souleyez/security/validation.py,sha256=LDPqa0o0YOB9OH8puMGjUBTNP4y1eLg7Egx37UlXC
275
275
  souleyez/storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
276
  souleyez/storage/credentials.py,sha256=0o5-RtxiqGxTh_34bI7WPeaOQbQ-W7ZA4IaeW78WZXE,23715
277
277
  souleyez/storage/crypto.py,sha256=_2IESeLY1OFRbayGRZb2REJKHCXLXLEvW8k_LIekU9M,21713
278
- souleyez/storage/database.py,sha256=unv-GJ95wYQCY2BsZ7yWFit630meVXf5NC9IP2Ggb9Q,15053
278
+ souleyez/storage/database.py,sha256=gJYqiwKTOw39mayeAkU1BSml0crmX3wa_jxX7Wn6bAA,17137
279
279
  souleyez/storage/db.py,sha256=nKW1svm1JdeLuO73MgIUsFDT9X6LXBW81LHF7-9z6tw,6830
280
280
  souleyez/storage/deliverable_evidence.py,sha256=XRagZV6Ol3SySZjk9joc8elvaqBwvi1sM3DbF4hYMaI,11488
281
281
  souleyez/storage/deliverable_exporter.py,sha256=2c7CHiuCo40Z9WRfzjujSkdZCjKSJmk_BzxsJPswELM,16320
@@ -325,7 +325,7 @@ souleyez/storage/migrations/_023_fix_detection_results_fk.py,sha256=U_mAbo9G7JJ6
325
325
  souleyez/storage/migrations/_024_wazuh_vulnerabilities.py,sha256=PhEGCDQYTxTFFDUSnbQBAxLTzWBq3UVsOEv3ibTAndI,3579
326
326
  souleyez/storage/migrations/_025_multi_siem_support.py,sha256=7Fz8D-_Q8nnFBlbafMN8O5q9m0_Rr1GfsvVfBQlj3vg,1086
327
327
  souleyez/storage/migrations/_026_add_engagement_scope.py,sha256=95_6an4jfYecfNVTRMrBfHre6Rzcnj9Xm8f0DqR_9OY,3562
328
- souleyez/storage/migrations/__init__.py,sha256=Q3yZcKIoqoOx9yyZZmERE-Mxa69BH7FUsdQ3V7Xx4N4,2011
328
+ souleyez/storage/migrations/__init__.py,sha256=fo_i986wpVfj3x9wpy3LMvbDzYLaO5YrwnbdozR4vwg,2145
329
329
  souleyez/storage/migrations/migration_manager.py,sha256=KegAH1HIP6kzdl3WlW1wbdt2LM4Cgu1CmaExFWZcGjc,7438
330
330
  souleyez/testing/__init__.py,sha256=Kgu3r9X80sggabbkSEmM9qZyino29QYNzb9tfY05fak,66
331
331
  souleyez/testing/credential_tester.py,sha256=wRp0hi32f44nO-qm5Yr-mmly-xg1LlZxY2NKpjqOr-A,15004
@@ -368,9 +368,9 @@ souleyez/ui/tutorial_state.py,sha256=Thf7_qCj4VKjG7UqgJqa9kjIqiFUU-7Q7kG4v-u2B4A
368
368
  souleyez/ui/wazuh_vulns_view.py,sha256=3vJJEmrjgS2wD6EDB7ZV7WxgytBHTm-1WqNDjp7lVEI,21830
369
369
  souleyez/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
370
370
  souleyez/utils/tool_checker.py,sha256=kQcXJVY5NiO-orQAUnpHhpQvR5UOBNHJ0PaT0fBxYoQ,30782
371
- souleyez-2.30.0.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
372
- souleyez-2.30.0.dist-info/METADATA,sha256=zZG-nZBML6drgQy1P5LoMZf6cvQe-IzRYge4q9oefJ4,11345
373
- souleyez-2.30.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
374
- souleyez-2.30.0.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
375
- souleyez-2.30.0.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
376
- souleyez-2.30.0.dist-info/RECORD,,
371
+ souleyez-2.31.0.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
372
+ souleyez-2.31.0.dist-info/METADATA,sha256=rOm0p3BiHE7aZbq6T-37YbMHCPReDSqJ7GuyHMFVBBo,11345
373
+ souleyez-2.31.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
374
+ souleyez-2.31.0.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
375
+ souleyez-2.31.0.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
376
+ souleyez-2.31.0.dist-info/RECORD,,