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.

Reply via email to