From cb228930d9b280e5fb99dee5ba5fc0eca5234ac6 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Fri, 13 Jan 2023 18:26:21 +0100 Subject: [PATCH] add login --- src/main.rs | 4 +--- src/marks.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/main.rs b/src/main.rs index ddf558c..0705b54 100644 --- a/src/main.rs +++ b/src/main.rs @@ -69,8 +69,6 @@ async fn main() { let user_agent = format!("uwm/{}", env!("CARGO_PKG_VERSION")); - let marks = marks::get_marks(config.username, config.password.unwrap(), &user_agent).await; - - println!("{:#?}", marks); + marks::get_marks(config.username, config.password.unwrap(), &user_agent).await; } } diff --git a/src/marks.rs b/src/marks.rs index 88a4e44..06b6ef1 100644 --- a/src/marks.rs +++ b/src/marks.rs @@ -1,9 +1,68 @@ -pub async fn get_marks(username: String, password: String, user_agent: &str) -> String { - format!("{}/{}/{}", username, password, user_agent) +use scraper::{Html, Selector}; +use std::io::Write; +pub async fn get_marks(username: String, password: String, user_agent: &str) { // Login - // https://cas.univ-paris8.fr/cas/login + let document = login(username, password, user_agent) + .await + .expect("Can't login"); + + let mut w = std::fs::File::create("temp.html").unwrap(); + write!(&mut w, "{}", document.html()).unwrap(); // Marks // https://scolarite-etudiant.univ-paris8.fr/mondossierweb/#!notesView } + +async fn login( + username: String, + password: String, + user_agent: &str, +) -> Result> { + let login_url = "https://cas.univ-paris8.fr/cas/login"; + + let client = reqwest::Client::builder().user_agent(user_agent).build()?; + + let login_page = Html::parse_document(&client.get(login_url).send().await?.text().await?); + + // LT + let sel_lt = Selector::parse(r#"input[name="lt"]"#).unwrap(); + let lt = login_page + .select(&sel_lt) + .next() + .unwrap() + .value() + .attr("value") + .unwrap(); + + // Execution + let sel_execution = Selector::parse(r#"input[name="execution"]"#).unwrap(); + let execution = login_page + .select(&sel_execution) + .next() + .unwrap() + .value() + .attr("value") + .unwrap(); + + let params = [ + ("username", username.as_str()), + ("password", password.as_str()), + ("_eventID", "submit"), + ("submit", "SE CONNECTER"), + ("lt", lt), + ("execution", execution), + ]; + + let html = client + .post(login_url) + .form(¶ms) + .send() + .await? + .text() + .await?; + + let document = Html::parse_document(&html); + + Ok(document) +}