diff --git a/Cargo.lock b/Cargo.lock index 111dbff..6cda3c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -244,9 +244,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" [[package]] name = "byteorder" @@ -262,9 +262,9 @@ checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" [[package]] name = "cc" -version = "1.2.5" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e" +checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" dependencies = [ "shlex", ] @@ -1203,9 +1203,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.169" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "libm" @@ -1467,9 +1467,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] @@ -2093,9 +2093,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.13.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", @@ -2123,9 +2123,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.134" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", "memchr", @@ -2519,9 +2519,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.91" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -2661,9 +2661,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] diff --git a/examples/basic.rs b/examples/basic.rs new file mode 100644 index 0000000..cd167c3 --- /dev/null +++ b/examples/basic.rs @@ -0,0 +1,35 @@ +use based::request::{RequestContext, StringResponse}; +use based::{ + get_pg, + page::{Shell, render_page}, +}; +use maud::html; +use rocket::get; +use rocket::routes; + +#[get("/")] +pub async fn index_page(ctx: RequestContext) -> StringResponse { + let content = html!( + h1 { "Hello World!" }; + ); + + render_page( + content, + "Hello World", + ctx, + &Shell::new(html! {}, html! {}, Some(String::new())), + ) + .await +} + +#[rocket::launch] +async fn launch() -> _ { + // Logging + env_logger::init(); + + // Database + let pg = get_pg!(); + // sqlx::migrate!("./migrations").run(pg).await.unwrap(); + + rocket::build().mount("/", routes![index_page]) +} diff --git a/src/auth/user.rs b/src/auth/user.rs index b124a29..ad85fb0 100644 --- a/src/auth/user.rs +++ b/src/auth/user.rs @@ -160,16 +160,7 @@ async fn extract_user<'r>(request: &'r Request<'_>) -> Option { } } - match request.headers().get_one("token") { - Some(key) => { - if let Some(user) = User::from_session(key).await { - return Some(user); - } else { - return None; - } - } - None => None, - } + None } #[rocket::async_trait] @@ -185,6 +176,27 @@ impl<'r> FromRequest<'r> for User { } } +/// Struct which extracts a user with session from `Token` HTTP Header. +pub struct APIUser(User); + +#[rocket::async_trait] +impl<'r> FromRequest<'r> for APIUser { + type Error = (); + + async fn from_request(request: &'r Request<'_>) -> rocket::request::Outcome { + match request.headers().get_one("token") { + Some(key) => { + if let Some(user) = User::from_session(key).await { + return Outcome::Success(APIUser(user)); + } else { + return Outcome::Error((Status::Unauthorized, ())); + } + } + None => Outcome::Error((Status::Unauthorized, ())), + } + } +} + /// Maybe User? /// /// This struct extracts a user if possible, but also allows anybody. diff --git a/src/lib.rs b/src/lib.rs index 00a0df5..10dda8e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,10 +2,17 @@ use tokio::sync::OnceCell; pub mod auth; pub mod format; -pub mod htmx; pub mod page; pub mod request; pub mod result; +pub mod htmx; + +// TODO : Cache Headers +// TODO : Refactor Responders +// TODO : Streaming Responses + Ranges +// TODO : API Pagination? +// TODO : CORS? +// TODO : CSRF? // Postgres