158 lines
6.3 KiB
Python
158 lines
6.3 KiB
Python
import os
|
||
|
||
from zenpy import Zenpy
|
||
from zenpy.lib.exception import APIException
|
||
|
||
from main.models import UserProfile
|
||
|
||
|
||
class ZendeskAdmin:
|
||
"""
|
||
Класс **ZendeskAdmin** существует, чтобы в каждой фунциии отдельно не проверять аккаунт администратора
|
||
|
||
:param credentials: Полномочия (первым указывается учетная запись организации в Zendesk)
|
||
:type credentials: :class:`list of dictionaries`
|
||
:param email: Email администратора, указанный в env
|
||
:type email: :class:`email`
|
||
:param token: Токен администратора (формируется в Zendesk, указывается в env)
|
||
:type token: :class:`str`
|
||
:param password: Пароль администратора, указанный в env
|
||
:type password: :class:`str`
|
||
"""
|
||
|
||
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:
|
||
"""
|
||
Функция **check_user** осуществляет проверку существования пользователя в Zendesk
|
||
|
||
:param email: Электронная почта пользователя
|
||
:type email: :class:`email`
|
||
:return: True, если существует, иначе False
|
||
:rtype: :class:`bool`
|
||
"""
|
||
return True if self.admin.search(email, type='user') else False
|
||
|
||
def get_user_name(self, email: str) -> str:
|
||
"""
|
||
Функция **get_user_name** возвращает имя пользователя
|
||
|
||
:param user_name: Имя пользователя
|
||
:type user_name: :class:`str`
|
||
"""
|
||
user = self.admin.users.search(email).values[0]
|
||
return user.name
|
||
|
||
def get_user_role(self, email: str) -> str:
|
||
"""
|
||
Функция **get_user_role** возвращает роль пользователя
|
||
|
||
:param user_role: Роль пользователя
|
||
:type user_role: :class:`str`
|
||
"""
|
||
user = self.admin.users.search(email).values[0]
|
||
return user.role
|
||
|
||
def get_user_id(self, email: str) -> str:
|
||
"""
|
||
Функция **get_user_id** возвращает id пользователя
|
||
|
||
:param user_id: ID пользователя
|
||
:type user_id: :class:`str`
|
||
"""
|
||
user = self.admin.users.search(email).values[0]
|
||
return user.id
|
||
|
||
def get_user_image(self, email: str) -> str:
|
||
"""
|
||
Функция **get_user_image** возвращает аватар пользователя
|
||
|
||
:param user_image: Аватар пользователя
|
||
:type user_image: :class:`img`
|
||
"""
|
||
user = self.admin.users.search(email).values[0]
|
||
return user.photo['content_url'] if user.photo else None
|
||
|
||
def create_admin(self) -> None:
|
||
"""
|
||
Функция **Create_admin()** создает администратора, проверяя наличие вводимых данных в env.
|
||
|
||
:param credentials: В список полномочий администратора вносятся email, token, password из env
|
||
:raise: :class:`ValueError`: исключение, вызываемое если email не введен в env
|
||
:raise: :class:`APIException`: исключение, вызываемое если пользователя с таким email не существует в Zendesk
|
||
"""
|
||
|
||
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_profile.name = ZendeskAdmin().get_user_name(user_profile.user.email)
|
||
user_profile.role = ZendeskAdmin().get_user_role(user_profile.user.email)
|
||
user_profile.image = ZendeskAdmin().get_user_image(user_profile.user.email)
|
||
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 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
|