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
 
 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_filter = ('status',MembershipFeeFilter)
     search_fields = ['first_name','last_name','email']

+ 19 - 4
coin/members/models.py

@@ -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):
     

+ 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:
     from settings_local import *
 except ImportError:

+ 0 - 1
test

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