From c5c858f92b30862d0b8977b7559e437cdd073d7f Mon Sep 17 00:00:00 2001 From: Anike Arni Date: Wed, 29 Mar 2017 14:37:41 -0300 Subject: [#932] Makes account recovery resource public --- service/pixelated/resources/account_recovery_resource.py | 5 +++-- service/pixelated/resources/login_resource.py | 3 +++ service/pixelated/resources/root_resource.py | 2 +- service/test/unit/resources/test_login_resource.py | 10 ++++++++++ web-ui/config/public-assets-webpack.js | 1 + web-ui/src/account_recovery/account_recovery.html | 2 +- web-ui/webpack.config.js | 4 ++-- web-ui/webpack.production.config.js | 4 ++-- 8 files changed, 23 insertions(+), 8 deletions(-) diff --git a/service/pixelated/resources/account_recovery_resource.py b/service/pixelated/resources/account_recovery_resource.py index ccfdc580..8cb10fc8 100644 --- a/service/pixelated/resources/account_recovery_resource.py +++ b/service/pixelated/resources/account_recovery_resource.py @@ -18,19 +18,20 @@ import os from pixelated.resources import BaseResource from twisted.python.filepath import FilePath -from pixelated.resources import get_protected_static_folder +from pixelated.resources import get_public_static_folder from twisted.web.http import OK from twisted.web.template import Element, XMLFile, renderElement class AccountRecoveryPage(Element): - loader = XMLFile(FilePath(os.path.join(get_protected_static_folder(), 'account_recovery.html'))) + loader = XMLFile(FilePath(os.path.join(get_public_static_folder(), 'account_recovery.html'))) def __init__(self): super(AccountRecoveryPage, self).__init__() class AccountRecoveryResource(BaseResource): + BASE_URL = 'account-recovery' isLeaf = True def __init__(self, services_factory): diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py index 3e1200d7..45942ea6 100644 --- a/service/pixelated/resources/login_resource.py +++ b/service/pixelated/resources/login_resource.py @@ -20,6 +20,7 @@ from xml.sax import SAXParseException from pixelated.authentication import Authenticator from pixelated.config.leap import BootstrapUserServices from pixelated.resources import BaseResource, UnAuthorizedResource, IPixelatedSession +from pixelated.resources.account_recovery_resource import AccountRecoveryResource from pixelated.resources import get_public_static_folder, respond_json from twisted.cred.error import UnauthorizedLogin from twisted.internet import defer @@ -101,6 +102,8 @@ class LoginResource(BaseResource): return self if path == 'status': return LoginStatusResource(self._services_factory) + if path == AccountRecoveryResource.BASE_URL: + return AccountRecoveryResource(self._services_factory) if not self.is_logged_in(request): return UnAuthorizedResource() return NoResource() diff --git a/service/pixelated/resources/root_resource.py b/service/pixelated/resources/root_resource.py index 02f2fb62..d860c422 100644 --- a/service/pixelated/resources/root_resource.py +++ b/service/pixelated/resources/root_resource.py @@ -92,7 +92,7 @@ class RootResource(BaseResource): def initialize(self, provider=None, disclaimer_banner=None, authenticator=None): self._child_resources.add('assets', File(self._protected_static_folder)) - self._child_resources.add('account-recovery', AccountRecoveryResource(self._services_factory)) + self._child_resources.add(AccountRecoveryResource.BASE_URL, AccountRecoveryResource(self._services_factory)) self._child_resources.add('backup-account', BackupAccountResource(self._services_factory, authenticator)) self._child_resources.add('sandbox', SandboxResource(self._protected_static_folder)) self._child_resources.add('keys', KeysResource(self._services_factory)) diff --git a/service/test/unit/resources/test_login_resource.py b/service/test/unit/resources/test_login_resource.py index 9f940bc6..eaaba1d4 100644 --- a/service/test/unit/resources/test_login_resource.py +++ b/service/test/unit/resources/test_login_resource.py @@ -67,6 +67,16 @@ class TestLoginResource(unittest.TestCase): d.addCallback(assert_unauthorized_resources) return d + def test_account_recovery_resource_does_not_require_login(self): + request = DummyRequest(['account-recovery']) + d = self.web.get(request) + + def assert_successful(_): + self.assertEqual(200, request.responseCode) + + d.addCallback(assert_successful) + return d + @patch('pixelated.resources.session.PixelatedSession.is_logged_in') def test_there_are_no_grand_children_resources_when_logged_in(self, mock_is_logged_in): request = DummyRequest(['/login/grand_children']) diff --git a/web-ui/config/public-assets-webpack.js b/web-ui/config/public-assets-webpack.js index 28dff566..13364e2c 100644 --- a/web-ui/config/public-assets-webpack.js +++ b/web-ui/config/public-assets-webpack.js @@ -3,6 +3,7 @@ var CopyWebpackPlugin = require('copy-webpack-plugin'); module.exports = new CopyWebpackPlugin([ { context: 'src/login/', from: '*.html' }, { context: 'src/login/', from: '*.css' }, + { context: 'src/account_recovery/', from: 'account_recovery.html' }, { context: 'src/interstitial/', from: '*' }, { context: 'app/', from: 'fonts/*' }, { context: 'app/', from: 'locales/**/*' }, diff --git a/web-ui/src/account_recovery/account_recovery.html b/web-ui/src/account_recovery/account_recovery.html index f4601239..35054455 100644 --- a/web-ui/src/account_recovery/account_recovery.html +++ b/web-ui/src/account_recovery/account_recovery.html @@ -9,6 +9,6 @@
- + diff --git a/web-ui/webpack.config.js b/web-ui/webpack.config.js index 0470b508..e82cf88b 100644 --- a/web-ui/webpack.config.js +++ b/web-ui/webpack.config.js @@ -21,11 +21,12 @@ var commonConfiguration = { var publicAssets = Object.assign({}, commonConfiguration, { entry: { 'login': './src/login/login.js', + 'account_recovery': './src/account_recovery/account_recovery.js' }, output: { path: path.join(__dirname, 'dist/public'), filename: '[name].js', - publicPath: '/assets/' + publicPath: '/public/' }, plugins: [ publicAssetsWebpack, @@ -39,7 +40,6 @@ var publicAssets = Object.assign({}, commonConfiguration, { var protectedAssets = Object.assign({}, commonConfiguration, { entry: { 'app': './app/js/index.js', - 'account_recovery': './src/account_recovery/account_recovery.js', 'backup_account': './src/backup_account/backup_account.js', 'sandbox': './app/js/sandbox.js' }, diff --git a/web-ui/webpack.production.config.js b/web-ui/webpack.production.config.js index 23be0565..c731526a 100644 --- a/web-ui/webpack.production.config.js +++ b/web-ui/webpack.production.config.js @@ -31,11 +31,12 @@ var commonPlugins = [ var publicAssets = Object.assign({}, commonConfiguration, { entry: { 'login': './src/login/login.js', + 'account_recovery': './src/account_recovery/account_recovery.js' }, output: { path: path.join(__dirname, 'dist/public'), filename: '[name].js', - publicPath: '/assets/' + publicPath: '/public/' }, plugins: commonPlugins.concat([ publicAssetsWebpack ]) }); @@ -43,7 +44,6 @@ var publicAssets = Object.assign({}, commonConfiguration, { var protectedAssets = Object.assign({}, commonConfiguration, { entry: { 'app': './app/js/index.js', - 'account_recovery': './src/account_recovery/account_recovery.js', 'backup_account': './src/backup_account/backup_account.js', 'sandbox': './app/js/sandbox.js' }, -- cgit v1.2.3