view example/persona_example.py @ 47:f2474ffcee96

avoid namespace collisions; buckle your safety-belt
author Jeff Hammel <jhammel@mozilla.com>
date Mon, 30 Dec 2013 10:12:25 -0800
parents example/persona.py@afeb01315ab6
children
line wrap: on
line source

#!/usr/bin/env python

"""
test Mozilla persona auth

https://login.persona.org/about
"""

import browserid
import optparse
import os
import sys
from webob import Request, Response, exc
from wsgiref import simple_server

here = os.path.dirname(os.path.realpath(__file__))
page = os.path.join(here, 'persona.html')

class PersonaTest(object):
    def __init__(self, page=page):
        self.page = page
        assert os.path.exists(self.page), "File '%s' not found" % self.page
        self.page = open(self.page, 'r').read()
    def __call__(self, environ, start_response):
        request = Request(environ)
        method = request.method
        if method == 'GET':
            content_type = 'text/html'
            body = self.page
        elif method == 'POST':
            content_type = 'text/plain'
            assertion = request.POST.get('assertion')
            print ("Assertion: %s" % assertion)
            body = '\n'.join(['%s: %s' % (key, environ[key])
                              for key in sorted(environ.keys())])
        else:
            content_type = 'text/plain'
            body = 'Try GET or POST to do something interesting (How did you get here?)'
        start_response("200 OK", [('Content-Type', content_type),
                                  ('Content-Length', str(len(body)))])
        return [body]

def main(args=sys.argv[1:]):

    usage = '%prog [options]'
    parser = optparse.OptionParser(usage=usage, description=__doc__)
    parser.add_option('-p', '--port', dest='port',
                      type='int', default=8123,
                      help="port to serve on")
    options, args = parser.parse_args(args)

    app = PersonaTest()

    server = simple_server.make_server('127.0.0.1', options.port, app)
    print 'server on\nhttp://localhost:%d/' % options.port
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        pass

if __name__ == '__main__':
    main()