detecti-cli 2.0.2__tar.gz → 2.0.3__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.
Files changed (79) hide show
  1. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/PKG-INFO +2 -2
  2. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/cli.py +4 -3
  3. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/database/config_db.py +28 -35
  4. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/pyproject.toml +2 -2
  5. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/.env.example +0 -0
  6. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/.github/workflows/publish.yml +0 -0
  7. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/.gitignore +0 -0
  8. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/README.md +0 -0
  9. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/__init__.py +0 -0
  10. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/__main__.py +0 -0
  11. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/__init__.py +0 -0
  12. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/banner +0 -0
  13. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/config.py +0 -0
  14. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/__init__.py +0 -0
  15. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/database/__init__.py +0 -0
  16. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/database/schema.py +0 -0
  17. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/database/storage.py +0 -0
  18. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/engine.py +0 -0
  19. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/core/models.py +0 -0
  20. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/data/config.sqlite +0 -0
  21. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/data/dbs/.gitkeep +0 -0
  22. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/data/dbs/example.com.sqlite +0 -0
  23. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/__init__.py +0 -0
  24. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/base.py +0 -0
  25. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/censys.py +0 -0
  26. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/crtsh.py +0 -0
  27. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/exploitdb.py +0 -0
  28. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/masscan.py +0 -0
  29. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/nuclei.py +0 -0
  30. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/nvd.py +0 -0
  31. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/reverse_whois.py +0 -0
  32. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/modules/shodan.py +0 -0
  33. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/reporters/__init__.py +0 -0
  34. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/reporters/csv_reporter.py +0 -0
  35. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/reporters/html_reporter.py +0 -0
  36. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/reporters/json_reporter.py +0 -0
  37. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/reporters/markdown_reporter.py +0 -0
  38. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/utils/__init__.py +0 -0
  39. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/utils/http.py +0 -0
  40. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/utils/logger.py +0 -0
  41. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/utils/setup.py +0 -0
  42. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/__init__.py +0 -0
  43. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/api/__init__.py +0 -0
  44. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/api/auth.py +0 -0
  45. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/api/graph_builder.py +0 -0
  46. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/api/routes.py +0 -0
  47. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/process_manager.py +0 -0
  48. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/server.py +0 -0
  49. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/android-chrome-192x192.png +0 -0
  50. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/android-chrome-512x512.png +0 -0
  51. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/apple-touch-icon.png +0 -0
  52. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/css/__init__.py +0 -0
  53. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/css/dashboard.css +0 -0
  54. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/favicon-16x16.png +0 -0
  55. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/favicon-32x32.png +0 -0
  56. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/favicon.ico +0 -0
  57. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/img/DetecTI_Security_Logo.png +0 -0
  58. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/img/detecti-ico.png +0 -0
  59. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/index.html +0 -0
  60. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/__init__.py +0 -0
  61. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/api.js +0 -0
  62. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/cytoscape-cose-bilkent.js +0 -0
  63. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/cytoscape-dagre.js +0 -0
  64. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/cytoscape.min.js +0 -0
  65. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/dagre.min.js +0 -0
  66. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/graph.js +0 -0
  67. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/js/lucide.min.js +0 -0
  68. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/login.html +0 -0
  69. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/detecti/web/static/site.webmanifest +0 -0
  70. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/requirements.txt +0 -0
  71. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/__init__.py +0 -0
  72. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/conftest.py +0 -0
  73. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_engine_cli.py +0 -0
  74. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_http.py +0 -0
  75. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_masscan.py +0 -0
  76. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_models.py +0 -0
  77. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_modules.py +0 -0
  78. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_nuclei.py +0 -0
  79. {detecti_cli-2.0.2 → detecti_cli-2.0.3}/tests/test_reporters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: detecti-cli
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: Modern Attack Surface Management & Threat Intelligence Engine
5
5
  Author-email: "Lucas S. (Ls4ss)" <lucas@lucassouza.io>
6
6
  License: MIT
@@ -17,10 +17,10 @@ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
18
  Classifier: Topic :: Security
19
19
  Requires-Python: >=3.11
20
+ Requires-Dist: bcrypt>=4.0.0
20
21
  Requires-Dist: cve-searchsploit>=0.3.0
21
22
  Requires-Dist: fastapi>=0.104.0
22
23
  Requires-Dist: httpx>=0.27.0
23
- Requires-Dist: passlib[bcrypt]>=1.7.4
24
24
  Requires-Dist: psutil>=5.9.0
25
25
  Requires-Dist: pydantic-settings>=2.2.0
26
26
  Requires-Dist: pydantic>=2.7.0
@@ -31,10 +31,11 @@ def _compat_make_metavar(self, ctx=None):
31
31
 
32
32
  click.Option.make_metavar = _compat_make_metavar
