diff --git a/rhodecode/controllers/error.py b/rhodecode/controllers/error.py deleted file mode 100644 --- a/rhodecode/controllers/error.py +++ /dev/null @@ -1,138 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (C) 2010-2016 RhodeCode GmbH -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License, version 3 -# (only), as published by the Free Software Foundation. -# -# 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 Affero General Public License -# along with this program. If not, see . -# -# This program is dual-licensed. If you wish to learn more about the -# RhodeCode Enterprise Edition, including its added features, Support services, -# and proprietary license terms, please see https://rhodecode.com/licenses/ - -""" -RhodeCode error controller -""" - -import cgi -import logging -import os -import paste.fileapp - -from pylons import tmpl_context as c, request, config, url -from pylons.i18n.translation import _ -from pylons.middleware import media_path -from webob.exc import HTTPNotFound - -from rhodecode.lib.base import BaseController, render -from rhodecode.lib.utils2 import AttributeDict -from rhodecode.model.settings import SettingsModel - -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. - """ - - def __before__(self): - - try: - rc_config = SettingsModel().get_all_settings() - except Exception: - log.exception('failed to fetch settings') - rc_config = {} - - c.visual = AttributeDict({}) - c.visual.rhodecode_support_url = ( - rc_config.get('rhodecode_support_url') or url('rhodecode_support')) - return - - def document(self): - resp = request.environ.get('pylons.original_response', None) - if not resp: - raise HTTPNotFound() - - c.rhodecode_name = config.get('rhodecode_title') - - log.debug('### %s ###' % resp.status) - - e = request.environ - c.serv_p = r'%(protocol)s://%(host)s/' % { - 'protocol': e.get('wsgi.url_scheme'), - 'host': e.get('HTTP_HOST'), - } - - c.error_message = cgi.escape(request.GET.get('code', str(resp.status))) - c.error_explanation = self.get_error_explanation(resp.status_int) - - # redirect to when error with given seconds - c.redirect_time = 0 - c.redirect_module = _('Home page') - c.url_redirect = "/" - - return render('/errors/error_document.html') - - def img(self, id): - """Serve Pylons' stock images""" - return self._serve_file(os.path.join(media_path, 'img', id)) - - def style(self, id): - """Serve Pylons' stock stylesheets""" - return self._serve_file(os.path.join(media_path, 'style', id)) - - def _serve_file(self, path): - """Call Paste's FileApp (a WSGI application) to serve the file - at the specified path - """ - fapp = paste.fileapp.FileApp(path) - return fapp(request.environ, self.start_response) - - def get_error_explanation(self, code): - """ get the error explanations of int codes - [400, 401, 403, 404, 500]""" - try: - code = int(code) - except Exception: - 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.') - - def vcs_unavailable(self): - c.rhodecode_name = config.get('rhodecode_title') - c.error_message = _('VCS Server Required') - c.error_explanation = _( - 'A VCS Server is required for this action. ' - 'There is currently no VCS Server configured.') - c.error_docs_link = 'https://docs.rhodecode.com/RhodeCode-Control/'\ - 'tasks/upgrade-from-cli.html#manually-changing-vcs-server-settings' - # redirect to when error with given seconds - c.redirect_time = 0 - c.redirect_module = _('Home page') - c.url_redirect = "/" - return render('/errors/error_document.html') diff --git a/rhodecode/tests/controllers/test_error.py b/rhodecode/tests/controllers/test_error.py deleted file mode 100644 --- a/rhodecode/tests/controllers/test_error.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright (C) 2010-2016 RhodeCode GmbH -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License, version 3 -# (only), as published by the Free Software Foundation. -# -# 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 Affero General Public License -# along with this program. If not, see . -# -# This program is dual-licensed. If you wish to learn more about the -# RhodeCode Enterprise Edition, including its added features, Support services, -# and proprietary license terms, please see https://rhodecode.com/licenses/ - -import pytest - -from rhodecode.tests import url - - -@pytest.mark.usefixtures('app') -class TestErrorController(object): - def test_direct_document_call(self): - self.app.get(url(controller='error', action='document'), status=404)