diff --git a/airflow/auth/managers/models/base_user.py b/airflow/auth/managers/models/base_user.py index ca59fe3d0c5d6..7f060f3121e8c 100644 --- a/airflow/auth/managers/models/base_user.py +++ b/airflow/auth/managers/models/base_user.py @@ -23,10 +23,6 @@ class BaseUser: """User model interface.""" - @property - def is_active(self) -> bool: - return True - @abstractmethod def get_id(self) -> str: ... diff --git a/airflow/providers/fab/auth_manager/fab_auth_manager.py b/airflow/providers/fab/auth_manager/fab_auth_manager.py index 85e0687b93b43..5ea926f5b60d5 100644 --- a/airflow/providers/fab/auth_manager/fab_auth_manager.py +++ b/airflow/providers/fab/auth_manager/fab_auth_manager.py @@ -179,7 +179,8 @@ def init(self) -> None: def is_logged_in(self) -> bool: """Return whether the user is logged in.""" - return not self.get_user().is_anonymous + user = self.get_user() + return not user.is_anonymous and user.is_active def is_authorized_configuration( self, diff --git a/airflow/www/app.py b/airflow/www/app.py index c488eab9b69ca..270ffe57196a9 100644 --- a/airflow/www/app.py +++ b/airflow/www/app.py @@ -46,7 +46,6 @@ from airflow.www.extensions.init_security import ( init_api_auth, init_cache_control, - init_check_user_active, init_xframe_protection, ) from airflow.www.extensions.init_session import init_airflow_session_interface @@ -176,7 +175,6 @@ def create_app(config=None, testing=False): init_xframe_protection(flask_app) init_cache_control(flask_app) init_airflow_session_interface(flask_app) - init_check_user_active(flask_app) return flask_app diff --git a/airflow/www/extensions/init_security.py b/airflow/www/extensions/init_security.py index 6dc30a41a4cb0..28e96a06ca859 100644 --- a/airflow/www/extensions/init_security.py +++ b/airflow/www/extensions/init_security.py @@ -19,11 +19,8 @@ import logging from importlib import import_module -from flask import redirect, request - from airflow.configuration import conf from airflow.exceptions import AirflowConfigException, AirflowException -from airflow.www.extensions.init_auth_manager import get_auth_manager log = logging.getLogger(__name__) @@ -73,13 +70,3 @@ def apply_cache_control(response): return response app.after_request(apply_cache_control) - - -def init_check_user_active(app): - @app.before_request - def check_user_active(): - url_logout = get_auth_manager().get_url_logout() - if request.path == url_logout: - return - if get_auth_manager().is_logged_in() and not get_auth_manager().get_user().is_active: - return redirect(url_logout) diff --git a/newsfragments/42042.significant.rst b/newsfragments/42042.significant.rst new file mode 100644 index 0000000000000..8a22f5d4db619 --- /dev/null +++ b/newsfragments/42042.significant.rst @@ -0,0 +1 @@ +Removed ``is_active`` property from ``BaseUser``. This property is longer used. diff --git a/tests/providers/fab/auth_manager/test_fab_auth_manager.py b/tests/providers/fab/auth_manager/test_fab_auth_manager.py index 3b0949d551d88..35e530be5a541 100644 --- a/tests/providers/fab/auth_manager/test_fab_auth_manager.py +++ b/tests/providers/fab/auth_manager/test_fab_auth_manager.py @@ -128,6 +128,15 @@ def test_is_logged_in(self, mock_get_user, auth_manager): assert auth_manager.is_logged_in() is False + @mock.patch.object(FabAuthManager, "get_user") + def test_is_logged_in_with_inactive_user(self, mock_get_user, auth_manager): + user = Mock() + user.is_anonymous.return_value = False + user.is_active.return_value = True + mock_get_user.return_value = user + + assert auth_manager.is_logged_in() is False + @pytest.mark.parametrize( "api_name, method, user_permissions, expected_result", chain( diff --git a/tests/test_utils/decorators.py b/tests/test_utils/decorators.py index 7b6fc5d85a14c..b33f8421404de 100644 --- a/tests/test_utils/decorators.py +++ b/tests/test_utils/decorators.py @@ -45,7 +45,6 @@ def no_op(*args, **kwargs): "init_xframe_protection", "init_airflow_session_interface", "init_appbuilder", - "init_check_user_active", ] @functools.wraps(f) diff --git a/tests/www/views/conftest.py b/tests/www/views/conftest.py index 821f541ef0c43..a4b9145797c9b 100644 --- a/tests/www/views/conftest.py +++ b/tests/www/views/conftest.py @@ -59,7 +59,6 @@ def app(examples_dag_bag): "init_jinja_globals", "init_plugins", "init_airflow_session_interface", - "init_check_user_active", ] ) def factory(): diff --git a/tests/www/views/test_views_rate_limit.py b/tests/www/views/test_views_rate_limit.py index fa4502a275315..1f3eaf11d2ad0 100644 --- a/tests/www/views/test_views_rate_limit.py +++ b/tests/www/views/test_views_rate_limit.py @@ -39,7 +39,6 @@ def app_with_rate_limit_one(examples_dag_bag): "init_jinja_globals", "init_plugins", "init_airflow_session_interface", - "init_check_user_active", ] ) def factory():