示例#1
0
def delete(id, db_session, username):
    logger.info(LogMsg.START, username)

    logger.info(LogMsg.DELETE_REQUEST, {'group_id': id})

    user = check_user(username, db_session)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_admin_member(user.person_id, id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.DISCUSSION_GROUP_PREMIUM], permissions, None,
                   per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    model_instance = db_session.query(DiscussionGroup).filter(
        DiscussionGroup.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, {'group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        delete_group_members(model_instance.id, db_session, username)
        logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)

        db_session.delete(model_instance)
        logger.debug(LogMsg.DISCUSSION_GROUP_DELETE, id)

    except:
        logger.exception(LogMsg.DELETE_FAILED, exc_info=True)
        raise Http_error(500, LogMsg.DELETE_FAILED)

    logger.info(LogMsg.END)

    return Http_response(204, True)
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, MEMBER_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    group_member = get_model(id, db_session)
    if group_member is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_member': id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    per_data = {}
    if is_admin_member(user.person_id, group_member.group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session, 'DISCUSSION_MEMBER',
                                    per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    for key, value in data.items():
        setattr(group_member, key, value)
    edit_basic_data(group_member, username, data.get('tags'))
    logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)

    return discussion_member_to_dict(group_member)
def delete(id, db_session, username):
    logger.info(LogMsg.START, username)
    group_member = get_model(id, db_session)
    if group_member is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_member': id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    per_data = {}
    if group_member.person_id == user.person_id or is_admin_member(
            user.person_id, group_member.group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session, 'DISCUSSION_MEMBER',
                                    per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    db_session.query(DiscussionMember).filter(
        DiscussionMember.id == id).delete()

    logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)

    return Http_response(204, True)
示例#4
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    # TODO: you never checked version of passed data, we have version field in our
    #      records, to prevent conflict when we received two different edit request
    #      concurrently. check KAVEH codes (edit functions) to better understanding
    #      version field usage

    logger.debug(LogMsg.EDIT_REQUST, {'discuss_group_id': id, 'data': data})

    user = check_user(username, db_session)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_admin_member(user.person_id, id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.DISCUSSION_GROUP_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    if "id" in data.keys():
        del data["id"]

    model_instance = db_session.query(DiscussionGroup).filter(
        DiscussionGroup.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'discussion_group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))
        if 'members' in data:
            members = data.get('members', [])
            members.append({'person_id': user.person_id, 'type': 'Admin'})

            delete_group_members(model_instance.id, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)
            member_data = {'group_id': model_instance.id, 'members': members}

            add_disscussuion_members(member_data, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_MEMBERS_ADDED, members)
        result = discuss_group_to_dict(model_instance, db_session)

        logger.debug(LogMsg.MODEL_ALTERED, result)

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.EDIT_FAILED)

    logger.info(LogMsg.END)
    return result
示例#5
0
def edit(id, db_session, data, username):
    logger.info(LogMsg.START, username)

    schema_validate(data, GROUP_EDIT_SCHEMA_PATH)
    logger.debug(LogMsg.SCHEMA_CHECKED)

    logger.debug(LogMsg.EDIT_REQUST, {'discuss_group_id': id, 'data': data})

    user = check_user(username, db_session)

    per_data = {}
    if is_admin_member(user.person_id, id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session, 'DISCUSSION_GROUP',
                                    per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    model_instance = db_session.query(DiscussionGroup).filter(
        DiscussionGroup.id == id).first()
    if model_instance:
        logger.debug(LogMsg.MODEL_GETTING)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {'discussion_group_id': id})
        raise Http_error(404, Message.NOT_FOUND)

    try:
        for key, value in data.items():
            # TODO  if key is valid attribute of class
            setattr(model_instance, key, value)
        edit_basic_data(model_instance, username, data.get('tags'))
        if 'members' in data:
            members = data.get('members', [])
            members.append({'person_id': user.person_id, 'type': 'Admin'})

            delete_group_members(model_instance.id, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)
            member_data = {'group_id': model_instance.id, 'members': members}

            add_disscussuion_members(member_data, db_session, username)
            logger.debug(LogMsg.DISCUSSION_GROUP_MEMBERS_ADDED, members)
        result = discuss_group_to_dict(model_instance, db_session)

        logger.debug(LogMsg.MODEL_ALTERED, result)

    except:
        logger.exception(LogMsg.EDIT_FAILED, exc_info=True)
        raise Http_error(500, Message.EDIT_FAILED)

    logger.info(LogMsg.END)
    return result
示例#6
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)
    logger.debug(LogMsg.EDIT_REQUST)

    if "id" in data.keys():
        del data["id"]
    logger.debug(LogMsg.MODEL_GETTING, id)
    model_instance = db_session.query(ChatMessage).filter(
        ChatMessage.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.GET_FAILED, id)
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)
    if user is None:
        raise Http_error(400, Message.INVALID_USER)

    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)

    permissions, presses = get_user_permissions(username, db_session)

    per_data = {}
    if model_instance.sender_id == user.person_id or (
            model_instance.group_id is not None and is_admin_member(
                user.person_id, model_instance.group_id, db_session)):
        per_data.update({Permissions.IS_OWNER.value: True})

    has_permission([Permissions.CHAT_EDIT_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    if 'sender_id' in data:
        del data['sender_id']
    if 'group_id' in data:
        del data['group_id']

    for key, value in data.items():
        setattr(model_instance, key, value)

    edit_basic_data(model_instance, username, data.get('tags'))

    logger.debug(LogMsg.MODEL_ALTERED, id)
    logger.info(LogMsg.END)

    return model_instance
示例#7
0
def delete(id, db_session, username, **kwargs):
    logger.info(LogMsg.START, username)

    logger.debug(LogMsg.MODEL_GETTING, id)
    model_instance = db_session.query(ChatMessage).filter(
        ChatMessage.id == id).first()
    if model_instance is None:
        logger.error(LogMsg.NOT_FOUND, id)
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)
    if user is None:
        logger.error(LogMsg.NOT_FOUND)
        raise Http_error(400, Message.INVALID_USER)
    if user.person_id is None:
        logger.error(LogMsg.USER_HAS_NO_PERSON, username)
        raise Http_error(400, Message.Invalid_persons)
    if model_instance.group_id is not None:
        if not is_group_member(user.person_id, model_instance.group_id,
                               db_session):
            logger.error(LogMsg.CHAT_PERSON_NOT_IN_GROUP, username)
            raise Http_error(403, Message.PERSON_CANT_DELETE_MESSAGE)

    permission_data = {}
    if model_instance.sender_id == user.person_id or (
            model_instance.group_id is not None and is_admin_member(
                user.person_id, model_instance.group_id, db_session)):
        permission_data.update({Permissions.IS_OWNER.value: True})

    permissions, presses = get_user_permissions(username, db_session)

    has_permission([Permissions.CHAT_DELETE_PREMIUM], permissions, None,
                   permission_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    try:
        db_session.delete(model_instance)
        logger.debug(LogMsg.DELETE_SUCCESS, {'message_id': id})
    except:
        logger.exception(LogMsg.DELETE_FAILED, exc_info=True)
        raise Http_error(404, Message.DELETE_FAILED)
    logger.info(LogMsg.END)

    return Http_response(204, True)
def add_disscussuion_members(data, db_session, username):
    logger.info(LogMsg.START, username)
    schema_validate(data, MEMBER_ADD_SCHEMA_PATH)

    logger.debug(LogMsg.SCHEMA_CHECKED)

    group_id = data.get('group_id')
    members = data.get('members')

    group = get_discussion_group(group_id, db_session)
    if group is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_id': group_id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    is_admin = False
    for item in members:
        if item['person_id'] == user.person_id and item['type'] == 'Admin':
            is_admin = True

    per_data = {}
    if is_admin or is_admin_member(user.person_id, group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})

    logger.debug(LogMsg.PERMISSION_CHECK, username)
    validate_permissions_and_access(username, db_session, 'DISCUSSION_MEMBER',
                                    per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    group_members = []

    for item in members:
        member = add(group_id, item.get('person_id'), item.get('type'),
                     db_session, username)
        group_members.append(discussion_member_to_dict(member))
    logger.debug(LogMsg.DISCUSSION_GROUP_MEMBERS_ADDED)
    return group_members
示例#9
0
def edit(id, data, db_session, username):
    logger.info(LogMsg.START, username)
    group_member = get_model(id, db_session)
    if group_member is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_member': id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_admin_member(user.person_id, group_member.group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.DISCUSSION_MEMBER_PREMIUM], permissions, None,
                   per_data)
    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    for key, value in data.items():
        setattr(group_member, key, value)
    edit_basic_data(group_member, username, data.get('tags'))
    logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)

    return discussion_member_to_dict(group_member)
示例#10
0
def delete_group_members(group_id, db_session, username):
    logger.info(LogMsg.START, username)
    group = get_discussion_group(group_id, db_session)
    if group is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_id': group_id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_admin_member(user.person_id, group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})
    has_permission([Permissions.DISCUSSION_MEMBER_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    db_session.query(DiscussionMember).filter(
        DiscussionMember.group_id == group_id).delete()

    logger.debug(LogMsg.DISCUSSION_GROUP_OLD_MEMBERS_DELETED)

    return Http_response(204, True)
示例#11
0
def add_disscussuion_members(data, db_session, username):
    logger.info(LogMsg.START, username)
    check_schema(['group_id', 'members'], data.keys())
    group_id = data.get('group_id')
    members = data.get('members')

    group = get_discussion_group(group_id, db_session)
    if group is None:
        logger.error(LogMsg.NOT_FOUND, {'discussion_group_id': group_id})
        raise Http_error(404, Message.NOT_FOUND)

    user = check_user(username, db_session)

    is_admin = False
    for item in members:
        if item['person_id'] == user.person_id and item['type'] == 'Admin':
            is_admin = True

    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_admin or is_admin_member(user.person_id, group_id, db_session):
        per_data.update({Permissions.IS_OWNER.value: True})

    has_permission([Permissions.DISCUSSION_MEMBER_PREMIUM], permissions, None,
                   per_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    group_members = []

    for item in members:
        member = add(group_id, item.get('person_id'), item.get('type'),
                     db_session, username)
        group_members.append(discussion_member_to_dict(member))
    logger.debug(LogMsg.DISCUSSION_GROUP_MEMBERS_ADDED)
    return group_members