94 lines
3.6 KiB
Python
94 lines
3.6 KiB
Python
|
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}
|