[Repoze-checkins] r828 - in repoze.pam/trunk: . repoze/pam repoze/pam/plugins

Whit Morris (he-man) whit at openplans.org
Tue Mar 18 16:57:47 EDT 2008


Author: Whit (he-man) Morris <whit at openplans.org>
Date: Tue Mar 18 16:57:47 2008
New Revision: 828

Log:
update gather_metadata to filter on classification

Added:
   repoze.pam/trunk/repoze/pam/plugins/ini.py
Modified:
   repoze.pam/trunk/README.txt
   repoze.pam/trunk/repoze/pam/middleware.py
   repoze.pam/trunk/repoze/pam/tests.py

Modified: repoze.pam/trunk/README.txt
==============================================================================
--- repoze.pam/trunk/README.txt	(original)
+++ repoze.pam/trunk/README.txt	Tue Mar 18 16:57:47 2008
@@ -221,6 +221,16 @@
     get_userinfo = select id, password from users
     check_fn = egg:repoze.pam#crypt_check
 
+    [plugin:principals]
+    use = egg:repoze.pam#ini_metadata
+    filename = %(here)s/etc/principals.ini
+    handler = egg:repoze.pam#ini_default
+
+    [plugin:zope_roles]
+    use = egg:repoze.pam#ini_metadata
+    filename = %(here)s/etc/roles.ini
+    # uses egg:repoze.pam#ini_default
+
     [general]
     request_classifier = egg:repoze.pam#defaultrequestclassifier
     challenge_decider = egg:repoze.pam#defaultchallengedecider
@@ -244,6 +254,12 @@
           form:browser
           basicauth
 
+    [metadata.providers]
+    plugins =
+          principals
+          zope_roles:zope
+
+
 Further Description of Example Config
 
   The basicauth section configures a plugin that does identification

Modified: repoze.pam/trunk/repoze/pam/middleware.py
==============================================================================
--- repoze.pam/trunk/repoze/pam/middleware.py	(original)
+++ repoze.pam/trunk/repoze/pam/middleware.py	Tue Mar 18 16:57:47 2008
@@ -1,7 +1,8 @@
 import logging
 from StringIO import StringIO
 import sys
-
+from zope.interface.adapter import AdapterRegistry
+from zope.interface.interface import adapter_hooks
 from repoze.pam.interfaces import IIdentifier
 from repoze.pam.interfaces import IAuthenticator
 from repoze.pam.interfaces import IChallenger
@@ -79,7 +80,7 @@
                 # as necessary, e.g. identity['login'] = 'foo',
                 # identity['password'] = 'bar'
                 environ['repoze.pam.identity'] = identity
-                metadata = self.gather_metadata(environ, userid)
+                metadata = self.gather_metadata(environ, classification, userid)
                 identity['repoze.pam.metadata'] = metadata
                 # set the REMOTE_USER
                 environ[self.remote_user_key] = userid
@@ -146,8 +147,9 @@
         logger and logger.debug('identities found: %s' % results)
         return results
 
-    def gather_metadata(self, environ, userid):
-        plugins = self.registry.get(IMetadataProvider, ())
+    def gather_metadata(self, environ, classification, userid):
+        candidates = self.registry.get(IMetadataProvider, ())
+        plugins = match_classification(IMetadataProvider, candidates, classification)        
         metadata = {}
         for plugin in plugins:
             data = plugin.metadata(environ, userid)
@@ -412,3 +414,5 @@
         return '<repoze.pam identity (hidden, dict-like) at %s>' % id(self)
     __str__ = __repr__
 
+
+_plugin_registry = AdapterRegistry()

Added: repoze.pam/trunk/repoze/pam/plugins/ini.py
==============================================================================
--- (empty file)
+++ repoze.pam/trunk/repoze/pam/plugins/ini.py	Tue Mar 18 16:57:47 2008
@@ -0,0 +1,3 @@
+from repoze.pam.interfaces import IMetadataProvider
+from zope.interface import implements
+from ConfigParser import ConfigParser

Modified: repoze.pam/trunk/repoze/pam/tests.py
==============================================================================
--- repoze.pam/trunk/repoze/pam/tests.py	(original)
+++ repoze.pam/trunk/repoze/pam/tests.py	Tue Mar 18 16:57:47 2008
@@ -411,10 +411,23 @@
         plugin2 = DummyMDProvider({'fuz':'baz'})
         plugins = [ ('meta1', plugin1), ('meta2', plugin2) ]
         mw = self._makeOne(mdproviders=plugins)
-        results = mw.gather_metadata(environ, 'theman')
+        classification = ''
+        results = mw.gather_metadata(environ, classification, 'theman')
         self.assertEqual(results['foo'], 'bar')
         self.assertEqual(results['fuz'], 'baz')
-       
+
+    def test_gather_metadata_w_classification(self): 
+        environ = self._makeEnviron()
+        plugin1 = DummyMDProvider({'foo':'bar'})
+        plugin2 = DummyMDProvider({'fuz':'baz'})
+        from repoze.pam.interfaces import IMetadataProvider
+        plugin2.classifications = {IMetadataProvider:['foo']}
+        plugins = [ ('meta1', plugin1), ('meta2', plugin2) ]
+        mw = self._makeOne(mdproviders=plugins)
+        classification = 'monkey'
+        results = mw.gather_metadata(environ, classification, 'theman')
+        self.assertEqual(results['foo'], 'bar')
+        self.assertEqual(results.get('fuz'), None)       
 
     def test_call_remoteuser_already_set(self):
         environ = self._makeEnviron({'REMOTE_USER':'admin'})


More information about the Repoze-checkins mailing list