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()