mcp-security-framework 1.2.1__tar.gz → 1.2.2__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 (90) hide show
  1. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/PKG-INFO +1 -1
  2. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/__init__.py +1 -1
  3. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/schemas/config.py +14 -4
  4. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework.egg-info/PKG-INFO +1 -1
  5. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/pyproject.toml +1 -1
  6. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_schemas/test_config.py +50 -0
  7. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/README.md +0 -0
  8. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/cli/__init__.py +0 -0
  9. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/cli/cert_cli.py +0 -0
  10. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/cli/security_cli.py +0 -0
  11. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/constants.py +0 -0
  12. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/__init__.py +0 -0
  13. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/auth_manager.py +0 -0
  14. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/cert_manager.py +0 -0
  15. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/permission_manager.py +0 -0
  16. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/rate_limiter.py +0 -0
  17. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/security_manager.py +0 -0
  18. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/core/ssl_manager.py +0 -0
  19. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/__init__.py +0 -0
  20. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/comprehensive_example.py +0 -0
  21. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/django_example.py +0 -0
  22. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/fastapi_example.py +0 -0
  23. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/flask_example.py +0 -0
  24. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/gateway_example.py +0 -0
  25. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/microservice_example.py +0 -0
  26. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/standalone_example.py +0 -0
  27. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/examples/test_all_examples.py +0 -0
  28. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/__init__.py +0 -0
  29. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/auth_middleware.py +0 -0
  30. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/fastapi_auth_middleware.py +0 -0
  31. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/fastapi_middleware.py +0 -0
  32. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/flask_auth_middleware.py +0 -0
  33. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/flask_middleware.py +0 -0
  34. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/mtls_middleware.py +0 -0
  35. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/rate_limit_middleware.py +0 -0
  36. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/middleware/security_middleware.py +0 -0
  37. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/schemas/__init__.py +0 -0
  38. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/schemas/models.py +0 -0
  39. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/schemas/responses.py +0 -0
  40. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/tests/__init__.py +0 -0
  41. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/utils/__init__.py +0 -0
  42. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/utils/cert_utils.py +0 -0
  43. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/utils/crypto_utils.py +0 -0
  44. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/utils/datetime_compat.py +0 -0
  45. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework/utils/validation_utils.py +0 -0
  46. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework.egg-info/SOURCES.txt +0 -0
  47. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework.egg-info/dependency_links.txt +0 -0
  48. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework.egg-info/entry_points.txt +0 -0
  49. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework.egg-info/requires.txt +0 -0
  50. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/mcp_security_framework.egg-info/top_level.txt +0 -0
  51. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/setup.cfg +0 -0
  52. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/__init__.py +0 -0
  53. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/conftest.py +0 -0
  54. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_cli/__init__.py +0 -0
  55. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_cli/test_cert_cli.py +0 -0
  56. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_cli/test_security_cli.py +0 -0
  57. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/__init__.py +0 -0
  58. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/test_auth_manager.py +0 -0
  59. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/test_cert_manager.py +0 -0
  60. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/test_permission_manager.py +0 -0
  61. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/test_rate_limiter.py +0 -0
  62. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/test_security_manager.py +0 -0
  63. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_core/test_ssl_manager.py +0 -0
  64. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_examples/__init__.py +0 -0
  65. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_examples/test_comprehensive_example.py +0 -0
  66. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_examples/test_fastapi_example.py +0 -0
  67. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_examples/test_flask_example.py +0 -0
  68. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_examples/test_standalone_example.py +0 -0
  69. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_integration/__init__.py +0 -0
  70. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_integration/test_auth_flow.py +0 -0
  71. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_integration/test_certificate_flow.py +0 -0
  72. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_integration/test_fastapi_integration.py +0 -0
  73. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_integration/test_flask_integration.py +0 -0
  74. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_integration/test_standalone_integration.py +0 -0
  75. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_middleware/__init__.py +0 -0
  76. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_middleware/test_fastapi_auth_middleware.py +0 -0
  77. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_middleware/test_fastapi_middleware.py +0 -0
  78. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_middleware/test_flask_auth_middleware.py +0 -0
  79. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_middleware/test_flask_middleware.py +0 -0
  80. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_middleware/test_security_middleware.py +0 -0
  81. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_schemas/__init__.py +0 -0
  82. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_schemas/test_models.py +0 -0
  83. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_schemas/test_responses.py +0 -0
  84. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_schemas/test_serialization.py +0 -0
  85. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_utils/__init__.py +0 -0
  86. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_utils/test_cert_utils.py +0 -0
  87. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_utils/test_crypto_utils.py +0 -0
  88. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_utils/test_datetime_compat.py +0 -0
  89. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_utils/test_unitid_compat.py +0 -0
  90. {mcp_security_framework-1.2.1 → mcp_security_framework-1.2.2}/tests/test_utils/test_validation_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-security-framework
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Universal security framework for microservices with SSL/TLS, authentication, authorization, and rate limiting. Requires cryptography>=42.0.0 for certificate operations.
5
5
  Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
6
  Maintainer-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
@@ -71,7 +71,7 @@ from mcp_security_framework.schemas.responses import (
71
71
  )
72
72
 
73
73
  # Version information
74
- __version__ = "1.2.1"
74
+ __version__ = "1.2.2"
75
75
  __author__ = "Vasiliy Zdanovskiy"
76
76
  __email__ = "vasilyvz@gmail.com"
77
77
  __license__ = "MIT"
@@ -247,8 +247,12 @@ class CertificateConfig(BaseModel):
247
247
  This model defines certificate management configuration settings
