Commit 00afc0da by swillison

on_success and on_failure functions called by complete() can now be over-ridden…

on_success and on_failure functions called by complete() can now be over-ridden - this means the complete() view can be wrapped by one that customises what happens when a user successfully signs in using an OpenID
parent 79e6d2d1
...@@ -90,21 +90,25 @@ def begin(request, sreg=None, extension_args=None, redirect_to=None): ...@@ -90,21 +90,25 @@ def begin(request, sreg=None, extension_args=None, redirect_to=None):
redirect_url = auth_request.redirectURL(trust_root, redirect_to) redirect_url = auth_request.redirectURL(trust_root, redirect_to)
return HttpResponseRedirect(redirect_url) return HttpResponseRedirect(redirect_url)
def complete(request): def complete(request, on_success=None, on_failure=None):
on_success = on_success or default_on_success
on_failure = on_failure or default_on_failure
consumer = Consumer(request.session, DjangoOpenIDStore()) consumer = Consumer(request.session, DjangoOpenIDStore())
openid_response = consumer.complete(dict(request.GET.items())) openid_response = consumer.complete(dict(request.GET.items()))
if openid_response.status == SUCCESS: if openid_response.status == SUCCESS:
return success(request, openid_response.identity_url, openid_response) return on_success(request, openid_response.identity_url, openid_response)
elif openid_response.status == CANCEL: elif openid_response.status == CANCEL:
return failure(request, 'The request was cancelled') return on_failure(request, 'The request was cancelled')
elif openid_response.status == FAILURE: elif openid_response.status == FAILURE:
return failure(request, openid_response.message) return on_failure(request, openid_response.message)
elif openid_response.status == SETUP_NEEDED: elif openid_response.status == SETUP_NEEDED:
return failure(request, 'Setup needed') return on_failure(request, 'Setup needed')
else: else:
assert False, "Bad openid status: %s" % openid_response.status assert False, "Bad openid status: %s" % openid_response.status
def success(request, identity_url, openid_response): def default_on_success(request, identity_url, openid_response):
if 'openids' not in request.session.keys(): if 'openids' not in request.session.keys():
request.session['openids'] = [] request.session['openids'] = []
...@@ -120,7 +124,7 @@ def success(request, identity_url, openid_response): ...@@ -120,7 +124,7 @@ def success(request, identity_url, openid_response):
return HttpResponseRedirect(next) return HttpResponseRedirect(next)
def failure(request, message): def default_on_failure(request, message):
return render('openid_failure.html', { return render('openid_failure.html', {
'message': message 'message': message
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment