auth.py 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from django import forms
  2. from django.contrib.auth import get_user_model
  3. from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, UsernameField
  4. from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm
  5. from django.contrib.auth.models import Group
  6. from sharix_admin.forms.base import BaseForm
  7. #TODO fix path
  8. from core.utils.ldap import LDAPOperations
  9. class ShariXSignUpForm(BaseForm, UserCreationForm):
  10. """
  11. Форма для регистрации пользователей.
  12. """
  13. ldap_ops = LDAPOperations()
  14. def save(self, commit=True):
  15. user = super().save(commit=False)
  16. user.username = self.cleaned_data['phone_number'] # FIXME: Имя пользователя = номер телефона
  17. user.id = self.cleaned_data['phone_number'] # FIXME: Имя пользователя = номер телефона
  18. # TODO Fix LDAP checks - better to insert in cleaned_data or smth like this
  19. if self.ldap_ops.check_attribute('uid', user.phone_number):
  20. raise forms.ValidationError(
  21. f"Phone number {user.phone_number} is not available (in use)",
  22. code='phone_number_exists_ldap'
  23. )
  24. if self.ldap_ops.check_attribute('mail', user.email):
  25. raise forms.ValidationError(
  26. f"Email {user.email} is not available (in use)",
  27. code='email_exists_ldap')
  28. if commit:
  29. self.ldap_ops.add_user(user)
  30. # self.ldap_ops.set_password(user.username, user.password)
  31. self.ldap_ops.add_to_group(user.username, "CLIENT")
  32. user.save()
  33. # user.groups.add(Group.objects.get(id=51)) # Добавляем всех пользователей по умолчанию в группу CLIENT
  34. return user
  35. class Meta:
  36. model = get_user_model()
  37. fields = ('last_name', 'first_name', 'middle_name', 'phone_number', 'email')
  38. labels = {
  39. 'middle_name': 'Отчество (не обязательно)',
  40. 'phone_number': 'Номер телефона (только цифры)',
  41. }
  42. class ShariXLoginForm(BaseForm, AuthenticationForm):
  43. """
  44. Форма для авторизации пользователей.
  45. """
  46. pass
  47. class ShariXResetPasswordForm(BaseForm, PasswordResetForm):
  48. pass
  49. class ShariXResetPasswordConfirmForm(BaseForm, SetPasswordForm):
  50. ldap_ops = LDAPOperations()
  51. def save(self, commit=True):
  52. password = self.cleaned_data["new_password1"]
  53. #ldap_ops.set_password(user.username, user.password)
  54. self.user.set_password(password)
  55. if commit:
  56. self.ldap_ops.set_password(self.user.phone_number, self.user.password)
  57. self.user.save()
  58. return self.user