From 1a165f7f6ef2dfe6d60b5e45e9b180374f4fd7de Mon Sep 17 00:00:00 2001 From: Thomas Kluyver <thomas.kluyver@xfel.eu> Date: Thu, 13 Jun 2024 14:12:20 +0100 Subject: [PATCH] Split out git_author_from_munge() function --- webservice/webservice.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/webservice/webservice.py b/webservice/webservice.py index 63d577f35..f322c1e52 100644 --- a/webservice/webservice.py +++ b/webservice/webservice.py @@ -171,6 +171,21 @@ async def upload_config(config, yaml, instrument, cycle, proposal) -> bytes: return Success.UPLOADED_CONFIG.format(cycle, proposal).encode() +def git_author_from_munge(munge_cred: bytes) -> Optional[git.Actor]: + try: + uid = pymunge.decode(munge_cred)[1] + user_details = pwd.getpwuid(uid) + logging.debug("MUNGE credential from user %s", user_details.pw_name) + full_name = user_details.pw_gecos.split(',')[0] + email = full_name.lower().replace(' ', '.') + '@xfel.eu' # Hopefully + return git.Actor(full_name, email) + except Exception: + logging.warning( + "Failed to recognise author from MUNGE credential", exc_info=True + ) + return None + + def merge(source: Dict, destination: Dict) -> Dict: """Deep merge two dictionaries. @@ -248,17 +263,7 @@ def change_config(config, updated_config, instrument, author = None if munge_cred is not None: - try: - uid = pymunge.decode(munge_cred.encode())[1] - user_details = pwd.getpwuid(uid) - logging.debug("MUNGE credential from user %s", user_details.pw_name) - full_name = user_details.pw_gecos.split(',')[0] - email = full_name.lower().replace(' ', '.') + '@xfel.eu' # Hopefully - author = git.Actor(full_name, email) - except Exception: - logging.warning( - "Failed to recognise author from MUNGE credential", exc_info=True - ) + author = git_author_from_munge(munge_cred.encode()) else: logging.info("update_conf request without MUNGE credential") -- GitLab