Example #1
0
def message_edit(token, message_id, message):
    data = getData()
    #Test for valid token
    flag = 0
    for user in data['users']:
        if str(user['token']) == token and token != None:
            u_id = user['u_id']
            perm_id = user['permission_id']
            flag = 1

    if flag == 0:
        myexcept.token_error()

    send_Success = False

    flag = 0
    for findchannel in data['channels']:
        for findmessage in findchannel['messages']:
            channel_id = findchannel['channel_id']
            if str(findmessage['message_id']) == message_id:
                # checking if token is channel owner
                for channel in data['channels']:
                    if channel['channel_id'] == channel_id:
                        for owner in channel['owner_members']:
                            if owner['u_id'] == u_id:
                                send_Success = True
                if findmessage['u_id'] == u_id:
                    if perm_id == '1' or perm_id == '2' or send_Success:
                        flag = 1
                        findmessage['message'] = message
                        updateData(data)
                        return {}

    if flag == 0:
        myexcept.edit_message_denied()
Example #2
0
def channels_list(token):
    data_new = getData()

    flag = 0
    #Test for valid token
    for i in data_new['users']:
        if i['token'] == token and token != None:
            u_id = i['u_id']
            flag = 1
    if flag == 0:
        myexcept.token_error()

    answer = []
    for channels in data_new['channels']:
        valid = 0
        for members in channels['all_members']:
            if members['u_id'] == u_id:
                valid = 1
        if valid == 1:
            temp = {}
            temp['name'] = channels['channel_name']
            temp['channel_id'] = channels['channel_id']
            answer.append(temp)

    return answer
Example #3
0
def admin_userperm_change(token, u_id, permission_id):
    data = getData()

    #Test for valid token
    valid_token = False
    for user in data['users']:
        if user['token'] == token and token != None:
            perm_id = user['permission_id']
            valid_token = True

    if valid_token == False:
        myexcept.token_error()

    if permission_id != '1' and permission_id != '2' and permission_id != '3':
        myexcept.invalid_permission_id()

    if perm_id != '1' and perm_id != '2':
        myexcept.edit_permission_denied()

    user_found = False
    for user in data['users']:
        if user['u_id'] == u_id:
            user_found = True
            user['permission_id'] = permission_id
            updateData(data)
            return {}

    if user_found == False:
        myexcept.invalid_user()
Example #4
0
def channel_details(token, channel_id):
    data = getData()
    #Test for valid token
    flag = 0
    for user in data['users']:
        if user['token'] == token and token != None:
            u_id = user['u_id']
            flag = 1

    if flag == 0:
        myexcept.token_error()

    flag = 0
    flag2 = 0
    for channel in data['channels']:
        if channel['channel_id'] == channel_id:
            flag = 1
            for member in channel['all_members']:
                if member['u_id'] == u_id:
                    flag2 = 1
                    answer = {
                        'name': channel['channel_name'],
                        'owner_members': channel['owner_members'],
                        'all_members': channel['all_members']
                    }
                    return answer

    if flag == 0 or flag2 == 0:
        myexcept.member_not_in_channel()
Example #5
0
def message_sendlater(token, channel_id, messsage, time_sent):
    data = getData()

    #Test for valid message
    if len(message) > 1000:
        myexcept.invalid_message()

    #Test for valid token
    flag = 0
    for user in data['users']:
        if str(user['token']) == token and token != None:
            u_id = user['u_id']
            flag = 1

    if flag == 0:
        myexcept.token_error()

    #Test for valid time
    format = '%Y-%m-%d %H:%M:%S'
    present_time = datetime.now()
    send_time = datetime.strptime(time_sent, format)
    convert_present_time = datetime.strftime(present_time, format)
    present = datetime.strptime(convert_present_time, format)

    if send_time < present:
        myexcept.invalid_time()

    tdelta = send_time - present
    sendlater_time = present + timedelta(minutes=1) + tdelta
    delay_time = (sendlater_time - present).total_seconds()

    #Test if channel_id is valid and that user is in the channel_id
    channel_found = 0
    member_found = 0

    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            channel_found = 1
            for member in channel['all_members']:
                if member['u_id'] == u_id:
                    member_found = 1
                    time.sleep(delay_time)
                    answer = {
                        'message_id': 1,
                        'u_id': u_id,
                        'message': message,
                        'time_created': datetime.now(),
                        'reacts': {},
                        'is_pinned': False
                    }
                    channel['messages'].append(answer)
                    sendlater = {'message_id': answer['message_id']}
                    updateData(data)
                    return sendlater

    if channel_found == 0:
        myexcept.channel_not_found()
    elif member_found == 0:
        myexcept.member_not_in_channel()
