examples/gae/dev/main.py
# -*- coding: utf-8 -*-
import sys
import webapp2
from authomatic.adapters import Webapp2Adapter
from authomatic import Authomatic
import config
authomatic = Authomatic(secret='YAhe[#{^VlX-cK/$ki:$</vu!B5rTW9xi:fbN/%i pIx@AH}0c/ke4M%|c9*H4#>',
config=config.PROVIDERS,
report_errors=False,
debug=True)
def headers(handler):
handler.response.write('<a href="/auth/facebook">Facebook</a><br />')
handler.response.write('<a href="/auth/google">Google</a><br />')
handler.response.write(
'<a href="/auth/windows_live">Windows Live</a><br />')
handler.response.write('<a href="/auth/twitter">Twitter</a><br />')
handler.response.write('<br />')
handler.response.write('Open ID:<br />')
handler.response.write(
'<a href="/auth/gaeoi?id=https://me.yahoo.com">GAEOpenID Yahoo</a><br />')
handler.response.write('<br />')
handler.response.write('AX:<br />')
handler.response.write(
'<a href="/auth/oi?id=https://me.yahoo.com">OpenID Yahoo</a><br />')
handler.response.write(
'<a href="/auth/oi?id=https://www.google.com/accounts/o8/id">OpenID Google</a><br />')
handler.response.write('<br />')
handler.response.write('SREG:<br />')
handler.response.write(
'<a href="/auth/oi?id=peterhudec.myid.net">peterhudec.myid.net</a><br />')
handler.response.write(
'<a href="/auth/oi?id=https://peterhudec.myvidoop.com">peterhudec.myvidoop.com</a> (PAPE) Returns nothing!<br />')
handler.response.write(
'<a href="/auth/oi?id=peterhudec.pip.verisignlabs.com">peterhudec.pip.verisignlabs.com</a><br />')
handler.response.write(
'<a href="/auth/oi?id=http://peterhudec.signon.com">peterhudec.signon.com</a> Returns nothing!<br />')
handler.response.write(
'<a href="/auth/oi?id=http://peterhudec.myopenid.com/">peterhudec.myopenid.com</a> (PAPE) POST is not alloved!<br />')
handler.response.write('<br /><br />')
class Home(webapp2.RequestHandler):
def any(self):
headers(self)
class Login(webapp2.RequestHandler):
def login(self, provider_name):
result = authomatic.login(Webapp2Adapter(self),
provider_name,
callback=self.callback)
if result:
if result.user:
user_response = result.user.update()
if user_response:
self.response.write(
'<br /><br />status = {0}<br />'.format(user_response.status))
self.response.write(
'<br /><br />Hi {0}<br />'.format(result.user.name))
self.response.write(
'your ID is {0}<br />'.format(result.user.id))
self.response.write(
'your email is {0}<br />'.format(result.user.email))
elif result.error:
self.response.write(
'ERROR {0}<br />'.format(result.error.message))
def callback(self, event):
headers(self)
if event.error:
self.response.write('ERROR:')
self.response.write('<br /><br />')
self.response.write(
'message: {0}<br />'.format(event.error.message))
for k, v in event.error.__dict__.iteritems():
if not k == 'message':
self.response.write('{0}: {1}<br />'.format(k, v))
elif event.user:
self.response.write('<br /><br />')
self.response.write('user = {0}<br /><br />'.format(event.user))
if event.user.credentials:
self.response.write('<br /><br />')
self.response.write('Credentials:<br /><br />')
for k, v in event.user.credentials.__dict__.items():
self.response.write('{0}: {1}<br />'.format(k, v))
serialized = event.user.credentials.serialize()
deserialized = authomatic.credentials(serialized)
self.response.write('<br /><br />')
self.response.write(
'Serialized:<br />{0}<br /><br />'.format(serialized))
self.response.write(
'Serialized size:<br />{0} B<br /><br />'.format(sys.getsizeof(serialized)))
# deserialized credentials
for k, v in deserialized.__dict__.items():
self.response.write('{0}: {1}<br />'.format(k, v))
self.response.write('<br /><br />')
self.response.write('User Info:<br /><br />')
self.response.write('<br /><br />')
event.user.update()
for k, v in event.user.__dict__.iteritems():
if k != 'data':
self.response.write('{0}: {1}<br />'.format(k, v))
if k == 'gae_user' and v:
for kk, vv in v.__dict__.iteritems():
self.response.write(
' {0}: {1}<br />'.format(kk, vv))
self.response.write('<br /><br />')
self.response.write('Raw User Info:<br /><br />')
self.response.write(event.user.data)
class Test(webapp2.RequestHandler):
def any(self):
self.response.write('TEST:\n')
self.response.write('headers = {0}\n'.format(self.request.headers))
self.response.write('params = {0}\n'.format(self.request.params))
self.response.write('body = {0}\n'.format(self.request.body))
ROUTES = [webapp2.Route(r'/auth/<:.*>', Login, 'auth', handler_method='login'),
webapp2.Route(r'/test', Test, handler_method='any'),
webapp2.Route(r'/', Home, handler_method='any'), ]
app = webapp2.WSGIApplication(ROUTES, debug=True)