aiwaf 0.1.9.1.0__tar.gz → 0.1.9.1.1__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.

Potentially problematic release.


This version of aiwaf might be problematic. Click here for more details.

Files changed (39) hide show
  1. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/PKG-INFO +1 -1
  2. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/__init__.py +1 -1
  3. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/trainer.py +5 -6
  4. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf.egg-info/PKG-INFO +1 -1
  5. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/pyproject.toml +1 -1
  6. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/setup.py +1 -1
  7. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/LICENSE +0 -0
  8. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/README.md +0 -0
  9. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/apps.py +0 -0
  10. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/blacklist_manager.py +0 -0
  11. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/decorators.py +0 -0
  12. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/__init__.py +0 -0
  13. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/__init__.py +0 -0
  14. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/add_exemption.py +0 -0
  15. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/add_ipexemption.py +0 -0
  16. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/aiwaf_diagnose.py +0 -0
  17. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/aiwaf_logging.py +0 -0
  18. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/aiwaf_reset.py +0 -0
  19. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/clear_cache.py +0 -0
  20. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/debug_csv.py +0 -0
  21. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/detect_and_train.py +0 -0
  22. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/diagnose_blocking.py +0 -0
  23. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/regenerate_model.py +0 -0
  24. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/setup_models.py +0 -0
  25. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/test_exemption.py +0 -0
  26. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/management/commands/test_exemption_fix.py +0 -0
  27. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/middleware.py +0 -0
  28. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/middleware_logger.py +0 -0
  29. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/models.py +0 -0
  30. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/resources/model.pkl +0 -0
  31. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/storage.py +0 -0
  32. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/templatetags/__init__.py +0 -0
  33. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/templatetags/aiwaf_tags.py +0 -0
  34. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf/utils.py +0 -0
  35. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf.egg-info/SOURCES.txt +0 -0
  36. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf.egg-info/dependency_links.txt +0 -0
  37. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf.egg-info/requires.txt +0 -0
  38. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/aiwaf.egg-info/top_level.txt +0 -0
  39. {aiwaf-0.1.9.1.0 → aiwaf-0.1.9.1.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiwaf
3
- Version: 0.1.9.1.0
3
+ Version: 0.1.9.1.1
4
4
  Summary: AI-powered Web Application Firewall
5
5
  Home-page: https://github.com/aayushgauba/aiwaf
6
6
  Author: Aayush Gauba
@@ -1,6 +1,6 @@
1
1
  default_app_config = "aiwaf.apps.AiwafConfig"
2
2
 
3
- __version__ = "0.1.9.1.0"
3
+ __version__ = "0.1.9.1.1"
4
4
 
5
5
  # Note: Middleware classes are available from aiwaf.middleware
6
6
  # Import them only when needed to avoid circular imports during Django app loading
@@ -15,6 +15,7 @@ from django.apps import apps
15
15
  from django.db.models import F
16
16
  from .utils import is_exempt_path
17
17
  from .storage import get_blacklist_store, get_exemption_store, get_keyword_store
18
+ from .blacklist_manager import BlacklistManager
18
19
 
19
20
  # ─────────── Configuration ───────────
20
21
  LOG_PATH = getattr(settings, 'AIWAF_ACCESS_LOG', None)
@@ -102,13 +103,12 @@ def _parse(line: str) -> dict | None:
102
103
  def train() -> None:
103
104
  remove_exempt_keywords()
104
105
 
105
- # Remove any IPs in IPExemption from the blacklist using storage system
106
+ # Remove any IPs in IPExemption from the blacklist using BlacklistManager
106
107
  exemption_store = get_exemption_store()
107
- blacklist_store = get_blacklist_store()
108
108
 
109
109
  exempted_ips = [entry['ip_address'] for entry in exemption_store.get_all()]
110
110
  for ip in exempted_ips:
111
- blacklist_store.remove_ip(ip)
111
+ BlacklistManager.unblock(ip)
112
112
 
113
113
  raw_lines = _read_all_logs()
114
114
  if not raw_lines:
@@ -141,8 +141,7 @@ def train() -> None:
141
141
 
142
142
  # Don't block if majority of 404s are on login paths
143
143
  if count > login_404s: # More non-login 404s than login 404s
144
- blacklist_store = get_blacklist_store()
145
- blacklist_store.add_ip(ip, f"Excessive 404s (≥6 non-login, {count}/{total_404s})")
144
+ BlacklistManager.block(ip, f"Excessive 404s (≥6 non-login, {count}/{total_404s})")
146
145
 
147
146
  feature_dicts = []
148
147
  for r in parsed:
@@ -239,7 +238,7 @@ def train() -> None:
239
238
  continue
240
239
 
241
240
  # Block if it shows clear signs of malicious behavior
242
- blacklist_store.add_ip(ip, f"AI anomaly + suspicious patterns (kw:{avg_kw_hits:.1f}, 404s:{max_404s}, burst:{avg_burst:.1f})")
241
+ BlacklistManager.block(ip, f"AI anomaly + suspicious patterns (kw:{avg_kw_hits:.1f}, 404s:{max_404s}, burst:{avg_burst:.1f})")
243
242
  blocked_count += 1
244
243
  print(f" - {ip}: Blocked for suspicious behavior (kw:{avg_kw_hits:.1f}, 404s:{max_404s}, burst:{avg_burst:.1f})")
245
244
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiwaf
3
- Version: 0.1.9.1.0
3
+ Version: 0.1.9.1.1
4
4
  Summary: AI-powered Web Application Firewall
5
5
  Home-page: https://github.com/aayushgauba/aiwaf
6
6
  Author: Aayush Gauba
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aiwaf"
3
- version = "0.1.9.1.0"
3
+ version = "0.1.9.1.1"
4
4
  description = "AI-powered Web Application Firewall"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.8"
@@ -9,7 +9,7 @@ long_description = (HERE / "README.md").read_text(encoding="utf-8")
9
9
 
10
10
  setup(
11
11
  name="aiwaf",
12
- version="0.1.9.1.0",
12
+ version="0.1.9.1.1",
13
13
  description="AI‑driven, self‑learning Web Application Firewall for Django",
14
14
  long_description=long_description,
15
15
  long_description_content_type="text/markdown",
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