Example #1
0
def remove_groups_from_user(
    username, group_ids=None,
    user_name=None, uri=None, method=None
    ):
    """Remove a group from a user
    Args:
        username(str): Name of the user

    Kwargs:
        group_ids(list): List of group_ids.
        user_name (str): The name of the user who called this function.
        uri (str): The uri that was used to call this function.
        method (str): The HTTP methos that was used to call this function.

    Basic Usage::
        >>> from vFense.core.group.groups remove_groups_from_user
        >>> username = '******'
        >>> group_ids = ['0834e656-27a5-4b13-ba56-635797d0d1fc', '8757b79c-7321-4446-8882-65457f28c78b']
        >>> remove_groups_from_user(username, group_ids)

    Returns:
        Returns the results in a dictionary
        {
            'rv_status_code': 1004,
            'message': 'None - remove_groups_from_user - group ids: 0834e656-27a5-4b13-ba56-635797d0d1fc, 8757b79c-7321-4446-8882-65457f28c78b does not exist',
            'http_method': None,
            'uri': None,
            'http_status': 409
        }
    """
    status = remove_groups_from_user.func_name + ' - '
    user_does_not_exist_in_group = False
    admin_user = False
    admin_group_id = None
    admin_group_id_exists_in_group_ids = False
    if username == DefaultUsers.ADMIN:
        admin_user = True
        admin_group_id = (
            fetch_group_by_name(
                DefaultGroups.ADMIN, DefaultCustomers.DEFAULT,
                GroupKeys.GroupId
            )[GroupKeys.GroupId]
        )

    try:
        if not group_ids:
            group_ids = (
                map(lambda x:
                    x[GroupsPerUserKeys.GroupId],
                    get_groups_for_user(username, GroupsPerUserKeys.GroupId)
                )
            )

        if group_ids:
            if not admin_group_id in group_ids:
                msg = 'group ids: ' + 'and '.join(group_ids)
                for gid in group_ids:
                    user_in_group = user_exist_in_group(username, gid)
                    if not user_in_group:
                        user_does_not_exist_in_group = True
            else:
                admin_group_id_exists_in_group_ids = True
                msg = (
                    'Cannot remove the %s group from the %s user' %
                    (DefaultGroups.ADMIN, DefaultUsers.ADMIN)
                )
        else:
            user_does_not_exist_in_group = True

        if (not user_does_not_exist_in_group and
            not admin_group_id_exists_in_group_ids):

            status_code, count, errors, generated_ids = (
                delete_groups_from_user(username, group_ids)
            )
            if status_code == DbCodes.Deleted:
                generic_status_code = GenericCodes.ObjectDeleted
                vfense_status_code = GroupCodes.GroupsRemovedFromUser

            elif status_code == DbCodes.Unchanged:
                generic_status_code = GenericCodes.ObjectUnchanged
                vfense_status_code = GroupCodes.GroupUnchanged

            elif status_code == DbCodes.Skipped:
                generic_status_code = GenericCodes.InvalidId
                vfense_status_code = GroupFailureCodes.InvalidGroupId

        elif admin_group_id_exists_in_group_ids:
            status_code = DbCodes.Skipped
            generic_status_code = GenericCodes.InvalidId
            vfense_status_code = GroupFailureCodes.CantRemoveAdminFromGroup

        else:
            msg = (
                'groups %s do not exist for user %s' %
                (' and '.join(group_ids), username)
            )
            status_code = DbCodes.Skipped
            generic_status_code = GenericCodes.InvalidId
            vfense_status_code = GroupFailureCodes.GroupDoesNotExistForUser

        results = {
            ApiResultKeys.DB_STATUS_CODE: status_code,
            ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
            ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
            ApiResultKeys.MESSAGE: status + msg,
            ApiResultKeys.DATA: [],
            ApiResultKeys.USERNAME: user_name,
            ApiResultKeys.URI: uri,
            ApiResultKeys.HTTP_METHOD: method
        }

    except Exception as e:
        logger.exception(e)
        status_code = DbCodes.Errors
        generic_status_code = GenericFailureCodes.FailedToDeleteObject
        vfense_status_code = GroupFailureCodes.FailedToRemoveGroupFromUser

        results = {
            ApiResultKeys.DB_STATUS_CODE: status_code,
            ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
            ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
            ApiResultKeys.MESSAGE: status + msg,
            ApiResultKeys.DATA: [],
            ApiResultKeys.USERNAME: user_name,
            ApiResultKeys.URI: uri,
            ApiResultKeys.HTTP_METHOD: method
        }

    return(results)
