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 get_managers_dict(signature_acl): # Helper function to get a list of all cla managers from a CCLA Signature ACL # Generate managers dict managers_dict = [] for lfid in signature_acl: user = User() user = user.get_user_by_username(str(lfid)) if user is not None: # 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 invite_cla_manager(contributor_id, contributor_name, contributor_email, cla_manager_name, cla_manager_email, project_name, company_name): """ Sends email to the specified CLA Manager to sign up through the Corporate console and adds the requested user to the Approved List request queue. :param contributor_id: The id of the user inviting the CLA Manager :param contributor_name: The name of the user inviting the CLA Manager :param contributor_email: The email address that this user wants to be added to the Approved List. Must exist in the user's list of emails. :param cla_manager_name: The name of the CLA manager :param cla_manager_email: The email address of the CLA manager :param project_name: The name of the project :param company_name: The name of the organization/company """ user = User() try: user.load(contributor_id) except DoesNotExist as err: msg = f'unable to load user by id: {contributor_id} for inviting company admin - error: {err}' cla.log.warning(msg) return { 'errors': { 'user_id': contributor_id, 'message': msg, 'error': str(err) } } project = Project() try: project.load_project_by_name(project_name) except DoesNotExist as err: msg = f'unable to load project by name: {project_name} for inviting company admin - error: {err}' cla.log.warning(msg) return { 'errors': { 'project_name': project_name, 'message': msg, 'error': str(err) } } company = Company() try: company.load_company_by_name(company_name) except DoesNotExist as err: msg = f'unable to load company by name: {company_name} - error: {err}' cla.log.warning(msg) company.set_company_id(str(uuid.uuid4())) company.set_company_name(company_name) company.save() # Add user lfusername if exists username = None if user.get_lf_username(): username = user.get_lf_username() elif user.get_user_name(): username = user.get_user_name() if username: company.add_company_acl(username) company.save() # create company invite company_invite = CompanyInvite() company_invite.set_company_invite_id(str(uuid.uuid4())) company_invite.set_requested_company_id(company.get_company_id()) company_invite.set_user_id(user.get_user_id()) company_invite.save() # We'll use the user's provided contributor name - if not provided use what we have in the DB if contributor_name is None: contributor_name = user.get_user_name() log_msg = ( f'sent email to CLA Manager: {cla_manager_name} with email {cla_manager_email} ' f'for project {project_name} and company {company_name} ' f'to user {contributor_name} with email {contributor_email}') # Send email to the admin. set account_exists=False since the admin needs to sign up through the Corporate Console. cla.log.info(log_msg) send_email_to_cla_manager(project, contributor_name, contributor_email, cla_manager_name, cla_manager_email, company_name, False) # update ccla_whitelist_request ccla_whitelist_request = CCLAWhitelistRequest() ccla_whitelist_request.set_request_id(str(uuid.uuid4())) ccla_whitelist_request.set_company_name(company_name) ccla_whitelist_request.set_project_name(project_name) ccla_whitelist_request.set_user_github_id(contributor_id) ccla_whitelist_request.set_user_github_username(contributor_name) ccla_whitelist_request.set_user_emails(set([contributor_email])) ccla_whitelist_request.set_request_status("pending") ccla_whitelist_request.save() Event.create_event( event_user_id=contributor_id, event_project_name=project_name, event_data=log_msg, event_summary=log_msg, event_type=EventType.InviteAdmin, contains_pii=True, )