Test for Cookie Auth ==================== >>> import base64 >>> from urllib import quote >>> from zope.interface import implementedBy >>> from Interface.Implements import flattenInterfaces >>> from Products.PloneTestCase.PloneTestCase import portal_name User in Plone Site ------------------ Plone Site has PAS installed >>> print self.portal.acl_users.meta_type Pluggable Auth Service User exists in the user folder inside the Plone Site. >>> uf = self.portal.acl_users >>> print uf.meta_type Pluggable Auth Service >>> user_name, user_password, user_role = ('foo', 'bar', 'Manager') >>> uf.userFolderAddUser(user_name, user_password, [user_role], []) >>> uf.getUserById(user_name) Login to Plone Site using Basic Auth works. >>> print http(r""" ... GET /%s/manage HTTP/1.1 ... Authorization: Basic %s:%s ... """ % (portal_name, user_name, user_password), handle_errors=False) HTTP/1.1 200 OK... Make sure cookie plugin is installed and activated. >>> uf.objectIds('Extended Cookie Auth Helper') ['credentials_cookie_auth'] >>> plugins = uf.plugins >>> cookie = uf['credentials_cookie_auth'] >>> ifaces = flattenInterfaces(tuple(implementedBy(cookie.__class__))) >>> actives = [] >>> for iface in ifaces: ... try: ... actives.append((plugins.listPlugins(iface), iface)) ... except KeyError: ... pass >>> for active, iface in actives: ... print iface, ... for id, plugin in active: ... if id == 'credentials_cookie_auth': ... print True <...IExtractionPlugin...> True <...IChallengePlugin...> True <...ICredentialsUpdatePlugin...> True <...ICredentialsResetPlugin...> True Login to Plone site using Cookie Auth should work too. >>> encoded = base64.encodestring('%s:%s' % (user_name, user_password)) >>> print http(r""" ... GET /%s/manage HTTP/1.1 ... Cookie: __ac=%s; ... """ % (portal_name, encoded), handle_errors=False) HTTP/1.1 200 OK... User in parent folder --------------------- User Exists on the folder containing the Plone Site, which should be a Pluggable Auth Service too. >>> uf = self.portal.aq_parent.acl_users >>> print uf.meta_type Pluggable Auth Service >>> user_name, user_password, user_role = ('baz', 'bar', 'Manager') >>> uf.userFolderAddUser(user_name, user_password, [user_role], []) >>> uf.getUserById(user_name) Login directly to containing folder using Basic Auth works. >>> print http(r""" ... GET /manage HTTP/1.1 ... Authorization: Basic %s:%s ... """ % (user_name, user_password), handle_errors=False) HTTP/1.1 200 OK... Login to Plone Site using Basic Auth works. >>> print http(r""" ... GET /%s/manage HTTP/1.1 ... Authorization: Basic %s:%s ... """ % (portal_name, user_name, user_password), handle_errors=False) HTTP/1.1 200 OK... Login to Plone site using Cookie Auth should work too. >>> encoded = base64.encodestring('%s:%s' % (user_name, user_password)) >>> print http(r""" ... GET /%s/manage HTTP/1.1 ... Cookie: __ac=%s; ... """ % (portal_name, quote(encoded)), handle_errors=False) HTTP/1.1 200 OK... The cookie set by PlonePAS should be URL-quoted. >>> print http(r""" ... GET /%s/logged_in HTTP/1.1 ... Cookie: __ac=%s ... """ % (portal_name, quote(encoded)), handle_errors=False) HTTP/1.1 200 OK ... Set-Cookie: __ac="Og%3D%3D"; Path=/...