Example #2
0
def add_user_to_groups(
    username, customer_name, group_ids,
    user_name=None, uri=None, method=None
    ):
    """Add a user into a vFense group
    Args:
        username (str):  Name of the user already in vFense.
        customer_name (str): The customer this user is part of.
        group_ids (list): List of group ids.

    Kwargs:
        user_name (str): The name of the user who called this function.
        uri (str): The uri that was used to call this function.
        method (str): The HTTP methos that was used to call this function.

    Basic Usage:
        >>> from vFense.group.groups import add_user_to_groups
        >>> username = '******'
        >>> customer_name = 'default'
        >>> group_ids = ['0834e656-27a5-4b13-ba56-635797d0d1fc']
        >>> add_user_to_groups(username, customer_name, group_ids)

    Returns:
        Returns the results in a dictionary
    {
        'uri': None,
        'rv_status_code': 1010,
        'http_method': None,
        'http_status': 200,
        'message': "None - groups per user [u'ee54820c-cb4e-46a1-9d11-73afe8c4c4e3'] was created",
        'data': {
            'group_name': u'FooLah',
            'user_name': 'alien',
            'group_id': '0834e656-27a5-4b13-ba56-635797d0d1fc',
            'customer_name': 'default'
        }
    }
    """
    status = add_user_to_groups.func_name + ' - '
    groups_are_valid = validate_group_ids(group_ids, customer_name)
    user_exist = retrieve_object(username, UserCollections.Users)
    customer_exist = retrieve_object(customer_name, CustomerCollections.Customers)
    results = None
    generated_ids = []
    users_group_exist = []
    generic_status_code = 0
    vfense_status_code = 0
    if groups_are_valid[0] and user_exist and customer_exist:
        data_list = []
        for group_id in group_ids:
            group_exist = get_group(group_id)
            user_in_group = (
                user_exist_in_group(username, group_id)
            )
            if not user_in_group:
                data_to_add = (
                    {
                        GroupsPerUserKeys.CustomerName: customer_name,
                        GroupsPerUserKeys.UserName: username,
                        GroupsPerUserKeys.GroupName: group_exist[GroupKeys.GroupName],
                        GroupsPerUserKeys.GroupId: group_id
                    }
                )
                data_list.append(data_to_add)

            else:
                users_group_exist.append(group_id)
        if len(data_list) == len(group_ids):
            status_code, object_count, error, generated_ids = (
                insert_group_per_user(data_list)
            )

            if status_code == DbCodes.Inserted:
                msg = 'user %s add to groups' % (username)
                generic_status_code = GenericCodes.ObjectCreated
                vfense_status_code = GroupCodes.GroupCreated


        else:
            msg = (
                'user %s is already in groups %s' % (
                    username, ' and '.join(users_group_exist)
                )
            )
            status_code = DbCodes.Skipped
            generic_status_code = GenericCodes.ObjectExists
            vfense_status_code = GroupFailureCodes.GroupExistForUser


    elif not groups_are_valid[0]:
        msg = (
            'Group Ids are invalid: %s' % (
                ' and '.join(groups_are_valid[2])
            )
        )
        status_code = DbCodes.Errors
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = GroupFailureCodes.InvalidGroupId

    elif not user_exist:
        msg = 'User name is invalid: %s' % (username)
        status_code = DbCodes.Errors
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = UserFailureCodes.InvalidUserName

    elif not customer_exist:
        msg = 'Customer name is invalid: %s' % (customer_name)
        status_code = DbCodes.Errors
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = CustomerFailureCodes.CustomerDoesNotExist

    results = {
        ApiResultKeys.DB_STATUS_CODE: status_code,
        ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
        ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
        ApiResultKeys.GENERATED_IDS: generated_ids,
        ApiResultKeys.MESSAGE: status + msg,
        ApiResultKeys.DATA: [],
        ApiResultKeys.USERNAME: user_name,
        ApiResultKeys.URI: uri,
        ApiResultKeys.HTTP_METHOD: method
    }

    return(results)
