gmao/app_new/lib_ext/pronotepy/ent/complex_ent.py

81 lines
2.6 KiB
Python
Raw Permalink Normal View History

2026-08-14 18:02:25 +02:00
from logging import getLogger, DEBUG
import typing
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse, parse_qs
from ..exceptions import *
from .generic_func import _educonnect
log = getLogger(__name__)
log.setLevel(DEBUG)
HEADERS = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0"
}
@typing.no_type_check
def ac_rennes(username: str, password: str) -> requests.cookies.RequestsCookieJar:
"""
ENT ac Rennes Toutatice.fr
Parameters
----------
username : str
username
password : str
password
Returns
-------
cookies : cookies
returns the ent session cookies
"""
# Toutatice required URL
toutatice_url = "https://www.toutatice.fr/portail/auth/MonEspace"
toutatice_login = "https://www.toutatice.fr/wayf/Ctrl"
toutatice_auth = "https://www.toutatice.fr/idp/Authn/RemoteUser"
with requests.Session() as session:
response = session.get(toutatice_url, headers=HEADERS)
soup = BeautifulSoup(response.text, "html.parser")
payload = {
"entityID": soup.find("input", {"name": "entityID"})["value"],
"return": soup.find("input", {"name": "return"})["value"],
"_saml_idp": soup.find("input", {"name": "_saml_idp"})["value"],
}
log.debug(f"[ENT Toutatice] Logging in with {username}")
response = session.post(toutatice_login, data=payload, headers=HEADERS)
_educonnect(session, username, password, response.url)
params = {
"conversation": parse_qs(urlparse(response.url).query)["execution"][0],
"redirectToLoaderRemoteUser": 0,
"sessionid": session.cookies.get("IDP_JSESSIONID"),
}
response = session.get(toutatice_auth, headers=HEADERS, params=params)
soup = BeautifulSoup(response.text, "xml")
if soup.find("erreurFonctionnelle"):
raise ENTLoginError(
"Toutatice ENT (ac_rennes) : ", soup.find("erreurFonctionnelle").text
)
elif soup.find("erreurTechnique"):
raise ENTLoginError(
"Toutatice ENT (ac_rennes) : ", soup.find("erreurTechnique").text
)
else:
params = {
"conversation": soup.find("conversation").text,
"uidInSession": soup.find("uidInSession").text,
"sessionid": session.cookies.get("IDP_JSESSIONID"),
}
t = session.get(toutatice_auth, headers=HEADERS, params=params)
return session.cookies