error.py
94 lines
| 3.2 KiB
| text/x-python
|
PythonLexer
Bradley M. Kuhn
|
r4187 | # -*- coding: utf-8 -*- | ||
# 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/>. | ||||
""" | ||||
kallithea.controllers.error | ||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||
Bradley M. Kuhn
|
r4212 | Kallithea error controller | ||
Bradley M. Kuhn
|
r4187 | |||
Bradley M. Kuhn
|
r4211 | This file was forked by the Kallithea project in July 2014. | ||
Original author and date, and relevant copyright and licensing information is below: | ||||
Bradley M. Kuhn
|
r4187 | :created_on: Dec 8, 2010 | ||
:author: marcink | ||||
Bradley M. Kuhn
|
r4211 | :copyright: (c) 2013 RhodeCode GmbH, and others. | ||
Bradley M. Kuhn
|
r4208 | :license: GPLv3, see LICENSE.md for more details. | ||
Bradley M. Kuhn
|
r4187 | """ | ||
Mads Kiilerich
|
r8069 | import html | ||
Bradley M. Kuhn
|
r4187 | import logging | ||
Mads Kiilerich
|
r7718 | from tg import config, expose, request | ||
from tg import tmpl_context as c | ||||
Mads Kiilerich
|
r6508 | from tg.i18n import ugettext as _ | ||
Bradley M. Kuhn
|
r4187 | |||
Mads Kiilerich
|
r7719 | from kallithea.lib.base import BaseController | ||
Bradley M. Kuhn
|
r4187 | |||
Mads Kiilerich
|
r7718 | |||
Bradley M. Kuhn
|
r4187 | log = logging.getLogger(__name__) | ||
class ErrorController(BaseController): | ||||
"""Generates error documents as and when they are required. | ||||
The ErrorDocuments middleware forwards to ErrorController when error | ||||
related status codes are returned from the application. | ||||
This behavior can be altered by changing the parameters to the | ||||
ErrorDocuments middleware in your config/middleware.py file. | ||||
""" | ||||
Thomas De Schampheleire
|
r6513 | def _before(self, *args, **kwargs): | ||
Ronny Pfannschmidt
|
r5030 | # disable all base actions since we don't need them here | ||
Bradley M. Kuhn
|
r4187 | pass | ||
Alessandro Molina
|
r6522 | @expose('/errors/error_document.html') | ||
def document(self, *args, **kwargs): | ||||
resp = request.environ.get('tg.original_response') | ||||
Bradley M. Kuhn
|
r4218 | c.site_name = config.get('title') | ||
Bradley M. Kuhn
|
r4187 | |||
Mads Kiilerich
|
r5375 | log.debug('### %s ###', resp and resp.status or 'no response') | ||
Bradley M. Kuhn
|
r4187 | |||
e = request.environ | ||||
Ronny Pfannschmidt
|
r5030 | c.serv_p = r'%(protocol)s://%(host)s/' % { | ||
'protocol': e.get('wsgi.url_scheme'), | ||||
'host': e.get('HTTP_HOST'), } | ||||
if resp: | ||||
Mads Kiilerich
|
r8069 | c.error_message = html.escape(request.GET.get('code', str(resp.status))) | ||
Ronny Pfannschmidt
|
r5030 | c.error_explanation = self.get_error_explanation(resp.status_int) | ||
Mads Kiilerich
|
r5034 | else: | ||
c.error_message = _('No response') | ||||
c.error_explanation = _('Unknown error') | ||||
Bradley M. Kuhn
|
r4187 | |||
Alessandro Molina
|
r6522 | return dict() | ||
Bradley M. Kuhn
|
r4187 | |||
def get_error_explanation(self, code): | ||||
""" get the error explanations of int codes | ||||
[400, 401, 403, 404, 500]""" | ||||
try: | ||||
code = int(code) | ||||
Mads Kiilerich
|
r4733 | except ValueError: | ||
Bradley M. Kuhn
|
r4187 | code = 500 | ||
if code == 400: | ||||
return _('The request could not be understood by the server' | ||||
' due to malformed syntax.') | ||||
if code == 401: | ||||
return _('Unauthorized access to resource') | ||||
if code == 403: | ||||
return _("You don't have permission to view this page") | ||||
if code == 404: | ||||
return _('The resource could not be found') | ||||
if code == 500: | ||||
return _('The server encountered an unexpected condition' | ||||
' which prevented it from fulfilling the request.') | ||||