diff --git a/src/api/mod.rs b/src/api/mod.rs index 25391eb..b79c824 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -5,5 +5,7 @@ mod v1; mod versions; pub fn web() -> Scope { - web::scope("/api").service(v1::web()).service(versions::res) + web::scope("/api") + .service(v1::web()) + .service(versions::res) } diff --git a/src/api/v1/auth/login.rs b/src/api/v1/auth/login.rs index 38d5449..b0bee13 100644 --- a/src/api/v1/auth/login.rs +++ b/src/api/v1/auth/login.rs @@ -1,14 +1,12 @@ use std::time::{SystemTime, UNIX_EPOCH}; -use actix_web::{Error, HttpResponse, post, web}; +use actix_web::{post, web, Error, HttpResponse}; use argon2::{PasswordHash, PasswordVerifier}; use log::error; use serde::Deserialize; use crate::{ - Data, - api::v1::auth::{EMAIL_REGEX, PASSWORD_REGEX, USERNAME_REGEX}, - utils::{generate_access_token, generate_refresh_token, refresh_token_cookie}, + api::v1::auth::{EMAIL_REGEX, PASSWORD_REGEX, USERNAME_REGEX}, utils::{generate_access_token, generate_refresh_token, refresh_token_cookie}, Data }; use super::Response; @@ -168,7 +166,7 @@ async fn login( return HttpResponse::InternalServerError().finish() } - HttpResponse::Ok() - .cookie(refresh_token_cookie(refresh_token)) - .json(Response { access_token }) + HttpResponse::Ok().cookie(refresh_token_cookie(refresh_token)).json(Response { + access_token, + }) } diff --git a/src/api/v1/auth/mod.rs b/src/api/v1/auth/mod.rs index 326b2ef..25910de 100644 --- a/src/api/v1/auth/mod.rs +++ b/src/api/v1/auth/mod.rs @@ -42,12 +42,11 @@ pub async fn check_access_token( access_token: &str, pool: &sqlx::Pool, ) -> Result { - let row = sqlx::query_as( - "SELECT CAST(uuid as VARCHAR), created_at FROM access_tokens WHERE token = $1", - ) - .bind(access_token) - .fetch_one(pool) - .await; + let row = + sqlx::query_as("SELECT CAST(uuid as VARCHAR), created_at FROM access_tokens WHERE token = $1") + .bind(&access_token) + .fetch_one(pool) + .await; if let Err(error) = row { if error.to_string() diff --git a/src/api/v1/auth/refresh.rs b/src/api/v1/auth/refresh.rs index cf1c4bb..008420b 100644 --- a/src/api/v1/auth/refresh.rs +++ b/src/api/v1/auth/refresh.rs @@ -1,10 +1,9 @@ -use actix_web::{Error, HttpRequest, HttpResponse, post, web}; +use actix_web::{post, web, Error, HttpRequest, HttpResponse}; use log::error; use std::time::{SystemTime, UNIX_EPOCH}; use crate::{ - Data, - utils::{generate_access_token, generate_refresh_token, refresh_token_cookie}, + utils::{generate_access_token, generate_refresh_token, refresh_token_cookie}, Data }; use super::Response; @@ -13,8 +12,8 @@ use super::Response; pub async fn res(req: HttpRequest, data: web::Data) -> Result { let recv_refresh_token_cookie = req.cookie("refresh_token"); - if recv_refresh_token_cookie.is_none() { - return Ok(HttpResponse::Unauthorized().finish()); + if let None = recv_refresh_token_cookie { + return Ok(HttpResponse::Unauthorized().finish()) } let mut refresh_token = String::from(recv_refresh_token_cookie.unwrap().value()); @@ -24,10 +23,11 @@ pub async fn res(req: HttpRequest, data: web::Data) -> Result) -> Result) -> Result { refresh_token = new_refresh_token; @@ -93,29 +89,24 @@ pub async fn res(req: HttpRequest, data: web::Data) -> Result, - data: web::Data, -) -> Result { +pub async fn res(account_information: web::Json, data: web::Data) -> Result { let uuid = Uuid::now_v7(); if !EMAIL_REGEX.is_match(&account_information.email) { @@ -147,9 +142,9 @@ pub async fn res( return Ok(HttpResponse::InternalServerError().finish()) } - HttpResponse::Ok() - .cookie(refresh_token_cookie(refresh_token)) - .json(Response { access_token }) + HttpResponse::Ok().cookie(refresh_token_cookie(refresh_token)).json(Response { + access_token, + }) } Err(error) => { let err_msg = error.as_database_error().unwrap().message(); diff --git a/src/api/v1/auth/revoke.rs b/src/api/v1/auth/revoke.rs index a4f9196..97d05a5 100644 --- a/src/api/v1/auth/revoke.rs +++ b/src/api/v1/auth/revoke.rs @@ -1,6 +1,6 @@ use actix_web::{Error, HttpRequest, HttpResponse, post, web}; use argon2::{PasswordHash, PasswordVerifier}; -use futures::future; +use futures::{future}; use log::error; use serde::{Deserialize, Serialize}; @@ -105,7 +105,10 @@ pub async fn res( let results = future::join_all(refresh_tokens_delete).await; let errors: Vec<&Result> = - results.iter().filter(|r| r.is_err()).collect(); + results + .iter() + .filter(|r| r.is_err()) + .collect(); if !errors.is_empty() { error!("{:?}", errors); diff --git a/src/api/v1/invites/id.rs b/src/api/v1/invites/id.rs index 2adb8d8..7903b26 100644 --- a/src/api/v1/invites/id.rs +++ b/src/api/v1/invites/id.rs @@ -1,24 +1,15 @@ -use actix_web::{Error, HttpRequest, HttpResponse, get, post, web}; +use actix_web::{get, post, web, Error, HttpRequest, HttpResponse}; -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Guild, Invite, Member}, - utils::get_auth_header, -}; +use crate::{api::v1::auth::check_access_token, structs::{Guild, Invite, Member}, utils::get_auth_header, Data}; #[get("{id}")] -pub async fn get( - req: HttpRequest, - path: web::Path<(String,)>, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(String,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let invite_id = path.into_inner().0; @@ -26,7 +17,7 @@ pub async fn get( let result = Invite::fetch_one(&data.pool, invite_id).await; if let Err(error) = result { - return Ok(error); + return Ok(error) } let invite = result.unwrap(); @@ -43,17 +34,13 @@ pub async fn get( } #[post("{id}")] -pub async fn join( - req: HttpRequest, - path: web::Path<(String,)>, - data: web::Data, -) -> Result { +pub async fn join(req: HttpRequest, path: web::Path<(String,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let invite_id = path.into_inner().0; @@ -61,7 +48,7 @@ pub async fn join( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -69,7 +56,7 @@ pub async fn join( let result = Invite::fetch_one(&data.pool, invite_id).await; if let Err(error) = result { - return Ok(error); + return Ok(error) } let invite = result.unwrap(); @@ -83,7 +70,7 @@ pub async fn join( let guild = guild_result.unwrap(); let member = Member::new(&data.pool, uuid, guild.uuid).await; - + if let Err(error) = member { return Ok(error); } diff --git a/src/api/v1/invites/mod.rs b/src/api/v1/invites/mod.rs index 3714a83..89e7466 100644 --- a/src/api/v1/invites/mod.rs +++ b/src/api/v1/invites/mod.rs @@ -1,7 +1,9 @@ -use actix_web::{Scope, web}; +use actix_web::{web, Scope}; mod id; pub fn web() -> Scope { - web::scope("/invites").service(id::get).service(id::join) + web::scope("/invites") + .service(id::get) + .service(id::join) } diff --git a/src/api/v1/mod.rs b/src/api/v1/mod.rs index 749774d..60c0b56 100644 --- a/src/api/v1/mod.rs +++ b/src/api/v1/mod.rs @@ -1,10 +1,10 @@ use actix_web::{Scope, web}; mod auth; -mod invites; -mod servers; mod stats; mod users; +mod servers; +mod invites; pub fn web() -> Scope { web::scope("/v1") diff --git a/src/api/v1/servers/mod.rs b/src/api/v1/servers/mod.rs index 8e536be..31ede19 100644 --- a/src/api/v1/servers/mod.rs +++ b/src/api/v1/servers/mod.rs @@ -1,9 +1,9 @@ -use actix_web::{Error, HttpRequest, HttpResponse, Scope, post, web}; +use actix_web::{post, web, Error, HttpRequest, HttpResponse, Scope}; use serde::Deserialize; mod uuid; -use crate::{Data, api::v1::auth::check_access_token, structs::Guild, utils::get_auth_header}; +use crate::{api::v1::auth::check_access_token, structs::Guild, utils::get_auth_header, Data}; #[derive(Deserialize)] struct GuildInfo { @@ -12,42 +12,35 @@ struct GuildInfo { } pub fn web() -> Scope { - web::scope("/servers").service(res).service(uuid::web()) + web::scope("/servers") + .service(res) + .service(uuid::web()) } #[post("")] -pub async fn res( - req: HttpRequest, - guild_info: web::Json, - data: web::Data, -) -> Result { +pub async fn res(req: HttpRequest, guild_info: web::Json, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); - let guild = Guild::new( - &data.pool, - guild_info.name.clone(), - guild_info.description.clone(), - uuid, - ) - .await; + let guild = Guild::new(&data.pool, guild_info.name.clone(), guild_info.description.clone(), uuid).await; if let Err(error) = guild { - return Ok(error); + return Ok(error) } Ok(HttpResponse::Ok().json(guild.unwrap())) } + diff --git a/src/api/v1/servers/uuid/channels/mod.rs b/src/api/v1/servers/uuid/channels/mod.rs index 3e6a342..a5e49ca 100644 --- a/src/api/v1/servers/uuid/channels/mod.rs +++ b/src/api/v1/servers/uuid/channels/mod.rs @@ -1,34 +1,25 @@ -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Channel, Member}, - utils::get_auth_header, -}; -use ::uuid::Uuid; -use actix_web::{Error, HttpRequest, HttpResponse, get, post, web}; -use log::error; +use actix_web::{get, post, web, Error, HttpRequest, HttpResponse}; use serde::Deserialize; +use crate::{api::v1::auth::check_access_token, structs::{Channel, Member}, utils::get_auth_header, Data}; +use ::uuid::Uuid; +use log::error; pub mod uuid; #[derive(Deserialize)] struct ChannelInfo { name: String, - description: Option, + description: Option } #[get("{uuid}/channels")] -pub async fn get( - req: HttpRequest, - path: web::Path<(Uuid,)>, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(Uuid,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -36,7 +27,7 @@ pub async fn get( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -50,22 +41,18 @@ pub async fn get( let cache_result = data.get_cache_key(format!("{}_channels", guild_uuid)).await; if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok() - .content_type("application/json") - .body(cache_hit)); + return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) } let channels_result = Channel::fetch_all(&data.pool, guild_uuid).await; if let Err(error) = channels_result { - return Ok(error); + return Ok(error) } let channels = channels_result.unwrap(); - let cache_result = data - .set_cache_key(format!("{}_channels", guild_uuid), channels.clone(), 1800) - .await; + let cache_result = data.set_cache_key(format!("{}_channels", guild_uuid), channels.clone(), 1800).await; if let Err(error) = cache_result { error!("{}", error); @@ -76,18 +63,13 @@ pub async fn get( } #[post("{uuid}/channels")] -pub async fn create( - req: HttpRequest, - channel_info: web::Json, - path: web::Path<(Uuid,)>, - data: web::Data, -) -> Result { +pub async fn create(req: HttpRequest, channel_info: web::Json, path: web::Path<(Uuid,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -95,7 +77,7 @@ pub async fn create( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -108,13 +90,7 @@ pub async fn create( // FIXME: Logic to check permissions, should probably be done in utils.rs - let channel = Channel::new( - data.clone(), - guild_uuid, - channel_info.name.clone(), - channel_info.description.clone(), - ) - .await; + let channel = Channel::new(data.clone(), guild_uuid, channel_info.name.clone(), channel_info.description.clone()).await; if let Err(error) = channel { return Ok(error); diff --git a/src/api/v1/servers/uuid/channels/uuid/messages.rs b/src/api/v1/servers/uuid/channels/uuid/messages.rs index ff36a4f..928afbe 100644 --- a/src/api/v1/servers/uuid/channels/uuid/messages.rs +++ b/src/api/v1/servers/uuid/channels/uuid/messages.rs @@ -1,13 +1,8 @@ -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Channel, Member}, - utils::get_auth_header, -}; -use ::uuid::Uuid; -use actix_web::{Error, HttpRequest, HttpResponse, get, web}; -use log::error; +use actix_web::{get, web, Error, HttpRequest, HttpResponse}; use serde::Deserialize; +use crate::{api::v1::auth::check_access_token, structs::{Channel, Member}, utils::get_auth_header, Data}; +use ::uuid::Uuid; +use log::error; #[derive(Deserialize)] struct MessageRequest { @@ -16,18 +11,13 @@ struct MessageRequest { } #[get("{uuid}/channels/{channel_uuid}/messages")] -pub async fn get( - req: HttpRequest, - path: web::Path<(Uuid, Uuid)>, - message_request: web::Query, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, message_request: web::Query, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let (guild_uuid, channel_uuid) = path.into_inner(); @@ -35,7 +25,7 @@ pub async fn get( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -56,27 +46,23 @@ pub async fn get( let channel_result = Channel::fetch_one(&data.pool, guild_uuid, channel_uuid).await; if let Err(error) = channel_result { - return Ok(error); + return Ok(error) } - + channel = channel_result.unwrap(); - - let cache_result = data - .set_cache_key(format!("{}", channel_uuid), channel.clone(), 60) - .await; - + + let cache_result = data.set_cache_key(format!("{}", channel_uuid), channel.clone(), 60).await; + if let Err(error) = cache_result { error!("{}", error); return Ok(HttpResponse::InternalServerError().finish()); } } - let messages = channel - .fetch_messages(&data.pool, message_request.amount, message_request.offset) - .await; + let messages = channel.fetch_messages(&data.pool, message_request.amount, message_request.offset).await; if let Err(error) = messages { - return Ok(error); + return Ok(error) } Ok(HttpResponse::Ok().json(messages.unwrap())) diff --git a/src/api/v1/servers/uuid/channels/uuid/mod.rs b/src/api/v1/servers/uuid/channels/uuid/mod.rs index c737509..81b4dfc 100644 --- a/src/api/v1/servers/uuid/channels/uuid/mod.rs +++ b/src/api/v1/servers/uuid/channels/uuid/mod.rs @@ -1,28 +1,19 @@ pub mod messages; pub mod socket; -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Channel, Member}, - utils::get_auth_header, -}; +use actix_web::{delete, get, web, Error, HttpRequest, HttpResponse}; +use crate::{api::v1::auth::check_access_token, structs::{Channel, Member}, utils::get_auth_header, Data}; use ::uuid::Uuid; -use actix_web::{Error, HttpRequest, HttpResponse, delete, get, web}; use log::error; #[get("{uuid}/channels/{channel_uuid}")] -pub async fn get( - req: HttpRequest, - path: web::Path<(Uuid, Uuid)>, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let (guild_uuid, channel_uuid) = path.into_inner(); @@ -30,7 +21,7 @@ pub async fn get( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -44,22 +35,18 @@ pub async fn get( let cache_result = data.get_cache_key(format!("{}", channel_uuid)).await; if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok() - .content_type("application/json") - .body(cache_hit)); + return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) } let channel_result = Channel::fetch_one(&data.pool, guild_uuid, channel_uuid).await; if let Err(error) = channel_result { - return Ok(error); + return Ok(error) } let channel = channel_result.unwrap(); - let cache_result = data - .set_cache_key(format!("{}", channel_uuid), channel.clone(), 60) - .await; + let cache_result = data.set_cache_key(format!("{}", channel_uuid), channel.clone(), 60).await; if let Err(error) = cache_result { error!("{}", error); @@ -70,17 +57,13 @@ pub async fn get( } #[delete("{uuid}/channels/{channel_uuid}")] -pub async fn delete( - req: HttpRequest, - path: web::Path<(Uuid, Uuid)>, - data: web::Data, -) -> Result { +pub async fn delete(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let (guild_uuid, channel_uuid) = path.into_inner(); @@ -88,7 +71,7 @@ pub async fn delete( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -115,7 +98,7 @@ pub async fn delete( let channel_result = Channel::fetch_one(&data.pool, guild_uuid, channel_uuid).await; if let Err(error) = channel_result { - return Ok(error); + return Ok(error) } channel = channel_result.unwrap(); @@ -124,8 +107,9 @@ pub async fn delete( let delete_result = channel.delete(&data.pool).await; if let Err(error) = delete_result { - return Ok(error); + return Ok(error) } Ok(HttpResponse::Ok().finish()) } + diff --git a/src/api/v1/servers/uuid/channels/uuid/socket.rs b/src/api/v1/servers/uuid/channels/uuid/socket.rs index b9b4ff7..5b9fa73 100644 --- a/src/api/v1/servers/uuid/channels/uuid/socket.rs +++ b/src/api/v1/servers/uuid/channels/uuid/socket.rs @@ -1,23 +1,13 @@ -use actix_web::{Error, HttpRequest, HttpResponse, get, rt, web}; +use actix_web::{get, rt, web, Error, HttpRequest, HttpResponse}; use actix_ws::AggregatedMessage; use futures_util::StreamExt as _; -use log::error; use uuid::Uuid; +use log::error; -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Channel, Member}, - utils::get_auth_header, -}; +use crate::{api::v1::auth::check_access_token, structs::{Channel, Member}, utils::get_auth_header, Data}; #[get("{uuid}/channels/{channel_uuid}/socket")] -pub async fn echo( - req: HttpRequest, - path: web::Path<(Uuid, Uuid)>, - stream: web::Payload, - data: web::Data, -) -> Result { +pub async fn echo(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, stream: web::Payload, data: web::Data) -> Result { // Get all headers let headers = req.headers(); @@ -25,7 +15,7 @@ pub async fn echo( let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } // Get uuids from path @@ -35,7 +25,7 @@ pub async fn echo( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } // Unwrap user uuid from authorization @@ -60,15 +50,13 @@ pub async fn echo( let channel_result = Channel::fetch_one(&data.pool, guild_uuid, channel_uuid).await; if let Err(error) = channel_result { - return Ok(error); + return Ok(error) } - + channel = channel_result.unwrap(); - - let cache_result = data - .set_cache_key(format!("{}", channel_uuid), channel.clone(), 60) - .await; - + + let cache_result = data.set_cache_key(format!("{}", channel_uuid), channel.clone(), 60).await; + if let Err(error) = cache_result { error!("{}", error); return Ok(HttpResponse::InternalServerError().finish()); @@ -86,7 +74,7 @@ pub async fn echo( if let Err(error) = pubsub_result { error!("{}", error); - return Ok(HttpResponse::InternalServerError().finish()); + return Ok(HttpResponse::InternalServerError().finish()) } let mut session_2 = session_1.clone(); @@ -102,25 +90,14 @@ pub async fn echo( // start task but don't wait for it rt::spawn(async move { - let mut conn = data - .cache_pool - .get_multiplexed_tokio_connection() - .await - .unwrap(); + let mut conn = data.cache_pool.get_multiplexed_tokio_connection().await.unwrap(); // receive messages from websocket while let Some(msg) = stream.next().await { match msg { Ok(AggregatedMessage::Text(text)) => { // echo text message - redis::cmd("PUBLISH") - .arg(&[channel_uuid.to_string(), text.to_string()]) - .exec_async(&mut conn) - .await - .unwrap(); - channel - .new_message(&data.pool, uuid, text.to_string()) - .await - .unwrap(); + redis::cmd("PUBLISH").arg(&[channel_uuid.to_string(), text.to_string()]).exec_async(&mut conn).await.unwrap(); + channel.new_message(&data.pool, uuid, text.to_string()).await.unwrap(); } Ok(AggregatedMessage::Binary(bin)) => { diff --git a/src/api/v1/servers/uuid/invites/mod.rs b/src/api/v1/servers/uuid/invites/mod.rs index 2a07808..94b81b0 100644 --- a/src/api/v1/servers/uuid/invites/mod.rs +++ b/src/api/v1/servers/uuid/invites/mod.rs @@ -1,13 +1,8 @@ -use actix_web::{Error, HttpRequest, HttpResponse, get, post, web}; +use actix_web::{get, post, web, Error, HttpRequest, HttpResponse}; use serde::Deserialize; use uuid::Uuid; -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Guild, Member}, - utils::get_auth_header, -}; +use crate::{api::v1::auth::check_access_token, structs::{Guild, Member}, utils::get_auth_header, Data}; #[derive(Deserialize)] struct InviteRequest { @@ -15,17 +10,13 @@ struct InviteRequest { } #[get("{uuid}/invites")] -pub async fn get( - req: HttpRequest, - path: web::Path<(Uuid,)>, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(Uuid,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -33,7 +24,7 @@ pub async fn get( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -56,24 +47,19 @@ pub async fn get( if let Err(error) = invites { return Ok(error); - } + } Ok(HttpResponse::Ok().json(invites.unwrap())) } #[post("{uuid}/invites")] -pub async fn create( - req: HttpRequest, - path: web::Path<(Uuid,)>, - invite_request: web::Json>, - data: web::Data, -) -> Result { +pub async fn create(req: HttpRequest, path: web::Path<(Uuid,)>, invite_request: web::Json>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -81,7 +67,7 @@ pub async fn create( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -102,7 +88,7 @@ pub async fn create( let guild = guild_result.unwrap(); - let custom_id = invite_request.as_ref().map(|ir| ir.custom_id.clone()); + let custom_id = invite_request.as_ref().and_then(|ir| Some(ir.custom_id.clone())); let invite = guild.create_invite(&data.pool, &member, custom_id).await; diff --git a/src/api/v1/servers/uuid/mod.rs b/src/api/v1/servers/uuid/mod.rs index 8f387aa..06efcba 100644 --- a/src/api/v1/servers/uuid/mod.rs +++ b/src/api/v1/servers/uuid/mod.rs @@ -1,16 +1,11 @@ -use actix_web::{Error, HttpRequest, HttpResponse, Scope, get, web}; +use actix_web::{get, web, Error, HttpRequest, HttpResponse, Scope}; use uuid::Uuid; mod channels; -mod invites; mod roles; +mod invites; -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Guild, Member}, - utils::get_auth_header, -}; +use crate::{api::v1::auth::check_access_token, structs::{Guild, Member}, utils::get_auth_header, Data}; pub fn web() -> Scope { web::scope("") @@ -33,17 +28,13 @@ pub fn web() -> Scope { } #[get("/{uuid}")] -pub async fn res( - req: HttpRequest, - path: web::Path<(Uuid,)>, - data: web::Data, -) -> Result { +pub async fn res(req: HttpRequest, path: web::Path<(Uuid,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -51,7 +42,7 @@ pub async fn res( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -70,3 +61,4 @@ pub async fn res( Ok(HttpResponse::Ok().json(guild.unwrap())) } + diff --git a/src/api/v1/servers/uuid/roles/mod.rs b/src/api/v1/servers/uuid/roles/mod.rs index 8d22813..da73b38 100644 --- a/src/api/v1/servers/uuid/roles/mod.rs +++ b/src/api/v1/servers/uuid/roles/mod.rs @@ -1,13 +1,8 @@ -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Member, Role}, - utils::get_auth_header, -}; -use ::uuid::Uuid; -use actix_web::{Error, HttpRequest, HttpResponse, get, post, web}; -use log::error; +use actix_web::{get, post, web, Error, HttpRequest, HttpResponse}; use serde::Deserialize; +use crate::{api::v1::auth::check_access_token, structs::{Member, Role}, utils::get_auth_header, Data}; +use ::uuid::Uuid; +use log::error; pub mod uuid; @@ -17,17 +12,13 @@ struct RoleInfo { } #[get("{uuid}/roles")] -pub async fn get( - req: HttpRequest, - path: web::Path<(Uuid,)>, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(Uuid,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -35,7 +26,7 @@ pub async fn get( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -49,22 +40,18 @@ pub async fn get( let cache_result = data.get_cache_key(format!("{}_roles", guild_uuid)).await; if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok() - .content_type("application/json") - .body(cache_hit)); + return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) } let roles_result = Role::fetch_all(&data.pool, guild_uuid).await; if let Err(error) = roles_result { - return Ok(error); + return Ok(error) } let roles = roles_result.unwrap(); - let cache_result = data - .set_cache_key(format!("{}_roles", guild_uuid), roles.clone(), 1800) - .await; + let cache_result = data.set_cache_key(format!("{}_roles", guild_uuid), roles.clone(), 1800).await; if let Err(error) = cache_result { error!("{}", error); @@ -75,18 +62,13 @@ pub async fn get( } #[post("{uuid}/roles")] -pub async fn create( - req: HttpRequest, - role_info: web::Json, - path: web::Path<(Uuid,)>, - data: web::Data, -) -> Result { +pub async fn create(req: HttpRequest, role_info: web::Json, path: web::Path<(Uuid,)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let guild_uuid = path.into_inner().0; @@ -94,7 +76,7 @@ pub async fn create( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); diff --git a/src/api/v1/servers/uuid/roles/uuid.rs b/src/api/v1/servers/uuid/roles/uuid.rs index 38bdca9..7edcbf0 100644 --- a/src/api/v1/servers/uuid/roles/uuid.rs +++ b/src/api/v1/servers/uuid/roles/uuid.rs @@ -1,25 +1,16 @@ -use crate::{ - Data, - api::v1::auth::check_access_token, - structs::{Member, Role}, - utils::get_auth_header, -}; +use actix_web::{get, web, Error, HttpRequest, HttpResponse}; +use crate::{api::v1::auth::check_access_token, structs::{Member, Role}, utils::get_auth_header, Data}; use ::uuid::Uuid; -use actix_web::{Error, HttpRequest, HttpResponse, get, web}; use log::error; #[get("{uuid}/roles/{role_uuid}")] -pub async fn get( - req: HttpRequest, - path: web::Path<(Uuid, Uuid)>, - data: web::Data, -) -> Result { +pub async fn get(req: HttpRequest, path: web::Path<(Uuid, Uuid)>, data: web::Data) -> Result { let headers = req.headers(); let auth_header = get_auth_header(headers); if let Err(error) = auth_header { - return Ok(error); + return Ok(error) } let (guild_uuid, role_uuid) = path.into_inner(); @@ -27,7 +18,7 @@ pub async fn get( let authorized = check_access_token(auth_header.unwrap(), &data.pool).await; if let Err(error) = authorized { - return Ok(error); + return Ok(error) } let uuid = authorized.unwrap(); @@ -41,22 +32,18 @@ pub async fn get( let cache_result = data.get_cache_key(format!("{}", role_uuid)).await; if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok() - .content_type("application/json") - .body(cache_hit)); + return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) } let role_result = Role::fetch_one(&data.pool, guild_uuid, role_uuid).await; if let Err(error) = role_result { - return Ok(error); + return Ok(error) } let role = role_result.unwrap(); - let cache_result = data - .set_cache_key(format!("{}", role_uuid), role.clone(), 60) - .await; + let cache_result = data.set_cache_key(format!("{}", role_uuid), role.clone(), 60).await; if let Err(error) = cache_result { error!("{}", error); diff --git a/src/api/v1/users/mod.rs b/src/api/v1/users/mod.rs index 079cb77..d7cb1c6 100644 --- a/src/api/v1/users/mod.rs +++ b/src/api/v1/users/mod.rs @@ -1,5 +1,5 @@ use crate::{Data, api::v1::auth::check_access_token, utils::get_auth_header}; -use actix_web::{Error, HttpRequest, HttpResponse, Scope, get, web}; +use actix_web::{get, web, Error, HttpRequest, HttpResponse, Scope}; use log::error; use serde::{Deserialize, Serialize}; use sqlx::prelude::FromRow; diff --git a/src/api/v1/users/uuid.rs b/src/api/v1/users/uuid.rs index 9edaffa..5e4db39 100644 --- a/src/api/v1/users/uuid.rs +++ b/src/api/v1/users/uuid.rs @@ -37,9 +37,7 @@ pub async fn res( let cache_result = data.get_cache_key(uuid.to_string()).await; if let Ok(cache_hit) = cache_result { - return Ok(HttpResponse::Ok() - .content_type("application/json") - .body(cache_hit)); + return Ok(HttpResponse::Ok().content_type("application/json").body(cache_hit)) } let row = sqlx::query_as(&format!( @@ -62,9 +60,7 @@ pub async fn res( display_name: display_name.unwrap_or_default(), }; - let cache_result = data - .set_cache_key(uuid.to_string(), user.clone(), 1800) - .await; + let cache_result = data.set_cache_key(uuid.to_string(), user.clone(), 1800).await; if let Err(error) = cache_result { error!("{}", error); diff --git a/src/main.rs b/src/main.rs index fbad594..0ba2f69 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use actix_cors::Cors; -use actix_web::{App, HttpServer, web}; +use actix_web::{web, App, HttpServer}; use argon2::Argon2; use clap::Parser; use simple_logger::SimpleLogger; @@ -9,8 +9,8 @@ mod config; use config::{Config, ConfigBuilder}; mod api; -pub mod structs; pub mod utils; +pub mod structs; type Error = Box; @@ -169,7 +169,7 @@ async fn main() -> Result<(), Error> { argon2: Argon2::default(), start_time: SystemTime::now(), }; - + HttpServer::new(move || { // Set CORS headers let cors = Cors::default() @@ -179,7 +179,9 @@ async fn main() -> Result<(), Error> { rather than setting it to "*" due to CORS not allowing sending of credentials (cookies) with wildcard origin. */ - .allowed_origin_fn(|_origin, _req_head| true) + .allowed_origin_fn(|_origin, _req_head| { + true + }) /* Allows any request method in CORS preflight requests. This will be restricted to only ones actually in use later. diff --git a/src/structs.rs b/src/structs.rs index 0ef738f..44862c0 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -1,10 +1,10 @@ use std::str::FromStr; +use serde::{Deserialize, Serialize}; +use sqlx::{prelude::FromRow, Pool, Postgres}; +use uuid::Uuid; use actix_web::HttpResponse; use log::error; -use serde::{Deserialize, Serialize}; -use sqlx::{Pool, Postgres, prelude::FromRow}; -use uuid::Uuid; use crate::Data; @@ -14,13 +14,13 @@ pub struct Channel { pub guild_uuid: Uuid, name: String, description: Option, - pub permissions: Vec, + pub permissions: Vec } #[derive(Serialize, Clone, FromRow)] struct ChannelPermissionBuilder { role_uuid: String, - permissions: i32, + permissions: i32 } impl ChannelPermissionBuilder { @@ -35,25 +35,19 @@ impl ChannelPermissionBuilder { #[derive(Serialize, Deserialize, Clone, FromRow)] pub struct ChannelPermission { pub role_uuid: Uuid, - pub permissions: i32, + pub permissions: i32 } impl Channel { - pub async fn fetch_all( - pool: &Pool, - guild_uuid: Uuid, - ) -> Result, HttpResponse> { - let row = sqlx::query_as(&format!( - "SELECT CAST(uuid AS VARCHAR), name, description FROM channels WHERE guild_uuid = '{}'", - guild_uuid - )) - .fetch_all(pool) - .await; + pub async fn fetch_all(pool: &Pool, guild_uuid: Uuid) -> Result, HttpResponse> { + let row = sqlx::query_as(&format!("SELECT CAST(uuid AS VARCHAR), name, description FROM channels WHERE guild_uuid = '{}'", guild_uuid)) + .fetch_all(pool) + .await; if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let channels: Vec<(String, String, Option)> = row.unwrap(); @@ -86,25 +80,18 @@ impl Channel { let channels: Result, HttpResponse> = channels.into_iter().collect(); - channels + Ok(channels?) } - pub async fn fetch_one( - pool: &Pool, - guild_uuid: Uuid, - channel_uuid: Uuid, - ) -> Result { - let row = sqlx::query_as(&format!( - "SELECT name, description FROM channels WHERE guild_uuid = '{}' AND uuid = '{}'", - guild_uuid, channel_uuid - )) - .fetch_one(pool) - .await; + pub async fn fetch_one(pool: &Pool, guild_uuid: Uuid, channel_uuid: Uuid) -> Result { + let row = sqlx::query_as(&format!("SELECT name, description FROM channels WHERE guild_uuid = '{}' AND uuid = '{}'", guild_uuid, channel_uuid)) + .fetch_one(pool) + .await; if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let (name, description): (String, Option) = row.unwrap(); @@ -116,7 +103,7 @@ impl Channel { if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let channel_permission_builders: Vec = row.unwrap(); @@ -126,19 +113,11 @@ impl Channel { guild_uuid, name, description, - permissions: channel_permission_builders - .iter() - .map(|b| b.build()) - .collect(), + permissions: channel_permission_builders.iter().map(|b| b.build()).collect(), }) } - pub async fn new( - data: actix_web::web::Data, - guild_uuid: Uuid, - name: String, - description: Option, - ) -> Result { + pub async fn new(data: actix_web::web::Data, guild_uuid: Uuid, name: String, description: Option) -> Result { let channel_uuid = Uuid::now_v7(); let row = sqlx::query(&format!("INSERT INTO channels (uuid, guild_uuid, name, description) VALUES ('{}', '{}', $1, $2)", channel_uuid, guild_uuid)) @@ -146,10 +125,10 @@ impl Channel { .bind(&description) .execute(&data.pool) .await; - + if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let channel = Self { @@ -160,9 +139,7 @@ impl Channel { permissions: vec![], }; - let cache_result = data - .set_cache_key(channel_uuid.to_string(), channel.clone(), 1800) - .await; + let cache_result = data.set_cache_key(channel_uuid.to_string(), channel.clone(), 1800).await; if let Err(error) = cache_result { error!("{}", error); @@ -180,28 +157,20 @@ impl Channel { } pub async fn delete(self, pool: &Pool) -> Result<(), HttpResponse> { - let result = sqlx::query(&format!( - "DELETE FROM channels WHERE channel_uuid = '{}'", - self.uuid - )) - .execute(pool) - .await; + let result = sqlx::query(&format!("DELETE FROM channels WHERE channel_uuid = '{}'", self.uuid)) + .execute(pool) + .await; if let Err(error) = result { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } Ok(()) } - pub async fn fetch_messages( - &self, - pool: &Pool, - amount: i64, - offset: i64, - ) -> Result, HttpResponse> { + pub async fn fetch_messages(&self, pool: &Pool, amount: i64, offset: i64) -> Result, HttpResponse> { let row = sqlx::query_as(&format!("SELECT CAST(uuid AS VARCHAR), CAST(user_uuid AS VARCHAR), CAST(channel_uuid AS VARCHAR), message FROM messages WHERE channel_uuid = '{}' ORDER BY uuid DESC LIMIT $1 OFFSET $2", self.uuid)) .bind(amount) .bind(offset) @@ -218,19 +187,14 @@ impl Channel { Ok(message_builders.iter().map(|b| b.build()).collect()) } - pub async fn new_message( - &self, - pool: &Pool, - user_uuid: Uuid, - message: String, - ) -> Result { + pub async fn new_message(&self, pool: &Pool, user_uuid: Uuid, message: String) -> Result { let message_uuid = Uuid::now_v7(); let row = sqlx::query(&format!("INSERT INTO messages (uuid, channel_uuid, user_uuid, message) VALUES ('{}', '{}', '{}', $1)", message_uuid, self.uuid, user_uuid)) .bind(&message) .execute(pool) .await; - + if let Err(error) = row { error!("{}", error); return Err(HttpResponse::InternalServerError().finish()); @@ -276,8 +240,7 @@ impl Permissions { Self::ManageMember, ]; - all_perms - .into_iter() + all_perms.into_iter() .filter(|p| permissions & (*p as i64) != 0) .collect() } @@ -296,17 +259,14 @@ pub struct Guild { impl Guild { pub async fn fetch_one(pool: &Pool, guild_uuid: Uuid) -> Result { - let row = sqlx::query_as(&format!( - "SELECT CAST(owner_uuid AS VARCHAR), name, description FROM guilds WHERE uuid = '{}'", - guild_uuid - )) - .fetch_one(pool) - .await; + let row = sqlx::query_as(&format!("SELECT CAST(owner_uuid AS VARCHAR), name, description FROM guilds WHERE uuid = '{}'", guild_uuid)) + .fetch_one(pool) + .await; if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let (owner_uuid_raw, name, description): (String, String, Option) = row.unwrap(); @@ -329,37 +289,24 @@ impl Guild { }) } - pub async fn new( - pool: &Pool, - name: String, - description: Option, - owner_uuid: Uuid, - ) -> Result { + pub async fn new(pool: &Pool, name: String, description: Option, owner_uuid: Uuid) -> Result { let guild_uuid = Uuid::now_v7(); - let row = sqlx::query(&format!( - "INSERT INTO guilds (uuid, owner_uuid, name, description) VALUES ('{}', '{}', $1, $2)", - guild_uuid, owner_uuid - )) - .bind(&name) - .bind(&description) - .execute(pool) - .await; - + let row = sqlx::query(&format!("INSERT INTO guilds (uuid, owner_uuid, name, description) VALUES ('{}', '{}', $1, $2)", guild_uuid, owner_uuid)) + .bind(&name) + .bind(&description) + .execute(pool) + .await; + if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } - - let row = sqlx::query(&format!( - "INSERT INTO guild_members (uuid, guild_uuid, user_uuid) VALUES ('{}', '{}', '{}')", - Uuid::now_v7(), - guild_uuid, - owner_uuid - )) - .execute(pool) - .await; - + + let row = sqlx::query(&format!("INSERT INTO guild_members (uuid, guild_uuid, user_uuid) VALUES ('{}', '{}', '{}')", Uuid::now_v7(), guild_uuid, owner_uuid)) + .execute(pool) + .await; + if let Err(error) = row { error!("{}", error); @@ -371,7 +318,7 @@ impl Guild { error!("{}", error); } - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } Ok(Guild { @@ -381,38 +328,26 @@ impl Guild { icon: "bogus".to_string(), owner_uuid, roles: vec![], - member_count: 1, + member_count: 1 }) } pub async fn get_invites(&self, pool: &Pool) -> Result, HttpResponse> { - let invites = sqlx::query_as(&format!( - "SELECT (id, guild_uuid, user_uuid) FROM invites WHERE guild_uuid = '{}'", - self.uuid - )) - .fetch_all(pool) - .await; + let invites = sqlx::query_as(&format!("SELECT (id, guild_uuid, user_uuid) FROM invites WHERE guild_uuid = '{}'", self.uuid)) + .fetch_all(pool) + .await; if let Err(error) = invites { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } - Ok(invites - .unwrap() - .iter() - .map(|b: &InviteBuilder| b.build()) - .collect()) + Ok(invites.unwrap().iter().map(|b: &InviteBuilder| b.build()).collect()) } - pub async fn create_invite( - &self, - pool: &Pool, - member: &Member, - custom_id: Option, - ) -> Result { + pub async fn create_invite(&self, pool: &Pool, member: &Member, custom_id: Option) -> Result { let invite_id; - + if custom_id.is_none() { let charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; @@ -420,21 +355,18 @@ impl Guild { } else { invite_id = custom_id.unwrap(); if invite_id.len() > 32 { - return Err(HttpResponse::BadRequest().finish()); + return Err(HttpResponse::BadRequest().finish()) } } - let result = sqlx::query(&format!( - "INSERT INTO invites (id, guild_uuid, user_uuid) VALUES ($1, '{}', '{}'", - self.uuid, member.user_uuid - )) - .bind(&invite_id) - .execute(pool) - .await; + let result = sqlx::query(&format!("INSERT INTO invites (id, guild_uuid, user_uuid) VALUES ($1, '{}', '{}'", self.uuid, member.user_uuid)) + .bind(&invite_id) + .execute(pool) + .await; if let Err(error) = result { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } Ok(Invite { @@ -452,7 +384,7 @@ struct RoleBuilder { name: String, color: i64, position: i32, - permissions: i64, + permissions: i64, } impl RoleBuilder { @@ -479,10 +411,7 @@ pub struct Role { } impl Role { - pub async fn fetch_all( - pool: &Pool, - guild_uuid: Uuid, - ) -> Result, HttpResponse> { + pub async fn fetch_all(pool: &Pool, guild_uuid: Uuid) -> Result, HttpResponse> { let role_builders_result = sqlx::query_as(&format!("SELECT (uuid, guild_uuid, name, color, position, permissions) FROM roles WHERE guild_uuid = '{}'", guild_uuid)) .fetch_all(pool) .await; @@ -490,7 +419,7 @@ impl Role { if let Err(error) = role_builders_result { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let role_builders: Vec = role_builders_result.unwrap(); @@ -498,11 +427,7 @@ impl Role { Ok(role_builders.iter().map(|b| b.build()).collect()) } - pub async fn fetch_one( - pool: &Pool, - role_uuid: Uuid, - guild_uuid: Uuid, - ) -> Result { + pub async fn fetch_one(pool: &Pool, role_uuid: Uuid, guild_uuid: Uuid) -> Result { let row = sqlx::query_as(&format!("SELECT (name, color, position, permissions) FROM roles WHERE guild_uuid = '{}' AND uuid = '{}'", guild_uuid, role_uuid)) .fetch_one(pool) .await; @@ -510,7 +435,7 @@ impl Role { if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let (name, color, position, permissions) = row.unwrap(); @@ -525,25 +450,18 @@ impl Role { }) } - pub async fn new( - pool: &Pool, - guild_uuid: Uuid, - name: String, - ) -> Result { + pub async fn new(pool: &Pool, guild_uuid: Uuid, name: String) -> Result { let role_uuid = Uuid::now_v7(); - let row = sqlx::query(&format!( - "INSERT INTO channels (uuid, guild_uuid, name, position) VALUES ('{}', '{}', $1, $2)", - role_uuid, guild_uuid - )) - .bind(&name) - .bind(0) - .execute(pool) - .await; - + let row = sqlx::query(&format!("INSERT INTO channels (uuid, guild_uuid, name, position) VALUES ('{}', '{}', $1, $2)", role_uuid, guild_uuid)) + .bind(&name) + .bind(0) + .execute(pool) + .await; + if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let role = Self { @@ -568,27 +486,20 @@ pub struct Member { impl Member { async fn count(pool: &Pool, guild_uuid: Uuid) -> Result { - let member_count = sqlx::query_scalar(&format!( - "SELECT COUNT(uuid) FROM guild_members WHERE guild_uuid = '{}'", - guild_uuid - )) - .fetch_one(pool) - .await; + let member_count = sqlx::query_scalar(&format!("SELECT COUNT(uuid) FROM guild_members WHERE guild_uuid = '{}'", guild_uuid)) + .fetch_one(pool) + .await; if let Err(error) = member_count { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } Ok(member_count.unwrap()) } - pub async fn fetch_one( - pool: &Pool, - user_uuid: Uuid, - guild_uuid: Uuid, - ) -> Result { + pub async fn fetch_one(pool: &Pool, user_uuid: Uuid, guild_uuid: Uuid) -> Result { let row = sqlx::query_as(&format!("SELECT CAST(uuid AS VARCHAR), nickname FROM guild_members WHERE guild_uuid = '{}' AND user_uuid = '{}'", guild_uuid, user_uuid)) .fetch_one(pool) .await; @@ -596,7 +507,7 @@ impl Member { if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } let (uuid, nickname): (String, Option) = row.unwrap(); @@ -609,24 +520,17 @@ impl Member { }) } - pub async fn new( - pool: &Pool, - user_uuid: Uuid, - guild_uuid: Uuid, - ) -> Result { + pub async fn new(pool: &Pool, user_uuid: Uuid, guild_uuid: Uuid) -> Result { let member_uuid = Uuid::now_v7(); - let row = sqlx::query(&format!( - "INSERT INTO guild_members uuid, guild_uuid, user_uuid VALUES ('{}', '{}', '{}')", - member_uuid, guild_uuid, user_uuid - )) - .execute(pool) - .await; + let row = sqlx::query(&format!("INSERT INTO guild_members uuid, guild_uuid, user_uuid VALUES ('{}', '{}', '{}')", member_uuid, guild_uuid, user_uuid)) + .execute(pool) + .await; if let Err(error) = row { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } Ok(Self { @@ -695,16 +599,15 @@ pub struct Invite { impl Invite { pub async fn fetch_one(pool: &Pool, invite_id: String) -> Result { - let invite: Result = - sqlx::query_as("SELECT id, user_uuid, guild_uuid FROM invites WHERE id = $1") - .bind(invite_id) - .fetch_one(pool) - .await; + let invite: Result = sqlx::query_as("SELECT id, user_uuid, guild_uuid FROM invites WHERE id = $1") + .bind(invite_id) + .fetch_one(pool) + .await; if let Err(error) = invite { error!("{}", error); - return Err(HttpResponse::InternalServerError().finish()); + return Err(HttpResponse::InternalServerError().finish()) } Ok(invite.unwrap().build()) diff --git a/src/utils.rs b/src/utils.rs index 77c5e0a..424b10f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,8 +1,4 @@ -use actix_web::{ - HttpResponse, - cookie::{Cookie, SameSite, time::Duration}, - http::header::HeaderMap, -}; +use actix_web::{cookie::{time::Duration, Cookie, SameSite}, http::header::HeaderMap, HttpResponse}; use getrandom::fill; use hex::encode; use redis::RedisError; @@ -13,7 +9,7 @@ use crate::Data; pub fn get_auth_header(headers: &HeaderMap) -> Result<&str, HttpResponse> { let auth_token = headers.get(actix_web::http::header::AUTHORIZATION); - if auth_token.is_none() { + if let None = auth_token { return Err(HttpResponse::Unauthorized().finish()); } @@ -25,7 +21,7 @@ pub fn get_auth_header(headers: &HeaderMap) -> Result<&str, HttpResponse> { let auth_value = auth.unwrap().split_whitespace().nth(1); - if auth_value.is_none() { + if let None = auth_value { return Err(HttpResponse::BadRequest().finish()); } @@ -55,27 +51,16 @@ pub fn generate_refresh_token() -> Result { } impl Data { - pub async fn set_cache_key( - &self, - key: String, - value: impl Serialize, - expire: u32, - ) -> Result<(), RedisError> { + pub async fn set_cache_key(&self, key: String, value: impl Serialize, expire: u32) -> Result<(), RedisError> { let mut conn = self.cache_pool.get_multiplexed_tokio_connection().await?; let key_encoded = encode(key); let value_json = serde_json::to_string(&value).unwrap(); - redis::cmd("SET") - .arg(&[key_encoded.clone(), value_json]) - .exec_async(&mut conn) - .await?; + redis::cmd("SET",).arg(&[key_encoded.clone(), value_json]).exec_async(&mut conn).await?; - redis::cmd("EXPIRE") - .arg(&[key_encoded, expire.to_string()]) - .exec_async(&mut conn) - .await + redis::cmd("EXPIRE").arg(&[key_encoded, expire.to_string()]).exec_async(&mut conn).await } pub async fn get_cache_key(&self, key: String) -> Result { @@ -83,10 +68,7 @@ impl Data { let key_encoded = encode(key); - redis::cmd("GET") - .arg(key_encoded) - .query_async(&mut conn) - .await + redis::cmd("GET").arg(key_encoded).query_async(&mut conn).await } pub async fn del_cache_key(&self, key: String) -> Result<(), RedisError> { @@ -94,9 +76,7 @@ impl Data { let key_encoded = encode(key); - redis::cmd("DEL") - .arg(key_encoded) - .query_async(&mut conn) - .await + redis::cmd("DEL").arg(key_encoded).query_async(&mut conn).await } } +