Also, search the pylons-discuss archive for earlier discussions of AuthKit. They may have something relevant.
On Thu, Apr 17, 2014 at 10:34 AM, Mike Orr <[email protected]> wrote: > You can try AuthKit's author, James Gardner <[email protected]>. > > I was going to cc this but the problem description has been chopped > off in the replies, so I'll let you write it. > > > On Thu, Apr 17, 2014 at 5:25 AM, Etienne Robillard <[email protected]> wrote: >> The reason i want to stick with authkit is that i need to retain >> a legacy database backend connection which uses the Schevo database. >> >> The driver itself is looking like this: >> >> from authkit.users import Users >> >> __all__ = ['ManagerBase', 'UserManagerBase'] >> >> class ManagerBase(Users): >> """ >> Creates a composite proxy object for the User Entity. >> >> >>> manager = ManagerBase(db.User) >> >>> user = manager.objects.get(username="erob") >> >>> user >> <User account: "Etienne Robillard"> >> >>> user.username == "erob" >> True >> """ >> >> # Keep this for compatibility with Pylons ;-) >> api_version = 0.4 >> >> def __init__(self, data, encrypt=None): >> super(ManagerBase, self).__init__(data, encrypt=encrypt) >> >> def __new__(cls, *args, **kwargs): >> if not hasattr(cls, 'objects'): >> raise AttributeError('%r is missing required objects >> attribute'%cls) >> new_obj = object.__new__(cls) >> new_obj._default_manager = cls.objects >> return new_obj >> >> class UserManagerBase(ManagerBase): >> def user_exists(self, username): >> #look up the user >> user_object = self.objects.get(username=username) >> if user_object is not None: >> return True >> return False >> >> def user_has_password(self, username, password): >> u = self.objects.get(username=username) >> if u.f.password.compare(password): >> return True >> return False >> >> ### Roles and Groups permissions >> #def role_exists(self, roles): >> # # return True if the roles exists >> # return False >> >> Then in the config, the following key is used to get the user >> manager object: >> >> authkit.user.type = mainapp.accounts.model:UserManager >> >> Note that i never until recently managed to get this working elsewhere >> than in my initial development site. >> >> Auth_tkt is also included in libauthkit. LibAuthKit is the name for this >> project >> despite slow progresses to decouple the new API into a new package. >> >> Regards, >> >> Etienne >> >> >> On Wednesday, 16 April 2014 14:42:20 UTC-4, Bert JW Regeer wrote: >>> >>> That’s what I get for failing reading comprehension :-). >>> >>> Never used Authkit. >>> >>> Bert >>> >>> On Apr 13, 2014, at 09:22 , Chris Rossi <[email protected]> wrote: >>> >>> > Note, authkit != authtkt. >>> > >>> > Chris >>> > >>> > >>> > On Sun, Apr 13, 2014 at 11:14 AM, Bert JW Regeer <[email protected]> >>> > wrote: >>> > AuthTkt is still supported, there is a authentication module for it in >>> > Pyramid that uses authtkt for auth. >>> > >>> > Bert >>> > >>> > On Apr 12, 2014, at 9:01, Mike Orr <[email protected]> wrote: >>> > >>> > > It has been four years since I've heard anything about AuthKit so I'm >>> > > not sure it's still supported. Since you're apparently writing a new >>> > > application rather than just keeping an old one running, why are you >>> > > using such ancient technologies as AuthKit, middleware, and >>> > > (apparently) Pylons? Pyramid has a built-in auth system, more complete >>> > > documentation, better support, tweens which are easier to write than >>> > > middleware, is forward-compatible with Python 3, and is "Pylons 2". >>> > > >>> > > >>> > > On Thu, Apr 10, 2014 at 7:23 AM, Etienne Robillard <[email protected]> >>> > > wrote: >>> > >> >>> > >> Hello, >>> > >> >>> > >> I'm trying to make cookie authentication working with authkit and >>> > >> WSGI but >>> > >> cannot >>> > >> find a healthy solution. So far here's the code which i'm trying >>> > >> to use for getting a users object into the environ: >>> > >> >>> > >> #!/usr/bin/env python >>> > >> from notmm.controllers.wsgi import WSGIController >>> > >> from notmm.controllers.auth import LoginController >>> > >> from notmm.utils.http import httpserver >>> > >> from notmm.utils.configparse import loadconf >>> > >> >>> > >> sample_app = WSGIController() >>> > >> settings = sample_app.settings >>> > >> global_conf = loadconf('auth.conf') >>> > >> auth_conf = global_conf['authkit'] >>> > >> auth_app = LoginController(sample_app, auth_conf, settings=settings) >>> > >> >>> > >> if __name__ == '__main__': >>> > >> httpserver.daemonize(auth_app, ('localhost', 8000)) >>> > >> >>> > >> >>> > >> And here's the login view to handle authentication: >>> > >> >>> > >> def authenticate_user(request, username, password, tokens='', >>> > >> user_data=time.ctime, >>> > >> authfunc='paste.auth_tkt.set_user'): >>> > >> """Authenticate the user into the site and update the >>> > >> last_modified >>> > >> timestamp if authentication and authorization granted user >>> > >> access.""" >>> > >> >>> > >> try: >>> > >> user_setter_func = request.environ[authfunc] >>> > >> if valid_password(request.environ, username, password): >>> > >> user_setter_func(username, tokens=tokens, >>> > >> user_data=user_data()) >>> > >> #trigger function here to update the last_modified >>> > >> timestamp >>> > >> log.debug('User %s has been authenticated and authorized >>> > >> access!!' % username) >>> > >> raise NotAuthenticatedError >>> > >> except (KeyError, Exception): >>> > >> raise NotAuthenticatedError >>> > >> return None >>> > >> >>> > >> controller: >>> > >> >>> > >> >>> > >> class AuthCookieController(SessionController): >>> > >> """ >>> > >> Authentication controller to delegate authorization to generic >>> > >> user-defined backends. >>> > >> >>> > >> """ >>> > >> >>> > >> request_class = HTTPRequest >>> > >> response_class = HTTPResponse >>> > >> >>> > >> def __init__(self, wsgi_app, auth_conf=None, **kwargs): >>> > >> >>> > >> super(AuthCookieController, self).__init__(**kwargs) >>> > >> >>> > >> #put a pointer on the previous wsgi app in the stack >>> > >> self.wsgi_app = wsgi_app >>> > >> >>> > >> self.auth_conf_wrapper = auth_middleware(wsgi_app, >>> > >> app_conf=auth_conf, >>> > >> cookie_secret='secret string', >>> > >> #handle_httpexception=False, >>> > >> valid=self.authenticate, >>> > >> #enforce=self.auth_conf['enforce'] >>> > >> ) >>> > >> >>> > >> def application(self, environ, start_response, exc_info=None): >>> > >> # apply the response middleware wrapper to >>> > >> # the WSGI stack and return a callable obj >>> > >> return self.auth_conf_wrapper(environ, start_response) >>> > >> >>> > >> >>> > >> def authenticate(self, username, password): >>> > >> """ >>> > >> Authenticate with the provided ``username`` and ``password``. >>> > >> >>> > >> Developers are expected to override this method in custom >>> > >> authentication subclasses. >>> > >> """ >>> > >> >>> > >> if username == password: >>> > >> return username >>> > >> else: >>> > >> return None >>> > >> >>> > >> LoginController = AuthCookieController >>> > >> >>> > >> the traceback: >>> > >> >>> > >>> >>> > >>> >>> > >>> /home/steiner/src/notmm/trunk/examples/auth/views/login.py(33)authenticate_user() >>> > >> -> if valid_password(request.environ, username, password): >>> > >> (Pdb) bt >>> > >> >>> > >> /home/steiner/src/notmm/trunk/examples/auth/redirect.py(15)<module>() >>> > >> -> httpserver.daemonize(auth_app, ('localhost', 8000)) >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/lib/notmm/utils/http/httpserver.py(157)daemonize() >>> > >> -> server.serve() >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/lib/notmm/utils/http/httpserver.py(115)serve() >>> > >> -> self.server.serve_forever() >>> > >> /usr/local/lib/python2.7/SocketServer.py(238)serve_forever() >>> > >> -> self._handle_request_noblock() >>> > >> >>> > >> /usr/local/lib/python2.7/SocketServer.py(295)_handle_request_noblock() >>> > >> -> self.process_request(request, client_address) >>> > >> /usr/local/lib/python2.7/SocketServer.py(321)process_request() >>> > >> -> self.finish_request(request, client_address) >>> > >> /usr/local/lib/python2.7/SocketServer.py(334)finish_request() >>> > >> -> self.RequestHandlerClass(request, client_address, self) >>> > >> /usr/local/lib/python2.7/SocketServer.py(649)__init__() >>> > >> -> self.handle() >>> > >> /usr/local/lib/python2.7/wsgiref/simple_server.py(124)handle() >>> > >> -> handler.run(self.server.get_app()) >>> > >> /usr/local/lib/python2.7/wsgiref/handlers.py(85)run() >>> > >> -> self.result = application(self.environ, self.start_response) >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/extras/libauthkit/authkit/authenticate/base.py(314)__call__() >>> > >> -> return self.app(environ, start_response) >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/extras/libauthkit/authkit/authenticate/cookie.py(480)__call__() >>> > >> -> return self.app(environ, cookie_setting_start_response) >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/extras/libauthkit/authkit/authenticate/multi.py(87)__call__() >>> > >> -> app_iter = app(environ, start_response) >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/extras/libauthkit/authkit/authenticate/multi.py(55)app() >>> > >> -> return self.default(environ, find) >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/extras/libauthkit/authkit/authenticate/base.py(304)__call__() >>> > >> -> return self.app(environ, start_response) >>> > >> >>> > >> /home/steiner/src/notmm/trunk/examples/auth/views/login.py(96)login() >>> > >> -> authenticate_user(request, username, password) >>> > >>> >>> > >>> >>> > >>> /home/steiner/src/notmm/trunk/examples/auth/views/login.py(33)authenticate_user() >>> > >> -> if valid_password(request.environ, username, password): >>> > >> >>> > >> >>> > >> /home/steiner/src/notmm/trunk/extras/libauthkit/authkit/authenticate/base.py(97)valid_password() >>> > >> -> raise no_authkit_users_in_environ >>> > >> >>> > >> And heres the config i use: >>> > >> [authkit] >>> > >> >>> > >> authkit.setup.enable = true >>> > >> authkit.setup.method = redirect,cookie >>> > >> authkit.setup.handle_exceptions = false >>> > >> >>> > >> #authkit.authenticate.callback = >>> > >> authkit.authenticate.cookie2:middleware >>> > >> #authkit.digest.authenticate.user.data = visitor:open_sesame >>> > >> #authkit.digest.realm = 'Test realm' >>> > >> >>> > >> # authentication options >>> > >> authkit.redirect.url = /session_login/ >>> > >> #authkit.user.type = mainapp.accounts.model:UserManager >>> > >> >>> > >> >>> > >> as you can see authkit middleware doesnt set up a proper users >>> > >> object, which make authentication fail. Is there thus an alternative >>> > >> method >>> > >> to set up the middleware to handle form authentication in authkit? >>> > >> >>> > >> Regards, >>> > >> >>> > >> Etienne >>> > >> >>> > >> -- >>> > >> You received this message because you are subscribed to the Google >>> > >> Groups >>> > >> "pylons-discuss" group. >>> > >> To unsubscribe from this group and stop receiving emails from it, >>> > >> send an >>> > >> email to [email protected]. >>> > >> To post to this group, send email to [email protected]. >>> > >> Visit this group at http://groups.google.com/group/pylons-discuss. >>> > >> For more options, visit https://groups.google.com/d/optout. >>> > > >>> > > >>> > > >>> > > -- >>> > > Mike Orr <[email protected]> >>> > > >>> > > -- >>> > > You received this message because you are subscribed to the Google >>> > > Groups "pylons-discuss" group. >>> > > To unsubscribe from this group and stop receiving emails from it, send >>> > > an email to [email protected]. >>> > > To post to this group, send email to [email protected]. >>> > > Visit this group at http://groups.google.com/group/pylons-discuss. >>> > > For more options, visit https://groups.google.com/d/optout. >>> > >>> > >>> > >>> > -- >>> > You received this message because you are subscribed to the Google >>> > Groups "pylons-discuss" group. >>> > To unsubscribe from this group and stop receiving emails from it, send >>> > an email to [email protected]. >>> > To post to this group, send email to [email protected]. >>> > Visit this group at http://groups.google.com/group/pylons-discuss. >>> > For more options, visit https://groups.google.com/d/optout. >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "pylons-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/pylons-discuss. >> For more options, visit https://groups.google.com/d/optout. > > > > -- > Mike Orr <[email protected]> -- Mike Orr <[email protected]> -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/pylons-discuss. For more options, visit https://groups.google.com/d/optout.
