diff --git a/backend/Cargo.lock b/backend/Cargo.lock index bfcd1e4..df72141 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -158,6 +158,7 @@ dependencies = [ "isahc", "lazy_static", "log", + "once_cell", "regex", "reqwest", "rocket", @@ -346,9 +347,9 @@ dependencies = [ [[package]] name = "cookie" -version = "0.18.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cd91cf61412820176e137621345ee43b3f4423e589e7ae4e50d601d93e35ef8" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "percent-encoding", "time 0.3.27", @@ -1318,6 +1319,7 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown 0.12.3", + "serde", ] [[package]] @@ -1328,7 +1330,6 @@ checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" dependencies = [ "equivalent", "hashbrown 0.14.0", - "serde", ] [[package]] @@ -1932,7 +1933,7 @@ checksum = "61a386cd715229d399604b50d1361683fe687066f42d56f54be995bc6868f71c" dependencies = [ "inlinable_string", "pear_codegen", - "yansi", + "yansi 1.0.0-rc.1", ] [[package]] @@ -2161,7 +2162,7 @@ dependencies = [ "quote", "syn 2.0.29", "version_check", - "yansi", + "yansi 1.0.0-rc.1", ] [[package]] @@ -2455,9 +2456,9 @@ dependencies = [ [[package]] name = "rocket" -version = "0.5.0" +version = "0.5.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e7bb57ccb26670d73b6a47396c83139447b9e7878cab627fdfe9ea8da489150" +checksum = "58734f7401ae5cfd129685b48f61182331745b357b96f2367f01aebaf1cc9cc9" dependencies = [ "async-stream", "async-trait", @@ -2467,7 +2468,8 @@ dependencies = [ "either", "figment", "futures", - "indexmap 2.0.0", + "indexmap 1.9.3", + "is-terminal", "log", "memchr", "multer", @@ -2490,38 +2492,37 @@ dependencies = [ "ubyte", "uuid", "version_check", - "yansi", + "yansi 0.5.1", ] [[package]] name = "rocket_codegen" -version = "0.5.0" +version = "0.5.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2238066abf75f21be6cd7dc1a09d5414a671f4246e384e49fe3f8a4936bd04c" +checksum = "7093353f14228c744982e409259fb54878ba9563d08214f2d880d59ff2fc508b" dependencies = [ "devise", "glob", - "indexmap 2.0.0", + "indexmap 1.9.3", "proc-macro2", "quote", "rocket_http", "syn 2.0.29", "unicode-xid", - "version_check", ] [[package]] name = "rocket_http" -version = "0.5.0" +version = "0.5.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a1663694d059fe5f943ea5481363e48050acedd241d46deb2e27f71110389e" +checksum = "936012c99162a03a67f37f9836d5f938f662e26f2717809761a9ac46432090f4" dependencies = [ - "cookie 0.18.0", + "cookie 0.17.0", "either", "futures", "http", "hyper", - "indexmap 2.0.0", + "indexmap 1.9.3", "log", "memchr", "pear", @@ -3182,9 +3183,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "state" -version = "0.6.0" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" +checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" dependencies = [ "loom", ] @@ -3961,14 +3962,17 @@ dependencies = [ "windows-sys", ] +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + [[package]] name = "yansi" version = "1.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1367295b8f788d371ce2dbc842c7b709c73ee1364d30351dd300ec2203b12377" -dependencies = [ - "is-terminal", -] [[package]] name = "zeroize" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 96ba416..68783bf 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -7,7 +7,7 @@ edition = "2021" [dependencies] reqwest = { version = "0.11", features = ["json", "cookies"] } -rocket = { version = "0.5.0" , features = ["json", "msgpack", "uuid"] } +rocket = { version = "=0.5.0-rc.3" , features = ["json", "msgpack", "uuid"] } sqlx = { version = "0.7.1", features = [ "runtime-tokio", "tls-rustls", "mysql", "macros", "chrono" ] } dotenvy = "0.15.7" serde = "1.0.188" @@ -16,6 +16,7 @@ scraper = "0.17.1" isahc = { version = "1.7.2", features = ["cookies"] } urlencoding = "2.1.3" lazy_static = "1.4.0" +once_cell = "1.18.0" log = "0.4.20" env_logger = "0.10.0" bardecoder = "0.5.0" diff --git a/backend/src/main.rs b/backend/src/main.rs index af3840e..9da8eb5 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,6 +1,9 @@ use cors::Cors; +use once_cell::sync::OnceCell; use sqlx::Connection; +use sqlx::MySql; use sqlx::MySqlConnection; +use sqlx::Pool; use std::env; use std::time::Instant; @@ -14,6 +17,8 @@ mod online_classroom; pub mod json_result; +static DB: OnceCell> = OnceCell::new(); + /// Opens & returns a connection to the database /// /// We don't use a connection pool because on some days, on the afternoon, diff --git a/backend/src/model/course.rs b/backend/src/model/course.rs index b61aeaa..deffbfb 100644 --- a/backend/src/model/course.rs +++ b/backend/src/model/course.rs @@ -35,9 +35,7 @@ impl Course { } }; - let results = sqlx::query!("SELECT * FROM course") - .fetch_all(&mut db) - .await; + let results = sqlx::query!("SELECT * FROM course").fetch_all(&mut db).await; let results = match results { Ok(res) => res, diff --git a/backend/src/online_classroom/session.rs b/backend/src/online_classroom/session.rs index 47e0fde..ef4878f 100644 --- a/backend/src/online_classroom/session.rs +++ b/backend/src/online_classroom/session.rs @@ -103,9 +103,6 @@ pub async fn request(url: String) -> Result { // Get the stored client let jar = SESSION_COOKIE.read().unwrap().jar.clone(); - log::info!("Classroom request: url: {}", url); - log::info!("Classroom request: cookie jar: {:?}", jar); - let uri = format!("{}{}", classroom_url, url); // Do the request @@ -255,23 +252,11 @@ async fn login() -> Result<(), String> { match response { Ok(mut r) => { if r.status() == isahc::http::StatusCode::FOUND { - let html = match r.text() { - Ok(t) => t, - Err(err) => { - return Err(format!("Error getting text from login response: {:?}", err)) - } - }; - log::info!("classroom login: 302 response."); - log_html(&html); - - log::info!("classroom login cookies: {:?}", jar); - + // TODO: Even if this is a 302, it might not be a successful login // check Set-Cookie header SESSION_COOKIE.write().unwrap().jar = jar.clone(); Ok(()) } else { - log::info!("classroom login: not 302"); - // Write html to file match r.text() { Ok(t) => { diff --git a/frontend/.gitignore b/frontend/.gitignore index 3a8095d..76add87 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,3 +1,2 @@ node_modules -dist -.directory +dist \ No newline at end of file