Add unit tests for when CAS_FEDERATE is True
Also fix some unicode related bugs
This commit is contained in:
@ -46,6 +46,16 @@ class FederatedUser(models.Model):
|
||||
def __unicode__(self):
|
||||
return u"%s@%s" % (self.username, self.provider)
|
||||
|
||||
@classmethod
|
||||
def clean_old_entries(cls):
|
||||
federated_users = cls.objects.filter(
|
||||
last_update__lt=(timezone.now() - timedelta(seconds=settings.CAS_TICKET_TIMEOUT))
|
||||
)
|
||||
known_users = {user.username for user in User.objects.all()}
|
||||
for user in federated_users:
|
||||
if not ('%s@%s' % (user.username, user.provider)) in known_users:
|
||||
user.delete()
|
||||
|
||||
|
||||
class FederateSLO(models.Model):
|
||||
class Meta:
|
||||
@ -54,11 +64,6 @@ class FederateSLO(models.Model):
|
||||
session_key = models.CharField(max_length=40, blank=True, null=True)
|
||||
ticket = models.CharField(max_length=255)
|
||||
|
||||
@property
|
||||
def provider(self):
|
||||
component = self.username.split("@")
|
||||
return component[-1]
|
||||
|
||||
@classmethod
|
||||
def clean_deleted_sessions(cls):
|
||||
for federate_slo in cls.objects.all():
|
||||
@ -76,6 +81,14 @@ class User(models.Model):
|
||||
username = models.CharField(max_length=30)
|
||||
date = models.DateTimeField(auto_now=True)
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
if settings.CAS_FEDERATE:
|
||||
FederateSLO.objects.filter(
|
||||
username=self.username,
|
||||
session_key=self.session_key
|
||||
).delete()
|
||||
super(User, self).delete(*args, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def clean_old_entries(cls):
|
||||
"""Remove users inactive since more that SESSION_COOKIE_AGE"""
|
||||
|
Reference in New Issue
Block a user