mcp-security-framework 0.1.0__py3-none-any.whl → 1.1.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.
Files changed (38) hide show
  1. mcp_security_framework/core/auth_manager.py +12 -2
  2. mcp_security_framework/core/cert_manager.py +247 -16
  3. mcp_security_framework/core/permission_manager.py +4 -0
  4. mcp_security_framework/core/rate_limiter.py +10 -0
  5. mcp_security_framework/core/security_manager.py +2 -0
  6. mcp_security_framework/examples/comprehensive_example.py +884 -0
  7. mcp_security_framework/examples/django_example.py +45 -12
  8. mcp_security_framework/examples/fastapi_example.py +826 -354
  9. mcp_security_framework/examples/flask_example.py +51 -11
  10. mcp_security_framework/examples/gateway_example.py +109 -17
  11. mcp_security_framework/examples/microservice_example.py +112 -16
  12. mcp_security_framework/examples/standalone_example.py +646 -430
  13. mcp_security_framework/examples/test_all_examples.py +556 -0
  14. mcp_security_framework/middleware/auth_middleware.py +1 -1
  15. mcp_security_framework/middleware/fastapi_auth_middleware.py +82 -14
  16. mcp_security_framework/middleware/flask_auth_middleware.py +154 -7
  17. mcp_security_framework/schemas/models.py +1 -0
  18. mcp_security_framework/utils/cert_utils.py +5 -5
  19. {mcp_security_framework-0.1.0.dist-info → mcp_security_framework-1.1.0.dist-info}/METADATA +1 -1
  20. {mcp_security_framework-0.1.0.dist-info → mcp_security_framework-1.1.0.dist-info}/RECORD +38 -32
  21. tests/conftest.py +306 -0
  22. tests/test_cli/test_cert_cli.py +13 -31
  23. tests/test_core/test_cert_manager.py +12 -12
  24. tests/test_examples/test_comprehensive_example.py +560 -0
  25. tests/test_examples/test_fastapi_example.py +214 -116
  26. tests/test_examples/test_flask_example.py +250 -131
  27. tests/test_examples/test_standalone_example.py +44 -99
  28. tests/test_integration/test_auth_flow.py +4 -4
  29. tests/test_integration/test_certificate_flow.py +1 -1
  30. tests/test_integration/test_fastapi_integration.py +39 -45
  31. tests/test_integration/test_flask_integration.py +4 -2
  32. tests/test_integration/test_standalone_integration.py +48 -48
  33. tests/test_middleware/test_fastapi_auth_middleware.py +724 -0
  34. tests/test_middleware/test_flask_auth_middleware.py +638 -0
  35. tests/test_middleware/test_security_middleware.py +9 -3
  36. {mcp_security_framework-0.1.0.dist-info → mcp_security_framework-1.1.0.dist-info}/WHEEL +0 -0
  37. {mcp_security_framework-0.1.0.dist-info → mcp_security_framework-1.1.0.dist-info}/entry_points.txt +0 -0
  38. {mcp_security_framework-0.1.0.dist-info → mcp_security_framework-1.1.0.dist-info}/top_level.txt +0 -0
@@ -21,13 +21,46 @@ import os
21
21
  import json
22
22
  import logging
23
23
  from typing import Dict, List, Any, Optional
24
- from datetime import datetime, timedelta
24
+ from datetime import datetime, timedelta, timezone
25
+
26
+ # Configure Django settings before importing Django modules
27
+ import django
28
+ from django.conf import settings
29
+
30
+ if not settings.configured:
31
+ settings.configure(
32
+ DEBUG=True,
33
+ SECRET_KEY='django-insecure-test-key-for-examples',
34
+ INSTALLED_APPS=[
35
+ 'django.contrib.auth',
36
+ 'django.contrib.contenttypes',
37
+ 'django.contrib.sessions',
38
+ ],
39
+ DATABASES={
40
+ 'default': {
41
+ 'ENGINE': 'django.db.backends.sqlite3',
42
+ 'NAME': ':memory:',
43
+ }
44
+ },
45
+ MIDDLEWARE=[
46
+ 'django.middleware.security.SecurityMiddleware',
47
+ 'django.contrib.sessions.middleware.SessionMiddleware',
48
+ 'django.middleware.common.CommonMiddleware',
49
+ 'django.middleware.csrf.CsrfViewMiddleware',
50
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
51
+ ],
52
+ ROOT_URLCONF=None,
53
+ )
54
+ django.setup()
25
55
 
26
56
  from django.http import HttpRequest, HttpResponse, JsonResponse
27
57
  from django.views.decorators.csrf import csrf_exempt
28
58
  from django.views.decorators.http import require_http_methods
29
- from django.middleware.base import BaseMiddleware
30
- from django.conf import settings
59
+ try:
60
+ from django.middleware.base import BaseMiddleware
61
+ except ImportError:
62
+ # Fallback for Django 5.x
63
+ from django.utils.deprecation import MiddlewareMixin as BaseMiddleware
31
64
  from django.urls import path, include
32
65
  from django.contrib.auth.models import User
33
66
  from django.contrib.auth.decorators import login_required, permission_required
@@ -89,10 +122,10 @@ class DjangoSecurityMiddleware(BaseMiddleware):
89
122
  security_headers=DEFAULT_SECURITY_HEADERS
90
123
  ),
91
124
  ssl=SSLConfig(
92
- enabled=True,
93
- cert_file="certs/server.crt",
94
- key_file="certs/server.key",
95
- ca_cert_file="certs/ca.crt",
125
+ enabled=False, # Disable SSL for example
126
+ cert_file=None,
127
+ key_file=None,
128
+ ca_cert_file=None,
96
129
  verify_mode="CERT_REQUIRED",
97
130
  min_version="TLSv1.2"
98
131
  ),
@@ -113,7 +146,7 @@ class DjangoSecurityMiddleware(BaseMiddleware):
113
146
  "exempt_roles": ["admin"]
114
147
  },
115
148
  permissions={
116
- "enabled": True,
149
+ "enabled": False, # Disable permissions for example
117
150
  "roles_file": "config/roles.json",
118
151
  "default_role": "user",
119
152
  "hierarchy_enabled": True
@@ -376,7 +409,7 @@ class HealthCheckView(View):
376
409
  """Handle GET request."""
377
410
  return JsonResponse({
378
411
  "status": "healthy",
379
- "timestamp": datetime.utcnow().isoformat(),
412
+ "timestamp": datetime.now(timezone.utc).isoformat(),
380
413
  "version": "1.0.0"
381
414
  })
382
415
 
@@ -407,7 +440,7 @@ class UserProfileView(View):
407
440
  "username": user_info.get("username"),
408
441
  "roles": user_info.get("roles", []),
409
442
  "permissions": user_info.get("permissions", []),
410
- "last_login": datetime.utcnow().isoformat()
443
+ "last_login": datetime.now(timezone.utc).isoformat()
411
444
  })
412
445
 
413
446
 
@@ -461,7 +494,7 @@ class DataView(View):
461
494
  "id": "data_123",
462
495
  "created_by": user_info.get("username"),
463
496
  "data": data,
464
- "created_at": datetime.utcnow().isoformat()
497
+ "created_at": datetime.now(timezone.utc).isoformat()
465
498
  })
466
499
 
467
500
 
@@ -535,7 +568,7 @@ class DjangoExample:
535
568
  "auth_enabled": True,
536
569
  "rate_limiting_enabled": True,
537
570
  "permissions_enabled": True,
538
- "timestamp": datetime.utcnow().isoformat()
571
+ "timestamp": datetime.now(timezone.utc).isoformat()
539
572
  }
540
573
 
541
574