[Checkins] SVN: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/ - implemented basic auth login using pagelets
Michael Howitz
mh at gocept.com
Tue Mar 3 15:00:37 EST 2009
Log message for revision 97457:
- implemented basic auth login using pagelets
- snapshot of session credentials login
Changed:
U z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/auth.py
A z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_failed.pt
A z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_success.pt
A z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/logout.pt
A z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/redirect.pt
A z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/session_cred_loginform.pt
U z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/zope.app.security.browser.zcml
A z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/login.txt
U z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/ftesting.zcml
U z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/test_layer.py
-=-
Modified: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/auth.py
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/auth.py 2009-03-03 19:58:03 UTC (rev 97456)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/auth.py 2009-03-03 20:00:37 UTC (rev 97457)
@@ -16,6 +16,7 @@
$Id$
"""
import urllib
+import z3c.template.interfaces
import zope.app.pagetemplate
import zope.app.publisher.interfaces.http
import zope.app.security.interfaces
@@ -23,6 +24,7 @@
import zope.i18n
import zope.i18nmessageid
import zope.interface
+import zope.publisher.interfaces.browser
import zope.viewlet.interfaces
import zope.viewlet.manager
import zope.viewlet.viewlet
@@ -47,10 +49,32 @@
def logout_supported(request):
"Tell whether logout is supported."
- logout = zope.app.security.interfaces.ILogoutSupported(self.request, None)
+ logout = zope.app.security.interfaces.ILogoutSupported(request, None)
return logout is not None
+def get_view_url(context, request, view_name):
+ "Compute the url of a view."
+ if view_name.startswith('@@'):
+ view_name = view_name[2:]
+ view_truncated = True
+ else:
+ view_truncated = False
+ view = zope.component.getMultiAdapter((context, request), name=view_name)
+ view_url = zope.component.getMultiAdapter(
+ (view, request), name='absolute_url')()
+ if view_truncated:
+ view_url = view_url.replace(view_name, '@@'+view_name)
+ return view_url
+
+
+def render_pagelet(context, request, view_name):
+ "Render a pagelet."
+ pagelet = zope.component.getMultiAdapter(
+ (context, request), z3c.pagelet.interfaces.IPagelet, name=view_name)
+ return pagelet()
+
+
class LoginViewlet(zope.viewlet.viewlet.ViewletBase):
"""Display login link when user is not logged in."""
@@ -60,7 +84,7 @@
def render(self):
return u'<a href="%s?nextURL=%s">%s</a>' % (
- self.viewName,
+ get_view_url(self. context, self.request, self.viewName),
urllib.quote(self.request.getURL()),
zope.i18n.translate(
_('[Login]', default='Login'), context=self.request))
@@ -78,7 +102,7 @@
def render(self):
return u'<a href="%s?nextURL=%s">%s</a>' % (
- self.viewName,
+ get_view_url(self. context, self.request, self.viewName),
urllib.quote(self.request.getURL()),
zope.i18n.translate(
_('[Logout]', default='Logout'), context=self.request))
@@ -88,48 +112,58 @@
zope.interface.implements(zope.app.publisher.interfaces.http.ILogin)
-# confirmation = zope.app.pagetemplate.ViewPageTemplateFile('login.pt')
-# failed = zope.app.pagetemplate.ViewPageTemplateFile('login_failed.pt')
-
def login(self, nextURL=None):
# we don't want to keep challenging if we're authenticated
- if zope.app.security.interfaces.IUnauthenticatedPrincipal.providedBy(
- self.request.principal):
+ if not authenticated(self.request.principal):
auth = zope.component.getUtility(
zope.app.security.interfaces.IAuthentication)
- auth.unauthorized(self.request.principal.id, self.request)
- return self.failed()
+ auth.unauthorized(
+ #self.request.principal.id, self.request)
+ None, self.request) # XXX correct this way?
+ return render_pagelet(self, self.request, 'login_failed.html')
else:
if nextURL is None:
- return self.confirmation()
+ return render_pagelet(self, self.request, 'login_success.html')
else:
self.request.response.redirect(nextURL)
+class LoginFailedPagelet(object):
+ "Pagelet to display login failed notice."
+
+
+class LoginSuccessfulPagelet(object):
+ "Pagelet to display login succecc notice."
+
+
class HTTPAuthenticationLogout(object):
"""Since HTTP Authentication really does not know about logout, we are
simply challenging the client again."""
zope.interface.implements(zope.app.security.interfaces.ILogout)
-# redirect = zope.app.pagetemplate.ViewPageTemplateFile('redirect.pt')
-# confirmation = zope.app.pagetemplate.ViewPageTemplateFile('logout.pt')
-
- def __init__(self, context, request):
- self.context = context
- self.request = request
-
def logout(self, nextURL=None):
- if zope.app.security.interfaces.IUnauthenticatedPrincipal.providedBy(
- self.request.principal):
- pass
- else:
+ if authenticated(self.request.principal):
auth = zope.component.getUtility(
zope.app.security.interfaces.IAuthentication)
zope.app.security.interfaces.ILogout(auth).logout(self.request)
if nextURL:
- return self.redirect()
+ return render_pagelet(self, self.request, 'redirect.html')
if nextURL is None:
- return self.confirmation()
+ return render_pagelet(self, self.request, 'logout_success.html')
else:
return self.request.response.redirect(nextURL)
+
+
+class LogoutRedirectPagelet(object):
+ "Pagelet to display logout redirect."
+
+
+class LogoutSuccessPagelet(object):
+ "Pagelet to display logout success."
+
+
+class SessionCredentialsLoginForm(object):
+ "Login form using session credentials."
+
+
Added: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_failed.pt
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_failed.pt (rev 0)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_failed.pt 2009-03-03 20:00:37 UTC (rev 97457)
@@ -0,0 +1,10 @@
+<div>
+ <h1 i18n:translate="">Login Failed!</h1>
+
+ <p style="font-size: 150%">
+ <tal:block
+ i18n:translate="">You cancelled the login procedure.</tal:block>
+ <a tal:attributes="href python: view.request.get('nextURL', '.')"
+ i18n:translate="">Click here to return.</a>
+ </p>
+</div>
Property changes on: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_failed.pt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_success.pt
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_success.pt (rev 0)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_success.pt 2009-03-03 20:00:37 UTC (rev 97457)
@@ -0,0 +1,9 @@
+<div>
+ <h1 i18n:translate="">Login successful!</h1>
+ <p style="font-size: 200%" i18n:translate="">
+ You are now logged in as
+ <em tal:content="view/request/principal/title"
+ i18n:name="UserTitle">Joe Smith</em>.
+ </p>
+ <a href="." i18n:translate="">Back to the main page.</a>
+</div>
Property changes on: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/login_success.pt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/logout.pt
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/logout.pt (rev 0)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/logout.pt 2009-03-03 20:00:37 UTC (rev 97457)
@@ -0,0 +1,8 @@
+<div>
+ <h1 i18n:translate="">Logout successful!</h1>
+
+ <p style="font-size: 200%" i18n:translate="">
+ You are now logged out.
+ </p>
+ <a href="." i18n:translate="">Back to the main page.</a>
+</div>
Property changes on: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/logout.pt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/redirect.pt
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/redirect.pt (rev 0)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/redirect.pt 2009-03-03 20:00:37 UTC (rev 97457)
@@ -0,0 +1,9 @@
+<div>
+ <h1 i18n:translate="">You are being redirected!</h1>
+
+ <p style="font-size: 150%">
+ <a tal:attributes="href view/request/nextURL" i18n:translate="">
+ If you see this screen for more than 5 seconds, click here.
+ </a>
+ </p>
+</div>
Property changes on: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/redirect.pt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Added: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/session_cred_loginform.pt
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/session_cred_loginform.pt (rev 0)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/session_cred_loginform.pt 2009-03-03 20:00:37 UTC (rev 97457)
@@ -0,0 +1,36 @@
+<div tal:define="principal python:request.principal.id">
+ <p i18n:translate=""
+ tal:condition="python: principal == 'zope.anybody'">
+ Please provide Login Information
+ </p>
+ <p i18n:translate=""
+ tal:condition="python: principal != 'zope.anybody'">
+ You are not authorized to perform this action. However, you may login as a
+ different user who is authorized.
+ </p>
+ <form action="" method="post">
+ <div tal:omit-tag=""
+ tal:condition="python:principal != 'zope.anybody' and 'SUBMIT' in request">
+ <span tal:define="dummy python:request.response.redirect(request.get('camefrom', ''))" />
+ </div>
+ <div class="row">
+ <div class="label"><label for="login" i18n:translate="">User Name</label></div>
+ <div class="field">
+ <input type="text" name="login" id="login" />
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="label"><label for="password" i18n:translate="">Password</label></div>
+ <div class="field">
+ <input type="password" name="password" id="password" />
+ </div>
+ </div>
+
+ <div class="row">
+ <input class="form-element" type="submit"
+ name="SUBMIT" value="Log in" i18n:attributes="value login-button" />
+ </div>
+ <input type="hidden" name="camefrom" tal:attributes="value request/camefrom | nothing">
+ </form>
+</div>
Property changes on: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/session_cred_loginform.pt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Modified: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/zope.app.security.browser.zcml
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/zope.app.security.browser.zcml 2009-03-03 19:58:03 UTC (rev 97456)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/browser/zope.app.security.browser.zcml 2009-03-03 20:00:37 UTC (rev 97457)
@@ -1,8 +1,10 @@
<configure
- xmlns="http://namespaces.zope.org/zope"
- xmlns:browser="http://namespaces.zope.org/browser"
- i18n_domain="z3c">
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ xmlns:z3c="http://namespaces.zope.org/z3c"
+ i18n_domain="z3c">
+ <!-- viewlets for login and logout links -->
<browser:viewletManager
name="login-logout"
provides=".auth.ILoginLogoutViewletManager"
@@ -53,4 +55,71 @@
layer="z3c.layer.pagelet.IPageletBrowserLayer"
/>
+ <z3c:pagelet
+ name="login_failed.html"
+ class=".auth.LoginFailedPagelet"
+ permission="zope.Public"
+ for=".auth.HTTPAuthenticationLogin"
+ />
+
+ <z3c:template
+ for=".auth.LoginFailedPagelet"
+ template="login_failed.pt"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+
+ <z3c:pagelet
+ name="login_success.html"
+ class=".auth.LoginSuccessfulPagelet"
+ permission="zope.Public"
+ for=".auth.HTTPAuthenticationLogin"
+ />
+
+ <z3c:template
+ for=".auth.LoginSuccessfulPagelet"
+ template="login_success.pt"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+
+ <z3c:pagelet
+ name="redirect.html"
+ class=".auth.LogoutRedirectPagelet"
+ permission="zope.Public"
+ for=".auth.HTTPAuthenticationLogout"
+ />
+
+ <z3c:template
+ for=".auth.LogoutRedirectPagelet"
+ template="redirect.pt"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+
+ <z3c:pagelet
+ name="logout_success.html"
+ class=".auth.LogoutSuccessPagelet"
+ permission="zope.Public"
+ for=".auth.HTTPAuthenticationLogout"
+ />
+
+ <z3c:template
+ for=".auth.LogoutSuccessPagelet"
+ template="logout.pt"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+
+ <!-- login form for session credentials -->
+ <z3c:pagelet
+ name="loginForm.html"
+ for="*"
+ class=".auth.SessionCredentialsLoginForm"
+ permission="zope.Public"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+
+ <z3c:template
+ for=".auth.SessionCredentialsLoginForm"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ template="session_cred_loginform.pt"
+ />
+
</configure>
Added: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/login.txt
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/login.txt (rev 0)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/login.txt 2009-03-03 20:00:37 UTC (rev 97457)
@@ -0,0 +1,228 @@
+Login and logout
+----------------
+
+Login and logout work both for basic auth and cookie auth.
+
+
+Setup
+~~~~~
+
+To get login resp. logout links, the layout page template has to
+include the login-logout viewlet manger. Our sample template looks
+like this:
+
+ >>> import os.path
+ >>> template_path = os.path.join(os.path.dirname(__file__), "tests",
+ ... "login-logout-template.pt")
+ >>> print file(template_path, "r").read()
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ <tal:block replace="structure provider:login-logout" />
+ </body>
+ </html>
+
+This template is registered for the ``IContainer`` interface in the
+``ftesting.zcml`` file. After creating a container the template is
+used when browsing the container:
+
+ >>> from zope.container.btree import BTreeContainer
+ >>> getRootFolder()['container'] = BTreeContainer()
+
+Basic auth
+~~~~~~~~~~
+
+When the user is not logged in the login link is displayed:
+
+ >>> from zope.testbrowser.testing import Browser
+ >>> skinURL = 'http://localhost/++skin++PageletTestSkin/'
+ >>> browser = Browser()
+ >>> browser.open(skinURL + 'container/@@default.html')
+ >>> browser.url
+ 'http://localhost/++skin++PageletTestSkin/container/@@default.html'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ <a href="http://localhost/++skin++PageletTestSkin/container/@@login.html?nextURL=http%3A//localhost/%2B%2Bskin%2B%2BPageletTestSkin/container/%40%40default.html">Login</a>
+ </body>
+ </html>
+
+Selecting the link leads to the login page, as we use basic auth here,
+we get an HTTP error 401 (unauthorized):
+
+ >>> browser.getLink('Login').click()
+ Traceback (most recent call last):
+ httperror_seek_wrapper: HTTP Error 401: Unauthorized
+ >>> login_url = browser.url
+ >>> login_url
+ 'http://localhost/++skin++PageletTestSkin/container/@@login.html?nextURL=http%3A//localhost/%2B%2Bskin%2B%2BPageletTestSkin/container/%40%40default.html'
+
+When adding correct credentials we get authorized:
+
+ >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+ >>> browser.reload()
+
+We are redirected to the page where we selected the login link. After
+logging in the login link is no longer displayed. As we did not
+specify that logout is supported, no logout link is displayed:
+
+ >>> browser.url
+ 'http://localhost/++skin++PageletTestSkin/container/@@default.html'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ </body>
+ </html>
+
+Calling the login URL again leads directly to the page referred in nextURL:
+
+ >>> browser.open(login_url)
+ >>> browser.url
+ 'http://localhost/++skin++PageletTestSkin/container/@@default.html'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ </body>
+ </html>
+
+Calling the login URL again without the query parameter leeds to a
+confirmation page telling that login was successfull:
+
+ >>> browser.open(login_url.split('?')[0])
+ >>> browser.url
+ 'http://localhost/++skin++PageletTestSkin/container/@@login.html'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTestLayout</title>
+ </head>
+ <body>
+ <div>
+ <h1>Login successful!</h1>
+ <p style="font-size: 200%"> You are now logged in as <em>Manager</em>. </p>
+ <a href=".">Back to the main page.</a>
+ </div>
+ </body>
+ </html>
+
+Selecting the ``Back to the main page.`` link send the user back to
+the default view of the container. (``ftesting.zcml`` defines ``@@default.html``as the default view.):
+
+ >>> browser.getLink('Back to the main page.').click()
+ >>> browser.url
+ 'http://localhost/++skin++PageletTestSkin/container/'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ </body>
+ </html>
+
+
+Providing an ``ILogoutSupported`` adapter leads to a logout link being
+displayed:
+
+ >>> from zope.app.testing import ztapi
+ >>> import zope.interface
+ >>> import zope.app.security
+ >>> import zope.app.security.interfaces
+ >>> ztapi.provideAdapter(
+ ... zope.interface.Interface,
+ ... zope.app.security.interfaces.ILogoutSupported,
+ ... zope.app.security.LogoutSupported)
+ >>> browser.reload()
+ >>> browser.url
+ 'http://localhost/++skin++PageletTestSkin/container/'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ <a href="http://localhost/++skin++PageletTestSkin/container/@@logout.html?nextURL=http%3A//localhost/%2B%2Bskin%2B%2BPageletTestSkin/container/%40%40default.html">Logout</a>
+ </body>
+ </html>
+
+Logout is done using JavaScript and a redirect. As testbrowser is not
+able to execute JavaScript the user remains authenticated:
+
+ >>> browser.getLink('Logout').click()
+ >>> logout_url = browser.url
+ >>> logout_url
+ 'http://localhost/++skin++PageletTestSkin/container/@@logout.html?nextURL=http%3A//localhost/%2B%2Bskin%2B%2BPageletTestSkin/container/%40%40default.html'
+ >>> print browser.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTestLayout</title>
+ </head>
+ <body>
+ <div>
+ <h1>You are being redirected!</h1>
+ <p style="font-size: 150%">
+ <a href="http://localhost/++skin++PageletTestSkin/container/@@default.html">
+ If you see this screen for more than 5 seconds, click here.
+ </a>
+ </p>
+ </div>
+ </body>
+ </html>
+
+Calling the logout URL again after logout (simulated using a new
+browser instance) leads directly to the page referred in nextURL:
+
+ >>> browser2 = Browser(logout_url)
+ >>> browser2.url
+ 'http://localhost/++skin++PageletTestSkin/container/@@default.html'
+ >>> print browser2.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTest</title>
+ </head>
+ <body>
+ <a href="http://localhost/++skin++PageletTestSkin/container/@@login.html?nextURL=http%3A//localhost/%2B%2Bskin%2B%2BPageletTestSkin/container/%40%40default.html">Login</a>
+ </body>
+ </html>
+
+Calling the logout URL again without the query parameter leeds to a
+confirmation page telling that logout was successfull:
+
+ >>> browser2.open(logout_url.split('?')[0])
+ >>> browser2.url
+ 'http://localhost/++skin++PageletTestSkin/container/@@logout.html'
+ >>> print browser2.contents
+ <!DOCTYPE ...>
+ <html ...>
+ <head>
+ <title>PageletTestLayout</title>
+ </head>
+ <body>
+ <div>
+ <h1>Logout successful!</h1>
+ <p style="font-size: 200%"> You are now logged out. </p>
+ <a href=".">Back to the main page.</a>
+ </div>
+ </body>
+ </html>
+
Property changes on: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/login.txt
___________________________________________________________________
Added: svn:keywords
+ Id Rev Date
Added: svn:eol-style
+ native
Modified: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/ftesting.zcml
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/ftesting.zcml 2009-03-03 19:58:03 UTC (rev 97456)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/ftesting.zcml 2009-03-03 20:00:37 UTC (rev 97457)
@@ -48,6 +48,7 @@
<include package="zope.app.publication" />
<include package="zope.app.publisher.browser" />
<include package="zope.app.security" />
+ <include package="zope.app.authentication" />
<include package="zope.securitypolicy" />
<include package="zope.app.twisted" />
<include package="zope.app.wsgi" />
@@ -58,6 +59,7 @@
<include package="zope.traversing" />
<include package="zope.traversing.browser" />
<include package="zope.viewlet" />
+ <include package="zope.session" />
<!-- z3c component -->
@@ -117,6 +119,7 @@
class=".SystemErrorPage"
/>
+ <!-- page for bugfix.txt -->
<browser:page
for="*"
name="container_contents.html"
@@ -126,13 +129,27 @@
/>
<!-- definitions for login-logout tests -->
+ <!-- use special template for default.html view -->
<z3c:layout
- for="zope.container.interfaces.IContainer"
+ for=".LoginLogoutPage"
layer="z3c.layer.pagelet.IPageletBrowserLayer"
template="login-logout-template.pt"
/>
+ <z3c:pagelet
+ for="zope.container.interfaces.IContainer"
+ name="default.html"
+ permission="zope.View"
+ class=".LoginLogoutPage"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+ <browser:defaultView
+ name="default.html"
+ for="zope.container.interfaces.IContainer"
+ layer="z3c.layer.pagelet.IPageletBrowserLayer"
+ />
+
</configure>
@@ -149,8 +166,8 @@
<principal
id="zope.manager"
title="Manager"
- login="Manager"
- password="password"
+ login="mgr"
+ password="mgrpw"
/>
<grant
Modified: z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/test_layer.py
===================================================================
--- z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/test_layer.py 2009-03-03 19:58:03 UTC (rev 97456)
+++ z3c.layer.pagelet/branches/icemac_login_support/src/z3c/layer/pagelet/tests/test_layer.py 2009-03-03 20:00:37 UTC (rev 97457)
@@ -38,9 +38,6 @@
def test_suite():
suite = unittest.TestSuite()
suite.addTest(create_suite('../README.txt', checker=checker))
+ suite.addTest(create_suite('../login.txt', checker=checker))
suite.addTest(create_suite('bugfixes.txt'))
return suite
-
-
-if __name__ == '__main__':
- unittest.main(defaultTest='test_suite')
More information about the Checkins
mailing list