diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index ef0d5724..b40bf3b5 100644 --- a/src/database/entities/user.rs +++ b/src/database/entities/user.rs @@ -1,8 +1,3 @@ -use crate::database::*; -use mongodb::bson::{doc, from_bson, Bson}; -use rauth::auth::Session; -use rocket::http::Status; -use rocket::request::{self, FromRequest, Outcome, Request}; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Clone)] @@ -35,41 +30,3 @@ pub struct User { #[serde(skip_serializing_if = "Option::is_none")] pub relationship: Option, } - -#[rocket::async_trait] -impl<'a, 'r> FromRequest<'a, 'r> for User { - type Error = rauth::util::Error; - - async fn from_request(request: &'a Request<'r>) -> request::Outcome { - let session: Session = try_outcome!(request.guard::().await); - - if let Ok(result) = get_collection("users") - .find_one( - doc! { - "_id": &session.user_id - }, - None, - ) - .await - { - if let Some(doc) = result { - Outcome::Success(from_bson(Bson::Document(doc)).unwrap()) - } else { - Outcome::Failure((Status::Forbidden, rauth::util::Error::InvalidSession)) - } - } else { - Outcome::Failure(( - Status::InternalServerError, - rauth::util::Error::DatabaseError, - )) - } - } -} - -impl User { - pub fn as_ref(&self) -> Ref { - Ref { - id: self.id.to_string(), - } - } -} diff --git a/src/database/guards/reference.rs b/src/database/guards/reference.rs index 125f6899..bdad5ce5 100644 --- a/src/database/guards/reference.rs +++ b/src/database/guards/reference.rs @@ -42,6 +42,14 @@ impl Ref { } } +impl User { + pub fn as_ref(&self) -> Ref { + Ref { + id: self.id.to_string(), + } + } +} + impl<'r> FromParam<'r> for Ref { type Error = &'r RawStr; diff --git a/src/database/guards/user.rs b/src/database/guards/user.rs index 8b137891..7602aefa 100644 --- a/src/database/guards/user.rs +++ b/src/database/guards/user.rs @@ -1 +1,36 @@ +use crate::database::*; +use mongodb::bson::{doc, from_bson, Bson}; +use rauth::auth::Session; +use rocket::http::Status; +use rocket::request::{self, FromRequest, Outcome, Request}; + +#[rocket::async_trait] +impl<'a, 'r> FromRequest<'a, 'r> for User { + type Error = rauth::util::Error; + + async fn from_request(request: &'a Request<'r>) -> request::Outcome { + let session: Session = try_outcome!(request.guard::().await); + + if let Ok(result) = get_collection("users") + .find_one( + doc! { + "_id": &session.user_id + }, + None, + ) + .await + { + if let Some(doc) = result { + Outcome::Success(from_bson(Bson::Document(doc)).unwrap()) + } else { + Outcome::Failure((Status::Forbidden, rauth::util::Error::InvalidSession)) + } + } else { + Outcome::Failure(( + Status::InternalServerError, + rauth::util::Error::DatabaseError, + )) + } + } +}