From b14833fbb56bcd5bff0750c16fd9214009b955be Mon Sep 17 00:00:00 2001 From: Zara Gebru Date: Fri, 2 Dec 2016 15:25:23 +0100 Subject: [refactor] move app dir into public dir --- service/pixelated/application.py | 14 +++++++++-- service/pixelated/resources/inbox_resource.py | 2 +- service/pixelated/resources/login_resource.py | 4 ++-- service/pixelated/resources/root_resource.py | 17 ++++---------- service/test/integration/test_static_files.py | 27 ++++++++++++++++++++++ .../test/support/integration/app_test_client.py | 5 ++-- .../test/support/integration/multi_user_client.py | 4 ++-- service/test/unit/resources/test_auth.py | 6 +++-- service/test/unit/resources/test_root_resource.py | 6 ++--- 9 files changed, 58 insertions(+), 27 deletions(-) create mode 100644 service/test/integration/test_static_files.py (limited to 'service') diff --git a/service/pixelated/application.py b/service/pixelated/application.py index 9f33cb82..0c2383dd 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -88,12 +88,22 @@ def _create_service_factory(args): return ServicesFactory(UserAgentMode(is_single_user=False)) +def get_templates_folder(): + return os.path.join(os.path.dirname(os.path.abspath(__file__)), "assets") + + +def get_static_folder(): + # TODO: make sure sandbox keeps working + # TODO: make sure this works for packaging + return os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "web-ui", "public")) + + def initialize(): log.info('Starting the Pixelated user agent') args = arguments.parse_user_agent_args() logger.init(debug=args.debug) services_factory = _create_service_factory(args) - resource = RootResource(services_factory) + resource = RootResource(services_factory, templates_folder=get_templates_folder(), static_folder=get_static_folder()) def start(): start_async = _start_mode(args, resource, services_factory) @@ -154,7 +164,7 @@ def _setup_multi_user(args, root_resource, services_factory): def set_up_protected_resources(root_resource, provider, services_factory, banner=None, authenticator=None): session_checker = SessionChecker(services_factory) - anonymous_resource = RootResource(services_factory, public=True) + anonymous_resource = RootResource(services_factory, templates_folder=get_templates_folder(), static_folder=get_static_folder(), public=True) realm = PixelatedRealm(root_resource, anonymous_resource) _portal = portal.Portal(realm, [session_checker, AllowAnonymousAccess()]) diff --git a/service/pixelated/resources/inbox_resource.py b/service/pixelated/resources/inbox_resource.py index 426de5cc..d9ba86a5 100644 --- a/service/pixelated/resources/inbox_resource.py +++ b/service/pixelated/resources/inbox_resource.py @@ -46,7 +46,7 @@ class InboxResource(BaseResource): def _get_not_quite_the_templates_folder(self): path = os.path.dirname(os.path.abspath(pixelated.__file__)) - return os.path.join(path, '..', '..', 'web-ui', 'app') + return os.path.join(path, '..', '..', 'web-ui', 'public') def _get_templates_folder(self): path = os.path.dirname(os.path.abspath(pixelated.__file__)) diff --git a/service/pixelated/resources/login_resource.py b/service/pixelated/resources/login_resource.py index 7d61ddce..6300efdb 100644 --- a/service/pixelated/resources/login_resource.py +++ b/service/pixelated/resources/login_resource.py @@ -51,11 +51,11 @@ def _get_public_folder(): def _get_static_folder(): - static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "web-ui", "app")) + static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "web-ui", "public")) # this is a workaround for packaging if not os.path.exists(static_folder): static_folder = os.path.abspath( - os.path.join(os.path.abspath(__file__), "..", "..", "..", "..", "web-ui", "app")) + os.path.join(os.path.abspath(__file__), "..", "..", "..", "..", "web-ui", "public")) if not os.path.exists(static_folder): static_folder = os.path.join('/', 'usr', 'share', 'pixelated-user-agent') return static_folder diff --git a/service/pixelated/resources/root_resource.py b/service/pixelated/resources/root_resource.py index 1d32935b..375f27f6 100644 --- a/service/pixelated/resources/root_resource.py +++ b/service/pixelated/resources/root_resource.py @@ -44,13 +44,13 @@ logger = Logger() class RootResource(BaseResource): - def __init__(self, services_factory, public=False): + def __init__(self, services_factory, templates_folder, static_folder, public=False): BaseResource.__init__(self, services_factory) self._public = public self._assets_folder = self._get_assets_folder() self._startup_assets_folder = self._get_startup_folder() - self._static_folder = self._get_static_folder() - self._html_template = open(os.path.join(self._static_folder, 'index.html')).read() + self._static_folder = static_folder + self._html_template = open(os.path.join(templates_folder, 'index.html')).read() self._services_factory = services_factory with open(os.path.join(self._startup_assets_folder, 'Interstitial.html')) as f: self.interstitial = f.read() @@ -61,6 +61,7 @@ class RootResource(BaseResource): def _startup_mode(self): self.putChildProtected('assets', File(self._assets_folder)) self.putChildPublic('startup-assets', File(self._startup_assets_folder)) + self.putChildPublic('static', File(self._static_folder)) self._mode = MODE_STARTUP logger.debug('Root in STARTUP mode. %s' % self) @@ -128,13 +129,3 @@ class RootResource(BaseResource): def _get_startup_folder(self): path = os.path.dirname(os.path.abspath(__file__)) return os.path.join(path, '..', 'assets') - - def _get_static_folder(self): - static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "web-ui", "app")) - # this is a workaround for packaging - if not os.path.exists(static_folder): - static_folder = os.path.abspath( - os.path.join(os.path.abspath(__file__), "..", "..", "..", "..", "web-ui", "app")) - if not os.path.exists(static_folder): - static_folder = os.path.join('/', 'usr', 'share', 'pixelated-user-agent') - return static_folder diff --git a/service/test/integration/test_static_files.py b/service/test/integration/test_static_files.py new file mode 100644 index 00000000..e3fa8af5 --- /dev/null +++ b/service/test/integration/test_static_files.py @@ -0,0 +1,27 @@ +# +# Copyright (c) 2016 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 . + + +from twisted.internet.defer import inlineCallbacks +from test.support.integration import SoledadTestBase + + +class StaticFilesTest(SoledadTestBase): + + @inlineCallbacks + def test_should_find_static_file(self): + _, request = yield self.app_test_client.get('/static/js/main.js', as_json=False, ajax=False) + self.assertEqual(200, request.responseCode) diff --git a/service/test/support/integration/app_test_client.py b/service/test/support/integration/app_test_client.py index 4e3758c5..c611fbd0 100644 --- a/service/test/support/integration/app_test_client.py +++ b/service/test/support/integration/app_test_client.py @@ -38,7 +38,7 @@ from leap.soledad.client import Soledad from leap.bitmask.mail.adaptors.soledad import SoledadMailAdaptor from pixelated.adapter.mailstore.leap_attachment_store import LeapAttachmentStore from pixelated.adapter.services.feedback_service import FeedbackService -from pixelated.application import UserAgentMode, set_up_protected_resources +from pixelated.application import UserAgentMode, set_up_protected_resources, get_static_folder, get_templates_folder from pixelated.config.sessions import LeapSession from pixelated.config.services import Services, ServicesFactory, SingleUserServicesFactory from pixelated.config.site import PixelatedSite @@ -218,10 +218,11 @@ class AppTestClient(object): services = self._test_account.services self.service_factory.add_session('someuserid', services) - self.resource = RootResource(self.service_factory) + self.resource = RootResource(self.service_factory, get_templates_folder(), get_static_folder()) provider = mock() self.resource.initialize(provider) else: + # TODO: write test for me (= self.service_factory = StubServicesFactory(self.accounts, mode) provider = mock() bonafide_checker = StubAuthenticator(provider) diff --git a/service/test/support/integration/multi_user_client.py b/service/test/support/integration/multi_user_client.py index 4b9b2864..d7ab77a0 100644 --- a/service/test/support/integration/multi_user_client.py +++ b/service/test/support/integration/multi_user_client.py @@ -19,7 +19,7 @@ from mockito import mock, when, any as ANY from pixelated.authentication import Authenticator, Authentication from twisted.internet import defer -from pixelated.application import UserAgentMode, set_up_protected_resources +from pixelated.application import UserAgentMode, set_up_protected_resources, get_static_folder, get_templates_folder from pixelated.config.services import ServicesFactory from pixelated.config.sessions import LeapSessionFactory @@ -46,7 +46,7 @@ class MultiUserClient(AppTestClient): self.service_factory = ServicesFactory(UserAgentMode(is_single_user=False)) - root_resource = RootResource(self.service_factory) + root_resource = RootResource(self.service_factory, get_templates_folder(), get_static_folder()) leap_provider = mock() self.credentials_checker = StubSRPChecker(leap_provider) self.resource = set_up_protected_resources(root_resource, leap_provider, self.service_factory) diff --git a/service/test/unit/resources/test_auth.py b/service/test/unit/resources/test_auth.py index f4012b1b..7112ed96 100644 --- a/service/test/unit/resources/test_auth.py +++ b/service/test/unit/resources/test_auth.py @@ -1,4 +1,6 @@ from mockito import mock, when, any as ANY + +from pixelated.application import get_templates_folder, get_static_folder from pixelated.resources.auth import SessionChecker, PixelatedRealm, PixelatedAuthSessionWrapper from pixelated.resources.login_resource import LoginResource from pixelated.resources.root_resource import RootResource @@ -40,8 +42,8 @@ class TestPixelatedAuthSessionWrapper(unittest.TestCase): session_checker = SessionChecker(services_factory) self.portal = Portal(self.realm_mock, [session_checker, AllowAnonymousAccess()]) self.user_uuid_mock = mock() - self.root_resource = RootResource(services_factory) - self.anonymous_resource = RootResource(services_factory, public=True) + self.root_resource = RootResource(services_factory, get_templates_folder(), get_static_folder()) + self.anonymous_resource = RootResource(services_factory, get_templates_folder(), get_static_folder(), public=True) self.session_wrapper = PixelatedAuthSessionWrapper(self.portal, self.root_resource, self.anonymous_resource) self.request = DummyRequest([]) diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 9d738a83..e72efe59 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -5,7 +5,7 @@ from mock import MagicMock, patch from mockito import mock, when, any as ANY import pixelated -from pixelated.application import UserAgentMode +from pixelated.application import UserAgentMode, get_templates_folder, get_static_folder from pixelated.resources import IPixelatedSession, UnAuthorizedResource from pixelated.resources.features_resource import FeaturesResource from pixelated.resources.login_resource import LoginResource @@ -22,7 +22,7 @@ from pixelated.resources.root_resource import InboxResource, RootResource, MODE_ class TestPublicRootResource(unittest.TestCase): def setUp(self): - self.public_root_resource = RootResource(mock(), public=True) + self.public_root_resource = RootResource(mock(), get_templates_folder(), get_static_folder(), public=True) self.web = DummySite(self.public_root_resource) @patch('pixelated.resources.mails_resource.events.register') @@ -105,7 +105,7 @@ class TestRootResource(unittest.TestCase): when(self.services_factory).services(ANY()).thenReturn(self.services) self.mail_service.account_email = self.MAIL_ADDRESS - self.root_resource = RootResource(self.services_factory) + self.root_resource = RootResource(self.services_factory, get_templates_folder(), get_static_folder()) self.web = DummySite(self.root_resource) @patch('pixelated.resources.mails_resource.events.register') -- cgit v1.2.3