+ if request.user.is_authenticated():
+ for ticket in ServiceTicket.objects.filter(user = request.user):
+ ticket.delete()
+ auth_logout(request)
+ if url and auto_redirect:
+ return HttpResponseRedirect(url)
+ return render_to_response(template_name, {'url': url},\
+ context_instance=RequestContext(request))
+
+def proxy(request):
+ targetService = request.GET['targetService']
+ pgtiou = request.GET['pgt']
+
+ try:
+ proxyGrantingTicket = ProxyGrantingTicket.objects.get(pgtiou=pgtiou)
+ except ProxyGrantingTicket.DoesNotExist:
+ return _cas2_error_response(INVALID_TICKET)
+
+ pt = ProxyTicket.objects.create(proxyGrantingTicket = proxyGrantingTicket,
+ user=proxyGrantingTicket.serviceTicket.user,
+ service=targetService)
+ return _cas2_proxy_success(pt.ticket)
+
+
+def ticket_validate(service, ticket_string, pgtUrl):
+ if service is None or ticket_string is None:
+ return _cas2_error_response(INVALID_REQUEST)
+
+ try:
+ ticket = ServiceTicket.objects.get(ticket=ticket_string)
+ except ServiceTicket.DoesNotExist:
+ return _cas2_error_response(INVALID_TICKET)
+
+ if ticket.service != service:
+ return _cas2_error_response(INVALID_SERVICE)
+
+
+ pgtIouId = None
+ proxies = ()
+ if pgtUrl is not None:
+ pgt = generate_proxy_granting_ticket(pgtUrl, ticket)
+ if pgt:
+ pgtIouId = pgt.pgtiou
+
+ while pgt:
+ proxies += (pgt.serviceTicket.service,)
+ pgt = pgt.serviceTicket.proxyGrantingTicket if hasattr(pgt.serviceTicket, 'proxyGrantingTicket') else None
+
+
+ user = ticket.user
+ return _cas2_sucess_response(user, pgtIouId, proxies)