diff --git a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/routes/login.py b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/routes/login.py index 3012301b1bbb6..1be6ab37bad4a 100644 --- a/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/routes/login.py +++ b/providers/amazon/src/airflow/providers/amazon/aws/auth_manager/routes/login.py @@ -18,9 +18,12 @@ from __future__ import annotations import logging -from typing import Any +from typing import TYPE_CHECKING, Any from urllib.parse import urlparse +if TYPE_CHECKING: + from starlette.datastructures import FormData + import anyio from fastapi import HTTPException, Request, status from fastapi.responses import RedirectResponse @@ -101,7 +104,7 @@ def login_callback(request: Request): url = conf.get("api", "base_url", fallback="/") token = get_auth_manager().generate_jwt(user) - form_data = anyio.from_thread.run(request.form) + form_data = anyio.from_thread.run(_fetch_form, request) relay_state = form_data["RelayState"] if relay_state == "login-redirect": @@ -151,7 +154,7 @@ def _prepare_request(request: Request) -> dict: "get_data": request.query_params, "post_data": {}, } - form_data = anyio.from_thread.run(request.form) + form_data = anyio.from_thread.run(_fetch_form, request) if "SAMLResponse" in form_data: data["post_data"]["SAMLResponse"] = form_data["SAMLResponse"] if "RelayState" in form_data: @@ -159,6 +162,10 @@ def _prepare_request(request: Request) -> dict: return data +async def _fetch_form(request: Request) -> FormData: + return await request.form() + + def _get_idp_data() -> dict: saml_metadata_url = conf.get_mandatory_value(CONF_SECTION_NAME, CONF_SAML_METADATA_URL_KEY) return OneLogin_Saml2_IdPMetadataParser.parse_remote(saml_metadata_url)