From b65b1a7a54f14d81c081a07ad41c99b5a94cc7dc Mon Sep 17 00:00:00 2001 From: Ondrej Vlach Date: Sun, 26 Nov 2023 18:40:12 +0100 Subject: [PATCH] wip --- Cargo.lock | 332 ++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 2 + Rocket.toml | 1 + data/cv/ovlach.yaml | 33 ----- src/lib.rs | 16 ++- src/routes/root.rs | 27 +++- src/services/cv.rs | 21 +++ src/services/mod.rs | 1 + src/tools/mod.rs | 1 + src/tools/tera.rs | 12 ++ 10 files changed, 399 insertions(+), 47 deletions(-) delete mode 100644 data/cv/ovlach.yaml create mode 100644 src/services/cv.rs create mode 100644 src/services/mod.rs create mode 100644 src/tools/mod.rs create mode 100644 src/tools/tera.rs diff --git a/Cargo.lock b/Cargo.lock index b611a9d..96eab0d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,6 +110,12 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + [[package]] name = "binascii" version = "0.1.4" @@ -225,6 +231,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.4" @@ -405,6 +421,30 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -647,6 +687,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "iana-time-zone" version = "0.1.58" @@ -670,6 +723,16 @@ dependencies = [ "cc", ] +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "ignore" version = "0.4.20" @@ -724,6 +787,12 @@ dependencies = [ "libc", ] +[[package]] +name = "ipnet" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" + [[package]] name = "is-terminal" version = "0.4.9" @@ -887,6 +956,24 @@ dependencies = [ "version_check", ] +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + [[package]] name = "normpath" version = "1.1.1" @@ -959,6 +1046,50 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "openssl" +version = "0.10.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.96" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + [[package]] name = "overload" version = "0.1.1" @@ -981,10 +1112,12 @@ dependencies = [ "fern", "log", "ovlach_data", + "reqwest", "rocket", "rocket_dyn_templates", "serde", "serde_yaml", + "tokio", ] [[package]] @@ -1143,6 +1276,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + [[package]] name = "powerfmt" version = "0.2.0" @@ -1298,6 +1437,44 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +[[package]] +name = "reqwest" +version = "0.11.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "system-configuration", + "tokio", + "tokio-native-tls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "rocket" version = "0.5.0" @@ -1433,6 +1610,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -1445,6 +1631,29 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.193" @@ -1485,6 +1694,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_yaml" version = "0.9.27" @@ -1613,6 +1834,27 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" version = "3.8.1" @@ -1707,6 +1949,21 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "tokio" version = "1.34.0" @@ -1718,6 +1975,7 @@ dependencies = [ "libc", "mio", "num_cpus", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2 0.5.5", @@ -1736,6 +1994,16 @@ dependencies = [ "syn", ] +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.14" @@ -1949,12 +2217,27 @@ dependencies = [ "unic-common", ] +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-xid" version = "0.2.4" @@ -1967,12 +2250,29 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "valuable" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "version_check" version = "0.9.4" @@ -2029,6 +2329,18 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.88" @@ -2058,6 +2370,16 @@ version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" +[[package]] +name = "web-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2182,6 +2504,16 @@ dependencies = [ "memchr", ] +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys", +] + [[package]] name = "yansi" version = "1.0.0-rc.1" diff --git a/Cargo.toml b/Cargo.toml index 4be5a81..497ed1b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,4 +12,6 @@ log = "0.4.20" fern = "0.6.2" rocket = { version = "0.5.0", features = ["json"] } rocket_dyn_templates = { version = "0.1.0", features = ["tera"]} +reqwest = { version = "0.11", features = ["json"] } +tokio = { version = "1", features = ["full"] } ovlach_data = { git = "https://glpat-Ju_qUN9Yh8qa5rEnd6T7:glpat-Ju_qUN9Yh8qa5rEnd6T7@gitlab.nanobyte.cz/ondrej/ov-site-api-data.git", tag = "v0.0.1"} \ No newline at end of file diff --git a/Rocket.toml b/Rocket.toml index c9962e5..6d0c2e6 100644 --- a/Rocket.toml +++ b/Rocket.toml @@ -1,2 +1,3 @@ [debug] static_route = "http://localhost:8001" +cv_backend_path = "http://localhost:8002" \ No newline at end of file diff --git a/data/cv/ovlach.yaml b/data/cv/ovlach.yaml deleted file mode 100644 index 790968e..0000000 --- a/data/cv/ovlach.yaml +++ /dev/null @@ -1,33 +0,0 @@ -person: - name: Ondrej - surname: Vlach - -education: - - from: 2022 - to: 2023 - school: blabla - - -jobs: - - jobtype: FREELANCE - from: 20/12/1986 - to: 21/12/1986 - company: blabla - title: blabla - description: blabla - languages: - - PHP - - HTML - - CSS - - JavaScript - - MySQL - - Wordpress - - Bootstrap - -technologies: - - name: PHP - techtype: LANGUAGE - - name: HTML - techtype: LANGUAGE - - name: CSS - techtype: LANGUAGE \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 34a3043..84662d9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,11 @@ use std::collections::HashMap; use rocket::{*, fairing::AdHoc}; use rocket_dyn_templates::{Template, tera::Value}; use ::serde::Deserialize; +use tools::tera::static_filter; pub mod routes; +pub mod services; +pub mod tools; #[derive(Deserialize)] #[serde(crate = "rocket::serde")] @@ -13,13 +16,10 @@ pub struct PresentationConfig { static_route: String, } - -pub fn static_filter( - value: &Value, - args: &HashMap -) -> Result { - let host = args.get("static_host"); - return Ok(rocket_dyn_templates::tera::Value::String(format!("{}/{}", host.unwrap().as_str().unwrap(), value.as_str().unwrap()))); // TODO: fix-me here! +#[derive(Deserialize)] +#[serde(crate = "rocket::serde")] +pub struct CVBackendConfig { + cv_backend_path: String, } pub fn rocket_builder() -> Rocket { @@ -35,6 +35,8 @@ pub fn rocket_builder() -> Rocket { }) ).attach( AdHoc::config::() + ).attach( + AdHoc::config::() ).mount("/", routes![ routes::root::index ]) diff --git a/src/routes/root.rs b/src/routes/root.rs index ce39f99..0ff852b 100644 --- a/src/routes/root.rs +++ b/src/routes/root.rs @@ -1,18 +1,31 @@ -use rocket::{get, State}; -use rocket_dyn_templates::Template; +use log::error; +use ovlach_data::cv::cv::CV; +use rocket::{get, State, response::status::NotFound, http::Status}; +use rocket_dyn_templates::{Template, context}; use serde::Serialize; -use crate::PresentationConfig; +use crate::{PresentationConfig, services::cv::fetch_cv_data_from_backend, CVBackendConfig}; #[derive(Serialize, Debug)] struct RootPage { static_host: String, + cv: CV } #[get("/")] -pub fn index(config: &State) -> Template { - let context = RootPage { - static_host: config.static_route.clone(), +pub async fn index(presentation_config: &State, cv_config: &State) -> Result { + let context = match fetch_cv_data_from_backend(cv_config.cv_backend_path.clone()).await { + Ok(cv) => RootPage { + static_host: presentation_config.static_route.clone(), + cv + }, + Err(e) => { + error!("Can't fetch CV data from backend {:?}", e); + return Err(Status::InternalServerError) + } }; - Template::render("default", &context) + + //return Templ; + + Ok(Template::render("default", &context)) } diff --git a/src/services/cv.rs b/src/services/cv.rs new file mode 100644 index 0000000..ca6c790 --- /dev/null +++ b/src/services/cv.rs @@ -0,0 +1,21 @@ +use ovlach_data::cv::cv::CV; + + +#[derive(Debug)] +pub enum FetchError { + ReqwestError(reqwest::Error) +} + +impl From for FetchError { + fn from(e: reqwest::Error) -> Self { + FetchError::ReqwestError(e) + } +} + +pub async fn fetch_cv_data_from_backend(backend_host: String) -> Result { + let resp = reqwest::get(format!("{}/{}", backend_host, "/api/cv/ovlach")) + .await? + .json::() + .await?; + Ok(resp) +} \ No newline at end of file diff --git a/src/services/mod.rs b/src/services/mod.rs new file mode 100644 index 0000000..34a6fa2 --- /dev/null +++ b/src/services/mod.rs @@ -0,0 +1 @@ +pub mod cv; \ No newline at end of file diff --git a/src/tools/mod.rs b/src/tools/mod.rs new file mode 100644 index 0000000..e7c5379 --- /dev/null +++ b/src/tools/mod.rs @@ -0,0 +1 @@ +pub mod tera; \ No newline at end of file diff --git a/src/tools/tera.rs b/src/tools/tera.rs new file mode 100644 index 0000000..8685860 --- /dev/null +++ b/src/tools/tera.rs @@ -0,0 +1,12 @@ +use std::collections::HashMap; + +use rocket_dyn_templates::tera::{Value, Error}; + + +pub fn static_filter( + value: &Value, + args: &HashMap +) -> Result { + let host = args.get("static_host"); + return Ok(rocket_dyn_templates::tera::Value::String(format!("{}/{}", host.unwrap().as_str().unwrap(), value.as_str().unwrap()))); // TODO: fix-me here! +} \ No newline at end of file