diff options
Diffstat (limited to 'repoze/bfg/router.py')
| -rw-r--r-- | repoze/bfg/router.py | 78 |
1 files changed, 14 insertions, 64 deletions
diff --git a/repoze/bfg/router.py b/repoze/bfg/router.py index ac3bd53cd..81bc6e4ef 100644 --- a/repoze/bfg/router.py +++ b/repoze/bfg/router.py @@ -17,7 +17,6 @@ from repoze.bfg.interfaces import IRouter from repoze.bfg.interfaces import IRoutesMapper from repoze.bfg.interfaces import ISecurityPolicy from repoze.bfg.interfaces import ISettings -from repoze.bfg.interfaces import IForbiddenResponseFactory from repoze.bfg.interfaces import IUnauthorizedAppFactory from repoze.bfg.interfaces import IView from repoze.bfg.interfaces import IViewPermission @@ -31,15 +30,13 @@ from repoze.bfg.registry import populateRegistry from repoze.bfg.request import HTTP_METHOD_FACTORIES from repoze.bfg.request import Request -from repoze.bfg.security import _forbidden - from repoze.bfg.settings import Settings from repoze.bfg.urldispatch import RoutesRootFactory from repoze.bfg.traversal import _traverse from repoze.bfg.view import _view_execution_permitted - +from repoze.bfg.wsgi import Unauthorized from repoze.bfg.wsgi import NotFound _marker = object() @@ -53,65 +50,22 @@ class Router(object): def __init__(self, registry): self.registry = registry - self.logger = registry.queryUtility(ILogger, 'repoze.bfg.debug') self.request_factory = registry.queryUtility(IRequestFactory) - security_policy = registry.queryUtility(ISecurityPolicy) - self.security_policy = security_policy - - unauthorized_app_factory = registry.queryUtility( - IUnauthorizedAppFactory) - - forbidden = None - - if unauthorized_app_factory is not None: - warning = ( - 'Instead of registering a utility against the ' - 'repoze.bfg.interfaces.IUnauthorizedAppFactory interface ' - 'to return a custom forbidden response, you should now ' - 'register a "repoze.interfaces.IForbiddenResponseFactory". ' - 'The IUnauthorizedAppFactory interface was deprecated in ' - 'repoze.bfg 0.8.2 and will be removed in a subsequent version ' - 'of repoze.bfg. See the "Hooks" chapter of the repoze.bfg ' - 'documentation for more information about ' - 'IForbiddenResponseFactory.') - self.logger and self.logger.warn(warning) - def forbidden(context, request): - app = unauthorized_app_factory() - response = request.get_response(app) - return response - - self.forbidden_resp_factory = registry.queryUtility( - IForbiddenResponseFactory, - default=forbidden) - - if security_policy is not None: - if hasattr(security_policy, 'forbidden'): - security_policy_forbidden = security_policy.forbidden - else: - security_policy_forbidden = _forbidden - warning = ('You are running with a security policy (%s) which ' - 'does not have a "forbidden" method; in BFG 0.8.2+ ' - 'the ISecurityPolicy interface in the ' - 'repoze.bfg.interfaces module defines this method ' - 'as required; your application will not work under ' - 'a future release of BFG if you continue using a ' - 'security policy without a "forbidden" method.' % - security_policy) - self.logger and self.logger.warn(warning) - # allow a specifically-registered IForbiddenResponseFactory to - # override the security policy's forbidden - self.forbidden_resp_factory = (self.forbidden_resp_factory or - security_policy_forbidden) - - self.notfound_app_factory = registry.queryUtility(INotFoundAppFactory, - default=NotFound) - + self.security_policy = registry.queryUtility(ISecurityPolicy) + self.notfound_app_factory = registry.queryUtility( + INotFoundAppFactory, + default=NotFound) + self.unauth_app_factory = registry.queryUtility( + IUnauthorizedAppFactory, + default=Unauthorized) + settings = registry.queryUtility(ISettings) if settings is not None: self.debug_authorization = settings.debug_authorization self.debug_notfound = settings.debug_notfound + self.logger = registry.queryUtility(ILogger, 'repoze.bfg.debug') self.root_factory = registry.getUtility(IRootFactory) self.root_policy = self.root_factory # b/w compat self.traverser_warned = {} @@ -190,18 +144,14 @@ class Router(object): 'context %r): %s' % ( request.url, view_name, context, permitted) ) - if not permitted: if debug_authorization: msg = str(permitted) else: msg = 'Unauthorized: failed security policy check' - - environ['repoze.bfg.message'] = msg - - response = self.forbidden_resp_factory(context, request) - start_response(response.status, response.headerlist) - return response.app_iter + environ['message'] = msg + unauth_app = self.unauth_app_factory() + return unauth_app(environ, start_response) response = registry.queryMultiAdapter( (context, request), IView, name=view_name) @@ -218,7 +168,7 @@ class Router(object): logger and logger.debug(msg) else: msg = request.url - environ['repoze.bfg.message'] = msg + environ['message'] = msg notfound_app = self.notfound_app_factory() return notfound_app(environ, start_response) |
