diff options
author | Anike Arni <anikarni@gmail.com> | 2017-03-20 16:25:11 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-20 16:25:11 -0300 |
commit | 93b7398efaadecf1e6c983a6d1aae471dbe6e4d9 (patch) | |
tree | 8f0e05147a0bb8e0ece3ad24c23f743821cbb21f | |
parent | f9ab38869b29eb4560b8b8f69c1dab191adfe782 (diff) | |
parent | fcedbb416c7ab60899740945af48893df88d85b8 (diff) |
Merge pull request #1015 from pixelated/generate-recovery-code
Generate recovery code
-rw-r--r-- | service/pixelated/account_recovery.py | 10 | ||||
-rw-r--r-- | service/pixelated/resources/__init__.py | 3 | ||||
-rw-r--r-- | service/pixelated/resources/backup_account_resource.py | 6 | ||||
-rw-r--r-- | service/requirements.txt | 2 | ||||
-rw-r--r-- | service/test/unit/resources/test_backup_account_resource.py | 4 | ||||
-rw-r--r-- | service/test/unit/resources/test_base_resource.py | 27 | ||||
-rw-r--r-- | service/test/unit/test_account_recovery.py | 11 |
7 files changed, 51 insertions, 12 deletions
diff --git a/service/pixelated/account_recovery.py b/service/pixelated/account_recovery.py index 39614b4c..234bb1fe 100644 --- a/service/pixelated/account_recovery.py +++ b/service/pixelated/account_recovery.py @@ -20,13 +20,15 @@ log = Logger() class AccountRecovery(object): - def __init__(self, session): - self._session = session + def __init__(self, session, soledad): + self._bonafide_session = session + self._soledad = soledad @inlineCallbacks - def update_recovery_code(self, recovery_code): + def update_recovery_code(self): try: - response = yield self._session.update_recovery_code(recovery_code) + code = self._soledad.create_recovery_code() + response = yield self._bonafide_session.update_recovery_code(code) returnValue(response) except Exception as e: log.warn('Something went wrong when trying to save the recovery code') diff --git a/service/pixelated/resources/__init__.py b/service/pixelated/resources/__init__.py index f5512644..61e60720 100644 --- a/service/pixelated/resources/__init__.py +++ b/service/pixelated/resources/__init__.py @@ -119,6 +119,9 @@ class BaseResource(Resource): def feedback_service(self, request): return self._service(request, 'feedback_service') + def soledad(self, request): + return self._service(request, '_leap_session').soledad + class UnAuthorizedResource(Resource): diff --git a/service/pixelated/resources/backup_account_resource.py b/service/pixelated/resources/backup_account_resource.py index 0b73bc35..b752b4c7 100644 --- a/service/pixelated/resources/backup_account_resource.py +++ b/service/pixelated/resources/backup_account_resource.py @@ -49,7 +49,9 @@ class BackupAccountResource(BaseResource): return renderElement(request, site) def render_POST(self, request): - account_recovery = AccountRecovery(self._authenticator.bonafide_session) + account_recovery = AccountRecovery( + self._authenticator.bonafide_session, + self.soledad(request)) def update_response(response): request.setResponseCode(NO_CONTENT) @@ -59,6 +61,6 @@ class BackupAccountResource(BaseResource): request.setResponseCode(INTERNAL_SERVER_ERROR) request.finish() - d = account_recovery.update_recovery_code("123") + d = account_recovery.update_recovery_code() d.addCallbacks(update_response, error_response) return NOT_DONE_YET diff --git a/service/requirements.txt b/service/requirements.txt index 5c478bf2..d196572c 100644 --- a/service/requirements.txt +++ b/service/requirements.txt @@ -9,5 +9,5 @@ Twisted==16.1.1 -e 'git+https://0xacab.org/leap/leap_pycommon.git@master#egg=leap.common' -e 'git+https://0xacab.org/pixelated/bitmask-dev.git@development#egg=leap.bitmask' -e 'git+https://0xacab.org/pixelated/soledad.git@master#egg=leap.soledad.common&subdirectory=common/' --e 'git+https://0xacab.org/pixelated/soledad.git@master#egg=leap.soledad.client&subdirectory=client/' +-e 'git+https://0xacab.org/pixelated/soledad.git@generate-recovery-code#egg=leap.soledad.client&subdirectory=client/' -e . diff --git a/service/test/unit/resources/test_backup_account_resource.py b/service/test/unit/resources/test_backup_account_resource.py index 2e676d9b..2b68dd1b 100644 --- a/service/test/unit/resources/test_backup_account_resource.py +++ b/service/test/unit/resources/test_backup_account_resource.py @@ -53,7 +53,9 @@ class TestBackupAccountResource(unittest.TestCase): d = self.web.get(request) def assert_update_recovery_code_called(_): - mock_account_recovery_init.assert_called_with(self.resource._authenticator.bonafide_session) + mock_account_recovery_init.assert_called_with( + self.resource._authenticator.bonafide_session, + self.resource.soledad(request)) mock_account_recovery.update_recovery_code.assert_called() d.addCallback(assert_update_recovery_code_called) diff --git a/service/test/unit/resources/test_base_resource.py b/service/test/unit/resources/test_base_resource.py new file mode 100644 index 00000000..35ae67c7 --- /dev/null +++ b/service/test/unit/resources/test_base_resource.py @@ -0,0 +1,27 @@ +# +# Copyright (c) 2017 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. + +from mock import MagicMock +from twisted.trial import unittest +from pixelated.resources import BaseResource + + +class TestBaseResource(unittest.TestCase): + def test_get_soledad_service(self): + mock_services_factory = MagicMock() + base_resource = BaseResource(mock_services_factory) + + self.assertEqual(base_resource.soledad('request'), mock_services_factory.services()._leap_session.soledad) diff --git a/service/test/unit/test_account_recovery.py b/service/test/unit/test_account_recovery.py index 51ba3fd0..af14814a 100644 --- a/service/test/unit/test_account_recovery.py +++ b/service/test/unit/test_account_recovery.py @@ -26,8 +26,11 @@ class AccountRecoveryTest(unittest.TestCase): @inlineCallbacks def test_update_recovery_code(self): - mock_session = Mock() - account_recovery = AccountRecovery(mock_session) + generated_code = '4645a2f8997e5d0d' + mock_bonafide_session = Mock() + mock_soledad = Mock() + mock_soledad.create_recovery_code.return_value = generated_code + account_recovery = AccountRecovery(mock_bonafide_session, mock_soledad) - yield account_recovery.update_recovery_code('ABC') - mock_session.update_recovery_code.assert_called_once_with('ABC') + yield account_recovery.update_recovery_code() + mock_bonafide_session.update_recovery_code.assert_called_once_with(generated_code) |