111 lines
3.8 KiB
Python
111 lines
3.8 KiB
Python
import os
|
||
|
||
from zenpy import Zenpy
|
||
from zenpy.lib.exception import APIException
|
||
|
||
from main.models import UserProfile
|
||
|
||
|
||
# Дополнительные функции
|
||
class ZendeskAdmin:
|
||
# Класс существует, чтобы в каждой фунциии отдельно не проверять аккаунт администратора
|
||
credentials = {
|
||
'subdomain': 'ngenix1612197338'
|
||
}
|
||
email = os.getenv('ACCESS_CONTROLLER_API_EMAIL')
|
||
token = os.getenv('ACCESS_CONTROLLER_API_TOKEN')
|
||
password = os.getenv('ACCESS_CONTROLLER_API_PASSWORD')
|
||
|
||
def __init__(self):
|
||
self.create_admin()
|
||
|
||
def check_user(self, email: str) -> bool:
|
||
return True if self.admin.search(email, type='user') else False
|
||
|
||
def get_user(self, email: str) -> str:
|
||
return self.admin.users.search(email).values[0]
|
||
|
||
def get_user_org(self, email: str) -> str:
|
||
user = self.admin.users.search(email).values[0]
|
||
return user.organization.name
|
||
|
||
def create_admin(self) -> None:
|
||
if self.email is None:
|
||
raise ValueError('access_controller email not in env')
|
||
self.credentials['email'] = os.getenv('ACCESS_CONTROLLER_API_EMAIL')
|
||
|
||
if self.token:
|
||
self.credentials['token'] = self.token
|
||
elif self.password:
|
||
self.credentials['password'] = self.password
|
||
else:
|
||
raise ValueError('access_controller token or password not in env')
|
||
self.admin = Zenpy(**self.credentials)
|
||
try:
|
||
self.admin.search(self.email, type='user')
|
||
except APIException:
|
||
raise ValueError('invalid access_controller`s login data')
|
||
|
||
|
||
def update_profile(user_profile: UserProfile):
|
||
"""
|
||
Функция обновляет профиль пользователя в соотвтетствии с текущим в Zendesk
|
||
|
||
:param user_profile: Объект профиля пользователя
|
||
:type user_profile: :class:`main.models.UserProfile`
|
||
"""
|
||
user = ZendeskAdmin().get_user(user_profile.user.email)
|
||
user_profile.name = user.name
|
||
user_profile.role = user.role
|
||
user_profile.image = user.photo['content_url'] if user.photo else None
|
||
user_profile.save()
|
||
|
||
|
||
def check_user_exist(email: str) -> bool:
|
||
"""
|
||
Функция проверяет, существует ли пользователь
|
||
|
||
:param email: Электронная почта пользователя
|
||
:type email: :class:`str`
|
||
:return: True, если существует, иначе False
|
||
:rtype: :class:`bool`
|
||
"""
|
||
return ZendeskAdmin().check_user(email)
|
||
|
||
|
||
def get_user_organization(email: str) -> bool:
|
||
"""
|
||
Функция возвращает организацию пользователя
|
||
|
||
:param email: Электронная почта пользователя
|
||
:type email: :class:`str`
|
||
:return: Название организации
|
||
:rtype: :class:`str`
|
||
"""
|
||
return ZendeskAdmin().get_user_org(email)
|
||
|
||
|
||
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 :class:`APIException`: исключение, вызываемое если пользователь не аутентифицирован
|
||
:rtype: :class:`bool`
|
||
"""
|
||
creds = {
|
||
'email': email,
|
||
'password': password,
|
||
'subdomain': 'ngenix1612197338',
|
||
}
|
||
try:
|
||
user = Zenpy(**creds)
|
||
user.search(email, type='user')
|
||
except APIException:
|
||
return False
|
||
return True
|