Mercurial > universal-identity-relyer
changeset 14:b8c699d8e613
google_client now calls onsuccess cb whenever openid itself was successful (even though the user may have 'cancelled' the auth).
author | Atul Varma <avarma@mozilla.com> |
---|---|
date | Sun, 13 Jun 2010 18:20:06 -0700 |
parents | 775e00932285 |
children | 7a59f0eceee7 |
files | google_client.py openid_experiment.py |
diffstat | 2 files changed, 24 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/google_client.py Sun Jun 13 16:13:21 2010 -0700 +++ b/google_client.py Sun Jun 13 18:20:06 2010 -0700 @@ -4,6 +4,8 @@ class GoogleOpenIdClientApp(object): AX_NS = "http://openid.net/srv/ax/1.0" + AX_EMAIL = "http://axschema.org/contact/email" + GOOGLE_OPENID_URL = "https://www.google.com/accounts/o8/id" FINISHED_URL = re.compile("^/finished/([A-Za-z0-9]+)$") def __init__(self, sessions, store, onsuccess, make_consumer): @@ -22,12 +24,12 @@ if path == '/': session = self.sessions.create() consumer = self.make_consumer(session.data, self.store) - url = "https://www.google.com/accounts/o8/id" - request = consumer.begin(url) + request = consumer.begin(self.GOOGLE_OPENID_URL) request.addExtensionArg(self.AX_NS, "mode", "fetch_request") - request.addExtensionArg(self.AX_NS, "type.email", "http://axschema.org/contact/email") + request.addExtensionArg(self.AX_NS, "type.email", self.AX_EMAIL) request.addExtensionArg(self.AX_NS, "required", "email") - url = request.redirectURL(appuri, "%sfinished/%s" % (appuri, session.id)) + url = request.redirectURL(appuri, "%sfinished/%s" % + (appuri, session.id)) start_response('302 Found', [('Location', url)]) @@ -35,21 +37,23 @@ match = self.FINISHED_URL.match(path) if match: - # TODO: QUERY_STRING may be empty or absent query = dict(urlparse.parse_qsl(environ['QUERY_STRING'])) session_id = match.group(1) if session_id in self.sessions: session = self.sessions[session_id] consumer = self.make_consumer(session.data, self.store) - response = consumer.complete(query, "%sfinished/%s" % (appuri, session.id)) + response = consumer.complete(query, "%sfinished/%s" % + (appuri, session.id)) del self.sessions[session_id] - start_response('200 OK', - [('Content-Type', 'text/plain')]) + environ['openid.status'] = response.status if response.status == "success": - return ["Hi %s" % response.getSigned(self.AX_NS, "value.email")] - else: - return ["You declined! %s" % response.status] + environ['openid.email'] = response.getSigned( + self.AX_NS, + "value.email" + ) + + return self.onsuccess(environ, start_response) start_response('404 Not Found', [('Content-Type', 'text/plain')])
--- a/openid_experiment.py Sun Jun 13 16:13:21 2010 -0700 +++ b/openid_experiment.py Sun Jun 13 18:20:06 2010 -0700 @@ -28,6 +28,14 @@ def __delitem__(self, session_id): del self.sessions[session_id] +def onsuccess(environ, start_response): + start_response('200 OK', + [('Content-Type', 'text/plain')]) + + if environ['openid.status'] == "success": + return ["Hi %s." % environ['openid.email']] + return ["alas, %s." % environ['openid.status']] + if __name__ == '__main__': import os from wsgiref.simple_server import make_server @@ -44,7 +52,7 @@ google = GoogleOpenIdClientApp( sessions=TrivialSessions(), store=FileOpenIDStore(storepath), - onsuccess=None, + onsuccess=onsuccess, make_consumer=Consumer ) port = 8000