mdb-engine 0.5.0__tar.gz → 0.5.1__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.
- {mdb_engine-0.5.0/mdb_engine.egg-info → mdb_engine-0.5.1}/PKG-INFO +1 -1
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/csrf.py +4 -1
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/routing/websockets.py +28 -7
- {mdb_engine-0.5.0 → mdb_engine-0.5.1/mdb_engine.egg-info}/PKG-INFO +1 -1
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/pyproject.toml +1 -1
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/setup.py +1 -1
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/LICENSE +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/MANIFEST.in +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/ARCHITECTURE.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/audit.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/base.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/casbin_factory.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/casbin_models.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/config_defaults.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/config_helpers.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/cookie_utils.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/decorators.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/dependencies.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/helpers.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/integration.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/jwt.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/middleware.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/oso_factory.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/provider.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/rate_limiter.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/restrictions.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/session_manager.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/shared_middleware.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/shared_users.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/token_lifecycle.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/token_store.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/users.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/auth/utils.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/commands/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/commands/generate.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/commands/migrate.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/commands/show.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/commands/validate.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/main.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/cli/utils.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/config.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/constants.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/app_registration.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/app_secrets.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/connection.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/encryption.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/engine.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/index_management.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/manifest.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/ray_integration.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/seeding.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/service_initialization.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/core/types.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/abstraction.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/connection.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/query_validator.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/resource_limiter.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/database/scoped_wrapper.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/dependencies.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/di/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/di/container.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/di/providers.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/di/scopes.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/embeddings/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/embeddings/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/embeddings/dependencies.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/embeddings/service.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/exceptions.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/indexes/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/indexes/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/indexes/helpers.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/indexes/manager.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/memory/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/memory/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/memory/service.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/observability/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/observability/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/observability/health.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/observability/logging.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/observability/metrics.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/repositories/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/repositories/base.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/repositories/mongo.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/repositories/unit_of_work.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/routing/README.md +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/routing/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/utils/__init__.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine/utils/mongo.py +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine.egg-info/SOURCES.txt +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine.egg-info/dependency_links.txt +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine.egg-info/entry_points.txt +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine.egg-info/requires.txt +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/mdb_engine.egg-info/top_level.txt +0 -0
- {mdb_engine-0.5.0 → mdb_engine-0.5.1}/setup.cfg +0 -0
|
@@ -315,7 +315,10 @@ class CSRFMiddleware(BaseHTTPMiddleware):
|
|
|
315
315
|
|
|
316
316
|
# Cookie-based authentication requires CSRF protection
|
|
317
317
|
# Check if authentication token cookie is present
|
|
318
|
-
|
|
318
|
+
# Use same cookie name as SharedAuthMiddleware for consistency
|
|
319
|
+
from .shared_middleware import AUTH_COOKIE_NAME
|
|
320
|
+
|
|
321
|
+
auth_token_cookie = request.cookies.get(AUTH_COOKIE_NAME)
|
|
319
322
|
if auth_token_cookie:
|
|
320
323
|
# For WebSocket upgrades, CSRF protection relies on:
|
|
321
324
|
# 1. Origin validation (already done above) - primary defense
|
|
@@ -395,13 +395,17 @@ async def authenticate_websocket(
|
|
|
395
395
|
|
|
396
396
|
try:
|
|
397
397
|
# Extract token from httpOnly cookie
|
|
398
|
+
# Use same cookie name as SharedAuthMiddleware for consistency
|
|
399
|
+
from ..auth.shared_middleware import AUTH_COOKIE_NAME
|
|
400
|
+
|
|
398
401
|
cookies = _get_cookies_from_websocket(websocket)
|
|
399
|
-
token = cookies.get(
|
|
402
|
+
token = cookies.get(AUTH_COOKIE_NAME) # Use mdb_auth_token (same as shared middleware)
|
|
400
403
|
|
|
401
404
|
if not token:
|
|
402
|
-
logger.
|
|
403
|
-
f"No token cookie found for WebSocket connection to app '{app_slug}' "
|
|
405
|
+
logger.error(
|
|
406
|
+
f"❌ No token cookie found for WebSocket connection to app '{app_slug}' "
|
|
404
407
|
f"(require_auth={require_auth}). "
|
|
408
|
+
f"Available cookies: {list(cookies.keys()) if cookies else 'none'}. "
|
|
405
409
|
f"Ensure httpOnly cookie is set during authentication."
|
|
406
410
|
)
|
|
407
411
|
if require_auth:
|
|
@@ -428,8 +432,11 @@ async def authenticate_websocket(
|
|
|
428
432
|
f"(method: cookie)"
|
|
429
433
|
)
|
|
430
434
|
return user_id, user_email
|
|
431
|
-
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError)
|
|
432
|
-
logger.
|
|
435
|
+
except (jwt.ExpiredSignatureError, jwt.InvalidTokenError):
|
|
436
|
+
logger.exception(
|
|
437
|
+
f"❌ JWT decode error for app '{app_slug}'. "
|
|
438
|
+
f"Token present: {bool(token)}, Token length: {len(token) if token else 0}"
|
|
439
|
+
)
|
|
433
440
|
raise
|
|
434
441
|
|
|
435
442
|
except WebSocketDisconnect:
|
|
@@ -689,12 +696,26 @@ def create_websocket_endpoint(
|
|
|
689
696
|
# CRITICAL: Authenticate BEFORE accepting connection
|
|
690
697
|
# This prevents CSRF middleware from rejecting established connections
|
|
691
698
|
# We can access headers/query_params before accept() is called
|
|
699
|
+
|
|
700
|
+
# Debug: Log cookies before authentication
|
|
701
|
+
try:
|
|
702
|
+
cookies = _get_cookies_from_websocket(websocket)
|
|
703
|
+
cookie_names = list(cookies.keys()) if cookies else []
|
|
704
|
+
logger.info(
|
|
705
|
+
f"🔍 WebSocket cookies for app '{app_slug}': {cookie_names} "
|
|
706
|
+
f"(require_auth={require_auth})"
|
|
707
|
+
)
|
|
708
|
+
except (AttributeError, TypeError, KeyError, RuntimeError) as cookie_error:
|
|
709
|
+
logger.warning(f"Could not extract cookies for debugging: {cookie_error}")
|
|
710
|
+
|
|
692
711
|
user_id, user_email = await authenticate_websocket(websocket, app_slug, require_auth)
|
|
693
712
|
|
|
694
713
|
# Handle authentication failure
|
|
695
714
|
if require_auth and not user_id:
|
|
696
|
-
logger.
|
|
697
|
-
f"WebSocket authentication
|
|
715
|
+
logger.error(
|
|
716
|
+
f"❌ WebSocket authentication FAILED for app '{app_slug}' - "
|
|
717
|
+
f"rejecting connection. require_auth={require_auth}, "
|
|
718
|
+
f"user_id={user_id}, user_email={user_email}"
|
|
698
719
|
)
|
|
699
720
|
# Reject without accepting - FastAPI will send 403 if accept() not called
|
|
700
721
|
# We can't call websocket.close() before accept(), so we just return
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|