diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-28 11:52:32 -0500 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2023-01-28 11:52:32 -0500 |
commit | 487d97cb019ef1a37d3ef90c6b051ba0389c6d15 (patch) | |
tree | 16833c40f95c917a48ddb7f97c1d75330a8222be /src/types | |
parent | fix rerendering logout button, console page (diff) | |
download | xssbook-487d97cb019ef1a37d3ef90c6b051ba0389c6d15.tar.gz xssbook-487d97cb019ef1a37d3ef90c6b051ba0389c6d15.tar.bz2 xssbook-487d97cb019ef1a37d3ef90c6b051ba0389c6d15.zip |
tracing
Diffstat (limited to 'src/types')
-rw-r--r-- | src/types/extract.rs | 3 | ||||
-rw-r--r-- | src/types/post.rs | 30 | ||||
-rw-r--r-- | src/types/response.rs | 9 | ||||
-rw-r--r-- | src/types/session.rs | 5 | ||||
-rw-r--r-- | src/types/user.rs | 8 |
5 files changed, 44 insertions, 11 deletions
diff --git a/src/types/extract.rs b/src/types/extract.rs index 399fe67..69c6ed8 100644 --- a/src/types/extract.rs +++ b/src/types/extract.rs @@ -27,6 +27,7 @@ impl<S> FromRequestParts<S> for AuthorizedUser where S: Send + Sync { }; let Ok(user) = User::from_user_id(session.user_id, true) else { + tracing::error!("Valid token but no valid user"); return Err(ResponseCode::InternalServerError.text("Valid token but no valid user")) }; @@ -84,6 +85,7 @@ impl<T, S, B> FromRequest<S, B> for Json<T> where async fn from_request(mut req: Request<B>, state: &S) -> Result<Self> { let Ok(ConnectInfo(info)) = req.extract_parts::<ConnectInfo<SocketAddr>>().await else { + tracing::error!("Failed to read connection info"); return Err(ResponseCode::InternalServerError.text("Failed to read connection info")); }; let method = req.method().clone(); @@ -91,6 +93,7 @@ impl<T, S, B> FromRequest<S, B> for Json<T> where let uri = req.uri().clone(); let Ok(bytes) = Bytes::from_request(req, state).await else { + tracing::error!("Failed to read request body"); return Err(ResponseCode::InternalServerError.text("Failed to read request body")); }; diff --git a/src/types/post.rs b/src/types/post.rs index 7805a4e..7ca0a3c 100644 --- a/src/types/post.rs +++ b/src/types/post.rs @@ -1,5 +1,7 @@ +use core::fmt; use std::collections::HashSet; use serde::Serialize; +use tracing::instrument; use crate::database; use crate::types::response::{Result, ResponseCode}; @@ -14,8 +16,17 @@ pub struct Post { pub date: u64 } +impl fmt::Debug for Post { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Post") + .field("post_id", &self.post_id) + .finish() + } +} + impl Post { + #[instrument()] pub fn from_post_id(post_id: u64) -> Result<Self> { let Ok(Some(post)) = database::posts::get_post(post_id) else { return Err(ResponseCode::BadRequest.text("Post does not exist")) @@ -24,15 +35,7 @@ impl Post { Ok(post) } - // pub fn from_post_ids(post_ids: Vec<u64>) -> Vec<Self> { - // post_ids.iter().map(|id| { - // let Ok(post) = Post::from_post_id(*id) else { - // return None; - // }; - // Some(post) - // }).flatten().collect() - // } - + #[instrument()] pub fn from_post_page(page: u64) -> Result<Vec<Self>> { let Ok(posts) = database::posts::get_post_page(page) else { return Err(ResponseCode::BadRequest.text("Failed to fetch posts")) @@ -40,6 +43,7 @@ impl Post { Ok(posts) } + #[instrument()] pub fn from_user_id(user_id: u64) -> Result<Vec<Self>> { let Ok(posts) = database::posts::get_users_posts(user_id) else { return Err(ResponseCode::BadRequest.text("Failed to fetch posts")) @@ -47,24 +51,29 @@ impl Post { Ok(posts) } + #[instrument()] pub fn new(user_id: u64, content: String) -> Result<Self> { let Ok(post) = database::posts::add_post(user_id, &content) else { + tracing::error!("Failed to create post"); return Err(ResponseCode::InternalServerError.text("Failed to create post")) }; Ok(post) } + #[instrument()] pub fn comment(&mut self, user_id: u64, content: String) -> Result<()> { self.comments.push((user_id, content)); if database::posts::update_post(self.post_id, &self.likes, &self.comments).is_err() { + tracing::error!("Failed to comment on post"); return Err(ResponseCode::InternalServerError.text("Failed to comment on post")) } Ok(()) } + #[instrument()] pub fn like(&mut self, user_id: u64, state: bool) -> Result<()> { if state { @@ -74,7 +83,8 @@ impl Post { } if database::posts::update_post(self.post_id, &self.likes, &self.comments).is_err() { - return Err(ResponseCode::InternalServerError.text("Failed to comment on post")) + tracing::error!("Failed to change like state on post"); + return Err(ResponseCode::InternalServerError.text("Failed to change like state on post")) } Ok(()) diff --git a/src/types/response.rs b/src/types/response.rs index 72c1334..de572b2 100644 --- a/src/types/response.rs +++ b/src/types/response.rs @@ -1,6 +1,7 @@ use axum::{response::{IntoResponse, Response}, http::{StatusCode, Request, HeaderValue}, body::Body, headers::HeaderName}; use tower::ServiceExt; use tower_http::services::ServeFile; +use tracing::instrument; #[derive(Debug)] pub enum ResponseCode { @@ -15,6 +16,7 @@ pub enum ResponseCode { } impl ResponseCode { + pub fn code(self) -> StatusCode { match self { Self::Success => StatusCode::OK, @@ -28,10 +30,12 @@ impl ResponseCode { } } + #[instrument()] pub fn text(self, msg: &str) -> Response { (self.code(), msg.to_owned()).into_response() } + #[instrument()] pub fn json(self, json: &str) -> Response { let mut res = (self.code(), json.to_owned()).into_response(); res.headers_mut().insert( @@ -40,6 +44,7 @@ impl ResponseCode { res } + #[instrument()] pub fn html(self, json: &str) -> Response { let mut res = (self.code(), json.to_owned()).into_response(); res.headers_mut().insert( @@ -48,6 +53,7 @@ impl ResponseCode { res } + #[instrument()] pub async fn file(self, path: &str) -> Result<Response> { if path.chars().position(|c| c == '.' ).is_none() { return Err(ResponseCode::BadRequest.text("Folders cannot be served")); @@ -55,7 +61,8 @@ impl ResponseCode { let path = format!("public{}", path); let svc = ServeFile::new(path); let Ok(mut res) = svc.oneshot(Request::new(Body::empty())).await else { - return Err(ResponseCode::InternalServerError.text("Error wile fetching file")); + tracing::error!("Error while fetching file"); + return Err(ResponseCode::InternalServerError.text("Error while fetching file")); }; if res.status() != StatusCode::OK { return Err(ResponseCode::NotFound.text("File not found")); diff --git a/src/types/session.rs b/src/types/session.rs index 9b949be..e05dc49 100644 --- a/src/types/session.rs +++ b/src/types/session.rs @@ -1,5 +1,6 @@ use rand::{distributions::Alphanumeric, Rng}; use serde::Serialize; +use tracing::instrument; use crate::database; use crate::types::response::{Result, ResponseCode}; @@ -12,6 +13,7 @@ pub struct Session { impl Session { + #[instrument()] pub fn from_token(token: &str) -> Result<Self> { let Ok(Some(session)) = database::sessions::get_session(token) else { return Err(ResponseCode::BadRequest.text("Invalid auth token")); @@ -20,6 +22,7 @@ impl Session { Ok(session) } + #[instrument()] pub fn new(user_id: u64) -> Result<Self> { let token: String = rand::thread_rng().sample_iter(&Alphanumeric).take(32).map(char::from).collect(); match database::sessions::set_session(user_id, &token) { @@ -28,8 +31,10 @@ impl Session { }; } + #[instrument()] pub fn delete(user_id: u64) -> Result<()> { if let Err(_) = database::sessions::delete_session(user_id) { + tracing::error!("Failed to logout user"); return Err(ResponseCode::InternalServerError.text("Failed to logout")); }; Ok(()) diff --git a/src/types/user.rs b/src/types/user.rs index 56ef467..031946a 100644 --- a/src/types/user.rs +++ b/src/types/user.rs @@ -1,4 +1,5 @@ use serde::{Serialize, Deserialize}; +use tracing::instrument; use crate::database; use crate::types::response::{Result, ResponseCode}; @@ -20,6 +21,7 @@ pub struct User { impl User { + #[instrument()] pub fn from_user_id(user_id: u64, hide_password: bool) -> Result<Self> { let Ok(Some(user)) = database::users::get_user_by_id(user_id, hide_password) else { return Err(ResponseCode::BadRequest.text("User does not exist")) @@ -28,6 +30,7 @@ impl User { Ok(user) } + #[instrument()] pub fn from_user_ids(user_ids: Vec<u64>) -> Vec<Self> { user_ids.iter().map(|user_id| { let Ok(Some(user)) = database::users::get_user_by_id(*user_id, true) else { @@ -37,6 +40,7 @@ impl User { }).flatten().collect() } + #[instrument()] pub fn from_user_page(page: u64) -> Result<Vec<Self>> { let Ok(users) = database::users::get_user_page(page, true) else { return Err(ResponseCode::BadRequest.text("Failed to fetch users")) @@ -44,6 +48,7 @@ impl User { Ok(users) } + #[instrument()] pub fn from_email(email: &str) -> Result<Self> { let Ok(Some(user)) = database::users::get_user_by_email(email, false) else { return Err(ResponseCode::BadRequest.text("User does not exist")) @@ -52,6 +57,7 @@ impl User { Ok(user) } + #[instrument()] pub fn from_password(password: &str) -> Result<Self> { let Ok(Some(user)) = database::users::get_user_by_password(password, true) else { return Err(ResponseCode::BadRequest.text("User does not exist")) @@ -60,6 +66,7 @@ impl User { Ok(user) } + #[instrument()] pub fn new(firstname: String, lastname: String, email: String, password: String, gender: String, day: u8, month: u8, year: u32) -> Result<Self> { if let Ok(_) = User::from_email(&email) { return Err(ResponseCode::BadRequest.text(&format!("Email is already in use by {}", &email))) @@ -70,6 +77,7 @@ impl User { } let Ok(user) = database::users::add_user(&firstname, &lastname, &email, &password, &gender, day, month, year) else { + tracing::error!("Failed to create new user"); return Err(ResponseCode::InternalServerError.text("Failed to create new uesr")) }; |