diff --git a/backend/src/cookie/validation.rs b/backend/src/cookie/validation.rs index 3d7a4ad..df366bd 100644 --- a/backend/src/cookie/validation.rs +++ b/backend/src/cookie/validation.rs @@ -12,7 +12,11 @@ use axum_extra::extract::CookieJar; use jsonwebtoken::DecodingKey; use serde_json::json; -use crate::{AppState, cookie::jwt::decode_token, models::LoginModel}; +use crate::{ + AppState, + cookie::jwt::decode_token, + models::{LoginScheme, User}, +}; pub async fn validate_token( cookies: CookieJar, @@ -59,7 +63,7 @@ pub async fn validate_token( (StatusCode::UNAUTHORIZED, Json(error)) })?; - let user = sqlx::query_as::<_, LoginModel>(r#"SELECT * FROM users WHERE id = $1"#) + let user = sqlx::query_as::<_, User>(r#"SELECT * FROM users WHERE id = $1"#) .bind(uuid) .fetch_optional(&data.db) .await diff --git a/backend/src/env.rs b/backend/src/env.rs index ae52252..632235d 100644 --- a/backend/src/env.rs +++ b/backend/src/env.rs @@ -2,18 +2,18 @@ pub struct Env { pub db_url: String, pub token_secret: String, - pub origin: String + pub origin: String, } impl Env { pub fn load() -> Env { let db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set"); let token_secret = std::env::var("TOKEN_SECRET").expect("TOKEN_SECRET must be set"); - let origin = std::env::var("ORIGIN").expect("ORIGIN must be set") + let origin = std::env::var("ORIGIN").expect("ORIGIN must be set"); Env { db_url, token_secret, - origin + origin, } } } diff --git a/frontend/Cargo.lock b/frontend/Cargo.lock index aa7dd83..0810194 100644 --- a/frontend/Cargo.lock +++ b/frontend/Cargo.lock @@ -70,6 +70,7 @@ dependencies = [ "wasm-bindgen-futures", "web-sys", "yew", + "yew-router", ] [[package]] @@ -219,6 +220,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "97563d71863fb2824b2e974e754a81d19c4a7ec47b09ced8a0e6656b6d54bd1f" dependencies = [ + "futures-channel", "gloo-events", "js-sys", "wasm-bindgen", @@ -315,6 +317,8 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ + "futures-channel", + "futures-core", "js-sys", "wasm-bindgen", ] @@ -590,6 +594,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "route-recognizer" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" + [[package]] name = "rustversion" version = "1.0.22" @@ -838,6 +848,12 @@ version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "version_check" version = "0.9.5" @@ -963,6 +979,36 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "yew-router" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870bd2a1aa6d608c0c789c122654e25f4927bb6bfe344cc0da3b630ac3c73260" +dependencies = [ + "gloo", + "js-sys", + "route-recognizer", + "serde", + "serde_urlencoded", + "tracing", + "urlencoding", + "wasm-bindgen", + "web-sys", + "yew", + "yew-router-macro", +] + +[[package]] +name = "yew-router-macro" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8399f1d134ab8e69abc7cded19f114621d520bd9c79c5a0f34091bf664d7325b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "zmij" version = "1.0.21" diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml index 9975240..23cba91 100644 --- a/frontend/Cargo.toml +++ b/frontend/Cargo.toml @@ -17,3 +17,4 @@ wasm-bindgen = "0.2.118" wasm-bindgen-futures = "0.4.68" web-sys = { version = "0.3.95", features = ["Window", "Document", "Request", "Response", "Headers"] } gloo-net = "0.7.0" +yew-router = "0.20.0" diff --git a/frontend/src/lib.rs b/frontend/src/lib.rs index d09b035..31d4860 100644 --- a/frontend/src/lib.rs +++ b/frontend/src/lib.rs @@ -1,20 +1,29 @@ +mod pages; +use crate::pages::*; use yew::prelude::*; +use yew_router::prelude::*; -#[function_component] -pub fn App() -> Html { - let counter = use_state(|| 0); - let onclick = { - let counter = counter.clone(); - move |_| { - let value = *counter + 1; - counter.set(value); - } - }; +#[derive(Clone, PartialEq, Routable)] +enum Route { + #[at("/")] + Home, + #[not_found] + #[at("/404")] + NotFound, +} - html! { -
- -

{ *counter }

-
+fn switch(route: Route) -> Html { + match route { + Route::Home => html! { }, + Route::NotFound => html! { }, + } +} + +#[component(App)] +pub fn app() -> Html { + html! { + + render={switch} /> + } } diff --git a/frontend/src/pages/basic_pages.rs b/frontend/src/pages/basic_pages.rs new file mode 100644 index 0000000..670e068 --- /dev/null +++ b/frontend/src/pages/basic_pages.rs @@ -0,0 +1,30 @@ +use yew::prelude::*; + +#[component(Home)] +pub fn home_component() -> Html { + let counter = use_state(|| 0); + let onclick = { + let counter = counter.clone(); + move |_| { + let value = *counter + 1; + counter.set(value); + } + }; + + html! { +
+ +

{ *counter }

+
+ } +} + +#[component(NotFound)] +pub fn not_found_component() -> Html { + let message = "404 Not found"; + html! { +
+

{&message}

+
+ } +} diff --git a/frontend/src/pages/mod.rs b/frontend/src/pages/mod.rs new file mode 100644 index 0000000..11980c3 --- /dev/null +++ b/frontend/src/pages/mod.rs @@ -0,0 +1 @@ +pub mod basic_pages;