diff options
author | Dave Arter <davea@mysociety.org> | 2017-06-08 17:05:38 +0100 |
---|---|---|
committer | Dave Arter <davea@mysociety.org> | 2017-08-31 13:36:27 +0100 |
commit | abc843d671365365bd3e88441721c39f0bb12ca5 (patch) | |
tree | 38beb6b24c9539df92457a365ab1dec34c9f4723 /perllib/FixMyStreet/App/Controller/Root.pm | |
parent | 0221eb4faaa5df503b951019b17b8f691b4b4373 (diff) |
Add LOGIN_REQUIRED config key
If set to 1, this restricts all pages on the site to logged-in users.
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Root.pm')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Root.pm | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Root.pm b/perllib/FixMyStreet/App/Controller/Root.pm index 64d7fa6ae..7f70623ae 100644 --- a/perllib/FixMyStreet/App/Controller/Root.pm +++ b/perllib/FixMyStreet/App/Controller/Root.pm @@ -16,6 +16,18 @@ FixMyStreet::App::Controller::Root - Root Controller for FixMyStreet::App =head1 METHODS +=head2 begin + +Any pre-flight checking for all requests + +=cut +sub begin : Private { + my ( $self, $c ) = @_; + + $c->forward( 'check_login_required' ); +} + + =head2 auto Set up general things for this instance @@ -130,6 +142,27 @@ sub page_error : Private { $c->response->status($code); } +sub check_login_required : Private { + my ($self, $c) = @_; + + return if $c->user_exists || !FixMyStreet->config('LOGIN_REQUIRED'); + + # Whitelisted URL patterns are allowed without login + my $whitelist = qr{ + ^auth(/|$) + | ^js/translation_strings\.(.*?)\.js + | ^[PACQM]/ # various tokens that log the user in + }x; + return if $c->request->path =~ $whitelist; + + # Blacklisted URLs immediately 404 + # This is primarily to work around a Safari bug where the appcache + # URL is requested in an infinite loop if it returns a 302 redirect. + $c->detach('/page_error_404_not_found', []) if $c->request->path =~ /^offline/; + + $c->detach( '/auth/redirect' ); +} + =head2 end Attempt to render a view, if needed. |