Example #3
0
def add_user_to_groups(username,
                       customer_name,
                       group_ids,
                       user_name=None,
                       uri=None,
                       method=None):
    """Add a user into a vFense group
    Args:
        username (str):  Name of the user already in vFense.
        customer_name (str): The customer this user is part of.
        group_ids (list): List of group ids.

    Kwargs:
        user_name (str): The name of the user who called this function.
        uri (str): The uri that was used to call this function.
        method (str): The HTTP methos that was used to call this function.

    Basic Usage:
        >>> from vFense.group.groups import add_user_to_groups
        >>> username = '******'
        >>> customer_name = 'default'
        >>> group_ids = ['0834e656-27a5-4b13-ba56-635797d0d1fc']
        >>> add_user_to_groups(username, customer_name, group_ids)

    Returns:
        Returns the results in a dictionary
    {
        'uri': None,
        'rv_status_code': 1010,
        'http_method': None,
        'http_status': 200,
        'message': "None - groups per user [u'ee54820c-cb4e-46a1-9d11-73afe8c4c4e3'] was created",
        'data': {
            'group_name': u'FooLah',
            'user_name': 'alien',
            'group_id': '0834e656-27a5-4b13-ba56-635797d0d1fc',
            'customer_name': 'default'
        }
    }
    """
    status = add_user_to_groups.func_name + ' - '
    groups_are_valid = validate_group_ids(group_ids, customer_name)
    user_exist = retrieve_object(username, UserCollections.Users)
    customer_exist = retrieve_object(customer_name,
                                     CustomerCollections.Customers)
    results = None
    generated_ids = []
    users_group_exist = []
    generic_status_code = 0
    vfense_status_code = 0
    if groups_are_valid[0] and user_exist and customer_exist:
        data_list = []
        for group_id in group_ids:
            group_exist = get_group(group_id)
            user_in_group = (user_exist_in_group(username, group_id))
            if not user_in_group:
                data_to_add = ({
                    GroupsPerUserKeys.CustomerName:
                    customer_name,
                    GroupsPerUserKeys.UserName:
                    username,
                    GroupsPerUserKeys.GroupName:
                    group_exist[GroupKeys.GroupName],
                    GroupsPerUserKeys.GroupId:
                    group_id
                })
                data_list.append(data_to_add)

            else:
                users_group_exist.append(group_id)
        if len(data_list) == len(group_ids):
            status_code, object_count, error, generated_ids = (
                insert_group_per_user(data_list))

            if status_code == DbCodes.Inserted:
                msg = 'user %s add to groups' % (username)
                generic_status_code = GenericCodes.ObjectCreated
                vfense_status_code = GroupCodes.GroupCreated

        else:
            msg = ('user %s is already in groups %s' %
                   (username, ' and '.join(users_group_exist)))
            status_code = DbCodes.Skipped
            generic_status_code = GenericCodes.ObjectExists
            vfense_status_code = GroupFailureCodes.GroupExistForUser

    elif not groups_are_valid[0]:
        msg = ('Group Ids are invalid: %s' %
               (' and '.join(groups_are_valid[2])))
        status_code = DbCodes.Errors
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = GroupFailureCodes.InvalidGroupId

    elif not user_exist:
        msg = 'User name is invalid: %s' % (username)
        status_code = DbCodes.Errors
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = UserFailureCodes.InvalidUserName

    elif not customer_exist:
        msg = 'Customer name is invalid: %s' % (customer_name)
        status_code = DbCodes.Errors
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = CustomerFailureCodes.CustomerDoesNotExist

    results = {
        ApiResultKeys.DB_STATUS_CODE: status_code,
        ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
        ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
        ApiResultKeys.GENERATED_IDS: generated_ids,
        ApiResultKeys.MESSAGE: status + msg,
        ApiResultKeys.DATA: [],
        ApiResultKeys.USERNAME: user_name,
        ApiResultKeys.URI: uri,
        ApiResultKeys.HTTP_METHOD: method
    }

    return (results)
