[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