<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Lucida Console";
        panose-1:2 11 6 9 4 5 4 2 2 4;}
@font-face
        {font-family:"FuturaA Bk BT";
        panose-1:2 11 5 2 2 2 4 2 3 3;}
@font-face
        {font-family:"\@SimSun";
        panose-1:0 0 0 0 0 0 0 0 0 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"FuturaA Bk BT";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:#606420;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:Arial;
        color:windowtext;}
@page Section1
        {size:595.3pt 841.9pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
        {page:Section1;}
-->
</style>

</head>

<body lang=EN-US link=blue vlink="#606420">

<div class=Section1>

<p class=MsoNormal><font size=2 face="Courier New"><span style='font-size:10.0pt;
font-family:"Courier New"'>Hello grokkers,<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>I
use the chapter 7 on the security of the &quot;grok 1.0&#8221; great book from
&quot;De la Guardia&quot;.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>where
there is an auth.py module beginning by the following import lines.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>import
grok<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.authentication.session import SessionCredentialsPlugin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.authentication.interfaces import ICredentialsPlugin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.authentication.interfaces import IAuthenticatorPlugin<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.authentication.interfaces import IPrincipalInfo<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.authentication.interfaces import IPasswordManager<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.security.interfaces import IAuthentication, IUnauthenticatedPrincipal,
ILogout<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.securitypolicy.interfaces import IPrincipalPermissionManager<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.securitypolicy.interfaces import IPrincipalRoleManager<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.app.authentication.principalfolder import InternalPrincipal<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope import component<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope.interface import Interface<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>from
zope import schema<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>As
admin I create one project, which can be accessed by <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>http://xxx.xxx.xxx.xxx:xxxx/todo/0<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>As
admin I create a user (&quot;user1&quot;).<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>Then
from one other browser I address the project with the address.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>http://xxx.xxx.xxx.xxx:xxxx/todo/0<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>As
expected the login page is displayed.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>I
enter the user &quot;user1&quot; with the password.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>After
the click on the button, the following lines are displayed. <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>URL:
http://xxx.xxx.xxx.xxx:xxxx/todo/%40%40login<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/Paste-1.7.2-py2.5.egg/paste/evalexception/middleware.py',
line 306 in respond<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
app_iter = self.application(environ, detect_start_response)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.app.wsgi-3.6.1-py2.5.egg/zope/app/wsgi/__init__.py',
line 59 in __call__<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
request = publish(request, handle_errors=handle_errors)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.publisher-3.12.3-py2.5.egg/zope/publisher/publish.py',
line 131 in publish<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
obj = request.traverse(obj)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.publisher-3.12.3-py2.5.egg/zope/publisher/browser.py',
line 542 in traverse<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
ob = super(BrowserRequest, self).traverse(obj)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.publisher-3.12.3-py2.5.egg/zope/publisher/http.py',
line 459 in traverse<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
ob = super(HTTPRequest, self).traverse(obj)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.publisher-3.12.3-py2.5.egg/zope/publisher/base.py',
line 251 in traverse<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
publication.callTraversalHooks(self, obj)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.app.publication-3.10.2-py2.5.egg/zope/app/publication/zopepublication.py',
line 135 in callTraversalHooks<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
self._maybePlacefullyAuthenticate(request, ob)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.app.publication-3.10.2-py2.5.egg/zope/app/publication/zopepublication.py',
line 122 in _maybePlacefullyAuthenticate<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
principal = auth.authenticate(request)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.pluggableauth-1.0.1-py2.5.egg/zope/pluggableauth/authentication.py',
line 71 in authenticate<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
interfaces.IAuthenticatedPrincipalFactory)(self)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>File
'/root/.buildout/eggs/zope.component-3.9.1-py2.5.egg/zope/component/_api.py',
line 111 in getMultiAdapter<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;
raise ComponentLookupError(objects, interface, name)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>ComponentLookupError:
((&lt;todo.auth.PrincipalInfo object at 0x414e110&gt;, <o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&lt;zope.publisher.browser.BrowserRequest
instance URL=http://xxx.xxx.xxx.xxx:xxxx/todo&gt;), &lt;InterfaceClass
zope.pluggableauth.interfaces.IAuthenticatedPrincipalFactory&gt;, u'')<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>Did
I miss something or the code should be updated for the version 1.1 of grok?<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>Thanks
in advance for your help.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>Paul
Divine<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'>&nbsp;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=2 color=black face="Lucida Console"><span
lang=EN-GB style='font-size:10.0pt;font-family:"Lucida Console";color:black'><o:p>&nbsp;</o:p></span></font></p>

</div>

</body>

</html>