51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
"""
|
|
Simple CAS views - bare minimum implementation.
|
|
"""
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth import authenticate, login, logout
|
|
from django.shortcuts import redirect
|
|
from django.http import HttpResponse
|
|
from django.views import View
|
|
import urllib.parse
|
|
|
|
|
|
class SimpleCASLoginView(View):
|
|
"""Simple CAS login view."""
|
|
|
|
def get(self, request):
|
|
ticket = request.GET.get("ticket")
|
|
|
|
if ticket:
|
|
# Coming back from CAS with ticket - validate it
|
|
service_url = request.build_absolute_uri().split("?")[
|
|
0
|
|
] # Remove query params
|
|
|
|
user = authenticate(request=request, ticket=ticket, service=service_url)
|
|
|
|
if user:
|
|
login(request, user)
|
|
return redirect(settings.LOGIN_REDIRECT_URL)
|
|
else:
|
|
return HttpResponse("Authentication failed", status=401)
|
|
|
|
else:
|
|
# No ticket - redirect to CAS
|
|
service_url = request.build_absolute_uri().split("?")[
|
|
0
|
|
] # Remove query params
|
|
cas_login_url = f"{settings.CAS_SERVER_URL.rstrip('/')}/login?service={urllib.parse.quote(service_url)}"
|
|
return redirect(cas_login_url)
|
|
|
|
|
|
class SimpleCASLogoutView(View):
|
|
"""Simple CAS logout view."""
|
|
|
|
def get(self, request):
|
|
logout(request)
|
|
|
|
# Redirect to CAS logout
|
|
cas_logout_url = f"{settings.CAS_SERVER_URL.rstrip('/')}/logout"
|
|
return redirect(cas_logout_url)
|