예제 #1
0
def message_edit(token, message_id, message):
    data = getData()
    input_message_id = int(message_id)
    basic_info = getUserFromToken(token)
    flag_1 = False  # Checks for permission.
    flag_2 = False  # Checks if its the authorized user.
    for i in data['message_info']:
        if (i['message_id'] == input_message_id):
            if (message == ""):
                data['message_info'].remove(i)
                return {}
            for channel in data['channel_info']:
                if (channel['channel_id']) == i['channel_id']:
                    for owner in channel['owner_members']:
                        if (owner['u_id'] == basic_info['u_id']):
                            flag_1 = True
            if (basic_info['permission_id'] != 3):
                flag_1 = True
            if (i['u_id'] == basic_info['u_id']):
                flag_2 = True
            if (flag_1 == False):
                raise AccessError('user has insufficient permissions')
            if (flag_2 == False):
                raise AccessError('user is not authorized')
            i['message'] = message
    return {}
예제 #2
0
def message_unpin(token, message_id):
    data = getData()
    input_message_id = int(message_id)
    basic_info = getUserFromToken(token)
    flag_1 = False  # Checks for permission to unpin.
    flag_2 = False  # Checks if message exists.
    flag_3 = False  # Checks if the user is a member of the channel that the message is within.
    for message in data['message_info']:
        if (message['message_id'] == input_message_id):
            for channel in data['channel_info']:
                if (channel['channel_id']) == message['channel_id']:
                    for owner in channel['owner_members']:
                        if (owner['u_id'] == basic_info['u_id']):
                            flag_1 = True
                    for member in channel['all_members']:
                        if (member['u_id'] == basic_info['u_id']):
                            flag_3 = True
            if (basic_info['permission_id'] != 3):
                flag_1 = True
            if (flag_1 == False):
                raise ValueError('user has insufficient permissions')
            if (flag_3 == False):
                raise AccessError(
                    'user is not a member of the channel that the message is within'
                )
            if (message['is_pinned'] == False):
                raise ValueError('message already unpinned')
            flag_2 = True
            message['is_pinned'] = False
    if (flag_2 == False):
        raise ValueError('message does not exist')

    return {}
예제 #3
0
def channel_join(token, channel_id):
    data = getData()
    basic_info = getUserFromToken(token)
    channel_id_integer = int(channel_id)
    flag_1 = False
    flag_2 = False
    for channel in data['channel_info']:
        if (channel_id_integer == channel['channel_id']):
            flag_1 = True
            if (channel['is_public'] == True):
                flag_2 = True
                all_users = {}
                all_users['u_id'] = basic_info['u_id']
                all_users['name_first'] = basic_info['name_first']
                all_users['name_last'] = basic_info['name_last']
                channel['all_members'].append(all_users)
            else:
                for user in data['user_info']:
                    if user['u_id'] == basic_info['u_id']:
                        if user['permission_id'] != 3:
                            flag_2 = True
                            all_users = {}
                            all_users['u_id'] = basic_info['u_id']
                            all_users['name_first'] = basic_info['name_first']
                            all_users['name_last'] = basic_info['name_last']
                            channel['all_members'].append(all_users)
    if (flag_1 == False):
        raise ValueError(description="channel_id is invalid")
    if (flag_2 == False):
        raise AccessError(description="cannot join channel as it is private")
    return {}
예제 #4
0
def message_send(token, channel_id, message):
    data = getData()
    channel_id_integer = int(channel_id)
    # message is more than 1000 characters
    if (len(message) > 1000):
        raise ValueError(description='message is exceeding the maximum')
    for user in data['channel_info']:
        if (channel_id_integer == user['channel_id']):
            for i in user['all_members']:
                basic_info = getUserFromToken(token)
                return_message_id = generateMessage_id(message_id)
                if (basic_info['u_id'] == i['u_id']):
                    message_dict = {}
                    message_dict['message_id'] = return_message_id
                    message_dict['u_id'] = i['u_id']
                    message_dict['message'] = message
                    message_dict['time_created'] = datetime.timestamp(
                        datetime.now())
                    message_dict['time_sent'] = datetime.timestamp(
                        datetime.now())
                    message_dict['reacts'] = [{
                        'react_id': 1,
                        'u_ids': [],
                        'is_this_user_reacted': False
                    }]
                    message_dict['is_pinned'] = False
                    message_dict['channel_id'] = channel_id_integer
                    message_dict['is_unread'] = True
                    data['message_info'].append(message_dict)
                    return {'message_id': return_message_id}
    # if user is not in this channel currently
    raise AccessError('this user is not in this channel')
