I try to add a PluggableAuthentication and a PrincipalFolder automatically.
When I add a principal to the PrincipalFolder it works fine, but the 
authentification of the User fails. When I add one more 
PluggableAuthentication manually and choose the automatically generated 
PrincipalFolder as authenticator plugin, it works.
Here is my code:

from zope.app import zapi
from zope.app.publisher.browser import BrowserView
from zope.security.proxy import removeSecurityProxy
from zope.app.component.interfaces import ISite
from zope.app.component.site import LocalSiteManager
from zope.app.authentication.authentication import PluggableAuthentication
from zope.app.component.site import UtilityRegistration
from zope.app.security.interfaces import IAuthentication
from zope.app.container.interfaces import INameChooser
from zope.app.component.interfaces.registration import ActiveStatus
from zope.app.authentication.principalfolder import PrincipalFolder
from zope.app.authentication.interfaces import IAuthenticatorPlugin

class MakeUserFolder(BrowserView):
        def addUserFolder(self):
                if ISite.providedBy(self.context):
                        raise zapi.UserError('This is already a site')

                # We don't want to store security proxies (we can't,
                # actually), so we have to remove proxies here before passing
                # the context to the SiteManager.
                bare = removeSecurityProxy(self.context)
                sm = LocalSiteManager(bare)
                # create PluggableAuthentication utility
                pluggableauth = PluggableAuthentication()
                pluggableauth.prefix = u'learn2l'

                # get site manager and site management folder
                sitemanager = bare.getSiteManager()
                default = sitemanager['default']
                # add utility to site management folder
                chooser = INameChooser(default)
                folder_name = chooser.chooseName(pluggableauth.__name__, 
                default[folder_name] = pluggableauth

                # create service registration
                registration = UtilityRegistration('pluggableauth', 
                key = default.registrationManager.addRegistration(registration)
                zapi.traverse(default.registrationManager, key).status = 
                # create PrincipalFolder utility
                pf = PrincipalFolder()
                pf.prefix = u'users'
                # add utility to PuggableAuthentication
                chooser = INameChooser(pluggableauth)
                folder_name = chooser.chooseName(pf.__name__, pf)
                pluggableauth[folder_name] = pf
                # create service registration
                registration = UtilityRegistration('users', 
IAuthenticatorPlugin, pf)
                key = 
                zapi.traverse(pluggableauth.registrationManager, key).status = 
                pluggableauth.authenticatorPlugins = [u'users']
                pluggableauth.credentialsPlugins = [u'Zope Realm Basic-Auth']

I am sorry for this code, I try to figure out how it works.

Thank you,
Zope3-users mailing list

Reply via email to