Parcourir la 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 il y a 11 ans
Parent
commit
8f7c9cd8c0
4 fichiers modifiés avec 21 ajouts et 7 suppressions
  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 !