Beispiel #1
0
def message_send(token, channel_id, message):
    # only the user who is in the channel can send message
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)
    auid = auser_dic['u_id']

    check_validchannel(channel_dic)
    check_auser_not_in_channel(auid, channel_dic['all_members'])
    check_message_length(message)

    c_messages = channel_dic['messages']
    m_id = helper_send_message(c_messages, message, auid)
    # append the m_id into the message list after sending

    return {'message_id': m_id}
Beispiel #2
0
def standup_active(token, channel_id):
    # 1. the channel should be valid
    # 2. authorised user should be in the channel
    auser_dic = get_user_from_token(token)
    auid = auser_dic['u_id']
    channel_dic = get_channel_from_cid(channel_id)

    check_validchannel(channel_dic)
    check_auser_not_in_channel(auid, channel_dic['all_members'])

    if not channel_dic['standup_is_active']:
        return {'is_active': False, 'time_finish': None}

    return {
        'is_active': True,
        'time_finish': channel_dic['standup_time_finish']
    }
Beispiel #3
0
def channel_details(token, channel_id):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)

    check_validchannel(channel_dic)
    # check_auser_not_in_channel (auser_dic['u_id'], channel_dic['all_members'])

    name = channel_dic['name']
    owner_members = get_members_details(channel_dic['owner_members'])
    all_members = get_members_details(channel_dic['all_members'])

    return {
        'name': name,
        'owner_members': owner_members,
        'all_members': all_members
    }
Beispiel #4
0
def channel_invite(token, channel_id, u_id):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)

    check_validchannel(channel_dic)

    members = channel_dic['all_members']
    check_auser_not_in_channel(auser_dic['u_id'], members)

    uid_dic = get_user_from_uid(u_id)
    # add this user in the channel if this user is not a member of the channel
    check_validuid(uid_dic)
    if u_id in members:
        raise ValueError("the invited user already in channel")
    members.append(u_id)
    return {}
Beispiel #5
0
def channel_removeowner(token, channel_id, u_id):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)

    check_validchannel(channel_dic)

    check_auser_permission_of_channel(auser_dic, channel_dic)
    # only the owner can remove an owner, remove oneself is okay
    if u_id not in channel_dic['owner_members']:
        raise ValueError("The user with uid is not a owner of this channel")

    check_only_owner(channel_dic)

    # add uid to the owner of the channel
    channel_dic['owner_members'].remove(u_id)
    return {}
Beispiel #6
0
def channel_messages(token, channel_id, start):
    check_tokenlogin(token)

    #set up the initial value
    max = 50
    returned_least_recent = -1

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)

    check_validchannel(channel_dic)
    check_auser_not_in_channel(auser_dic['u_id'], channel_dic['all_members'])

    # check if the start is valid
    total_messages = len(channel_dic['messages'])
    return_messages = []

    if total_messages == 0:
        return {'messages': return_messages, 'start': start, 'end': -1}

    if start > total_messages:
        raise ValueError(
            'Start is greater than the total number of messages in the channel'
        )

    counter = start
    end = start + max

    # get the messages between start and end
    # if end > total, just get the messages between start and last message
    while counter < end and counter < total_messages:
        return_messages.append(channel_dic['messages'][counter])
        counter = counter + 1

    # if this function has returned the least recent messages in the channel
    # returns -1 in "end" to indicate there are no more messages to load after this return.
    if start == total_messages:
        end = returned_least_recent

    # else return the counter of last message in the list of returned messages
    else:
        end = counter

    return {'messages': return_messages, 'start': start, 'end': end}
Beispiel #7
0
def channel_addowner(token, channel_id, u_id):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)

    check_validchannel(channel_dic)

    check_auser_permission_of_channel(auser_dic, channel_dic)

    check_uid_not_in_channel(u_id, channel_dic)

    if u_id in channel_dic['owner_members']:
        raise ValueError(
            "The user with uid is already a owner of this channel")

    # add uid to the owner of the channel
    channel_dic['owner_members'].append(u_id)
    return {}
Beispiel #8
0
def channel_join(token, channel_id):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)

    # check error
    check_validchannel(channel_dic)

    auid = auser_dic['u_id']
    check_auser_in_channel(auid, channel_dic['all_members'])

    # when channel_id refers to a channel that is private
    # when the authorised user is not an admin
    if not channel_dic['is_public'] and not helper_check_user_admin(auser_dic):
        raise AccessError("channel is private")

    # add the auser to channel
    channel_dic['all_members'].append(auid)

    return {}
Beispiel #9
0
def message_sendlater(token, channel_id, message, time_send):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)
    auid = auser_dic['u_id']

    check_validchannel(channel_dic)
    check_auser_not_in_channel(auid, channel_dic['all_members'])
    check_message_length(message)

    second = (convert_date(time_send) - datetime.utcnow()).total_seconds()
    if second < 0:
        raise ValueError("Time sent is a time in the past.")

    timer = CustomTimer(second, helper_send_message,
                        (channel_dic['messages'], message, auid))
    # timer = threading.Timer(second, message_send(token, channel_id, message))
    timer.start()
    m_id = timer.join()
    print(m_id)
    return {'message_id': m_id}
Beispiel #10
0
def channel_leave(token, channel_id):
    check_tokenlogin(token)

    channel_dic = get_channel_from_cid(channel_id)
    auser_dic = get_user_from_token(token)

    # check error
    check_validchannel(channel_dic)

    auser_uid = auser_dic['u_id']
    channel_all_members = channel_dic['all_members']
    check_auser_not_in_channel(auser_uid, channel_all_members)

    # the auser leave the channel
    channel_all_members.remove(auser_uid)
    owners = channel_dic['owner_members']
    # if auser is a owner of channel, remove auser from owner list of this channel
    if auser_uid in owners:
        check_only_owner(channel_dic)
        owners.remove(auser_uid)

    return {}
Beispiel #11
0
def standup_send(token, channel_id, message):
    # 1. the channel should be valid
    # 2. authorised user should be in the channel
    # 3. the message should be valid
    auser_dic = get_user_from_token(token)
    auid = auser_dic['u_id']
    auser_firstname = auser_dic['name_first']

    channel_dic = get_channel_from_cid(channel_id)

    check_message_length(message)
    check_validchannel(channel_dic)
    check_auser_not_in_channel(auid, channel_dic['all_members'])

    if not channel_dic['standup_is_active']:
        raise ValueError(
            "An active standup is not currently running in this channel")

    channel_dic['standup_messages'] = str(
        channel_dic['standup_messages']) + str(auser_firstname) + " : " + str(
            message) + "\n"

    return {}
Beispiel #12
0
def standup_start(token, channel_id, length):
    # 1. the authorised user should be in this channel
    # 2. the channel should be valid
    # 3. there can be only one standup at the same time in one channel
    auser_dic = get_user_from_token(token)
    auid = auser_dic['u_id']
    channel_dic = get_channel_from_cid(channel_id)

    check_validchannel(channel_dic)
    check_auser_not_in_channel(auid, channel_dic['all_members'])

    if channel_dic['standup_is_active']:
        raise ValueError(
            "An active standup is currently running in this channel")

    channel_dic['standup_is_active'] = True

    finish_time = int(datetime.datetime.now().strftime("%s")) + length
    channel_dic['standup_time_finish'] = finish_time
    timer = CustomTimer(length, helper_standup, (channel_dic, auid))
    timer.start()

    return {'time_finish': finish_time}