248
248
  including CA settings, certificate storage, and validation options.
249
249
 
250
+ BUGFIX: Added ca_creation_mode to allow CA certificate creation
251
+ without requiring existing CA paths.
252
+
250
253
  Attributes:
251
254
  enabled: Whether certificate management is enabled
255
+ ca_creation_mode: Whether we are in CA creation mode (bypasses CA path validation)
252
256
  ca_cert_path: Path to CA certificate
253
257
  ca_key_path: Path to CA private key
254
258
  cert_storage_path: Path for certificate storage
@@ -266,6 +270,9 @@ class CertificateConfig(BaseModel):
266
270
  enabled: bool = Field(
267
271
  default=False, description="Whether certificate management is enabled"
268
272
  )
273
+ ca_creation_mode: bool = Field(
274
+ default=False, description="Whether we are in CA creation mode (bypasses CA path validation)"
275
+ )
269
276
  ca_cert_path: Optional[str] = Field(
270
277
  default=None, description="Path to CA certificate"
271
278
  )
@@ -317,10 +324,13 @@ class CertificateConfig(BaseModel):
317
324
  def validate_certificate_configuration(self):
318
325
  """Validate certificate configuration consistency."""
319
326
  if self.enabled:
320
- if not self.ca_cert_path or not self.ca_key_path:
321
- raise ValueError(
322
- "Certificate management enabled but CA certificate and key paths are required"
323
- )
327
+ # BUGFIX: Only require CA paths if not in CA creation mode
328
+ if not self.ca_creation_mode:
329
+ if not self.ca_cert_path or not self.ca_key_path:
330
+ raise ValueError(
331
+ "Certificate management enabled but CA certificate and key paths are required. "
332
+ "Set ca_creation_mode=True if you are creating a CA certificate."
333
+ )
324
334
 
325
335
  if self.crl_enabled and not self.crl_path:
326
336
  raise ValueError("CRL enabled but CRL path is required")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-security-framework
3
- Version: 1.2.1
3
+ Version: 1.2.2
4
4
  Summary: Universal security framework for microservices with SSL/TLS, authentication, authorization, and rate limiting. Requires cryptography>=42.0.0 for certificate operations.
5
5
  Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
6
  Maintainer-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcp-security-framework"
7
- version = "1.2.1"
7
+ version = "1.2.2"
8
8
  description = "Universal security framework for microservices with SSL/TLS, authentication, authorization, and rate limiting. Requires cryptography>=42.0.0 for certificate operations."
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -195,6 +195,7 @@ class TestCertificateConfig:
195
195
  config = CertificateConfig()
196
196
 
197
197
  assert config.enabled is False
198
+ assert config.ca_creation_mode is False
198
199
  assert config.ca_cert_path is None
199
200
  assert config.ca_key_path is None
200
201
  assert config.cert_storage_path == "./certs"
@@ -217,6 +218,7 @@ class TestCertificateConfig:
217
218
  "Certificate management enabled but CA certificate and key paths are required"
218
219
  in str(exc_info.value)
219
220
  )
221
+ assert "ca_creation_mode=True" in str(exc_info.value)
220
222
 
221
223
  def test_certificate_config_crl_enabled_without_path(self):
222
224
  """Test CertificateConfig validation when CRL enabled without path."""
@@ -272,6 +274,54 @@ class TestCertificateConfig:
272
274
  with pytest.raises(ValidationError):
273
275
  CertificateConfig(default_validity_days=3651)
274
276
 
277
+ def test_certificate_config_ca_creation_mode(self):
278
+ """Test CertificateConfig with CA creation mode enabled."""
279
+ config = CertificateConfig(
280
+ enabled=True,
281
+ ca_creation_mode=True,
282
+ cert_storage_path="./certs",
283
+ key_storage_path="./keys"
284
+ )
285
+
286
+ assert config.enabled is True
287
+ assert config.ca_creation_mode is True
288
+ assert config.ca_cert_path is None
289
+ assert config.ca_key_path is None
290
+ assert config.cert_storage_path == "./certs"
291
+ assert config.key_storage_path == "./keys"
292
+
293
+ def test_certificate_config_ca_creation_mode_with_ca_paths(self):
294
+ """Test CertificateConfig with CA creation mode and CA paths (should work)."""
295
+ config = CertificateConfig(
296
+ enabled=True,
297
+ ca_creation_mode=True,
298
+ ca_cert_path="./certs/ca.crt",
299
+ ca_key_path="./keys/ca.key",
300
+ cert_storage_path="./certs",
301
+ key_storage_path="./keys"
302
+ )
303
+
304
+ assert config.enabled is True
305
+ assert config.ca_creation_mode is True
306
+ assert config.ca_cert_path == "./certs/ca.crt"
307
+ assert config.ca_key_path == "./keys/ca.key"
308
+
309
+ def test_certificate_config_normal_mode_with_ca_paths(self):
310
+ """Test CertificateConfig in normal mode with CA paths."""
311
+ config = CertificateConfig(
312
+ enabled=True,
313
+ ca_creation_mode=False,
314
+ ca_cert_path="./certs/ca.crt",
315
+ ca_key_path="./keys/ca.key",
316
+ cert_storage_path="./certs",
317
+ key_storage_path="./keys"
318
+ )
319
+
320
+ assert config.enabled is True
321
+ assert config.ca_creation_mode is False
322
+ assert config.ca_cert_path == "./certs/ca.crt"
323
+ assert config.ca_key_path == "./keys/ca.key"
324
+
275
325
 
276
326
  class TestPermissionConfig:
277
327
  """Test suite for PermissionConfig class."""