80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
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
|