From c10c6fb76f06e0cfc6f061a1bd9df14d689fb176 Mon Sep 17 00:00:00 2001 From: Roald de Vries Date: Wed, 30 Nov 2016 10:29:27 +0100 Subject: redirect to login from root url when not logged in --- service/pixelated/resources/root_resource.py | 7 +++++++ service/test/unit/resources/test_root_resource.py | 13 +++++++++++++ 2 files changed, 20 insertions(+) (limited to 'service') diff --git a/service/pixelated/resources/root_resource.py b/service/pixelated/resources/root_resource.py index 24d097f9..035d5f18 100644 --- a/service/pixelated/resources/root_resource.py +++ b/service/pixelated/resources/root_resource.py @@ -35,6 +35,7 @@ from pixelated.resources.keys_resource import KeysResource from pixelated.resources.inbox_resource import InboxResource, MODE_STARTUP, MODE_RUNNING from twisted.web.resource import NoResource from twisted.web.static import File +from twisted.web.util import Redirect from twisted.logger import Logger @@ -45,11 +46,17 @@ class PublicRootResource(BaseResource): def __init__(self, services_factory): BaseResource.__init__(self, services_factory) + self._redirect_to_inbox_resource = Redirect('login') def initialize(self, provider=None, disclaimer_banner=None, authenticator=None): self.putChild(LoginResource.BASE_URL, LoginResource(self._services_factory, provider, disclaimer_banner=disclaimer_banner, authenticator=authenticator)) + def getChildWithDefault(self, path, request): + if path == '': + return self._redirect_to_inbox_resource + return BaseResource.getChildWithDefault(self, path, request) + class RootResource(PublicRootResource): diff --git a/service/test/unit/resources/test_root_resource.py b/service/test/unit/resources/test_root_resource.py index 443a00e6..1543f650 100644 --- a/service/test/unit/resources/test_root_resource.py +++ b/service/test/unit/resources/test_root_resource.py @@ -31,6 +31,19 @@ class TestPublicRootResource(unittest.TestCase): child_resource = getChildForRequest(self.public_root_resource, request) self.assertIsInstance(child_resource, LoginResource) + def test_root_url_should_redirect_to_login_resource(self): + self.public_root_resource.initialize(provider=mock(), authenticator=mock()) + request = DummyRequest(['']) + request.addCookie = lambda key, value: 'stubbed' + d = self.web.get(request) + + def assert_redirect(request): + self.assertEqual(302, request.responseCode) + self.assertEqual(["login"], request.responseHeaders.getRawHeaders('location', [None])) + + d.addCallback(assert_redirect) + return d + class TestRootResource(unittest.TestCase): MAIL_ADDRESS = 'test_user@pixelated-project.org' -- cgit v1.2.3