Move guard and reference code out of entities folder.
This commit is contained in:
@@ -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};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug, Clone)]
|
#[derive(Serialize, Deserialize, Debug, Clone)]
|
||||||
@@ -35,41 +30,3 @@ pub struct User {
|
|||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub relationship: Option<RelationshipStatus>,
|
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(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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 {
|
impl<'r> FromParam<'r> for Ref {
|
||||||
type Error = &'r RawStr;
|
type Error = &'r RawStr;
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user