eljur/Eljur/auth.py

94 lines
3.6 KiB
Python
Raw Normal View History

2024-01-27 18:30:58 +00:00
from bs4 import BeautifulSoup
from requests import Session, post
import json
from Eljur.errors import _checkStatus, _checkSubdomain, _findData
class Authorization:
def login(self, subdomain, data):
"""
Подключение к пользователю eljur.ru.
# :param subdomain: Поддомен eljur.ru // str
:param data: Дата, состоящая из {"username": "ваш логин",
"password": "ваш пароль"} // dict
:return: Словарь с ошибкой или с положительным ответом: // dict
answer // dict
session // Session
subdomain // str
result // bool
"""
subdomain = _checkSubdomain(subdomain)
if "error" in subdomain:
return subdomain
session = Session()
url = f"https://{subdomain}.eljur.ru/ajaxauthorize"
err = session.post(url=url, data=data)
checkStatus = _checkStatus(err, url)
if "error" in checkStatus:
return checkStatus
del checkStatus
if not err.json()["result"]:
return {"error": {"error_code": -103,
"error_msg": err.json()['error'],
"full_error": err.json()}}
del err
url = f"https://{subdomain}.eljur.ru/?show=home"
account = session.get(url=url)
checkStatus = _checkStatus(account, url)
if "error" in checkStatus:
return checkStatus
soup = BeautifulSoup(account.text, 'lxml')
sentryData = _findData(soup)
del soup
if not sentryData:
return {"error": {"error_code": -104,
"error_msg": "Данные о пользователю не найдены."}}
return {"answer": json.loads(sentryData[17:-1]),
"session": session,
"subdomain": subdomain,
"result": True}
def recover(self, subdomain, email):
"""
Восстановление пароль пользователю eljur.ru. через почту.
Внимание! Для использования данные функции требуется привязать почту.
В ином случае восстановление происходит через Администратора или другого лица вашей школы.
:param subdomain: Домен вашей школы. // str
:param email: Ваша почта, привязанная к аккаунту eljur // str
:return: Словарь с ошибкой или с положительным ответом: // dict
answer // dict
result // bool
"""
subdomain = _checkSubdomain(subdomain)
if "error" in subdomain:
return subdomain
url = f"https://{subdomain}.eljur.ru/ajaxrecover"
answer = post(url=url,
data={"email": email})
checkStatus = _checkStatus(answer, url)
if "error" in checkStatus:
return checkStatus
if not answer.json()["result"]:
return {"error": {"error_code": -105,
"error_msg": answer.json()['error'],
"full_error": answer.json()}}
return {"answer": "Сообщение успешно отправлено на почту.",
"result": True}