eljur/Eljur/profile.py
2024-01-27 21:30:58 +03:00

203 lines
8.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from requests import Session
from Eljur.errors import _checkInstance, _checkStatus, _checkSubdomain, _fullCheck
class Profile:
def getProfile(self, subdomain, session):
"""
Получение информации о пользователе.
Внимание. В данной функции специально не выводится СНИЛС, почта и мобильный телефон пользователя.
:param subdomain: Поддомен eljur.ru // str
:param session: Активная сессия пользователя // Session
:return: Словарь с ошибкой или с информацией о пользователе: // dict
"""
url = f"https://{subdomain}.eljur.ru/journal-user-preferences-action"
soup = _fullCheck(subdomain, session, url)
if "error" in soup:
return soup
label = None
info = {}
for tag in soup.find_all(["label", "span"], class_=["ej-form-label", "control-label"]):
if tag.contents[0] == "СНИЛС":
break
if tag.name == "label":
label = tag.contents[0]
info.update([(label, None)])
if tag.name == "span":
info[label] = tag.contents[0]
return info
class Security:
def changePassword(self, subdomain, session, old_password, new_password):
"""
Изменение пароля в личном кабинете пользователя.
:param subdomain: Поддомен eljur.ru // str
:param session: Активная сессия пользователя // Session
:param old_password: Старый пароль. // str
:param new_password: Новый пароль, который пользователь желает использовать. // str
:return: Словарь с ошибкой или bool ответ, в котором True - успешная смена пароля // dict или bool
"""
subdomain = _checkSubdomain(subdomain)
if "error" in subdomain:
return subdomain
checkSession = _checkInstance(session, Session)
if "error" in checkSession:
return checkSession
del checkSession
url = f"https://{subdomain}.eljur.ru/journal-messages-compose-action"
getCookies = session.get(url=url, data={"_msg": "sent"})
checkStatus = _checkStatus(getCookies, url)
if "error" in checkStatus:
return checkStatus
del checkStatus
data = {"csrf": getCookies.cookies.values()[0],
"old_password": old_password,
"new_password": new_password,
"verify": new_password,
"submit_button": "Сохранить"}
url = f"https://{subdomain}.eljur.ru/journal-user-security-action/"
answer = session.post(url=url, data=data)
checkStatus = _checkStatus(answer, url)
if "error" in checkStatus:
return checkStatus
del checkStatus
if "Ваш пароль успешно изменен!" in answer.text:
return True
return False
class Settings:
def changeSing(self, subdomain, session, text):
"""
Изменение подписи в новых сообщениях пользователя.
:param subdomain: Поддомен eljur.ru // str
:param session: Активная сессия пользователя // Session
:param text: Текст подписи // str
:return: Словарь с ошибкой или bool ответ, в котором True - успешное изменение подписи. // dict или bool
"""
subdomain = _checkSubdomain(subdomain)
if "error" in subdomain:
return subdomain
checkSession = _checkInstance(session, Session)
if "error" in checkSession:
return checkSession
del checkSession
url = f"https://{subdomain}.eljur.ru/journal-index-rpc-action"
data = {"method": "setPref",
"0": "msgsignature",
"1": text}
changeSing = session.post(url=url, data=data)
checkStatus = _checkStatus(changeSing, url)
if "error" in checkStatus:
return checkStatus
if "result" not in checkStatus:
return False
else:
return checkStatus["result"]
def switcher(self, subdomain, session, choose, switch):
"""
Переключение настраиваиваемых функций в настройках.
Доступно переключение следующих функций:
`Отмечать сообщение прочитанным при его открытии на электронной почте` // 0 или checkforwardedemail
`Отображать расписание обучающегося по умолчанию (вместо расписания класса)` // 1 или schedule_default_student
:param subdomain: Поддомен eljur.ru // str
:param session: Активная сессия пользователя // Session
:param choose: Выбор переключаемой функции // int или str
:param switch: True/False // bool
:return: Словарь с ошибкой или bool ответ, в котором True - успешное переключение. // dict или bool
"""
numSwitch = [0, 1]
numStrSwitch = ["0", "1"]
strSwitch = ["checkforwardedemail", "schedule_default_student"]
switchers = {"checkforwardedemail": {"on": "on",
"off": "off"},
"schedule_default_student": {"on": "yes",
"off": "no"}}
data = {"method": "setPref",
"0": None,
"1": None}
subdomain = _checkSubdomain(subdomain)
if "error" in subdomain:
return subdomain
checkSession = _checkInstance(session, Session)
if "error" in checkSession:
return checkSession
del checkSession
checkInt = _checkInstance(choose, int)
if "error" in checkInt:
checkStr = _checkInstance(choose, str)
if "error" in checkStr:
return checkStr
else:
if choose not in strSwitch:
if choose not in numStrSwitch:
return {"error": {"error_code": -302,
"error_msg": f"Вашего выбора нет в предложенных. {choose}"}}
else:
data["0"] = strSwitch[int(choose)]
data["0"] = choose
else:
if choose not in numSwitch:
return {"error": {"error_code": -302,
"error_msg": f"Вашего выбора нет в предложенных. {choose}"}}
data["0"] = strSwitch[choose]
checkBool = _checkInstance(switch, bool)
if "error" not in checkBool:
return checkBool
del checkBool, checkStr, checkInt
if switch:
data["1"] = switchers[data["0"]]["on"]
else:
data["1"] = switchers[data["0"]]["off"]
url = f"https://{subdomain}.eljur.ru/journal-index-rpc-action"
changeSing = session.post(url=url, data=data)
checkStatus = _checkStatus(changeSing, url)
if "error" in checkStatus:
return checkStatus
if "result" not in checkStatus:
return False
else:
return checkStatus["result"]