Example #6
0
def message_react(token, message_id, react_id):
    data_new = getData()
    flag = 0
    #Test for valid token
    for i in data_new['users']:
        if i['token'] == token and token != None:
            u_id = i['u_id']
            flag = 1
    if flag == 0:
        myexcept.token_error()

    #Test if message_id exists
    message_found = 0
    member_found = 0

    for j in data_new['channels']:
        #Finding the message
        for k in j['messages']:
            if k['message_id'] == message_id:
                message_uid = k['u_id']
                message_found = 1
                #Testing to see if user is in the channel and has owner permission
                for l in j['all_members']:
                    if l['u_id'] == u_id:
                        member_found = 1
                if member_found == 0:
                    myexcept.member_not_in_channel()
                react_check = 0
                for react in k['reacts']:
                    if len(react) != 0 and react['react_id'] == react_id:
                        react_check = 1
                        if u_id in react['u_ids']:
                            myexcept.message_already_reacted()
                        react['u_ids'].append(u_id)
                        if message_uid == u_id:
                            react['is_this_user_reacted'] = True
                        else:
                            react['is_this_user_reacted'] = False

                if react_check == 0:
                    answer = {}
                    answer['react_id'] = react_id
                    answer['u_ids'] = [u_id]
                    if message_uid == u_id:
                        answer['is_this_user_reacted'] = True
                    else:
                        answer['is_this_user_reacted'] = False
                    k['reacts'].append(answer)
                answer = {}
                updateData(data_new)
                return answer
    if message_found == 0:
       myexcept.message_not_found()
Example #7
0
def channel_invite(token, channel_id, u_id):
    data = getData()
    # checking that token is a valid user
    authorised_user_exists = False
    for user in data['users']:
        if str(user['token']) == token and token != None:
            auth_u_id = user['u_id']
            perm_id = user['permission_id']
            authorised_user_exists = True

    if authorised_user_exists == False:
        myexcept.token_error()
    # checking that u_id is a valid user
    member_exists = False
    for user in data['users']:
        if user['u_id'] == u_id:
            name_first = user['first_name']
            name_last = user['last_name']
            member_exists = True

    if member_exists == False:
        myexcept.invalid_user()

    token_is_member = False
    valid_channel = False
    # checking authorised user is already a member of the channel
    for channel in data['channels']:
        if channel['channel_id'] == channel_id:
            valid_channel = True
            for member in channel['all_members']:
                if member['u_id'] == auth_u_id:
                    token_is_member = True
    if valid_channel == False:
        myexcept.channel_not_found()

    if token_is_member == False:
        myexcept.authorised_member_not_in_channel()

    # adding user to channel
    for channel in data['channels']:
        if channel['channel_id'] == channel_id:
            add_user = {
                'u_id': u_id,
                'name_first': name_first,
                'name_last': name_last
            }
            channel['all_members'].append(add_user)
            if perm_id == '1' or perm_id == '2':
                channel['owner_members'].append(add_user)
            updateData(data)
            return {}
def channel_removeowner(token, channel_id, u_id):

    data = getData()
    found_Token = False
    found_User = False
    # finding token and user data
    for user in data['users']:
        if str(user['token']) == token:
            tu_id = user['u_id']
            found_Token = True
        if str(user['u_id']) == u_id:
            name_first = user['first_name']
            name_last = user['last_name']
            found_User = True

    if found_Token == False:
        myexcept.token_error()
    if found_User == False:
        myexcept.invalid_user()

    found_Token = False
    found_User = False
    # checking user and token belongs to an owner
    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            for owner in channel['owner_members']:
                if owner['u_id'] == tu_id:
                    found_Token = True
                if str(owner['u_id']) == u_id:
                    found_User = True

    if found_Token == False:
        myexcept.authorised_member_not_admin()
    if found_User == False:
        myexcept.user_not_owner()

    send_Success = False
    # remove user from owner_members list
    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            channel['owner_members'].remove({
                'u_id': u_id,
                'name_first': name_first,
                'name_last': name_last
            })
            send_Success = True
            updateData(data)
            return {}

    if send_Success == False:
        myexcept.channel_not_found()
