models.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # -*- coding: utf-8 -*-
  2. import ldapdb.models
  3. #import pprint
  4. import os
  5. #import base64
  6. #import hashlib
  7. from django.db import models
  8. from ldapdb.models.fields import CharField, IntegerField, ListField
  9. from django.db.models.signals import post_save, pre_save
  10. from django.dispatch import receiver
  11. from south.modelsinspector import add_ignored_fields
  12. import datetime
  13. from django.core import exceptions
  14. class LdapUser(ldapdb.models.Model):
  15. # TODO: déplacer ligne suivante dans settings.py
  16. base_dn = "ou=users,o=ILLYSE,l=Villeurbanne,st=RHA,c=FR"
  17. object_classes = ['inetOrgPerson', 'organizationalPerson', 'person', 'top']
  18. uid = CharField(db_column='uid', unique=True, max_length=255)
  19. nick_name = CharField(db_column='cn', unique=True, primary_key=True,
  20. max_length=255)
  21. first_name = CharField(db_column='givenName', max_length=255)
  22. last_name = CharField(db_column='sn', max_length=255)
  23. display_name = CharField(db_column='displayName', max_length=255,
  24. blank=True)
  25. password = CharField(db_column='userPassword', max_length=255)
  26. def __unicode__(self):
  27. return self.display_name
  28. class Meta:
  29. managed = False # Indique à South de ne pas gérer ce model
  30. # Indique à South de ne pas gérer ce model
  31. add_ignored_fields(["^ldapdb\.models\.fields"])
  32. class Member(models.Model):
  33. MEMBER_TYPE_CHOICES = (
  34. ('personne_physique', 'Personne physique'),
  35. ('personne_morale', 'Personne morale'),
  36. )
  37. MEMBER_STATUS_CHOICES = (
  38. ('adherent', 'Adhérent'),
  39. ('non_adherent', 'Non adhérent'),
  40. ('demande_adhesion', "Demande d'adhésion"),
  41. )
  42. status = models.CharField(max_length=50, choices=MEMBER_STATUS_CHOICES,
  43. default='non_adherent')
  44. type = models.CharField(max_length=20, choices=MEMBER_TYPE_CHOICES,
  45. default='personne_physique')
  46. first_name = models.CharField(max_length=200)
  47. last_name = models.CharField(max_length=200)
  48. ldap_cn = models.CharField(max_length=200, blank=True)
  49. organization_name = models.CharField(max_length=200, blank=True)
  50. email = models.EmailField(max_length=254)
  51. home_phone_number = models.CharField(max_length=25, blank=True)
  52. mobile_phone_number = models.CharField(max_length=25, blank=True)
  53. address = models.TextField()
  54. postal_code = models.CharField(max_length=15)
  55. city = models.CharField(max_length=200)
  56. country = models.CharField(max_length=200)
  57. entry_date = models.DateField(null=False, blank=False,
  58. default=datetime.date.today)
  59. resign_date = models.DateField(null=True, blank=True)
  60. def __unicode__(self):
  61. return u'%s %s' % (self.first_name, self.last_name)
  62. class CryptoKey(models.Model):
  63. KEY_TYPE_CHOICES = (('RSA', 'RSA'), ('GPG', 'GPG'))
  64. type = models.CharField(max_length=3, choices=KEY_TYPE_CHOICES)
  65. key = models.TextField()
  66. member = models.ForeignKey('Member')
  67. def __unicode__(self):
  68. return u'Clé %s de %s' % (self.type, self.member)
  69. class MembershipFee(models.Model):
  70. member = models.ForeignKey('Member')
  71. amount = models.IntegerField(null=False, default='20')
  72. start_date = models.DateField(null=False, blank=False,
  73. default=datetime.date.today)
  74. end_date = models.DateField(
  75. null=False, blank=False,
  76. default=datetime.date.today() + datetime.timedelta(365))
  77. @receiver(post_save, sender=Member)
  78. def sync_ldap(sender, instance, created, **kwargs):
  79. """
  80. Update LDAP data when a member is saved
  81. """
  82. if not created:
  83. # try:
  84. ldap_user = LdapUser.objects.get(pk=instance.ldap_cn)
  85. # except exceptions.ObjectDoesNotExist:
  86. # created = True
  87. if created:
  88. ldap_user = LdapUser()
  89. ldap_user.pk = instance.ldap_cn
  90. ldap_user.uid = instance.ldap_cn
  91. ldap_user.nick_name = instance.ldap_cn
  92. ldap_user.last_name = instance.last_name
  93. ldap_user.first_name = instance.first_name
  94. # ldap_user.password = instance.password
  95. ldap_user.save()
  96. #==============================================================================
  97. # @receiver(pre_save, sender = LdapUser)
  98. # def ssha_password(sender, **kwargs):
  99. # if not kwargs['instance'].password.startswith('{SSHA}'):
  100. # salt = os.urandom(8).encode('hex')
  101. # kwargs['instance'].password = '{SSHA}' + base64.b64encode(
  102. # hashlib.sha1(obj.password + salt).digest() + salt)
  103. #==============================================================================