From bb3667a83b4dccea535e13638aaa25d95d11f95f Mon Sep 17 00:00:00 2001 From: Paul Makles <paulmakles@gmail.com> Date: Sat, 9 Jan 2021 13:59:45 +0000 Subject: [PATCH] Move guard and reference code out of entities folder. --- src/database/entities/user.rs | 43 -------------------------------- src/database/guards/reference.rs | 8 ++++++ src/database/guards/user.rs | 35 ++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 43 deletions(-) diff --git a/src/database/entities/user.rs b/src/database/entities/user.rs index ef0d572..b40bf3b 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<RelationshipStatus>, } - -#[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<Self, Self::Error> { - let session: Session = try_outcome!(request.guard::<Session>().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 125f689..bdad5ce 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 8b13789..7602aef 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<Self, Self::Error> { + let session: Session = try_outcome!(request.guard::<Session>().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, + )) + } + } +} -- GitLab