Mercurial > hg > bitsyauth
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/persona_example.py Mon Dec 30 10:12:25 2013 -0800 @@ -0,0 +1,62 @@ +#!/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()