Example #1
0
def login(username, master_password):
    """
    Posts username and authentication hash to /login.
    Decrypts vault on successful login.
    Returns new Session.
    """
    print('Logging in...')
    url = api_base_url + '/login'

    auth_hash = get_auth_hash(username, master_password)
    body = {
        'username': username,
        'auth_hash': base64.b64encode(auth_hash).decode(),
    }

    response = requests.post(url, data=json.dumps(body))

    if response.status_code != requests.codes.ok:
        print('Login attempt failed with status code: ' +
              str(response.status_code))
        exit()

    response_body = response.json()
    cipher_text = base64.b64decode(response_body['vault'].encode())
    key = get_key(username, master_password)
    vault_str = decrypt_vault(cipher_text, key)
    vault_dict = json.loads(vault_str)

    session = Session(username, auth_hash, key)
    session.dict_to_vault(vault_dict)

    return session