from django import forms from django.contrib.auth import get_user_model from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm from django.contrib.auth.models import Group from sharix_admin.forms.base import BaseForm #TODO fix path from core.utils.ldap import LDAPOperations class ShariXSignUpForm(BaseForm, UserCreationForm): """ Форма для регистрации пользователей. """ ldap_ops = LDAPOperations() def save(self, commit=True): user = super().save(commit=False) user.username = self.cleaned_data['phone_number'] # FIXME: Имя пользователя = номер телефона user.id = self.cleaned_data['phone_number'] # FIXME: Имя пользователя = номер телефона # TODO Fix LDAP checks - better to insert in cleaned_data or smth like this if self.ldap_ops.check_attribute('uid', user.phone_number): raise forms.ValidationError( f"Phone number {user.phone_number} is not available (in use)", code='phone_number_exists_ldap' ) if self.ldap_ops.check_attribute('mail', user.email): raise forms.ValidationError( f"Email {user.email} is not available (in use)", code='email_exists_ldap') if commit: self.ldap_ops.add_user(user) # self.ldap_ops.set_password(user.username, user.password) self.ldap_ops.add_to_group(user.username, "CLIENT") user.save() # user.groups.add(Group.objects.get(id=51)) # Добавляем всех пользователей по умолчанию в группу CLIENT return user class Meta: model = get_user_model() fields = ('last_name', 'first_name', 'middle_name', 'phone_number', 'email') labels = { 'middle_name': 'Отчество (не обязательно)', 'phone_number': 'Номер телефона (только цифры)', } class ShariXLoginForm(BaseForm, AuthenticationForm): """ Форма для авторизации пользователей. """ pass class ShariXResetPasswordForm(BaseForm, PasswordResetForm): pass class ShariXResetPasswordConfirmForm(BaseForm, SetPasswordForm): ldap_ops = LDAPOperations() def save(self, commit=True): password = self.cleaned_data["new_password1"] #ldap_ops.set_password(user.username, user.password) self.user.set_password(password) if commit: self.ldap_ops.set_password(self.user.phone_number, self.user.password) self.user.save() return self.user