From cb3e82011a8036f6ed032ad03f1b3277e356fb14 Mon Sep 17 00:00:00 2001 From: Pat Garziglia <49124058+patgarz@users.noreply.github.com> Date: Fri, 1 Sep 2023 13:34:47 -0400 Subject: [PATCH 01/11] Add get_user_display_name to AIP-56 base auth_manager --- airflow/auth/managers/base_auth_manager.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/airflow/auth/managers/base_auth_manager.py b/airflow/auth/managers/base_auth_manager.py index 66b79b0a26daf..d626f3681031a 100644 --- a/airflow/auth/managers/base_auth_manager.py +++ b/airflow/auth/managers/base_auth_manager.py @@ -54,6 +54,10 @@ def get_cli_commands() -> list[CLICommand]: def get_user_name(self) -> str: """Return the username associated to the user in session.""" + @abstractmethod + def get_user_display_name(self) -> str: + """Return the user's display name associated to the user in session.""" + @abstractmethod def get_user(self) -> BaseUser: """Return the user associated to the user in session.""" From e2e046477cd7a06d4fde1e96025b331754e21792 Mon Sep 17 00:00:00 2001 From: Pat Garziglia <49124058+patgarz@users.noreply.github.com> Date: Fri, 1 Sep 2023 13:38:52 -0400 Subject: [PATCH 02/11] Implement invariant, unique identifier for get_user_name in fab_auth_manager --- airflow/auth/managers/fab/fab_auth_manager.py | 20 ++++++--- .../templates/appbuilder/navbar_right.html | 10 ++--- .../managers/fab/test_fab_auth_manager.py | 41 ++++++++++++++++--- 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/airflow/auth/managers/fab/fab_auth_manager.py b/airflow/auth/managers/fab/fab_auth_manager.py index 27c96d6dd596c..4816da6b12270 100644 --- a/airflow/auth/managers/fab/fab_auth_manager.py +++ b/airflow/auth/managers/fab/fab_auth_manager.py @@ -62,17 +62,27 @@ def get_cli_commands() -> list[CLICommand]: SYNC_PERM_COMMAND, # not in a command group ] + def get_user_display_name(self) -> str: + """Return the user's display name associated to the user in session.""" + user = self.get_user() + first_name = user.first_name or "" + last_name = user.last_name or "" + return f"{first_name} {last_name}".strip() + def get_user_name(self) -> str: """ Return the username associated to the user in session. - For backward compatibility reasons, the username in FAB auth manager is the concatenation of the - first name and the last name. + For backward compatibility reasons, the username in FAB auth manager can be any of username, + email, or the database user ID. """ user = self.get_user() - first_name = user.first_name or "" - last_name = user.last_name or "" - return f"{first_name} {last_name}".strip() + if user.username: + return user.username + elif user.email: + return user.email + else: + return self.get_user_id() def get_user(self) -> User: """Return the user associated to the user in session.""" diff --git a/airflow/www/templates/appbuilder/navbar_right.html b/airflow/www/templates/appbuilder/navbar_right.html index 1ccf28db418f1..4227d7a3cc98a 100644 --- a/airflow/www/templates/appbuilder/navbar_right.html +++ b/airflow/www/templates/appbuilder/navbar_right.html @@ -66,11 +66,11 @@ {% if auth_manager.is_logged_in() %}