Browse Source

Ajout fonction pour changer mot de passe (avec chiffrage SSHA) dans Member et LdapUser.
Ajout fonction pour récupérer date de fin d'adhésion d'un membre

Fabs 11 years ago
parent
commit
8f7c9cd8c0
4 changed files with 21 additions and 7 deletions
  1. 1 1
      coin/members/admin.py
  2. 19 4
      coin/members/models.py
  3. 1 1
      coin/settings.py
  4. 0 1
      test

+ 1 - 1
coin/members/admin.py

@@ -39,7 +39,7 @@ class MemberAdminForm(forms.ModelForm):
         model = Member
         model = Member
 
 
 class MemberAdmin(admin.ModelAdmin):
 class MemberAdmin(admin.ModelAdmin):
-    list_display = ('id', 'status', 'first_name', 'last_name','email', 'end_date_of_membership')
+    list_display = ('id', 'status', 'first_name', 'last_name','organization_name','email', 'end_date_of_membership')
     list_display_links = ('id', 'first_name', 'last_name')
     list_display_links = ('id', 'first_name', 'last_name')
     list_filter = ('status',MembershipFeeFilter)
     list_filter = ('status',MembershipFeeFilter)
     search_fields = ['first_name','last_name','email']
     search_fields = ['first_name','last_name','email']

+ 19 - 4
coin/members/models.py

@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 import ldapdb.models
 import ldapdb.models
-import pprint, os #, base64, hashlib
+import pprint, os , base64, hashlib
 from django.db import models
 from django.db import models
 from ldapdb.models.fields import CharField, IntegerField, ListField
 from ldapdb.models.fields import CharField, IntegerField, ListField
 from django.db.models.signals import post_save, pre_save
 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)
     last_name = CharField(db_column='sn',max_length=255)
     display_name = CharField(db_column='displayName',max_length=255, blank=True)
     display_name = CharField(db_column='displayName',max_length=255, blank=True)
     password = CharField(db_column='userPassword',max_length=255)
     password = CharField(db_column='userPassword',max_length=255)
-
+    
     def __unicode__(self):
     def __unicode__(self):
         return self.display_name
         return self.display_name
     
     
     class Meta:
     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):
 class Member(models.Model):
 
 
@@ -62,6 +72,11 @@ class Member(models.Model):
             return self.membership_fees.order_by('-end_date')[0].end_date
             return self.membership_fees.order_by('-end_date')[0].end_date
         except:
         except:
             return None
             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):
 class CryptoKey(models.Model):
     
     

+ 1 - 1
coin/settings.py

@@ -208,7 +208,7 @@ AUTH_LDAP_USER_FLAGS_BY_GROUP = {
 }
 }
 
 
 
 
-#~ Surcharge les paramètres en utilisant le fichier settings-local.py
+#~ Surcharge les paramètres en utilisant le fichier settings_local.py
 try:
 try:
     from settings_local import *
     from settings_local import *
 except ImportError:
 except ImportError:

+ 0 - 1
test

@@ -1 +0,0 @@
-PAYPAL !