From 60a84fd652cffdf0754260067fa6fa5f16742014 Mon Sep 17 00:00:00 2001 From: dwickwire Date: Wed, 16 Nov 2011 08:56:58 -0600 Subject: [PATCH] Added social authentication hook to generate valid tickets for social auth logins. Fixed redirection url to 'account' instead of 'accounts'. Reverted to using usernames instead of emails. --- cas_provider/views.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/cas_provider/views.py b/cas_provider/views.py index fd15c4a..d76e60b 100644 --- a/cas_provider/views.py +++ b/cas_provider/views.py @@ -10,8 +10,9 @@ from utils import create_service_ticket __all__ = ['login', 'validate', 'logout'] -def login(request, template_name='cas/login.html', success_redirect='/accounts/'): +def login(request, template_name='cas/login.html', success_redirect='/account/'): service = request.GET.get('service', None) + request.session['service'] = service if request.user.is_authenticated(): if service is not None: ticket = create_service_ticket(request.user, service) @@ -51,6 +52,26 @@ def login(request, template_name='cas/login.html', success_redirect='/accounts/' errors.append('Incorrect username and/or password.') form = LoginForm(service) return render_to_response(template_name, {'form': form, 'errors': errors}, context_instance=RequestContext(request)) + +def socialauth_login(request, user, template_name='cas/login.html', success_redirect='/account/'): + """ Similiar to login but user has been authenticated already through social auth. + This step authenticates the login and generates a service ticket. + """ + service = request.session['service'] + errors = [] + if user is not None: + if user.is_active: + auth_login(request, user) + if service is not None: + ticket = create_service_ticket(user, service) + return HttpResponseRedirect(service + '?ticket=' + ticket.ticket) + else: + return HttpResponseRedirect(success_redirect) + else: + errors.append('This account is disabled.') + else: + errors.append('Incorrect username and/or password.') + return render_to_response(template_name, {'errors': errors}, context_instance=RequestContext(request)) def validate(request): service = request.GET.get('service', None) @@ -58,10 +79,9 @@ def validate(request): if service is not None and ticket_string is not None: try: ticket = ServiceTicket.objects.get(ticket=ticket_string) - ### NOTE: We've changed this to return the email address, not the username. - email = ticket.user.email + username = ticket.user.username ticket.delete() - return HttpResponse("yes\n%s\n" % email) + return HttpResponse("yes\n%s\n" % username) except: pass return HttpResponse("no\n\n") -- 2.20.1