diff --git a/django_cas/backends.py b/django_cas/backends.py index 14ff3a3..7d430b9 100644 --- a/django_cas/backends.py +++ b/django_cas/backends.py @@ -131,7 +131,8 @@ def authenticate(self, ticket, service): if not username: return None - user, created = User.objects.get_or_create(username=username) + user, created = self.get_or_create_user(username, + authentication_response) if created: user.set_unusable_password() @@ -141,6 +142,9 @@ def authenticate(self, ticket, service): user.save() return user + def get_or_create_user(self, cas_username, authentication_response): + return User.objects.get_or_create(username=cas_username) + def get_user(self, user_id): """Retrieve the user's entry in the User model if it exists""" diff --git a/django_cas/views.py b/django_cas/views.py index 170ded7..11633d0 100644 --- a/django_cas/views.py +++ b/django_cas/views.py @@ -2,8 +2,8 @@ from datetime import datetime from urllib import urlencode from urlparse import urljoin - -from django.http import get_host, HttpResponseRedirect, HttpResponseForbidden, HttpResponse +from django.contrib import messages +from django.http import HttpResponseRedirect, HttpResponseForbidden, HttpResponse from django.conf import settings from django.contrib.auth import REDIRECT_FIELD_NAME from django_cas.models import PgtIOU @@ -14,7 +14,7 @@ def _service_url(request, redirect_to=None): """Generates application service URL for CAS""" protocol = ('http://', 'https://')[request.is_secure()] - host = get_host(request) + host = request.get_host() service = protocol + host + request.path if redirect_to: if '?' in service: @@ -37,7 +37,7 @@ def _redirect_url(request): else: next = request.META.get('HTTP_REFERER', settings.CAS_REDIRECT_URL) prefix = (('http://', 'https://')[request.is_secure()] + - get_host(request)) + request.get_host()) if next.startswith(prefix): next = next[len(prefix):] return next @@ -62,7 +62,7 @@ def _logout_url(request, next_page=None): url = urljoin(settings.CAS_SERVER_URL, 'logout') if next_page: protocol = ('http://', 'https://')[request.is_secure()] - host = get_host(request) + host = request.get_host() url += '?' + urlencode({'url': protocol + host + next_page}) return url @@ -74,7 +74,7 @@ def login(request, next_page=None, required=False): next_page = _redirect_url(request) if request.user.is_authenticated(): message = "You are logged in as %s." % request.user.username - request.user.message_set.create(message=message) + messages.add_message(request, messages.SUCCESS, message) return HttpResponseRedirect(next_page) ticket = request.GET.get('ticket') service = _service_url(request, next_page) @@ -86,7 +86,7 @@ def login(request, next_page=None, required=False): auth.login(request, user) name = user.first_name or user.username message = "Login succeeded. Welcome, %s." % name - user.message_set.create(message=message) + messages.add_message(request, messages.SUCCESS, message) return HttpResponseRedirect(next_page) elif settings.CAS_RETRY_LOGIN or required: return HttpResponseRedirect(_login_url(service, ticket)) @@ -111,9 +111,9 @@ def logout(request, next_page=None): def proxy_callback(request): """Handles CAS 2.0+ XML-based proxy callback call. - Stores the proxy granting ticket in the database for + Stores the proxy granting ticket in the database for future use. - + NB: Use created and set it in python in case database has issues with setting up the default timestamp value """