mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Add an exception/error handler to the web gui.
This commit is contained in:
parent
6b0587726a
commit
12047b529a
@ -1,8 +1,11 @@
|
||||
import logging
|
||||
import StringIO
|
||||
import traceback
|
||||
|
||||
import cherrypy
|
||||
import turbogears
|
||||
from turbogears import controllers, expose, flash
|
||||
from turbogears import config
|
||||
from turbogears import validators, validate
|
||||
from turbogears import widgets, paginate
|
||||
from turbogears import error_handler
|
||||
@ -41,3 +44,61 @@ class Root(controllers.RootController):
|
||||
@expose("ipagui.templates.loginfailed")
|
||||
def loginfailed(self, **kw):
|
||||
return dict()
|
||||
|
||||
|
||||
_error_codes = {
|
||||
None: u'General Error',
|
||||
400: u'400 - Bad Request',
|
||||
401: u'401 - Unauthorized',
|
||||
403: u'403 - Forbidden',
|
||||
404: u'404 - Not Found',
|
||||
500: u'500 - Internal Server Error',
|
||||
501: u'501 - Not Implemented',
|
||||
502: u'502 - Bad Gateway',
|
||||
}
|
||||
|
||||
def handle_error(self, status, message):
|
||||
"""This method is derived from the sample error catcher on
|
||||
http://docs.turbogears.org/1.0/ErrorReporting."""
|
||||
try:
|
||||
cherrypy._cputil._cp_on_http_error(status, message)
|
||||
error_msg = self._error_codes.get(status, self._error_codes[None])
|
||||
url = "%s %s" % (cherrypy.request.method, cherrypy.request.path)
|
||||
log.exception("CherryPy %s error (%s) for request '%s'", status,
|
||||
error_msg, url)
|
||||
|
||||
if config.get('server.environment') == 'production':
|
||||
details = ''
|
||||
else:
|
||||
buf = StringIO.StringIO()
|
||||
traceback.print_exc(file=buf)
|
||||
details = buf.getvalue()
|
||||
buf.close()
|
||||
|
||||
data = dict(
|
||||
status = status,
|
||||
message = message,
|
||||
error_msg = error_msg,
|
||||
url = url,
|
||||
details = details,
|
||||
)
|
||||
|
||||
body = controllers._process_output(
|
||||
data,
|
||||
'ipagui.templates.unhandled_exception',
|
||||
'html',
|
||||
'text/html',
|
||||
None
|
||||
)
|
||||
cherrypy.response.headers['Content-Length'] = len(body)
|
||||
cherrypy.response.body = body
|
||||
|
||||
# don't catch SystemExit
|
||||
except StandardError, exc:
|
||||
log.exception('Error handler failed: %s', exc)
|
||||
|
||||
# To hook in error handler for production only:
|
||||
# if config.get('server.environment') == 'production':
|
||||
# _cp_on_http_error = handle_error
|
||||
|
||||
_cp_on_http_error = handle_error
|
||||
|
31
ipa-server/ipa-gui/ipagui/templates/unhandled_exception.kid
Normal file
31
ipa-server/ipa-gui/ipagui/templates/unhandled_exception.kid
Normal file
@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:py="http://purl.org/kid/ns#"
|
||||
py:extends="'master.kid'">
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
|
||||
<title>Error</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="main_content">
|
||||
<h1>An unexpected error occured</h1>
|
||||
|
||||
<div py:if='message'>
|
||||
<b>Message:</b>
|
||||
<pre>${message}</pre>
|
||||
</div>
|
||||
|
||||
<div py:if='error_msg'>
|
||||
<b>HTTP Error Message:</b>
|
||||
<pre>${error_msg}</pre>
|
||||
</div>
|
||||
|
||||
<div py:if='details'>
|
||||
<b>Stack Trace:</b>
|
||||
<pre>${details}</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user