示例#1
0
文件: project.py 项目: geva/easycla
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
示例#2
0
文件: project.py 项目: geva/easycla
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
示例#3
0
文件: project.py 项目: geva/easycla
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