From 5b5a50878cf27d6138655401103ffc9a316545f5 Mon Sep 17 00:00:00 2001 From: chirac Date: Sun, 31 Jul 2016 03:36:54 +0200 Subject: [PATCH] Bricoles --- users/models.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/users/models.py b/users/models.py index f4fe2683..a0abb260 100644 --- a/users/models.py +++ b/users/models.py @@ -226,6 +226,7 @@ class User(AbstractBaseUser): user_right.delete() def ldap_sync(self, base=True, access_refresh=True, mac_refresh=True): + self.refresh_from_db() try: user_ldap = LdapUser.objects.get(name=self.pseudo) except LdapUser.DoesNotExist: @@ -240,7 +241,8 @@ class User(AbstractBaseUser): user_ldap.gid = LDAP['user_gid'] user_ldap.user_password = self.password user_ldap.sambat_nt_password = self.pwd_ntlm - user_ldap.loginShell = self.shell.shell + if self.shell: + user_ldap.loginShell = self.shell.shell if access_refresh: user_ldap.dialupAccess = str(self.has_access()) if mac_refresh: @@ -267,6 +269,42 @@ def user_post_delete(sender, **kwargs): user = kwargs['instance'] user.ldap_del() +class ServiceUser(AbstractBaseUser): + + pseudo = models.CharField(max_length=32, unique=True, help_text="Doit contenir uniquement des lettres, chiffres, ou tirets", validators=[linux_user_validator]) + + USERNAME_FIELD = 'pseudo' + + objects = UserManager() + + def ldap_sync(self): + try: + user_ldap = LdapServiceUser.objects.get(name=self.pseudo) + except LdapServiceUser.DoesNotExist: + user_ldap = LdapServiceUser(name=self.pseudo) + user_ldap.user_password = self.password + user_ldap.save() + + def ldap_del(self): + try: + user_ldap = LdapServiceUser.objects.get(name=self.pseudo) + user_ldap.delete() + except LdapUser.DoesNotExist: + pass + + def __str__(self): + return self.pseudo + +@receiver(post_save, sender=ServiceUser) +def service_user_post_save(sender, **kwargs): + service_user = kwargs['instance'] + service_user.ldap_sync() + +@receiver(post_delete, sender=ServiceUser) +def service_user_post_delete(sender, **kwargs): + service_user = kwargs['instance'] + service_user.ldap_del() + class Right(models.Model): user = models.ForeignKey('User', on_delete=models.PROTECT) right = models.ForeignKey('ListRight', on_delete=models.PROTECT) @@ -426,6 +464,18 @@ class LdapUserGroup(ldapdb.models.Model): def __str__(self): return self.name +class LdapServiceUser(ldapdb.models.Model): + """ + Class for representing an LDAP userservice entry. + """ + # LDAP meta-data + base_dn = LDAP['base_userservice_dn'] + object_classes = ['applicationProcess','simpleSecurityObject'] + + # attributes + name = ldapdb.models.fields.CharField(db_column='cn', max_length=200, primary_key=True) + user_password = ldapdb.models.fields.CharField(db_column='userPassword', max_length=200, blank=True, null=True) + class BaseInfoForm(ModelForm): def __init__(self, *args, **kwargs): super(BaseInfoForm, self).__init__(*args, **kwargs) @@ -479,6 +529,15 @@ class PasswordForm(ModelForm): model = User fields = ['password', 'pwd_ntlm'] +class ServiceUserForm(ModelForm): + class Meta: + model = ServiceUser + fields = ('pseudo','password') + +class ServicePasswordForm(ModelForm): + class Meta: + model = ServiceUser + fields = ('password',) class StateForm(ModelForm): class Meta: