diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py b/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py index a822356ff632b..fd728c78a11bd 100644 --- a/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py +++ b/providers/fab/src/airflow/providers/fab/auth_manager/api_fastapi/routes/login.py @@ -27,6 +27,7 @@ from airflow.configuration import conf from airflow.providers.fab.auth_manager.api_fastapi.datamodels.login import LoginBody, LoginResponse from airflow.providers.fab.auth_manager.api_fastapi.services.login import FABAuthManagerLogin +from airflow.providers.fab.auth_manager.cli_commands.utils import get_application_builder login_router = AirflowRouter(tags=["FabAuthManager"]) @@ -39,7 +40,8 @@ ) def create_token(body: LoginBody) -> LoginResponse: """Generate a new API token.""" - return FABAuthManagerLogin.create_token(body=body) + with get_application_builder(): + return FABAuthManagerLogin.create_token(body=body) @login_router.post( @@ -50,9 +52,10 @@ def create_token(body: LoginBody) -> LoginResponse: ) def create_token_cli(body: LoginBody) -> LoginResponse: """Generate a new CLI API token.""" - return FABAuthManagerLogin.create_token( - body=body, expiration_time_in_seconds=conf.getint("api_auth", "jwt_cli_expiration_time") - ) + with get_application_builder(): + return FABAuthManagerLogin.create_token( + body=body, expiration_time_in_seconds=conf.getint("api_auth", "jwt_cli_expiration_time") + ) @login_router.get( @@ -61,17 +64,18 @@ def create_token_cli(body: LoginBody) -> LoginResponse: ) def logout(request: Request) -> RedirectResponse: """Generate a new API token.""" - login_url = get_auth_manager().get_url_login() - secure = request.base_url.scheme == "https" or bool(conf.get("api", "ssl_cert", fallback="")) - response = RedirectResponse(login_url) - response.delete_cookie( - key="session", - secure=secure, - httponly=True, - ) - response.delete_cookie( - key=COOKIE_NAME_JWT_TOKEN, - secure=secure, - httponly=True, - ) - return response + with get_application_builder(): + login_url = get_auth_manager().get_url_login() + secure = request.base_url.scheme == "https" or bool(conf.get("api", "ssl_cert", fallback="")) + response = RedirectResponse(login_url) + response.delete_cookie( + key="session", + secure=secure, + httponly=True, + ) + response.delete_cookie( + key=COOKIE_NAME_JWT_TOKEN, + secure=secure, + httponly=True, + ) + return response diff --git a/providers/fab/src/airflow/providers/fab/www/app.py b/providers/fab/src/airflow/providers/fab/www/app.py index 06e5285bdacba..e12fd064c09c4 100644 --- a/providers/fab/src/airflow/providers/fab/www/app.py +++ b/providers/fab/src/airflow/providers/fab/www/app.py @@ -30,7 +30,7 @@ from airflow.configuration import conf from airflow.exceptions import AirflowConfigException from airflow.logging_config import configure_logging -from airflow.providers.fab.www.extensions.init_appbuilder import AirflowAppBuilder +from airflow.providers.fab.www.extensions.init_appbuilder import init_appbuilder from airflow.providers.fab.www.extensions.init_jinja_globals import init_jinja_globals from airflow.providers.fab.www.extensions.init_manifest_files import configure_manifest_files from airflow.providers.fab.www.extensions.init_security import init_api_auth @@ -94,12 +94,7 @@ def create_app(enable_plugins: bool): init_api_auth(flask_app) with flask_app.app_context(): - AirflowAppBuilder( - app=flask_app, - session=db.session, - base_template="airflow/main.html", - enable_plugins=enable_plugins, - ) + init_appbuilder(flask_app, enable_plugins=enable_plugins) init_error_handlers(flask_app) # In two scenarios a Flask application can be created: # - To support Airflow 2 plugins relying on Flask (``enable_plugins`` is True) diff --git a/providers/fab/www-hash.txt b/providers/fab/www-hash.txt index 47ac6b43c6cdc..418e86c7dda3a 100644 --- a/providers/fab/www-hash.txt +++ b/providers/fab/www-hash.txt @@ -1 +1 @@ -cc109e95a25c1bb018a85a6a40859234398d5a9ac5bf317197eed3e3ece64b0d +c45890ac6b17386adfb076a4baec17589a26aab189d6257a92138aaa720fbc7f