mcp-proxy-adapter 6.2.34__py3-none-any.whl → 6.2.35__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.
@@ -57,6 +57,9 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
57
57
  auth_config = security_config.get("auth", {})
58
58
  permissions_config = security_config.get("permissions", {})
59
59
 
60
+ # Check if permissions are enabled
61
+ permissions_enabled = permissions_config.get("enabled", False)
62
+
60
63
  # Create AuthConfig for mcp_security_framework
61
64
  mcp_auth_config = AuthConfig(
62
65
  enabled=True,
@@ -64,27 +67,43 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
64
67
  api_keys=auth_config.get("api_keys", {})
65
68
  )
66
69
 
67
- # Create PermissionConfig for mcp_security_framework
68
- mcp_permission_config = PermissionConfig(
69
- roles_file=permissions_config.get("roles_file"),
70
- default_role=permissions_config.get("default_role", "guest"),
71
- admin_role=permissions_config.get("admin_role", "admin"),
72
- role_hierarchy=permissions_config.get("role_hierarchy", {}),
73
- permission_cache_enabled=permissions_config.get(
74
- "permission_cache_enabled", True
75
- ),
76
- permission_cache_ttl=permissions_config.get(
77
- "permission_cache_ttl", 300
78
- ),
79
- wildcard_permissions=permissions_config.get(
80
- "wildcard_permissions", False
81
- ),
82
- strict_mode=permissions_config.get("strict_mode", True),
83
- roles=permissions_config.get("roles", {})
84
- )
85
-
86
- # Initialize PermissionManager first
87
- self.permission_manager = PermissionManager(mcp_permission_config)
70
+ # Initialize PermissionManager only if permissions are enabled
71
+ if permissions_enabled:
72
+ # Create PermissionConfig for mcp_security_framework
73
+ mcp_permission_config = PermissionConfig(
74
+ roles_file=permissions_config.get("roles_file"),
75
+ default_role=permissions_config.get("default_role", "guest"),
76
+ admin_role=permissions_config.get("admin_role", "admin"),
77
+ role_hierarchy=permissions_config.get("role_hierarchy", {}),
78
+ permission_cache_enabled=permissions_config.get(
79
+ "permission_cache_enabled", True
80
+ ),
81
+ permission_cache_ttl=permissions_config.get(
82
+ "permission_cache_ttl", 300
83
+ ),
84
+ wildcard_permissions=permissions_config.get(
85
+ "wildcard_permissions", False
86
+ ),
87
+ strict_mode=permissions_config.get("strict_mode", True),
88
+ roles=permissions_config.get("roles", {})
89
+ )
90
+
91
+ # Initialize PermissionManager first
92
+ self.permission_manager = PermissionManager(mcp_permission_config)
93
+ else:
94
+ # Create a minimal PermissionManager when permissions are disabled
95
+ mcp_permission_config = PermissionConfig(
96
+ roles_file=None,
97
+ default_role="guest",
98
+ admin_role="admin",
99
+ role_hierarchy={},
100
+ permission_cache_enabled=False,
101
+ permission_cache_ttl=300,
102
+ wildcard_permissions=False,
103
+ strict_mode=False,
104
+ roles={}
105
+ )
106
+ self.permission_manager = PermissionManager(mcp_permission_config)
88
107
 
89
108
  # Initialize AuthManager with permission_manager
