aiwaf 0.1.9.0.8__tar.gz → 0.1.9.1.0__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.0.8 → aiwaf-0.1.9.1.0}/PKG-INFO +1 -1
  2. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/__init__.py +1 -1
  3. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/storage.py +26 -2
  4. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf.egg-info/PKG-INFO +1 -1
  5. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/pyproject.toml +1 -1
  6. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/setup.py +1 -1
  7. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/LICENSE +0 -0
  8. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/README.md +0 -0
  9. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/apps.py +0 -0
  10. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/blacklist_manager.py +0 -0
  11. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/decorators.py +0 -0
  12. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/__init__.py +0 -0
  13. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/__init__.py +0 -0
  14. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/add_exemption.py +0 -0
  15. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/add_ipexemption.py +0 -0
  16. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/aiwaf_diagnose.py +0 -0
  17. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/aiwaf_logging.py +0 -0
  18. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/aiwaf_reset.py +0 -0
  19. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/clear_cache.py +0 -0
  20. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/debug_csv.py +0 -0
  21. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/detect_and_train.py +0 -0
  22. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/diagnose_blocking.py +0 -0
  23. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/regenerate_model.py +0 -0
  24. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/setup_models.py +0 -0
  25. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/test_exemption.py +0 -0
  26. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/management/commands/test_exemption_fix.py +0 -0
  27. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/middleware.py +0 -0
  28. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/middleware_logger.py +0 -0
  29. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/models.py +0 -0
  30. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/resources/model.pkl +0 -0
  31. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/templatetags/__init__.py +0 -0
  32. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/templatetags/aiwaf_tags.py +0 -0
  33. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/trainer.py +0 -0
  34. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf/utils.py +0 -0
  35. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf.egg-info/SOURCES.txt +0 -0
  36. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf.egg-info/dependency_links.txt +0 -0
  37. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf.egg-info/requires.txt +0 -0
  38. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/aiwaf.egg-info/top_level.txt +0 -0
  39. {aiwaf-0.1.9.0.8 → aiwaf-0.1.9.1.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiwaf
3
- Version: 0.1.9.0.8
3
+ Version: 0.1.9.1.0
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.0.8"
3
+ __version__ = "0.1.9.1.0"
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
@@ -111,6 +111,16 @@ class ModelBlacklistStore:
111
111
  except Exception as e:
112
112
  print(f"Error unblocking IP {ip}: {e}")
113
113
 
114
+ @staticmethod
115
+ def remove_ip(ip):
116
+ """Remove IP from blacklist (alias for unblock_ip)"""
117
+ ModelBlacklistStore.unblock_ip(ip)
118
+
119
+ @staticmethod
120
+ def add_ip(ip, reason="Automated block"):
121
+ """Add IP to blacklist (alias for block_ip)"""
122
+ ModelBlacklistStore.block_ip(ip, reason)
123
+
114
124
  @staticmethod
115
125
  def get_all_blocked_ips():
116
126
  """Get all blocked IPs"""
@@ -184,7 +194,7 @@ class ModelExemptionStore:
184
194
 
185
195
  class ModelKeywordStore:
186
196
  @staticmethod
187
- def add_keyword(keyword):
197
+ def add_keyword(keyword, count=1):
188
198
  """Add a keyword to the dynamic keyword list"""
189
199
  _import_models()
190
200
  if DynamicKeyword is None:
@@ -192,11 +202,25 @@ class ModelKeywordStore:
192
202
  try:
193
203
  obj, created = DynamicKeyword.objects.get_or_create(keyword=keyword)
194
204
  if not created:
195
- obj.count += 1
205
+ obj.count += count
206
+ obj.save()
207
+ else:
208
+ obj.count = count
196
209
  obj.save()
197
210
  except Exception as e:
198
211
  print(f"Error adding keyword {keyword}: {e}")
199
212
 
213
+ @staticmethod
214
+ def remove_keyword(keyword):
215
+ """Remove a keyword from the dynamic keyword list"""
216
+ _import_models()
217
+ if DynamicKeyword is None:
218
+ return
219
+ try:
220
+ DynamicKeyword.objects.filter(keyword=keyword).delete()
221
+ except Exception as e:
222
+ print(f"Error removing keyword {keyword}: {e}")
223
+
200
224
  @staticmethod
201
225
  def get_top_keywords(n=10):
202
226
  """Get top N keywords by count"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiwaf
3
- Version: 0.1.9.0.8
3
+ Version: 0.1.9.1.0
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.0.8"
3
+ version = "0.1.9.1.0"
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.0.8",
12
+ version="0.1.9.1.0",
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