| 
                        1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 
                        - import json
 - 
 - import flask_login
 - from flask import Response, request
 - from flask_login import user_loaded_from_request, user_logged_in
 - from werkzeug.exceptions import Unauthorized
 - 
 - import contexts
 - from dify_app import DifyApp
 - from libs.passport import PassportService
 - from services.account_service import AccountService
 - 
 - login_manager = flask_login.LoginManager()
 - 
 - 
 - # Flask-Login configuration
 - @login_manager.request_loader
 - def load_user_from_request(request_from_flask_login):
 -     """Load user based on the request."""
 -     if request.blueprint not in {"console", "inner_api"}:
 -         return None
 -     # Check if the user_id contains a dot, indicating the old format
 -     auth_header = request.headers.get("Authorization", "")
 -     if not auth_header:
 -         auth_token = request.args.get("_token")
 -         if not auth_token:
 -             raise Unauthorized("Invalid Authorization token.")
 -     else:
 -         if " " not in auth_header:
 -             raise Unauthorized("Invalid Authorization header format. Expected 'Bearer <api-key>' format.")
 -         auth_scheme, auth_token = auth_header.split(None, 1)
 -         auth_scheme = auth_scheme.lower()
 -         if auth_scheme != "bearer":
 -             raise Unauthorized("Invalid Authorization header format. Expected 'Bearer <api-key>' format.")
 - 
 -     decoded = PassportService().verify(auth_token)
 -     user_id = decoded.get("user_id")
 - 
 -     logged_in_account = AccountService.load_logged_in_account(account_id=user_id)
 -     return logged_in_account
 - 
 - 
 - @user_logged_in.connect
 - @user_loaded_from_request.connect
 - def on_user_logged_in(_sender, user):
 -     """Called when a user logged in."""
 -     if user:
 -         contexts.tenant_id.set(user.current_tenant_id)
 - 
 - 
 - @login_manager.unauthorized_handler
 - def unauthorized_handler():
 -     """Handle unauthorized requests."""
 -     return Response(
 -         json.dumps({"code": "unauthorized", "message": "Unauthorized."}),
 -         status=401,
 -         content_type="application/json",
 -     )
 - 
 - 
 - def init_app(app: DifyApp):
 -     login_manager.init_app(app)
 
 
  |