예제 #5
0
def channel_details(token, channel_id):
    data = getData()
    channel_id_integer = int(channel_id)
    flag_1 = False
    flag_2 = False
    # check if the channel ID is invalid
    for i in data['channel_info']:
        if (channel_id_integer == i['channel_id']):
            flag_1 = True
            channel = i
            # check if the user is not a member in this channel with channel_id
            for user in i['all_members']:
                basic_info = getUserFromToken(token)
                print(user)
                if (basic_info['u_id'] == user['u_id']):
                    flag_2 = True
    if (flag_1 == False):
        raise ValueError(description='channel_id is invalid')
    if (flag_2 == False):
        raise AccessError(description='u_id is not in this channel')
    return {
        'name': channel['name'],
        'owner_members': channel['owner_members'],
        'all_members': channel['all_members']
    }
예제 #6
0
def channel_invite(token, channel_id, u_id):
    data = getData()
    basic_info = getUserFromToken(token)
    channel_id_integer = int(channel_id)
    u_id_integer = int(u_id)
    flag_1 = False
    flag_2 = False
    flag_3 = False
    # u_id is invalid
    for user in data['user_info']:
        if (u_id_integer == user['u_id']):
            flag_1 = True
    if (flag_1 == False):
        raise ValueError("u_id we want to invite is invalid")

    for channel in data['channel_info']:
        if (channel_id_integer == channel['channel_id']):
            flag_2 = True
            for i in channel['all_members']:
                if (i['u_id'] == basic_info['u_id']):
                    flag_3 = True
                    # invite this user into this channel
                    users_all = {}
                    users_all['u_id'] = u_id_integer
                    users_all['name_first'] = user['name_first']
                    users_all['name_last'] = user['name_last']
                    channel['all_members'].append(users_all)
    if (flag_2 == False):
        raise ValueError(description="the channel_id is invalid")
    if (flag_3 == False):
        raise AccessError(
            description=
            "the authorised user is not already a member of this channel")
    return {}
예제 #7
0
def removeowners_channel(token, channel_id, u_id):
    data = getData()
    basic_info = getUserFromToken(token)
    channel_id_integer = int(channel_id)
    u_id_integer = int(u_id)
    flag_1 = False
    flag_2 = False
    flag_3 = False
    flag_4 = False
    for user in data['user_info']:
        if (u_id_integer == user['u_id']):
            flag_1 = True
    if (flag_1 == False):
        raise ValueError(
            description="u_id we want to remove as owner is invalid")

    for channel in data['channel_info']:
        if (channel_id_integer == channel['channel_id']):
            flag_2 = True
            for i in channel['owner_members']:
                if (i['u_id'] == u_id_integer):
                    flag_3 = True
            for i in channel['owner_members']:
                if (i['u_id'] == basic_info['u_id']):
                    flag_4 = True
            found = None
            for i in channel['owner_members']:
                if (i['u_id'] == basic_info['u_id'] and flag_3 == True):
                    found = i

            if found != None:
                channel['owner_members'].remove(i)

    if (flag_2 == False):
        raise ValueError(description="channel id is not a valid channel")
    if (flag_3 == False):
        raise ValueError(description="user is not an owner of the channel")
    if (flag_4 == False):
        raise AccessError(
            description="the authorsied user is not an owner of the channel")
    return {}
예제 #8
0
def addowners_channel(token, channel_id, u_id):
    data = getData()
    basic_info = getUserFromToken(token)
    channel_id_integer = int(channel_id)
    u_id_integer = int(u_id)
    flag_1 = False
    flag_2 = False
    flag_3 = False
    flag_4 = False
    for user in data['user_info']:
        if (u_id_integer == user['u_id']):
            flag_1 = True
    if (flag_1 == False):
        raise ValueError(description="u_id we want to make owner is invalid")

    for channel in data['channel_info']:
        if (channel_id_integer == channel['channel_id']):
            flag_2 = True
            for i in channel['owner_members']:
                if (i['u_id'] == u_id_integer):
                    flag_3 = True
            for i in channel['owner_members']:
                if (i['u_id'] == basic_info['u_id']):
                    flag_4 = True
            for i in channel['owner_members']:
                if (i['u_id'] == basic_info['u_id'] and flag_3 == False):
                    owner = {}
                    owner['u_id'] = u_id_integer
                    owner['name_first'] = user['name_first']
                    owner['name_last'] = user['name_last']
                    channel['owner_members'].append(owner)

    if (flag_2 == False):
        raise ValueError(description="channel id is not a valid channel")
    if (flag_3 == True):
        raise ValueError(description="user is already an owner of the channel")
    if (flag_4 == False):
        raise AccessError(
            description="the authorsied user is not an owner of the channel")
    return {}
