diff --git a/main/extra_func.py b/main/extra_func.py
index 487fb13..8f850b8 100644
--- a/main/extra_func.py
+++ b/main/extra_func.py
@@ -1,3 +1,8 @@
+import os
+
+from zenpy import Zenpy
+from zenpy.lib.exception import APIException
+
from main.models import UserProfile
@@ -9,6 +14,7 @@ def set_and_get_name(UP: UserProfile): # TODO: Переделать с полу
:param UP: Объект профиля пользователя
:type UP: :class:`main.models.UserProfile`
:return: Имя пользователя
+ :rtype: :class:`str`
"""
return UP.user.username
@@ -20,6 +26,7 @@ def set_and_get_email(UP: UserProfile): # TODO: Переделать с пол
:param UP: Объект профиля пользователя
:type UP: :class:`main.models.UserProfile`
:return: Почта пользователя
+ :rtype: :class:`str`
"""
return UP.user.email
@@ -31,6 +38,7 @@ def set_and_get_role(UP: UserProfile): # TODO: Переделать с полу
:param UP: Объект профиля пользователя
:type UP: :class:`main.models.UserProfile`
:return: Роль пользователя
+ :rtype: :class:`str`
"""
return UP.role
@@ -42,5 +50,52 @@ def load_and_get_image(UP: UserProfile): # TODO: Переделать с пол
:param UP: Объект профиля пользователя
:type UP: :class:`main.models.UserProfile`
:return: Название изображения
+ :rtype: :class:`str`
"""
return UP.image.name
+
+
+def check_user_exist(email: str) -> bool:
+ """
+ Функция проверяет, существует ли пользователь
+
+ :param email: Электронная почта пользователя
+ :type email: :class:`str
+ :return: True, если существует, иначе False
+ :rtype: :class:`bool'
+ """
+ admin_creds = {
+ 'email': os.environ.get('Admin_email'),
+ 'subdomain': 'ngenix1612197338',
+ 'token': os.environ.get('Oauth_token'),
+ }
+ admin = Zenpy(**admin_creds)
+ zenpy_user = admin.search(email, type='user')
+ if zenpy_user:
+ return True
+ return False
+
+
+def check_user_auth(email: str, password: str) -> bool:
+ """
+ Функция проверяет, верны ли входные данные
+
+ :param email: Электроная почта пользователя
+ :type email: :class:`str`
+ :param password: Пароль пользователя
+ :type password: :class:`str`
+ :return: True, если входные данные верны, иначе False
+ :raise APIException: исключение, вызываемое если пользователь не аутентифицирован
+ :rtype: :class:`bool`
+ """
+ try:
+ creds = {
+ 'email': email,
+ 'subdomain': 'ngenix1612197338',
+ 'password': password,
+ }
+ user = Zenpy(**creds)
+ user.search(email, type='user')
+ except APIException:
+ return False
+ return True
diff --git a/main/forms.py b/main/forms.py
new file mode 100644
index 0000000..fcd8a7f
--- /dev/null
+++ b/main/forms.py
@@ -0,0 +1,34 @@
+from django import forms
+from django_registration.forms import RegistrationFormUniqueEmail
+
+
+class CustomRegistrationForm(RegistrationFormUniqueEmail):
+ """
+ Форма для регистрации :class:`django_registration.forms.RegistrationFormUniqueEmail`
+ с полем для ввода пароля от Zendesk аккаунта и с добавлением bootstrap-класса 'form-control' для всех полей
+
+ :param password_zen: Поле для ввода пароля от Zendesk
+ :type password_zen: :class:`django.forms.CharField`
+ """
+ password_zen = forms.CharField(
+ required=True,
+ label="Пароль от Zendesk аккаунта",
+ strip=False,
+ widget=forms.PasswordInput(attrs={
+ 'class': 'form-control'
+ })
+ )
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ for visible in self.visible_fields():
+ if visible.field.widget.attrs.get('class', False):
+ print(visible.field.widget.attrs['class'].find('form-control'))
+ if visible.field.widget.attrs['class'].find('form-control') < 0:
+ visible.field.widget.attrs['class'] += 'form-control'
+ else:
+ visible.field.widget.attrs['class'] = 'form-control'
+
+ class Meta(RegistrationFormUniqueEmail.Meta):
+ fields = RegistrationFormUniqueEmail.Meta.fields
+ fields.insert(2, 'password_zen')
diff --git a/main/templates/django_registration/registration_closed.html b/main/templates/django_registration/registration_closed.html
index 9aa808d..4fffce6 100644
--- a/main/templates/django_registration/registration_closed.html
+++ b/main/templates/django_registration/registration_closed.html
@@ -11,5 +11,5 @@
{% block content %}
-