90
109
  self.auth_manager = AuthManager(
@@ -108,6 +108,23 @@ class ConfigValidator:
108
108
  security_enabled = security_config.get("enabled", True)
109
109
  auth_enabled = self.config.get("auth_enabled", False)
110
110
 
111
+ # Validate permissions configuration
112
+ permissions_config = security_config.get("permissions", {})
113
+ permissions_enabled = permissions_config.get("enabled", False)
114
+
115
+ if permissions_enabled:
116
+ # Permissions require authentication to identify users
117
+ auth_config = security_config.get("auth", {})
118
+ if not auth_config.get("enabled", False):
119
+ self.errors.append("Permissions are enabled but authentication is disabled. Permissions require authentication to identify users.")
120
+ return False
121
+
122
+ # Check if there are any authentication methods available
123
+ auth_methods = auth_config.get("methods", [])
124
+ if not auth_methods:
125
+ self.errors.append("Permissions are enabled but no authentication methods are configured. At least one authentication method is required.")
126
+ return False
127
+
111
128
  if security_enabled and auth_enabled:
112
129
  # Validate auth configuration
113
130
  auth_config = security_config.get("auth", {})
@@ -105,25 +105,42 @@ class SecurityIntegration:
105
105
 
106
106
  # Create permission config - handle null values properly
107
107
  permissions_section = security_section.get("permissions", {})
108
- roles_file = permissions_section.get("roles_file")
109
-
110
- # If roles_file is None or empty string, don't pass it to avoid framework errors
111
- if roles_file is None or roles_file == "":
112
- logger.warning("roles_file is None or empty, permissions will use default configuration")
113
- roles_file = None
108
+ permissions_enabled = permissions_section.get("enabled", True)
114
109
 
115
- permission_config = PermissionConfig(
116
- enabled=permissions_section.get("enabled", True),
117
- roles_file=roles_file,
118
- default_role=permissions_section.get("default_role", "guest"),
119
- admin_role=permissions_section.get("admin_role", "admin"),
120
- role_hierarchy=permissions_section.get("role_hierarchy", {}),
121
- permission_cache_enabled=permissions_section.get("permission_cache_enabled", True),
122
- permission_cache_ttl=permissions_section.get("permission_cache_ttl", 300),
123
- wildcard_permissions=permissions_section.get("wildcard_permissions", False),
124
- strict_mode=permissions_section.get("strict_mode", True),
125
- roles=permissions_section.get("roles")
126
- )
110
+ if permissions_enabled:
111
+ roles_file = permissions_section.get("roles_file")
112
+
113
+ # If roles_file is None or empty string, don't pass it to avoid framework errors
114
+ if roles_file is None or roles_file == "":
115
+ logger.warning("roles_file is None or empty, permissions will use default configuration")
116
+ roles_file = None
117
+
118
+ permission_config = PermissionConfig(
119
+ enabled=True,
120
+ roles_file=roles_file,
121
+ default_role=permissions_section.get("default_role", "guest"),
122
+ admin_role=permissions_section.get("admin_role", "admin"),
123
+ role_hierarchy=permissions_section.get("role_hierarchy", {}),
124
+ permission_cache_enabled=permissions_section.get("permission_cache_enabled", True),
125
+ permission_cache_ttl=permissions_section.get("permission_cache_ttl", 300),
126
+ wildcard_permissions=permissions_section.get("wildcard_permissions", False),
127
+ strict_mode=permissions_section.get("strict_mode", True),
128
+ roles=permissions_section.get("roles")
129
+ )
130
+ else:
131
+ # Create minimal permission config when permissions are disabled
132
+ permission_config = PermissionConfig(
133
+ enabled=False,
134
+ roles_file=None,
135
+ default_role="guest",
136
+ admin_role="admin",
137
+ role_hierarchy={},
138
+ permission_cache_enabled=False,
139
+ permission_cache_ttl=300,
140
+ wildcard_permissions=False,
141
+ strict_mode=False,
142
+ roles={}
143
+ )
127
144
 
128
145
  # Create rate limit config
129
146
  rate_limit_config = RateLimitConfig(
@@ -2,5 +2,5 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.2.34"
5
+ __version__ = "6.2.35"
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.2.34
3
+ Version: 6.2.35
4
4
  Summary: Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration
5
5
  Home-page: https://github.com/maverikod/mcp-proxy-adapter
6
6
  Author: Vasiliy Zdanovskiy
@@ -4,7 +4,7 @@ mcp_proxy_adapter/config.py,sha256=QIOV57A_hwDH2z_BVEBJKDsPpa3IUKlqhRAij4bpQik,2
4
4
  mcp_proxy_adapter/custom_openapi.py,sha256=jYUrCy8C1mShh3sjKj-JkzSMLAvxDLTvtzSJFj5HUNg,15023
5
5
  mcp_proxy_adapter/main.py,sha256=9qt_pEQdq8roUc73CumfDn6jDWP_NyfdE1lCGEynv5I,2841
6
6
  mcp_proxy_adapter/openapi.py,sha256=36vOEbJjGnVZR6hUhl6mHCD29HYOEFKo2bL0JdGSm-4,13952
7
- mcp_proxy_adapter/version.py,sha256=8Rv-tnRMFu7W1xVGrsKl9PqMpFzjts8hLs89BkGcJHw,76
7
+ mcp_proxy_adapter/version.py,sha256=Ejo8js-6RkuGhTLDydUfW-ZiZvYdAHVlTD1lhcEpGmE,76
8
8
  mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  mcp_proxy_adapter/api/app.py,sha256=khl4kaI4mJ6dNbfAK7hR97Ek-eWC9NBeuXHr6GVbLoU,28911
10
10
  mcp_proxy_adapter/api/handlers.py,sha256=DcZT7MVBV33q-0EJ0iFqxE0VgBkFt6d_SqoRkntwyvc,8477
@@ -21,7 +21,7 @@ mcp_proxy_adapter/api/middleware/performance.py,sha256=dHBxTF43LEGXMKHMH3A8ybKmw
21
21
  mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=iVjJrTEfKy15ZchQUo-Mu0hBg9kEP6vgzee_3PtWd6M,8115
22
22
  mcp_proxy_adapter/api/middleware/transport_middleware.py,sha256=Esy2gGKpEV5RoUTilr1YKKTDc5jh5RxsomD0VXyR2pE,4396
23
23
  mcp_proxy_adapter/api/middleware/unified_security.py,sha256=fDWUeIuHjYUngVnB8gVR9ES3IQSaY9VP2YPZGXATJlU,7617
24
- mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=gJX5WUMa-ByWpbvbFUftymH3BuQNaj1h1lGDqq9VU6g,8134
24
+ mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=YGtt_1Q4GkvdFopMC2wTfC3OZZXDiOU4v5BxlD1Ge9w,9168
25
25
  mcp_proxy_adapter/commands/__init__.py,sha256=r791wg4FKhWSi5rqA3vekDcGf5kr18pwF1woX-dnZKo,1525
26
26
  mcp_proxy_adapter/commands/auth_validation_command.py,sha256=z612WJDVgZwaCrxdQhATwRc5i3qxH37MPuIV6SuZPn8,15083
27
27
  mcp_proxy_adapter/commands/base.py,sha256=tunyrmt-LYJMQZslAZQor3KZvOrn1IYNpL5uOAnSdxc,15791
@@ -61,7 +61,7 @@ mcp_proxy_adapter/core/client.py,sha256=AeNjMyaTnnR0g6Sw_c28X_le8o5SbEi-_PaRtVtt
61
61
  mcp_proxy_adapter/core/client_manager.py,sha256=sKEhapMpogqb54WIWEpz2bMjrX3wvYooX-a844IfCTU,9164
62
62
  mcp_proxy_adapter/core/client_security.py,sha256=8isHpvv-7H85QzI8K3Pfyr_KdvpE2xYyIT4wqWrttNU,13575
63
63
  mcp_proxy_adapter/core/config_converter.py,sha256=FAA2zx-yRgqMgzg73o9Aq5CEEfodNCeaA8Yluto4wAs,16985
64
- mcp_proxy_adapter/core/config_validator.py,sha256=qDVmkRatuDeWylIPLjMq02Vpzff6DDTE_CstpzqGi7o,7773
64
+ mcp_proxy_adapter/core/config_validator.py,sha256=fRN0D727FYlka-Yn0x3-tABJFrXjXorWR1fAD97e02c,8722
65
65
  mcp_proxy_adapter/core/errors.py,sha256=s34OxiIR4NCJu_pYSigKXqrIvRjUUK2OWw0X4dpDjIA,5151
66
66
  mcp_proxy_adapter/core/logging.py,sha256=jQlFz52Xwapef6UD4p0acmaGFumD9XuexwW4frDN_ZM,9626
67
67
  mcp_proxy_adapter/core/mtls_asgi.py,sha256=X2lAj3wk3L85amRCp_-10sqvZa5wJf_diXhwrrQReSo,5311
@@ -72,7 +72,7 @@ mcp_proxy_adapter/core/proxy_registration.py,sha256=Mmh-hWVJKkADLP8361Nx_SGFp9JR
72
72
  mcp_proxy_adapter/core/role_utils.py,sha256=wMoTVz3gF5fM7jozNMwsEwPkp1tui26M-t_KH1Oz8gs,12880
73
73
  mcp_proxy_adapter/core/security_adapter.py,sha256=wZ3OH1WzhUdpN8N8CrGJSFFVNi474DqdazIqQ1T8PN4,13343
74
74
  mcp_proxy_adapter/core/security_factory.py,sha256=4r7qvBq30XfosGD_b1ZHyNVLN8rOQ3NAKuaCOCEK8jA,8262
75
- mcp_proxy_adapter/core/security_integration.py,sha256=6oJKVCL1CRnk3sTWX-PBzDjv737oe4QL-9r3l89kRkc,13715
75
+ mcp_proxy_adapter/core/security_integration.py,sha256=axeNotm4DZBZhbVXIfHHV0TsX4KVhvf1shbIAHEEkZI,14385
76
76
  mcp_proxy_adapter/core/server_adapter.py,sha256=8dhUlLxuYjaoNgMHieFCFgDRjxskP--Y5uoAhbN6RLw,9823
77
77
  mcp_proxy_adapter/core/server_engine.py,sha256=SFENSDrVMlBD--HgKSRVklhrtLKSRSZhs_3UHxFCGbg,9540
78
78
  mcp_proxy_adapter/core/settings.py,sha256=ZfUnmqD1tjAuaQo2VAF8evC1oHUit7gTu4WkTF0IMYI,10628
@@ -134,9 +134,9 @@ mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py,sha256=J0
134
134
  mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI6Cf3fyIvOT9dc,2881
135
135
  mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
136
136
  mcp_proxy_adapter/utils/config_generator.py,sha256=2dxwBh9k_nUw9kgytZso5TNOQpBqd3c-RpKSTLoHlLE,46465
137
- mcp_proxy_adapter-6.2.34.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
138
- mcp_proxy_adapter-6.2.34.dist-info/METADATA,sha256=l0uENuXxZKqEOdMXaaMBnEWWegRTQDO9CJYiNGWGIhA,22348
139
- mcp_proxy_adapter-6.2.34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
- mcp_proxy_adapter-6.2.34.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
141
- mcp_proxy_adapter-6.2.34.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
142
- mcp_proxy_adapter-6.2.34.dist-info/RECORD,,
137
+ mcp_proxy_adapter-6.2.35.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
138
+ mcp_proxy_adapter-6.2.35.dist-info/METADATA,sha256=Zb9ZBBx8q337nWqYhTiRrgjAvTxpKVWdpY5ozjwtI5o,22348
139
+ mcp_proxy_adapter-6.2.35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
+ mcp_proxy_adapter-6.2.35.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
141
+ mcp_proxy_adapter-6.2.35.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
142
+ mcp_proxy_adapter-6.2.35.dist-info/RECORD,,