Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions lastpass/fetcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ def logout(session, web_client=http):
)

if response.status_code != requests.codes.ok:
raise NetworkError()
raise NetworkError("%s %s" % (response.status_code, response.reason))


def fetch(session, web_client=http):
response = web_client.get('https://lastpass.com/getaccts.php?mobile=1&b64=1&hash=0.0&hasplugin=3.0.23&requestsrc=android',
cookies={'PHPSESSID': session.id})

if response.status_code != requests.codes.ok:
raise NetworkError()
raise NetworkError("%s %s" % (response.status_code, response.reason))

return blob.Blob(decode_blob(response.content), session.key_iteration_count)

Expand All @@ -51,7 +51,7 @@ def request_iteration_count(username, web_client=http):
response = web_client.post('https://lastpass.com/iterations.php',
data={'email': username})
if response.status_code != requests.codes.ok:
raise NetworkError()
raise NetworkError("%s %s" % (response.status_code, response.reason))

try:
count = int(response.content)
Expand Down Expand Up @@ -83,7 +83,7 @@ def request_login(username, password, key_iteration_count, multifactor_password=
data=body)

if response.status_code != requests.codes.ok:
raise NetworkError()
raise NetworkError("%s %s" % (response.status_code, response.reason))

try:
parsed_response = etree.fromstring(response.content)
Expand Down
13 changes: 9 additions & 4 deletions tests/test_fetcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from base64 import b64decode
import unittest
import mock
from nose.tools import assert_raises

import lastpass
from lastpass.blob import Blob
from lastpass import fetcher
Expand Down Expand Up @@ -167,7 +169,9 @@ def test_fetch_returns_a_blob(self):
def test_fetch_raises_exception_on_http_error(self):
m = mock.Mock()
m.get.return_value = self._http_error()
self.assertRaises(lastpass.NetworkError, fetcher.fetch, self.session, m)
with assert_raises(lastpass.NetworkError) as e:
fetcher.fetch(self.session, m)
self.assertEqual(str(e.exception), "404 Not Found")

def test_make_key_generates_correct_keys(self):
keys = [
Expand Down Expand Up @@ -204,17 +208,18 @@ def _verify_request_login_post_request(self, multifactor_password, device_id, po
m.post.assert_called_with('https://lastpass.com/login.php', data=post_data)

@staticmethod
def _mock_response(code, body):
def _mock_response(code, body, reason=""):
m = mock.Mock()
m.status_code = code
m.content = body
m.reason = reason
return m

def _http_ok(self, body):
return self._mock_response(200, body)
return self._mock_response(200, body, "OK")

def _http_error(self, body=''):
return self._mock_response(404, body)
return self._mock_response(404, body, "Not Found")

@staticmethod
def _lastpass_error(cause, message):
Expand Down