33
33
 
34
+ import importlib.metadata
34
35
  try:
35
- from __init__ import __version__
36
- except (ImportError, ModuleNotFoundError):
37
- __version__ = "2.0.0"
36
+ __version__ = importlib.metadata.version("detecti-cli")
37
+ except importlib.metadata.PackageNotFoundError:
38
+ __version__ = "dev"
38
39
 
39
40
  from detecti.config import settings, DETECTI_HOME
40
41
  from detecti.core.engine import ThreatTrackEngine, DetectIEngine
@@ -1,28 +1,18 @@
1
1
  import logging
2
2
  import sqlite3
3
3
  import hashlib
4
+ import bcrypt
4
5
  from pathlib import Path
5
6
 
6
- # Suppress passlib bcrypt warning
7
- try:
8
- import bcrypt
9
- if not hasattr(bcrypt, "__about__"):
10
- class AboutMock:
11
- __version__ = bcrypt.__version__
12
- bcrypt.__about__ = AboutMock()
13
- except ImportError:
14
- pass
15
-
16
- from passlib.context import CryptContext
17
- from pydantic_settings import BaseSettings
18
-
19
- pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
20
-
21
7
  def get_password_hash(password: str) -> str:
22
- return pwd_context.hash(password)
8
+ salt = bcrypt.gensalt()
9
+ return bcrypt.hashpw(password.encode('utf-8'), salt).decode('utf-8')
23
10
 
24
11
  def verify_password(plain_password: str, hashed_password: str) -> bool:
25
- return pwd_context.verify(plain_password, hashed_password)
12
+ try:
13
+ return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password.encode('utf-8'))
14
+ except Exception:
15
+ return False
26
16
 
27
17
  class ConfigDBManager:
28
18
  def __init__(self, db_path: Path):
@@ -43,31 +33,34 @@ class ConfigDBManager:
43
33
  ''')
44
34
  conn.commit()
45
35
 
46
- def create_user(self, username: str, password_hash: str, role: str = 'admin'):
36
+ def user_exists(self, username: str) -> bool:
37
+ with sqlite3.connect(self.db_path) as conn:
38
+ cursor = conn.execute("SELECT 1 FROM users WHERE username = ?", (username,))
39
+ return cursor.fetchone() is not None
40
+
41
+ def create_user(self, username: str, password_hash: str, role: str = "admin") -> bool:
47
42
  try:
48
43
  with sqlite3.connect(self.db_path) as conn:
49
- conn.execute('''
50
- INSERT INTO users (username, password_hash, role)
51
- VALUES (?, ?, ?)
52
- ''', (username, password_hash, role))
44
+ conn.execute(
45
+ "INSERT INTO users (username, password_hash, role) VALUES (?, ?, ?)",
46
+ (username, password_hash, role)
47
+ )
53
48
  conn.commit()
54
- return True
49
+ return True
55
50
  except sqlite3.IntegrityError:
56
51
  return False
57
52
 
58
- def update_user_password(self, username: str, password_hash: str):
53
+ def update_user_password(self, username: str, new_password_hash: str) -> bool:
59
54
  with sqlite3.connect(self.db_path) as conn:
60
- conn.execute('''
61
- UPDATE users SET password_hash = ? WHERE username = ?
62
- ''', (password_hash, username))
55
+ cursor = conn.execute(
56
+ "UPDATE users SET password_hash = ? WHERE username = ?",
57
+ (new_password_hash, username)
58
+ )
63
59
  conn.commit()
60
+ return cursor.rowcount > 0
64
61
 
65
- def get_user(self, username: str):
62
+ def get_user_hash(self, username: str) -> str:
66
63
  with sqlite3.connect(self.db_path) as conn:
67
- conn.row_factory = sqlite3.Row
68
- cursor = conn.execute("SELECT * FROM users WHERE username = ?", (username,))
69
- return cursor.fetchone()
70
-
71
- def user_exists(self, username: str) -> bool:
72
- return self.get_user(username) is not None
73
-
64
+ cursor = conn.execute("SELECT password_hash FROM users WHERE username = ?", (username,))
65
+ row = cursor.fetchone()
66
+ return row[0] if row else None
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "detecti-cli"
7
- version = "2.0.2"
7
+ version = "2.0.3"
8
8
  description = "Modern Attack Surface Management & Threat Intelligence Engine"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -52,7 +52,7 @@ dependencies = [
52
52
  "fastapi>=0.104.0",
53
53
  "uvicorn[standard]>=0.24.0",
54
54
  "psutil>=5.9.0",
55
- "passlib[bcrypt]>=1.7.4",
55
+ "bcrypt>=4.0.0",
56
56
  "python-jose[cryptography]>=3.3.0",
57
57
  "python-multipart>=0.0.6",
58
58
  ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes