コード例 #1
0
def update_last_seen(message, person_id, db_session):
    logger.info(LogMsg.START)
    last_seen = None
    if message.receptor_id == person_id or (
            message.group_id is not None and is_group_member(person_id,
                                                             message.group_id,
                                                             db_session)):
        data = model_to_dict(message)
        data.update({'last_seen': Now()})
        logger.debug(LogMsg.LAST_SEEN_UPDATE,data)
        last_seen = add(db_session, data)
    logger.info(LogMsg.END)
    return last_seen
コード例 #2
0
def get(id, db_session, username, **kwargs):
    logger.info(LogMsg.START, username)
    result = None
    user = check_user(username, db_session)

    try:
        logger.debug(LogMsg.MODEL_GETTING, id)
        model_instance = db_session.query(ChatMessage).filter(
            ChatMessage.id == id).first()
        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.receptor_id == user.person_id or (
                model_instance.group_id is not None and is_group_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)
        update_last_seen(model_instance, user.person_id, db_session)

    except:
        logger.exception(LogMsg.GET_FAILED, exc_info=True)
        Http_error(404, Message.NOT_FOUND)

    logger.info(LogMsg.END)
    return result
コード例 #3
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)
コード例 #4
0
def add(db_session, data, username):
    logger.info(LogMsg.START, username)

    check_schema(['body'], data.keys())
    logger.debug(LogMsg.SCHEMA_CHECKED)
    group_id = data.get('group_id', None)
    user = check_user(username, db_session)
    if group_id is not None and not is_group_member(user.person_id, group_id,
                                                    db_session):
        logger.debug(LogMsg.CHAT_PERSON_NOT_IN_GROUP, {
            'group_id': group_id,
            'username': username
        })
        raise Http_error(403, Message.PERSON_CANT_SENT_MESSAGE)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    parent_id = data.get('parent_id', None)
    if parent_id:
        logger.debug(LogMsg.CHAT_CHECK_FOR_PARENT)
        parent_message = get_internal(parent_id, db_session)
        if parent_message is None:
            logger.error(LogMsg.CHAT_PARENT_NOT_FOUND, parent_id)
            raise Http_error(404, Message.PARENT_NOT_FOUND)

    model_instance = ChatMessage()
    logger.debug(LogMsg.POPULATING_BASIC_DATA)
    populate_basic_data(model_instance, username, data.get('tags'))
    model_instance.sender_id = user.person_id
    model_instance.receptor_id = data.get('receptor_id')
    model_instance.group_id = group_id
    model_instance.body = data.get('body')
    model_instance.parent_id = data.get('parent_id')

    db_session.add(model_instance)
    logger.debug(LogMsg.DB_ADD)

    logger.info(LogMsg.END)

    return model_instance
コード例 #5
0
def get_group_messages(group_id, data, db_session, username, **kwargs):
    logger.info(LogMsg.START, username)
    if data.get('sort') is None:
        data['sort'] = ['creation_date-']

    if data.get('filter') is None:
        data.update({'filter': {'group_id': group_id}})
    else:
        data['filter'].update({'group_id': group_id})

    user = check_user(username, db_session)

    permissions, presses = get_user_permissions(username, db_session)
    permission_data = {}
    if is_group_member(user.person_id, group_id, db_session):
        permission_data.update({Permissions.IS_OWNER.value: True})
        seen_data = {
            'receptor_id': user.person_id,
            'group_id': group_id,
            'last_seen': Now()
        }
        add_last_seen(seen_data, db_session)
    has_permission([Permissions.CHAT_GET_PREMIUM], permissions, None,
                   permission_data)

    logger.debug(LogMsg.PERMISSION_VERIFIED, username)

    try:
        logger.debug(LogMsg.CHAT_GET_GROUP_MESSAGES, group_id)
        result = ChatMessage.mongoquery(
            db_session.query(ChatMessage)).query(**data).end().all()

    except:
        logger.exception(LogMsg.GET_FAILED, exc_info=True)
        raise Http_error(400, Message.NOT_FOUND)
    logger.info(LogMsg.END)

    return result
コード例 #6
0
ファイル: discussuion_group.py プロジェクト: ourway/bokobo
def get(id, db_session, username):
    logger.info(LogMsg.START, username)
    user = check_user(username, db_session)
    per_data = {}
    permissions, presses = get_user_permissions(username, db_session)
    if is_group_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)

    logger.debug(LogMsg.MODEL_GETTING)
    model_instance = db_session.query(DiscussionGroup).filter(
        DiscussionGroup.id == id).first()
    if model_instance:
        result = discuss_group_to_dict(model_instance, db_session)
        logger.debug(LogMsg.GET_SUCCESS, result)
    else:
        logger.debug(LogMsg.MODEL_GETTING_FAILED, {"discuss_group_id": id})
        raise Http_error(404, Message.NOT_FOUND)
    logger.info(LogMsg.END)

    return result