- Created a new eveai_chat plugin to support the new dynamic possibilities of the Specialists. Currently only supports standard Rag retrievers (i.e. no extra arguments).
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
from flask import request, current_app, session
|
||||
from flask_jwt_extended import decode_token, verify_jwt_in_request, get_jwt_identity
|
||||
|
||||
from common.models.user import Tenant, TenantDomain
|
||||
|
||||
|
||||
@@ -23,31 +25,45 @@ def cors_after_request(response, prefix):
|
||||
response.headers.add('Access-Control-Allow-Methods', '*')
|
||||
return response
|
||||
|
||||
# Handle OPTIONS preflight requests
|
||||
if request.method == 'OPTIONS':
|
||||
response.headers.add('Access-Control-Allow-Origin', '*')
|
||||
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization,X-Tenant-ID')
|
||||
response.headers.add('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS')
|
||||
response.headers.add('Access-Control-Allow-Credentials', 'true')
|
||||
return response
|
||||
|
||||
tenant_id = None
|
||||
allowed_origins = []
|
||||
|
||||
# Try to get tenant_id from JSON payload
|
||||
json_data = request.get_json(silent=True)
|
||||
|
||||
if json_data and 'tenant_id' in json_data:
|
||||
tenant_id = json_data['tenant_id']
|
||||
# Check Socket.IO connection
|
||||
if 'socket.io' in request.path:
|
||||
token = request.args.get('token')
|
||||
if token:
|
||||
try:
|
||||
decoded = decode_token(token)
|
||||
tenant_id = decoded['sub']
|
||||
except Exception as e:
|
||||
current_app.logger.error(f'Error decoding token: {e}')
|
||||
return response
|
||||
else:
|
||||
# Fallback to get tenant_id from query parameters or headers if JSON is not available
|
||||
tenant_id = request.args.get('tenant_id') or request.args.get('tenantId') or request.headers.get('X-Tenant-ID')
|
||||
# Regular API requests
|
||||
try:
|
||||
if verify_jwt_in_request(optional=True):
|
||||
tenant_id = get_jwt_identity()
|
||||
except Exception as e:
|
||||
current_app.logger.error(f'Error verifying JWT: {e}')
|
||||
return response
|
||||
|
||||
if tenant_id:
|
||||
origin = request.headers.get('Origin')
|
||||
allowed_origins = get_allowed_origins(tenant_id)
|
||||
else:
|
||||
current_app.logger.warning('tenant_id not found in request')
|
||||
|
||||
origin = request.headers.get('Origin')
|
||||
if origin in allowed_origins:
|
||||
response.headers.add('Access-Control-Allow-Origin', origin)
|
||||
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
|
||||
response.headers.add('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS')
|
||||
response.headers.add('Access-Control-Allow-Credentials', 'true')
|
||||
else:
|
||||
current_app.logger.warning(f'Origin {origin} not allowed')
|
||||
if origin in allowed_origins:
|
||||
response.headers.add('Access-Control-Allow-Origin', origin)
|
||||
response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization')
|
||||
response.headers.add('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE,OPTIONS')
|
||||
response.headers.add('Access-Control-Allow-Credentials', 'true')
|
||||
|
||||
return response
|
||||
|
||||
|
||||
Reference in New Issue
Block a user