예제 #9
0
def sendlater_message(token, channel_id, message, time_sent):
    data = getData()
    channel_id_integer = int(channel_id)
    time_sent_integer = float(time_sent)
    time_now = datetime.utcnow().replace(tzinfo=timezone.utc).timestamp()
    return_message_id = generateMessage_id(message_id)
    # if the time_sent is time in the past
    if (time_sent_integer < time_now):
        raise ValueError('the time sent is a time in the past')
    # if message's length is more than 1000
    if (len(message) > 1000):
        raise ValueError('message is more than 1000')
    flag = False
    for i in data['channel_info']:
        if (i['channel_id'] == channel_id_integer):
            flag = True
    # if the channel_id is invalid
    if (flag == False):
        raise ValueError('the channel_id is invalid')
    for user in data['channel_info']:
        for i in user['all_members']:
            basic_info = getUserFromToken(token)
            if (basic_info['u_id'] == i['u_id']):
                message_dict = {}
                message_dict['message_id'] = return_message_id
                message_dict['message'] = message
                message_dict['time_created'] = datetime.timestamp(
                    datetime.now())

                message_dict['time_sent'] = float(time_sent) / 1000
                message_dict['react_id'] = 0
                message_dict['is_pinned'] = True
                message_dict['channel_id'] = channel_id_integer
                message_dict['is_unread'] = True
                message_dict['u_id'] = i['u_id']
                data['message_info'].append(message_dict)
                return {'message_id': return_message_id}
    # the authorised user is not in this channel currently
    raise AccessError('this user is not current in this channel')
예제 #10
0
def channel_messages(token, channel_id, start):
    data = getData()
    channel_id = int(channel_id)
    start = int(start)
    basic_info = getUserFromToken(token)
    flag_1 = False
    flag_2 = False
    return_list = []
    # check if the channel_id doesn't exist
    for i in data['channel_info']:
        if (channel_id == i['channel_id']):
            flag_1 = True
            # check if the user is not a member in this channel with channel_id
            for user in i['all_members']:
                if (basic_info['u_id'] == user['u_id']):
                    flag_2 = True
    if (flag_1 == False):
        raise ValueError(description='channel_id is invalid')
    if (flag_2 == False):
        raise AccessError(description='u_id is not in this channel')
    if (start > len(data['message_info'])):
        raise ValueError(
            description='start is greater than the total number of messages')
    ch_msgs = [
        msg for msg in data['message_info'] if msg['channel_id'] == channel_id
    ]
    ch_msgs.sort(key=lambda msg: msg['time_created'])
    for ix, msg in enumerate(ch_msgs):
        if (ix + 1 >= start):
            if msg['time_sent'] < datetime.timestamp(datetime.now()):
                return_list.append({
                    'u_id': msg['u_id'],
                    'message': msg['message'],
                    'time_created': msg['time_created'],
                    'is_unread': msg['is_unread']
                })
    return {'messages': return_list, 'start': start, 'end': start + 50}
예제 #11
0
def message_remove(token, message_id):
    data = getData()
    input_message_id = int(message_id)
    basic_info = getUserFromToken(token)
    flag_1 = False  # Checks for owner permission.
    flag_2 = False  # Checks if message exists
    for msg in data['message_info']:
        if (msg['message_id'] == input_message_id):
            for channel in data['channel_info']:
                if (channel['channel_id']) == msg['channel_id']:
                    for owner in channel['owner_members']:
                        if (owner['u_id'] == basic_info['u_id']):
                            flag_1 = True
            if (basic_info['permission_id'] != 3):
                flag_1 = True
            if (msg['u_id'] == basic_info['u_id']):
                flag_1 = True
            if (flag_1 == False):
                raise AccessError('user has insufficient permissions')
            flag_2 = True
            data['message_info'].remove(msg)
    if (flag_2 == False):
        raise ValueError('message does not exist')
    return {}