Example #9
0
def standup_start(token, channel_id):
    data = getData()

    #Test for valid token
    token_valid = False
    for user in data['users']:
        if str(user['token']) == token and token != None:
            u_id = user['u_id']
            token_valid = True

    if token_valid == False:
        myexcept.token_error()

    now = datetime.now()
    present_time_str = datetime.strftime(now, '%H:%M')
    present_time = datetime.strptime(present_time_str, '%H:%M')

    present_time_dict = {'time_finish': present_time_str}

    standup_end = present_time + timedelta(minutes=15)

    standup_end_dict = {'time_finish': standup_end}

    channel_found = False
    member_found = False

    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            channel_found = True
            if channel['standup_active'] == True:
                myexcept.active_stand_up()
            for member in channel['all_members']:
                if member['u_id'] == u_id:
                    member_found = True
                    channel['standup_active'] == True
                    # can't input more messages but can test for 1 message
                    while present_time_dict != standup_end_dict:
                        now_update = datetime.now()
                        present_time_str = datetime.strftime(
                            now_update, '%H:%M')
                        present_time_dict = {'time_finish': present_time_str}
                        timerAction()
                    return sendSuccess(standup_end_dict)

    if channel_found == False:
        myexcept.channel_name_invalid()
    if member_found == False:
        myexcept.member_not_in_channel()
Example #10
0
def user_profile(token, u_id):
    #Send Success
    data_new = getData()
    if testToken(token) == False:
        myexcept.token_error()

    for i in data_new['users']:
        if i['u_id'] == u_id:
            answer = {}
            answer['email'] = i['email']
            answer['first_name'] = i['first_name']
            answer['last_name'] = i['last_name']
            answer['handle_str'] = i['handle_str']
            return answer

    myexcept.invalid_user()
Example #11
0
def channel_addowner(token, channel_id, u_id):
    data = getData()
    send_Success = False
    found_Token = False

    # finding user data
    for user in data['users']:
        if str(user['u_id']) == u_id:
            name_first = user['first_name']
            name_last = user['last_name']
            send_Success = True
        if str(user['token']) == token:
            tu_id = user['u_id']
            found_Token = True

    if send_Success == False:
        myexcept.invalid_user()

    if found_Token == False:
        myexcept.token_error()

    send_Success = False
    # checking token belongs to an owner
    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            for owner in channel['owner_members']:
                if owner['u_id'] == tu_id:
                    send_Success = True

    if send_Success == False:
        myexcept.token_error()

    send_Success = False
    # adding user to owner_members list
    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            channel['owner_members'].append({
                'u_id': u_id,
                'name_first': name_first,
                'name_last': name_last
            })
            send_Success = True
            updateData(data)
            return {}

    if send_Success == False:
        myexcept.channel_not_found()
Example #12
0
def message_remove(token, message_id):
    data = getData()
    #Test for valid token
    flag = 0
    for user in data['users']:
        if str(user['token']) == token and token != None:
            u_id = user['u_id']
            perm_id = user['permission_id']
            flag = 1

    if flag == 0:
        myexcept.token_error()

    # find channel_id
    for channel in data['channels']:
        for message in channel['messages']:
            channel_id = channel['channel_id']
            if str(message['message_id']) == message_id:
                break

    # checking token belongs to an owner
    send_Success = False
    for channel in data['channels']:
        if channel['channel_id'] == channel_id:
            for owner in channel['owner_members']:
                if owner['u_id'] == u_id:
                    send_Success = True

    if send_Success == False:
        raise ValueError("token does not belong to an owner.")

    send_Success = False
    for channel in data['channels']:
        for message in channel['messages']:
            if str(message['message_id']) == message_id:
                if message['u_id'] == u_id:
                    send_Success = True
                    channel['messages'].remove(message)
                    updateData(data)
                    return {}

    if send_Success == False:
        raise ValueError(
            "You cannot edit other users message, or message no longer exists."
        )
