diff options
-rwxr-xr-x | ipsilon/login/common.py | 6 | ||||
-rwxr-xr-x | ipsilon/root.py | 4 | ||||
-rw-r--r-- | ipsilon/unauthorized.py | 28 | ||||
-rw-r--r-- | templates/unauthorized.html | 8 |
4 files changed, 43 insertions, 3 deletions
diff --git a/ipsilon/login/common.py b/ipsilon/login/common.py index 416ff31..7ff6e73 100755 --- a/ipsilon/login/common.py +++ b/ipsilon/login/common.py @@ -37,7 +37,7 @@ class LoginManagerBase(PluginObject): def auth_successful(self, username): # save ref before calling UserSession login() as it # may regenerate the session - ref = '/idp' + ref = cherrypy.config.get('base.mount', "") + '/' if 'referral' in cherrypy.session: ref = cherrypy.session['referral'] @@ -51,8 +51,8 @@ class LoginManagerBase(PluginObject): if self.next_login: return self.redirect_to_path(self.next_login.path) - # FIXME: show an error page instead - raise cherrypy.HTTPError(401) + ref = cherrypy.config.get('base.mount', "") + '/unauthorized' + raise cherrypy.HTTPRedirect(ref) class LoginPageBase(Page): diff --git a/ipsilon/root.py b/ipsilon/root.py index 034a7b3..88a15c6 100755 --- a/ipsilon/root.py +++ b/ipsilon/root.py @@ -21,6 +21,7 @@ from ipsilon.util.page import Page from ipsilon.login.common import Login from ipsilon.login.common import Logout from ipsilon.admin.common import Admin +from ipsilon.unauthorized import Unauthorized sites = dict() @@ -34,6 +35,9 @@ class Root(Page): sites[site]['template_env'] = template_env super(Root, self).__init__(sites[site]) + # set up error pages + self.unauthorized = Unauthorized(self._site) + # now set up the default login plugins self.login = Login(self._site) self.logout = Logout(self._site) diff --git a/ipsilon/unauthorized.py b/ipsilon/unauthorized.py new file mode 100644 index 0000000..52125d4 --- /dev/null +++ b/ipsilon/unauthorized.py @@ -0,0 +1,28 @@ +#!/usr/bin/python +# +# Copyright (C) 2014 Petr Vobornik <pvoborni@redhat.com> +# +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from ipsilon.util.page import Page +import cherrypy + + +class Unauthorized(Page): + + def root(self): + cherrypy.response.status = "401 Unauthorized" + return self._template('unauthorized.html', title='Unauthorized') diff --git a/templates/unauthorized.html b/templates/unauthorized.html new file mode 100644 index 0000000..ee2f412 --- /dev/null +++ b/templates/unauthorized.html @@ -0,0 +1,8 @@ +{% extends "master.html" %} +{% block main %} +<div class="col-sm-12"> + <h1>401 - Unauthorized</h1> + <p>Authentication was not successful</p> + <p><a href="{{ basepath }}/login" title="Login">Try to login again</a></p> +</div> +{% endblock %}
\ No newline at end of file |