view openid_experiment.py @ 14:b8c699d8e613

google_client now calls onsuccess cb whenever openid itself was successful (even though the user may have 'cancelled' the auth).
author Atul Varma <avarma@mozilla.com>
date Sun, 13 Jun 2010 18:20:06 -0700
parents 775e00932285
children
line wrap: on
line source

class TrivialSession(object):
    def __init__(self, session_id):
        self.id = session_id
        self.data = {}

def newkey(numbits=128):
    return ''.join('%x' % ord(x) for x in os.urandom(numbits/8))

class TrivialSessions(object):
    def __init__(self):
        self.sessions = {}

    def create(self):
        sid = newkey()
        while sid in self:
            sid = newkey()

        session = TrivialSession(sid)
        self.sessions[sid] = session
        return session

    def __contains__(self, session_id):
        return session_id in self.sessions

    def __getitem__(self, session_id):
        return self.sessions[session_id]

    def __delitem__(self, session_id):
        del self.sessions[session_id]

def onsuccess(environ, start_response):
    start_response('200 OK',
                   [('Content-Type', 'text/plain')])

    if environ['openid.status'] == "success":
        return ["Hi %s." % environ['openid.email']]
    return ["alas, %s." % environ['openid.status']]

if __name__ == '__main__':
    import os
    from wsgiref.simple_server import make_server

    from openid.store.filestore import FileOpenIDStore
    from openid.consumer.consumer import Consumer
    from google_client import GoogleOpenIdClientApp

    storepath = os.path.abspath(os.path.join('storage', 'openid'))
    if not os.path.exists('storage'):
        os.mkdir('storage')
    if not os.path.exists(storepath):
        os.mkdir(storepath)
    google = GoogleOpenIdClientApp(
        sessions=TrivialSessions(),
        store=FileOpenIDStore(storepath),
        onsuccess=onsuccess,
        make_consumer=Consumer
        )
    port = 8000
    httpd = make_server('', port, google)
    print 'serving on port %d' % port
    httpd.serve_forever()