Example #13
0
def message_unreact(token, message_id, react_id):
    data_new = getData()
    flag = 0
    #Test for valid token
    for i in data_new['users']:
        if i['token'] == token and token != None:
            u_id = i['u_id']
            flag = 1
    if flag == 0:
        myexcept.token_error()

    #Test if message_id exists
    message_found = 0
    member_found = 0

    for j in data_new['channels']:
        #Finding the message
        for k in j['messages']:
            if k['message_id'] == message_id:
                message_uid = k['u_id']
                message_found = 1
                #Testing to see if user is in the channel and has owner permission
                for l in j['all_members']:
                    if l['u_id'] == u_id:
                        member_found = 1
                if member_found == 0:
                    myexcept.member_not_in_channel()
                react_check = 0
                for react in k['reacts']:
                    react_dic = react
                    if str(react['react_id']) == react_id:
                        print(f"\n\n\n\n\n {react_dic} \n\n\n\n\n\n")
                        k['reacts'].remove(react_dic)
                        react_check = 1
                    if message_uid == u_id:
                        react['is_this_user_reacted'] = False
                if react_check == 0:
                    myexcept.message_already_unreacted()
                answer = {}
                updateData(data_new)
                return answer
    if message_found == 0:
        myexcept.invalid_message_id()
Example #14
0
def user_profile_setname(token, name_first, name_last):
    if len(name_first) >= 50 or len(name_first) <= 1:
        myexcept.name_first_invalid()
    if len(name_last) >= 50 or len(name_last) <= 1:
        myexcept.name_last_invalid()

    flag = 0
    data_new = getData()
    for i in data_new['users']:
        if i['token'] == token:
            i['first_name'] = name_first
            i['last_name'] = name_last
            flag = 1
            answer = {}
            updateData(data_new)
            return answer

    if flag == 0:
        myexcept.token_error()
Example #15
0
def channels_create(token, name, is_public):

    data = getData()
    valid_user = False
    # ValueError when name is more than 20 characters long as per the specs
    if len(name) > 20:
        myexcept.channel_name_invalid()

    for users in data['users']:
        if users['token'] == token:
            name_first = users['first_name']
            name_last = users['last_name']
            u_id = users['u_id']
            valid_user = True

    if valid_user == False:
        myexcept.token_error()

    # assuming that channel_id's are randomly generated
    channel_id = randint(0, 10000)
    channels_list = data['channels']
    channels_list.append({
        'channel_id':
        channel_id,
        'channel_name':
        name,
        'is_public':
        is_public,
        'owner_members': [{
            'u_id': u_id,
            'name_first': name_first,
            'name_last': name_last
        }],
        'all_members': [{
            'u_id': u_id,
            'name_first': name_first,
            'name_last': name_last
        }],
        'messages': []
    })
    updateData(data)
    return {'channel_id': channel_id}
def user_profile_setemail(token, email):
    data_new = getData()
    email_used = 0
    for t in data_new['users']:
        if t['email'] == email:
            email_used = 1

    if email_used == 1:
        myexcept.registered_email()
    flag = 0
    for i in data_new['users']:
        if i['token'] == token:
            if check(email) == False:
                myexcept.invalid_email()
            i['email'] = email
            flag = 1
            answer = {}
            updateData(data_new)
            return answer

    if flag == 0:
        myexcept.token_error()
Example #17
0
def message_send(token, channel_id, message):
    if len(message) > 1000:
        myexcept.invalid_message()

    data_new = getData()
    flag = 0
    #Test for valid token
    for i in data_new['users']:
        if i['token'] == token and token != None:
            u_id = i['u_id']
            flag = 1
    if flag == 0:
        myexcept.token_error()

    #Test if channel_id is valid and that user is in the channel_id
    channel_found = 0
    member_found = 0
    for j in data_new['channels']:
        if j['channel_id'] == channel_id:
            channel_found = 1
            for k in j['all_members']:
                if k['u_id'] == u_id:
                    member_found = 1
                    answer = {}
                    # assuming message_id is randomly generated
                    message_id = randint(0, 1000000)
                    answer['message_id'] = message_id
                    answer['u_id'] = u_id
                    answer['message'] = message
                    answer['time_created'] = "12:04"
                    answer['reacts'] = []
                    answer['is_pinned'] = False
                    j['messages'].append(answer)
                    updateData(data_new)
                    return {'message_id': message_id}
    if channel_found == 0:
        myexcept.channel_not_found()
    elif member_found == 0:
        myexcept.member_not_in_channel()
Example #18
0
def search(token, query_str):
    data_new = getData()
    flag = 0
    #Test for valid token
    for i in data_new['users']:
        if i['token'] == token and token != None:
            u_id = i['u_id']
            flag = 1
    if flag == 0:
        myexcept.token_error()

    answer = []
    #search through channels, find the channels that the user is in
    for j in data_new['channels']:
        for members in j['all_members']:
            if members['u_id'] == u_id:
                #This is a channel that the user is in
                for messages in j['messages']:
                    if query_str in messages['message']:
                        answer.append(messages)

    #search through all messages and find prefix (if contains)
    return answer
