models.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # -*- coding: utf-8 -*-
  2. import ldapdb.models
  3. import pprint, os #, base64, hashlib
  4. from django.db import models
  5. from ldapdb.models.fields import CharField, IntegerField, ListField
  6. from django.db.models.signals import post_save, pre_save
  7. from django.dispatch import receiver
  8. from south.modelsinspector import add_ignored_fields
  9. from datetime import date
  10. class LdapUser(ldapdb.models.Model):
  11. base_dn = "ou=users,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR" #TODO déplacer dans settings.py
  12. object_classes = ['inetOrgPerson', 'organizationalPerson', 'person', 'top']
  13. uid = CharField(db_column='uid', unique=True,max_length=255)
  14. nick_name = CharField(db_column='cn', unique=True, primary_key=True,max_length=255)
  15. first_name = CharField(db_column='givenName',max_length=255)
  16. last_name = CharField(db_column='sn',max_length=255)
  17. display_name = CharField(db_column='displayName',max_length=255, blank=True)
  18. password = CharField(db_column='userPassword',max_length=255)
  19. def __unicode__(self):
  20. return self.display_name
  21. class Meta:
  22. managed = False #Indique à South de ne pas gérer ce model
  23. add_ignored_fields(["^ldapdb\.models\.fields"]) #Indique à South de ne pas gérer ce model
  24. class Member(models.Model):
  25. MEMBER_TYPE_CHOICES =(('personne_physique','Personne physique'),('personne_morale','Personne morale'))
  26. MEMBER_STATUS_CHOICES = (('adherent','Adhérent'),('non_adherent','Non adhérent'),('demande_adhesion','Demande d\'adhésion'))
  27. status = models.CharField(max_length=50, choices=MEMBER_STATUS_CHOICES, default='non_adherent');
  28. type = models.CharField(max_length=20, choices=MEMBER_TYPE_CHOICES, default='personne_physique');
  29. first_name = models.CharField(max_length=200);
  30. last_name = models.CharField(max_length=200);
  31. ldap_cn = models.CharField(max_length=200, blank=True);
  32. organization_name = models.CharField(max_length=200, blank=True);
  33. email = models.EmailField(max_length=254);
  34. home_phone_number = models.CharField(max_length=25, blank=True);
  35. mobile_phone_number = models.CharField(max_length=25, blank=True);
  36. address = models.TextField();
  37. postal_code = models.CharField(max_length=15);
  38. city = models.CharField(max_length=200);
  39. country = models.CharField(max_length=200);
  40. entry_date = models.DateField(null=False, blank=False, default=date.today);
  41. resign_date = models.DateField(null=True, blank=True);
  42. def __unicode__(self):
  43. return self.first_name+' '+self.last_name;
  44. class CryptoKey(models.Model):
  45. KEY_TYPE_CHOICES=(('RSA','RSA'),('GPG','GPG'))
  46. type = models.CharField(max_length=3, choices=KEY_TYPE_CHOICES);
  47. key = models.TextField();
  48. member = models.ForeignKey('Member');
  49. def __unicode__(self):
  50. return self.member.__str__();
  51. class MembershipFee(models.Model):
  52. member = models.ForeignKey('Member');
  53. amount = models.IntegerField(null=False, default='20');
  54. date = models.DateField(null=False, blank=False, default=date.today);
  55. #~ Lors de la sauvegarde d'un membre, cette fonction est exécutée pour mettre à jour les données dans le LDAP
  56. @receiver(post_save, sender=Member)
  57. def sync_ldap(sender, instance, created, **kwargs):
  58. if not created:
  59. ldap_user = LdapUser.objects.get(pk=instance.ldap_cn)
  60. if created:
  61. ldap_user = LdapUser()
  62. ldap_user.pk = instance.ldap_cn
  63. ldap_user.uid = instance.ldap_cn
  64. ldap_user.nick_name = instance.ldap_cn
  65. ldap_user.last_name = instance.last_name
  66. ldap_user.first_name = instance.first_name
  67. # ldap_user.password = instance.password
  68. ldap_user.save();
  69. #===============================================================================
  70. # @receiver(pre_save, sender = LdapUser)
  71. # def ssha_password(sender, **kwargs):
  72. # if not kwargs['instance'].password.startswith('{SSHA}'):
  73. # salt = os.urandom(8).encode('hex')
  74. # kwargs['instance'].password = '{SSHA}' + base64.b64encode(hashlib.sha1(obj.password + salt).digest() + salt)
  75. #===============================================================================