Mercurial > hg > bitsyauth
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 46:6b53345b9c2e | 47:f2474ffcee96 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 | |
| 3 """ | |
| 4 test Mozilla persona auth | |
| 5 | |
| 6 https://login.persona.org/about | |
| 7 """ | |
| 8 | |
| 9 import browserid | |
| 10 import optparse | |
| 11 import os | |
| 12 import sys | |
| 13 from webob import Request, Response, exc | |
| 14 from wsgiref import simple_server | |
| 15 | |
| 16 here = os.path.dirname(os.path.realpath(__file__)) | |
| 17 page = os.path.join(here, 'persona.html') | |
| 18 | |
| 19 class PersonaTest(object): | |
| 20 def __init__(self, page=page): | |
| 21 self.page = page | |
| 22 assert os.path.exists(self.page), "File '%s' not found" % self.page | |
| 23 self.page = open(self.page, 'r').read() | |
| 24 def __call__(self, environ, start_response): | |
| 25 request = Request(environ) | |
| 26 method = request.method | |
| 27 if method == 'GET': | |
| 28 content_type = 'text/html' | |
| 29 body = self.page | |
| 30 elif method == 'POST': | |
| 31 content_type = 'text/plain' | |
| 32 assertion = request.POST.get('assertion') | |
| 33 print ("Assertion: %s" % assertion) | |
| 34 body = '\n'.join(['%s: %s' % (key, environ[key]) | |
| 35 for key in sorted(environ.keys())]) | |
| 36 else: | |
| 37 content_type = 'text/plain' | |
| 38 body = 'Try GET or POST to do something interesting (How did you get here?)' | |
| 39 start_response("200 OK", [('Content-Type', content_type), | |
| 40 ('Content-Length', str(len(body)))]) | |
| 41 return [body] | |
| 42 | |
| 43 def main(args=sys.argv[1:]): | |
| 44 | |
| 45 usage = '%prog [options]' | |
| 46 parser = optparse.OptionParser(usage=usage, description=__doc__) | |
| 47 parser.add_option('-p', '--port', dest='port', | |
| 48 type='int', default=8123, | |
| 49 help="port to serve on") | |
| 50 options, args = parser.parse_args(args) | |
| 51 | |
| 52 app = PersonaTest() | |
| 53 | |
| 54 server = simple_server.make_server('127.0.0.1', options.port, app) | |
| 55 print 'server on\nhttp://localhost:%d/' % options.port | |
| 56 try: | |
| 57 server.serve_forever() | |
| 58 except KeyboardInterrupt: | |
| 59 pass | |
| 60 | |
| 61 if __name__ == '__main__': | |
| 62 main() |