Example #19
0
def channel_leave(token, channel_id):

    data_new = getData()

    flag = 0
    #Test for valid token
    for i in data_new['users']:
        if i['token'] == token and token != None:
            u_id = i['u_id']
            flag = 1
    if flag == 0:
        myexcept.token_error()

    member_found = 0
    channel_found = 0
    for channels in data_new['channels']:
        if channels['channel_id'] == channel_id:
            channel_found = 1
            for members in channels['all_members']:
                member_count = len(channels['all_members'])
                if members['u_id'] == u_id:
                    member_found = 1
                    if members in channels['owner_members']:
                        channels['owner_members'].remove(members)
                    channels['all_members'].remove(members)
                    if member_count == 1:
                        data['channels'].remove(channels)
                    answer = {}
                    updateData(data_new)
                    return answer
    if channel_found == 0:
        myexcept.channel_not_found()
    if member_found == 0:
        myexcept.member_not_in_channel()

    answer = {}
    return answer
def user_profile_sethandle(token, handle_str):
    if len(handle_str) >= 20 or len(handle_str) <= 3:
        raise myexcept.invalid_handle_str()

    data_new = getData()

    handle_str_used = 0
    for t in data_new['users']:
        if t['handle_str'] == handle_str:
            handle_str_used = 1

    if handle_str_used == 1:
        myexcept.registered_email()
    flag = 0
    for i in data_new['users']:
        if i['token'] == token and token != None:
            i['handle_str'] = handle_str
            flag = 1
            answer = {}
            updateData(data_new)
            return answer

    if flag == 0:
        myexcept.token_error()
Example #21
0
def standup_send(token, channel_id, message):
    data = getData()

    token_valid = False
    for user in data['users']:
        if str(user['token']) == token and token != None:
            u_id = user['u_id']
            token_valid = True

    if token_valid == False:
        myexcept.token_error()

    if len(message) > 1000:
        myexcept.invalid_message()

    channel_found = False
    member_found = False

    standup_queue = []

    for channel in data['channels']:
        if str(channel['channel_id']) == channel_id:
            channel_found = True
            if channel['standup_active'] == False:
                myexcept.inactive_stand_up()
            for member in channel['all_members']:
                if member['u_id'] == u_id:
                    member_found = True
                    standup_start.standup_start(token, channel_id)
                    standup_queue.append(message)
                    return sendSuccess({})

    if channel_found == False:
        myexcept.channel_name_invalid()
    if member_found == False:
        myexcept.member_not_in_channel()
Example #22
0
def channel_join(token, channel_id):
    data = getData()
    #Test for valid token
    flag = 0
    for user in data['users']:
        # If token is valid, get user's u_id, first name, last name
        if user['token'] == token and token != None:
            u_id = user['u_id']
            name_first = user['first_name']
            name_last = user['last_name']
            perm_id = user['permission_id']
            flag = 1

    if flag == 0:
        myexcept.token_error()

    channel_found = 0
    member_not_found = 0

    # search for the channel with channel_id
    for channel in data['channels']:
        if channel['channel_id'] == channel_id:
            if channel['is_public'] == False:
                if perm_id == '1' or perm_id == '2':
                    channel_found = 1
                    # search in channel members, if the user is not already in the channel
                    for member in channel['all_members']:
                        if member['u_id'] != u_id:
                            member_not_found = 1
                            add_user = {
                                'u_id': u_id,
                                'name_first': name_first,
                                'name_last': name_last
                            }
                            channel['all_members'].append(add_user)
                            channel['owner_members'].append(add_user)
                            return {}
                else:
                    myexcept.private_channel_denied()
            elif channel['is_public'] == True:
                channel_found = 1
                # search in channel members, if the user is not already in the channel
                for member in channel['all_members']:
                    if member['u_id'] != u_id:
                        member_not_found = 1
                        if perm_id == '1' or perm_id == '2':
                            p_id = '1'
                        else:
                            p_id = '2'
                        add_user = {
                            'u_id': u_id,
                            'name_first': name_first,
                            'name_last': name_last
                        }
                        channel['all_members'].append(add_user)
                        updateData(data)
                        return {}

    if channel_found == 0:
        myexcept.channel_not_found()
    elif member_not_found == 0:
        myexcept.member_in_channel()