-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/13/2012 10:58 AM, Jim Carroll wrote:

> Hi, I'm struggling a bit to get rid of the friendly form identifier 
> and challenger, and do my own Authenticator in a turbogears 2.1 
> project.
> 
> I've got a 'faceless' web services server that won't even have a
> login form, since no human will ever visit the site.  So I want to
> retain the session cookie mechanism, and the sa_auth module that uses
> the default Group, User, and Permission model in SQL Alchemy.  I just
> am going to do my own Authentication, and get rid of the Challenger.

Are you "authenticating" clients based on the subnet, or something?
Otherwise you need a chellenger of some sort.  Note that you may still
need some kind of challenger to cope with requests which come from
"hostile" / random sources.

> So far I've implemented an IAuthenticator
> 
> class ShaAuthenticator(IAuthenticator): #implements(IAuthenticator)
> 
> def authenticate(self, environment, identity):
> 
> if not 'user_email' in identity: return None ...
> 
> and in app_cfg.py
> 
> hash_auth = ShaAuthenticator base_config.sa_auth.authenticators = 
> [('hash_auth', hash_auth)]
> 
> # got rid of the challenger base_config.sa_auth.form_plugin = None
> 
> #and am keeping base_config.auth_backend = 'sqlalchemy' 
> base_config.sa_auth.dbsession = model.DBSession
> 
> 
> If I try to run at the moment I see:
> 
> ValueError: hash_auth: An object has failed to implement interface 
> <InterfaceClass repoze.who.interfaces.IAuthenticator>
> 
> The authenticate attribute was not provided.
> 
> I didn't find much help on the turbogears google group, I'm hoping 
> someone might be able to point me in the right direction here. 
> Thanks,

I'm not quite sure what else might be going on, but I do see that you
haven't created an instance of ShaAuthenticator.  You have also commented
out the 'implements' class advisor.

FWIW, I ususally have unit tests like the following for classes that are
supposed to implement a given interface::

 class MyObjTests(unittest.TestCase):

     def _getTargetClass(self):
         from mypackage.myobj import MyObj
         return MyObj

     def _makeOne(self, *args, **kw):
         return self._getTargetClass()(*args, **kw)

     def test_class_conforms_to_IFoo(self):
         from zope.interface.verify import verifyClass
         from whatever.package.interfaces import IFoo
         verifyClass(IFoo, self._getTargetClass()

     def test_instance_conforms_to_IFoo(self):
         from zope.interface.verify import verifyObject
         from whatever.package.interfaces import IFoo
         verifyObject(IFoo, self._makeOne())




Tres.
- -- 
===================================================================
Tres Seaver          +1 540-429-0999          tsea...@palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk+K9x4ACgkQ+gerLs4ltQ6iMACg1++sKpy5PoKcrmL+O6GrgMRq
meAAoNBQCo8ZqS9TTOhsHfxIlz/3N9Gu
=Flae
-----END PGP SIGNATURE-----
_______________________________________________
Repoze-dev mailing list
Repoze-dev@lists.repoze.org
http://lists.repoze.org/listinfo/repoze-dev

Reply via email to