Example #4
0
def remove_groups_from_user(username,
                            group_ids=None,
                            user_name=None,
                            uri=None,
                            method=None):
    """Remove a group from a user
    Args:
        username(str): Name of the user

    Kwargs:
        group_ids(list): List of group_ids.
        user_name (str): The name of the user who called this function.
        uri (str): The uri that was used to call this function.
        method (str): The HTTP methos that was used to call this function.

    Basic Usage::
        >>> from vFense.core.group.groups remove_groups_from_user
        >>> username = '******'
        >>> group_ids = ['0834e656-27a5-4b13-ba56-635797d0d1fc', '8757b79c-7321-4446-8882-65457f28c78b']
        >>> remove_groups_from_user(username, group_ids)

    Returns:
        Returns the results in a dictionary
        {
            'rv_status_code': 1004,
            'message': 'None - remove_groups_from_user - group ids: 0834e656-27a5-4b13-ba56-635797d0d1fc, 8757b79c-7321-4446-8882-65457f28c78b does not exist',
            'http_method': None,
            'uri': None,
            'http_status': 409
        }
    """
    status = remove_groups_from_user.func_name + ' - '
    user_does_not_exist_in_group = False
    admin_user = False
    admin_group_id = None
    admin_group_id_exists_in_group_ids = False
    if username == DefaultUsers.ADMIN:
        admin_user = True
        admin_group_id = (fetch_group_by_name(
            DefaultGroups.ADMIN, DefaultCustomers.DEFAULT,
            GroupKeys.GroupId)[GroupKeys.GroupId])

    try:
        if not group_ids:
            group_ids = (map(
                lambda x: x[GroupsPerUserKeys.GroupId],
                get_groups_for_user(username, GroupsPerUserKeys.GroupId)))

        if group_ids:
            if not admin_group_id in group_ids:
                msg = 'group ids: ' + 'and '.join(group_ids)
                for gid in group_ids:
                    user_in_group = user_exist_in_group(username, gid)
                    if not user_in_group:
                        user_does_not_exist_in_group = True
            else:
                admin_group_id_exists_in_group_ids = True
                msg = ('Cannot remove the %s group from the %s user' %
                       (DefaultGroups.ADMIN, DefaultUsers.ADMIN))
        else:
            user_does_not_exist_in_group = True

        if (not user_does_not_exist_in_group
                and not admin_group_id_exists_in_group_ids):

            status_code, count, errors, generated_ids = (
                delete_groups_from_user(username, group_ids))
            if status_code == DbCodes.Deleted:
                generic_status_code = GenericCodes.ObjectDeleted
                vfense_status_code = GroupCodes.GroupsRemovedFromUser

            elif status_code == DbCodes.Unchanged:
                generic_status_code = GenericCodes.ObjectUnchanged
                vfense_status_code = GroupCodes.GroupUnchanged

            elif status_code == DbCodes.Skipped:
                generic_status_code = GenericCodes.InvalidId
                vfense_status_code = GroupFailureCodes.InvalidGroupId

        elif admin_group_id_exists_in_group_ids:
            status_code = DbCodes.Skipped
            generic_status_code = GenericCodes.InvalidId
            vfense_status_code = GroupFailureCodes.CantRemoveAdminFromGroup

        else:
            msg = ('groups %s do not exist for user %s' %
                   (' and '.join(group_ids), username))
            status_code = DbCodes.Skipped
            generic_status_code = GenericCodes.InvalidId
            vfense_status_code = GroupFailureCodes.GroupDoesNotExistForUser

        results = {
            ApiResultKeys.DB_STATUS_CODE: status_code,
            ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
            ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
            ApiResultKeys.MESSAGE: status + msg,
            ApiResultKeys.DATA: [],
            ApiResultKeys.USERNAME: user_name,
            ApiResultKeys.URI: uri,
            ApiResultKeys.HTTP_METHOD: method
        }

    except Exception as e:
        logger.exception(e)
        status_code = DbCodes.Errors
        generic_status_code = GenericFailureCodes.FailedToDeleteObject
        vfense_status_code = GroupFailureCodes.FailedToRemoveGroupFromUser

        results = {
            ApiResultKeys.DB_STATUS_CODE: status_code,
            ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
            ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
            ApiResultKeys.MESSAGE: status + msg,
            ApiResultKeys.DATA: [],
            ApiResultKeys.USERNAME: user_name,
            ApiResultKeys.URI: uri,
            ApiResultKeys.HTTP_METHOD: method
        }

    return (results)
