def remove_project_manager(username, project_id, lfid): """ Removes the LFID from the project ACL :param username: username of the user :type username: string :param project_id: The ID of the project :type project_id: UUID :param lfid: the lfid (manager username) to be removed to the project acl :type lfid: string """ # Find project project = Project() try: project.load(project_id=str(project_id)) except DoesNotExist as err: return {'errors': {'project_id': str(err)}} # Validate user is the manager of the project if username not in project.get_project_acl(): return { 'errors': { 'user': "******" } } # TODO: Validate if lfid is valid # Avoid to have an empty acl if len(project.get_project_acl()) == 1 and username == lfid: return { 'errors': { 'user': "******" } } # Add lfid to project acl project.remove_project_acl(lfid) project.save() # Get managers managers = project.get_managers() # Generate managers dict managers_dict = [{ 'name': manager.get_user_name(), 'email': manager.get_user_email(), 'lfid': manager.get_lf_username() } for manager in managers] # log event event_data = f'{lfid} removed from project {project.get_project_id()}' Event.create_event( event_type=EventType.RemoveProjectManager, event_data=event_data, event_summary=event_data, event_project_id=project_id, contains_pii=True, ) return managers_dict
def get_project_managers(username, project_id, enable_auth): """ Returns the CLA project managers from the project's ID :param username: The LF username :type username: string :param project_id: The project's ID. :type project_id: string :return: dict representation of the project managers. :rtype: dict """ project = Project() try: project.load(project_id=str(project_id)) except DoesNotExist as err: return {'errors': {'project_id': str(err)}} if enable_auth is True and username not in project.get_project_acl(): return { 'errors': { 'user_id': 'You are not authorized to see the managers.' } } # Generate managers dict managers_dict = [] for lfid in project.get_project_acl(): user = User() users = user.get_user_by_username(str(lfid)) if users is not None: if len(users) > 1: cla.log.warning( f'More than one user record was returned ({len(users)}) from user ' f'username: {lfid} query') user = users[0] # Manager found, fill with it's information managers_dict.append({ 'name': user.get_user_name(), 'email': user.get_user_email(), 'lfid': user.get_lf_username() }) else: # Manager not in database yet, only set the lfid managers_dict.append({'lfid': str(lfid)}) return managers_dict
def add_project_manager(username, project_id, lfid): """ Adds the LFID to the project ACL :param username: username of the user :type username: string :param project_id: The ID of the project :type project_id: UUID :param lfid: the lfid (manager username) to be added to the project acl :type lfid: string """ # Find project project = Project() try: project.load(project_id=str(project_id)) except DoesNotExist as err: return {'errors': {'project_id': str(err)}} # Validate user is the manager of the project if username not in project.get_project_acl(): return { 'errors': { 'user': "******" } } # TODO: Validate if lfid is valid # Add lfid to project acl project.add_project_acl(lfid) project.save() # Get managers managers = project.get_managers() # Generate managers dict managers_dict = [{ 'name': manager.get_user_name(), 'email': manager.get_user_email(), 'lfid': manager.get_lf_username() } for manager in managers] event_data = '{} added {} to project {}'.format(username, lfid, project.get_project_name()) Event.create_event( event_type=EventType.AddProjectManager, event_data=event_data, event_summary=event_data, event_project_id=project_id, contains_pii=True, ) return managers_dict