summary refs log tree commit diff
path: root/src/api/guards/session.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/guards/session.rs')
-rw-r--r--src/api/guards/session.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/api/guards/session.rs b/src/api/guards/session.rs
new file mode 100644
index 0000000..ccd40a2
--- /dev/null
+++ b/src/api/guards/session.rs
@@ -0,0 +1,25 @@
+use std::str::FromStr;
+
+use rocket::{http::Status, outcome::Outcome, request::{self, Request, FromRequest}};
+use sqlx::PgPool;
+use uuid::Uuid;
+use crate::db::models::auth::LoginSession;
+
+
+#[rocket::async_trait]
+impl<'r> FromRequest<'r> for LoginSession {
+    type Error = ();
+
+    async fn from_request(req: &'r Request<'_>) -> request::Outcome<Self, Self::Error> {
+        // At the moment just always look up this one for initial testing
+        let hardcoded_uuid = "557621dd-b98e-409a-9ce7-25b5004caa42";
+
+        if let Some(db) = req.rocket().state::<PgPool>() {
+            if let Some(session) = LoginSession::lookup(&db, Uuid::from_str(hardcoded_uuid).unwrap()).await {
+                return Outcome::Success(session);
+            }
+        }
+
+        Outcome::Error((Status::InternalServerError, ()))
+    }
+}