|
@@ -1,6 +1,6 @@
|
|
|
# -*- coding: utf-8 -*-
|
|
|
import ldapdb.models
|
|
|
-import pprint, os #, base64, hashlib
|
|
|
+import pprint, os , base64, hashlib
|
|
|
from django.db import models
|
|
|
from ldapdb.models.fields import CharField, IntegerField, ListField
|
|
|
from django.db.models.signals import post_save, pre_save
|
|
@@ -20,14 +20,24 @@ class LdapUser(ldapdb.models.Model):
|
|
|
last_name = CharField(db_column='sn',max_length=255)
|
|
|
display_name = CharField(db_column='displayName',max_length=255, blank=True)
|
|
|
password = CharField(db_column='userPassword',max_length=255)
|
|
|
-
|
|
|
+
|
|
|
def __unicode__(self):
|
|
|
return self.display_name
|
|
|
|
|
|
class Meta:
|
|
|
- managed = False #Indique à South de ne pas gérer ce model
|
|
|
+ managed = False #Indique à South de ne pas gérer le model LdapUser
|
|
|
+
|
|
|
+add_ignored_fields(["^ldapdb\.models\.fields"]) #Indique à South de ne pas gérer le model LdapUser
|
|
|
+
|
|
|
+#~ Lors de la sauvegarde d'un utilisateur Ldap, cette fonction est exécutée avant la sauvegare pour chiffrer le mot de passe s'il est définit et s'il n'est pas déjà chiffré
|
|
|
+@receiver(pre_save, sender=LdapUser)
|
|
|
+def change_password(sender, instance, **kwargs):
|
|
|
+ #~ Si le mot de passe est définit et n'est pas déjà chiffré, alors ça le chiffre
|
|
|
+ if instance.password and not instance.password.startswith('{SSHA}'):
|
|
|
+ salt = os.urandom(8).encode('hex')
|
|
|
+ instance.password = '{SSHA}' + base64.b64encode(hashlib.sha1(instance.password + salt).digest() + salt)
|
|
|
+
|
|
|
|
|
|
-add_ignored_fields(["^ldapdb\.models\.fields"]) #Indique à South de ne pas gérer ce model
|
|
|
|
|
|
class Member(models.Model):
|
|
|
|
|
@@ -62,6 +72,11 @@ class Member(models.Model):
|
|
|
return self.membership_fees.order_by('-end_date')[0].end_date
|
|
|
except:
|
|
|
return None
|
|
|
+
|
|
|
+ def change_password(self,new_password):
|
|
|
+ ldap_user = LdapUser.objects.get(pk=self.ldap_cn)
|
|
|
+ ldap_user.password = new_password
|
|
|
+ ldap_user.save()
|
|
|
|
|
|
class CryptoKey(models.Model):
|
|
|
|