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.
- mcp_proxy_adapter/api/middleware/user_info_middleware.py +40 -21
- mcp_proxy_adapter/core/config_validator.py +17 -0
- mcp_proxy_adapter/core/security_integration.py +35 -18
- mcp_proxy_adapter/version.py +1 -1
- {mcp_proxy_adapter-6.2.34.dist-info → mcp_proxy_adapter-6.2.35.dist-info}/METADATA +1 -1
- {mcp_proxy_adapter-6.2.34.dist-info → mcp_proxy_adapter-6.2.35.dist-info}/RECORD +10 -10
- {mcp_proxy_adapter-6.2.34.dist-info → mcp_proxy_adapter-6.2.35.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-6.2.34.dist-info → mcp_proxy_adapter-6.2.35.dist-info}/entry_points.txt +0 -0
- {mcp_proxy_adapter-6.2.34.dist-info → mcp_proxy_adapter-6.2.35.dist-info}/licenses/LICENSE +0 -0
- {mcp_proxy_adapter-6.2.34.dist-info → mcp_proxy_adapter-6.2.35.dist-info}/top_level.txt +0 -0
@@ -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
|
-
#
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
"
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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
|
-
|
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
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
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(
|
mcp_proxy_adapter/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-proxy-adapter
|
3
|
-
Version: 6.2.
|
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=
|
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=
|
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=
|
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=
|
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.
|
138
|
-
mcp_proxy_adapter-6.2.
|
139
|
-
mcp_proxy_adapter-6.2.
|
140
|
-
mcp_proxy_adapter-6.2.
|
141
|
-
mcp_proxy_adapter-6.2.
|
142
|
-
mcp_proxy_adapter-6.2.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|