diff --git a/webservice/webservice.py b/webservice/webservice.py index 63d577f356c420b25fb6c5a2d5bad2b262c293cf..f322c1e5278d687238f7e444e0b11844502721ef 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")