provide login.html as concept view (for use with a query), + a similar unauthorized view

This commit is contained in:
Helmut Merz 2015-10-19 16:26:41 +02:00
parent e929a3154e
commit c029cb2356
2 changed files with 43 additions and 3 deletions

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011 Helmut Merz helmutm@cy55.de # Copyright (c) 2015 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by
@ -17,7 +17,7 @@
# #
""" """
$Id$ Login, logout, unauthorized stuff.
""" """
from zope.app.security.interfaces import IAuthentication from zope.app.security.interfaces import IAuthentication
@ -25,14 +25,27 @@ from zope.app.security.interfaces import ILogout, IUnauthenticatedPrincipal
from zope import component from zope import component
from zope.interface import implements from zope.interface import implements
from loops.browser.concept import ConceptView
from loops.browser.node import NodeView from loops.browser.node import NodeView
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
template = ViewPageTemplateFile('auth.pt')
class LoginConcept(ConceptView):
template = template
@Lazy
def macro(self):
return self.template.macros['login_form']
class LoginForm(NodeView): class LoginForm(NodeView):
template = ViewPageTemplateFile('auth.pt') template = template
@Lazy @Lazy
def macro(self): def macro(self):
@ -59,3 +72,20 @@ class Logout(object):
return self.request.response.redirect(nextUrl) return self.request.response.redirect(nextUrl)
class Unauthorized(ConceptView):
isTopLevel = True
def __init__(self, context, request):
self.context = context
self.request = request
def __call__(self):
response = self.request.response
response.setStatus(403)
# make sure that squid does not keep the response in the cache
response.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT')
response.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate')
response.setHeader('Pragma', 'no-cache')
url = self.nodeView.topMenu.url
response.redirect(url + '/unauthorized')

View file

@ -44,6 +44,8 @@
class="loops.browser.auth.Logout" class="loops.browser.auth.Logout"
permission="zope.View" /> permission="zope.View" />
<!-- see also view/adapter "login.html" in section "query views" -->
<!-- macros --> <!-- macros -->
<page <page
@ -537,6 +539,14 @@
<!-- query views --> <!-- query views -->
<zope:adapter
name="login.html"
for="loops.interfaces.IConcept
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.browser.auth.LoginConcept"
permission="zope.View" />
<zope:adapter <zope:adapter
name="list_children.html" name="list_children.html"
for="loops.interfaces.IConcept for="loops.interfaces.IConcept