Example #5
0
def add_users_to_group(
    group_id, usernames,
    user_name=None, uri=None, method=None
    ):
    """Add a multiple users to a group
    Args:
        group_id (str):  The 36 character group UUID.
        usernames (list):  Name of the users already in vFense.

    Kwargs:
        user_name (str): The name of the user who called this function.
        uri (str): The uri that was used to call this function.
        method (str): The HTTP methos that was used to call this function.

    Basic Usage:
        >>> from vFense.core.user.users import add_users_to_group
        >>> group_id = '6ce3423e-544b-4206-b3cb-2296d39956b7'
        >>> usernames = ['tester1', 'tester2']
        >>> add_users_to_group(group_id, usernames)

    Returns:
        Dictionary of the status of the operation.
        {
            'uri': None,
            'rv_status_code': 1017,
            'http_method': None,
            'http_status': 200,
            'message': "None - add_users_to_group - customer names existed 'default', 'TopPatch', 'vFense' unchanged",
            'data': []

        }
    """
    users_are_valid = validate_user_names(usernames)
    group = get_group(group_id)
    results = None
    data_list = []
    status = add_users_to_group.func_name + ' - '
    msg = ''
    status_code = 0
    generic_status_code = 0
    vfense_status_code = 0
    generated_ids = []
    data_list = []
    if users_are_valid[0] and group:
        for username in usernames:
            if not user_exist_in_group(username, group_id):
                data_to_add = (
                    {
                        GroupsPerUserKeys.GroupId: group_id,
                        GroupsPerUserKeys.GroupName: group[GroupKeys.GroupName],
                        GroupsPerUserKeys.CustomerName: group[GroupKeys.CustomerName],
                        GroupsPerUserKeys.UserName: username,
                    }
                )
                data_list.append(data_to_add)

        if len(data_list) == len(usernames):
            status_code, _, _, generated_ids = (
                insert_group_per_user(data_list)
            )

            if status_code == DbCodes.Inserted:
                msg = (
                    'user %s added to %s' % (
                       ' and '.join(usernames), group_id
                    )
                )
                generic_status_code = GenericCodes.ObjectCreated
                vfense_status_code = UserCodes.UsersAddedToGroup

        else:
            status_code = DbCodes.Unchanged
            msg = (
                'user names %s existed for group %s' %
                (' and '.join(usernames), group_id)
            )
            generic_status_code = GenericCodes.ObjectExists
            vfense_status_code = GroupFailureCodes.UsersExistForGroup

    elif not group:
        status_code = DbCodes.Errors
        msg = 'group id is invalid: %s' % (group_id)
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = GroupFailureCodes.InvalidGroupId

    elif not users_are_valid[0]:
        status_code = DbCodes.Errors
        msg = (
            'user names are invalid: %s' % (
                ' and '.join(users_are_valid[2])
            )
        )
        generic_status_code = GenericCodes.InvalidId
        vfense_status_code = UserFailureCodes.InvalidUserName

    results = {
        ApiResultKeys.DB_STATUS_CODE: status_code,
        ApiResultKeys.GENERIC_STATUS_CODE: generic_status_code,
        ApiResultKeys.VFENSE_STATUS_CODE: vfense_status_code,
        ApiResultKeys.GENERATED_IDS: generated_ids,
        ApiResultKeys.MESSAGE: status + msg,
        ApiResultKeys.DATA: [],
        ApiResultKeys.USERNAME: user_name,
        ApiResultKeys.URI: uri,
        ApiResultKeys.HTTP_METHOD: method
    }

    return(results)