models.py 4.3 KB

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