def unlock():
    encRequest = request.json
    ticket = encRequest['ticket']
    sessKey = ss.decrypt(base64.urlsafe_b64decode(ticket).decode(), server_key)
    new_file = json.loads(ss.decrypt(encRequest['file'], sessKey))
    for file in locked_files:
        if file['filename'] == new_file['filename']:
            locked_files.remove(file)
            return 'File unlocked.'
Пример #2
0
def add(filename, filepath, token):
    sessKey = token['session_key']
    file = {'filename': filename, 'filepath': filepath}
    add_json = {
        'file': ss.encrypt(json.dumps(file), sessKey),
        'ticket': token['ticket']
    }
    post = requests.post(ds_url + "add", json=add_json)
    return post.text
Пример #3
0
def quit(opened_files, token):
    for file in opened_files:
        sessKey = token['session_key']
        close_json = {
            'file': ss.encrypt(json.dumps(file), sessKey),
            'ticket': token['ticket']
        }
        close = requests.post(ls_url + "unlock", json=close_json)
        opened_files.remove(file)
    sys.exit()
def open_file():
    encRequest = request.json
    ticket = encRequest['ticket']
    sessKey = ss.decrypt(base64.urlsafe_b64decode(ticket).decode(), server_key)
    file = json.loads(ss.decrypt(encRequest['file'], sessKey))
    for n in [8007, 8008]:
        server_url = file_server_url + str(n) + "/open?" + 'filename=' + file[
            'filename'] + '&userId=' + file['userId']
        in_directory = requests.get(server_url)
        status_code = in_directory.status_code
        if status_code == 200:
            return in_directory.json()
        elif status_code == 409:
            return {
                'Error:': 'File is already locked.'
            }, status.HTTP_404_NOT_FOUND
    return {
        'Error:': 'File does not exist amongst servers.'
    }, status.HTTP_404_NOT_FOUND
Пример #5
0
def write(opened_files, filename, content, token):
    for file in opened_files:
        if file['filename'] == filename:
            sessKey = token['session_key']
            file['file_content'] = content
            open_json = {
                'file': ss.encrypt(json.dumps(file), sessKey),
                'ticket': token['ticket']
            }
            updated_file = requests.post(ds_url + "write", json=open_json)
            return updated_file.text
    return "Error: No file of such name is opened."
Пример #6
0
def close(opened_files, filename, token):
    for file in opened_files:
        if file['filename'] == filename:
            sessKey = token['session_key']
            close_json = {
                'file': ss.encrypt(json.dumps(file), sessKey),
                'ticket': token['ticket']
            }
            close = requests.post(ls_url + "unlock", json=close_json)
            opened_files.remove(file)
            return opened_files, "File successfully closed."
    return opened_files, "Error: No file of such name is opened."
def add_file():
    encRequest = request.json
    ticket = encRequest['ticket']
    sessKey = ss.decrypt(base64.urlsafe_b64decode(ticket).decode(), server_key)
    file = json.loads(ss.decrypt(encRequest['file'], sessKey))
    status_code = 0
    for n in [8007, 8008]:
        server_name = requests.get(file_server_url + str(n) + "/name")
        if server_name.text == file['filepath']:
            add_file = requests.post(file_server_url + str(n) + "/add",
                                     json=file)
            status_code = add_file.status_code
        else:
            backup = copy.copy(file)
            backup['filename'] = str(
                file['filename']).split('.')[0] + "_backup.txt"
            backup['server_port'] = str(n)
            add_file = requests.post(file_server_url + str(n) + "/add",
                                     json=backup)
    if status_code == 200:
        return add_file.text
    return 'Error: No such server exists.'
def write_file():
    encRequest = request.json
    ticket = encRequest['ticket']
    sessKey = ss.decrypt(base64.urlsafe_b64decode(ticket).decode(), server_key)
    file = json.loads(ss.decrypt(encRequest['file'], sessKey))
    status_code = 0
    for n in [8007, 8008]:
        if str(n) == file['server_port']:
            print(file)
            server_url = file_server_url + str(n) + "/write"
            write = requests.post(server_url, json=file)
            status_code = write.status_code
        else:
            server_url = file_server_url + str(n) + "/write"
            backup = copy.copy(file)
            backup['filename'] = str(
                file['filename']).split('.')[0] + "_backup.txt"
            backup['server_port'] = str(n)
            print(backup)
            write_backup = requests.post(server_url, json=backup)
    if status_code == 200:
        return "File successfully upated."
    return 'Error: Unknown Error.'
Пример #9
0
def open(opened_files, filename, userId, token):
    for file in opened_files:
        if file['filename'] == filename:
            return opened_files, 'File already opened.'
    sessKey = token['session_key']
    file = {'filename': filename, 'userId': userId}
    open_json = {
        'file': ss.encrypt(json.dumps(file), sessKey),
        'ticket': token['ticket']
    }
    open_file = requests.post(ds_url + "open", json=open_json)
    if open_file.status_code != 200:
        return opened_files, open_file.text.strip('{}')
    opened_files.append(open_file.json())
    return opened_files, 'File successfully opened.'
Пример #10
0
def main():

    # user login, each new client will be asked to log on, their details will then be stored in the SS database
    userId = input("Please Enter Username: "******"Please Enter Password: "******"For a list of all possible commands, type HELP.")
    while connected:
        cmd = input("Please Enter Command >: ")

        if cmd == "HELP":
            get_help()

        elif cmd == "QUIT":
            print("Goodbye!")
            quit(opened_files, dec_lock_token)

        elif "FIND" in cmd:
            filename = cmd.split()[1]
            read_file = requests.get(ds_url + "get_directory/" + filename)
            print(read_file.text)

        elif "OPEN" in cmd:
            filename = cmd.split()[1]
            opened_files, msg = open(opened_files, filename, userId,
                                     dec_dir_token)
            print(msg)

        elif "CLOSE" in cmd:
            filename = cmd.split()[1]
            opened_files, msg = close(opened_files, filename, dec_lock_token)
            print(msg)

        elif "READ" in cmd:
            filename = cmd.split()[1]
            file = read(opened_files, filename)
            print(file)

        elif "WRITE" in cmd:
            filename = cmd.split()[1]
            if len(cmd.split()) > 2:
                content = cmd.split(' ', 2)[2]
                msg = write(opened_files, filename, content, dec_dir_token)
                print(msg)
            else:
                print(
                    'WRITE requires two arguments, <filename> and  <updated content>'
                )

        elif "ADD" in cmd:
            filename = cmd.split()[1]
            if len(cmd.split()) > 2:
                filepath = cmd.split(' ', 2)[2]
                msg = add(filename, filepath, dec_dir_token)
                print(msg)
            else:
                print(
                    'ADD requires two arguments, <filename> and  <file server>'
                )

        elif "LIST" in cmd:
            if len(opened_files) > 0:
                print(opened_files)
            else:
                print("No files opened.")

        elif "CHECK" in cmd:
            filename = cmd.split()[1]
            check = requests.get(ls_url + "check/" + filename)
            print(check.text)

        else:
            print(
                "Please provide correct commands, for more information on the commands, type HELP"
                "\nMake sure to include file extensions in name (i.e. .txt etc)"
            )