mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-01-18 12:12:58 -06:00
111 lines
3.4 KiB
Python
111 lines
3.4 KiB
Python
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
|
|
from turbogears import identity
|
|
|
|
import ipa.config
|
|
import ipa.ipaclient
|
|
|
|
from subcontrollers.user import UserController
|
|
from subcontrollers.group import GroupController
|
|
from subcontrollers.delegation import DelegationController
|
|
from subcontrollers.policy import PolicyController
|
|
from subcontrollers.ipapolicy import IPAPolicyController
|
|
from subcontrollers.principal import PrincipalController
|
|
|
|
ipa.config.init_config()
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
class Root(controllers.RootController):
|
|
|
|
user = UserController()
|
|
group = GroupController()
|
|
delegate = DelegationController()
|
|
policy = PolicyController()
|
|
ipapolicy = IPAPolicyController()
|
|
principal = PrincipalController()
|
|
|
|
@expose(template="ipagui.templates.welcome")
|
|
@identity.require(identity.not_anonymous())
|
|
def index(self):
|
|
return dict()
|
|
|
|
@expose()
|
|
@identity.require(identity.not_anonymous())
|
|
def topsearch(self, **kw):
|
|
if kw.get('searchtype') == "Users":
|
|
return Root.user.list(uid=kw.get('searchvalue'))
|
|
else:
|
|
return Root.group.list(criteria=kw.get('searchvalue'))
|
|
|
|
@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
|