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