[Checkins] SVN: Sandbox/luciano/kirbi/src/kirbi/ implementation of
session login (currently broken)
Luciano Ramalho
luciano at ramalho.org
Thu Aug 16 23:22:13 EDT 2007
Log message for revision 78892:
implementation of session login (currently broken)
Changed:
U Sandbox/luciano/kirbi/src/kirbi/app.py
A Sandbox/luciano/kirbi/src/kirbi/app_templates/login.pt
U Sandbox/luciano/kirbi/src/kirbi/user.py
-=-
Modified: Sandbox/luciano/kirbi/src/kirbi/app.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/app.py 2007-08-17 02:48:16 UTC (rev 78891)
+++ Sandbox/luciano/kirbi/src/kirbi/app.py 2007-08-17 03:22:12 UTC (rev 78892)
@@ -7,6 +7,17 @@
from zope.component import getSiteManager
from zope.traversing import browser
+from zope.app.authentication import PluggableAuthentication
+from zope.app.authentication.principalfolder import PrincipalFolder
+from zope.app.authentication.principalfolder import InternalPrincipal
+from zope.app.authentication.session import SessionCredentialsPlugin
+from zope.app.security.interfaces import IAuthentication
+from zope.app.security.interfaces import IUnauthenticatedPrincipal
+from zope.app.securitypolicy.interfaces import IPrincipalRoleManager, IRole
+from zope.app.securitypolicy.interfaces import IRolePermissionManager
+from zope.app.securitypolicy.role import LocalRole
+from zope import schema
+
PAC_NAME = u'pac'
USER_FOLDER_NAME = u'u'
@@ -14,14 +25,37 @@
grok.define_permission('kirbi.EditBook')
grok.define_permission('kirbi.DeleteBook')
+def setup_pau(pau):
+ pau['principals'] = PrincipalFolder('kirbi.principals.')
+ pau.authenticatorPlugins = ('principals',)
+
+ pau['session'] = session = SessionCredentialsPlugin()
+ session.loginpagename = 'login'
+ pau.credentialsPlugins = ('No Challenge if Authenticated', 'session',)
+
+def role_factory(*args):
+ def factory():
+ return LocalRole(*args)
+ return factory
+
class Kirbi(grok.Application, grok.Container):
"""Peer-to-peer library system."""
+ grok.local_utility(PluggableAuthentication, IAuthentication,
+ setup=setup_pau)
+ grok.local_utility(role_factory(u'Book Owner'), IRole,
+ name='kirbi.Owner',
+ name_in_container='kirbi.Owner')
def __init__(self):
global sitePac, siteUsers, siteUsersURL
super(Kirbi, self).__init__()
self.pac = self[PAC_NAME] = Pac()
self.user_folder = self[USER_FOLDER_NAME] = UserFolder()
+ at grok.subscribe(Kirbi, grok.IObjectAddedEvent)
+def grant_permissions(app, event):
+ role_manager = IRolePermissionManager(app)
+ role_manager.grantPermissionToRole('kirbi.EditBook', 'kirbi.Owner')
+
class Index(grok.View):
def pac_url(self):
@@ -46,3 +80,17 @@
"""The master page template macro."""
# register this view for all objects
grok.context(Interface)
+
+class Login(grok.View):
+ grok.context(Interface)
+
+ def update(self, login_submit=None):
+ if (not IUnauthenticatedPrincipal.providedBy(self.request.principal)
+ and login_submit is not None):
+ camefrom = self.request.get('camefrom', '.')
+ self.redirect(camefrom)
+
+class Logout(grok.View):
+ grok.context(Interface)
+ def render(self):
+ return "This should log you out (but doesn't yet)."
Added: Sandbox/luciano/kirbi/src/kirbi/app_templates/login.pt
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/app_templates/login.pt (rev 0)
+++ Sandbox/luciano/kirbi/src/kirbi/app_templates/login.pt 2007-08-17 03:22:12 UTC (rev 78892)
@@ -0,0 +1,22 @@
+<html metal:use-macro="context/@@master/page">
+<body>
+<div metal:fill-slot="body">
+
+Login
+
+<form action="" tal:attributes="action request/URL" method="post">
+
+ <input type="text" name="login" id="login" />
+
+ <input type="password" name="password" id="password" />
+
+ <input type="hidden" name="camefrom"
+ tal:attributes="value request/camefrom | nothing">
+
+ <input type="submit" name="login_submit" value="Log in" />
+
+</form>
+
+</div>
+</body>
+</html>
Modified: Sandbox/luciano/kirbi/src/kirbi/user.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/user.py 2007-08-17 02:48:16 UTC (rev 78891)
+++ Sandbox/luciano/kirbi/src/kirbi/user.py 2007-08-17 03:22:12 UTC (rev 78892)
@@ -2,8 +2,8 @@
from interfaces import IUser
from zope.app.authentication.interfaces import IPrincipalInfo
from zope.app.authentication.interfaces import IAuthenticatorPlugin
+from zope.app.security.interfaces import IUnauthenticatedPrincipal
from zope.interface import Interface, implements, invariant, Invalid
-from zope import schema
import sha
import app
@@ -106,16 +106,6 @@
def update(self, query=None):
self.results_title = '%d users' % len(self.context)
-class Login(grok.View):
- grok.context(UserFolder)
- def render(self):
- return 'This should log you in...'
-
-class Logout(grok.View):
- grok.context(UserFolder)
- def render(self):
- return "This should log you out (but doesn't yet)."
-
class Join(grok.AddForm):
"""User registration form"""
grok.context(UserFolder)
@@ -127,8 +117,19 @@
### XXX: find out how to display message of the Invalid exception raised
### by the password confirmation invariant (see interfaces.IUser)
@grok.action('Save')
- def add(self, **data):
+ def join(self, **data):
login = data['login']
self.context[login] = User(**data)
+
+ #XXX: change this to use our User class instead of the InternalPrincipal
+ # add principal to principal folder
+ pau = component.getUtility(IAuthentication)
+ principals = pau['principals']
+ principals[email] = InternalPrincipal(login, password, name)
+
+ # assign role to principal
+ role_manager = IPrincipalRoleManager(self.context)
+ role_manager.assignRoleToPrincipal('kirbi.Owner',
+ principals.prefix + login)
self.redirect(self.url(login))
More information about the Checkins
mailing list