# Create your models here. from ldapdb.models import fields as ldap_fields from ldapdb.models.base import Model from django.dispatch import receiver from django.db.models.signals import post_save, pre_save from django.utils.encoding import force_bytes from django.utils.http import urlsafe_base64_encode from django.template.loader import render_to_string from core.tokens import account_activation_token from django.core.mail import EmailMessage from django.contrib.auth.models import User from django.contrib.auth.tokens import default_token_generator from core.settings import PASSWORD_RESET_TIMEOUT_DAYS import re class LdapUser(Model): """ Class for representing an LDAP user entry. """ # LDAP meta-data ROOT_DN = "dc=stuve,dc=de" base_dn = "dc=stuve,dc=de" object_classes = ['inetOrgPerson'] last_modified = ldap_fields.DateTimeField(db_column='modifyTimestamp', blank=True) # inetOrgPerson username = ldap_fields.CharField(db_column='uid', primary_key=True) password = ldap_fields.CharField(db_column='userPassword') first_name = ldap_fields.CharField(db_column='cn', blank=True) last_name = ldap_fields.CharField(db_column='sn', blank=True) email = ldap_fields.CharField(db_column='mail') phone = ldap_fields.CharField(db_column='telephoneNumber', blank=True) mobile_phone = ldap_fields.CharField(db_column='mobile', blank=True) photo = ldap_fields.ImageField(db_column='jpegPhoto') def __str__(self): return self.username def __unicode__(self): return self.full_name @staticmethod def create_with_django_user_creation_and_welcome_mail(protocol, domain, username, email): # current_site = get_current_site(request) ldap_user = LdapUser.objects.create(username=username, email=email, first_name=" ", last_name=" ") user, _ = User.objects.get_or_create(username=username, email=email) # user.save() mail_subject = 'Activate your blog account.' message = render_to_string('registration/welcome_email.jinja2', { 'user': user, 'domain': domain, 'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(), 'token': default_token_generator.make_token(user=user), 'protocol': protocol, 'email': email, 'expiration_days': PASSWORD_RESET_TIMEOUT_DAYS }) email = EmailMessage( mail_subject, message, to=[user.email] ) email.send() return ldap_user @staticmethod def password_reset(user, raw_password): LdapUser.base_dn = LdapUser.ROOT_DN ldap_user = LdapUser.objects.get(username=user.username) ldap_user.password = raw_password LdapUser.base_dn = re.compile('(uid=[a-zA-Z0-9_]*),(.*)').match(ldap_user.dn).group(2) ldap_user.save() class LdapGroup(Model): """ Class for representing an LDAP group entry. """ # LDAP meta-data ROOT_DN = "dc=stuve,dc=de" base_dn = "dc=stuve,dc=de" object_classes = ['groupOfNames'] name = ldap_fields.CharField(db_column='cn', max_length=200, primary_key=True) members = ldap_fields.ListField(db_column='member') def __str__(self): return self.name def __unicode__(self): return self.name