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
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
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(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
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
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