summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnike Arni <anikarni@gmail.com>2017-03-20 16:25:11 -0300
committerGitHub <noreply@github.com>2017-03-20 16:25:11 -0300
commit93b7398efaadecf1e6c983a6d1aae471dbe6e4d9 (patch)
tree8f0e05147a0bb8e0ece3ad24c23f743821cbb21f
parentf9ab38869b29eb4560b8b8f69c1dab191adfe782 (diff)
parentfcedbb416c7ab60899740945af48893df88d85b8 (diff)
Merge pull request #1015 from pixelated/generate-recovery-code
Generate recovery code
-rw-r--r--service/pixelated/account_recovery.py10
-rw-r--r--service/pixelated/resources/__init__.py3
-rw-r--r--service/pixelated/resources/backup_account_resource.py6
-rw-r--r--service/requirements.txt2
-rw-r--r--service/test/unit/resources/test_backup_account_resource.py4
-rw-r--r--service/test/unit/resources/test_base_resource.py27
-rw-r--r--service/test/unit/test_account_recovery.py11
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)