From e3584034a2f3331321ad7236dba91a8e7f837fee Mon Sep 17 00:00:00 2001 From: Joshua Higgins Date: Sat, 21 Sep 2024 11:46:40 -0400 Subject: [PATCH] Users can join and leave --- server/src/server.rs | 40 ++++++++++++++++++++++++++++++++++++---- server/src/types.rs | 4 +++- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/server/src/server.rs b/server/src/server.rs index c4364db..f9654db 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -192,6 +192,42 @@ impl RealmChat for RealmChatServer { format!("Hello, {name}!") } + async fn join_server(self, _: Context, stoken: String, user: User) -> Result<(), ErrorCode> { + if !self.is_stoken_valid(&user.userid, &stoken).await { + return Err(Unauthorized) + } + + if self.is_user_in_server(&user.userid).await { + return Err(AlreadyJoinedServer) + } + + let result = query!( + "INSERT INTO user (userid, name, online, admin) VALUES (?,?,?,?)", + user.userid, user.name, false, false).execute(&self.db_pool).await; + + match result { + Ok(_) => Ok(()), + Err(_) => Err(MalformedDBResponse), + } + } + + async fn leave_server(self, _: Context, stoken: String, user: User) -> Result<(), ErrorCode> { + if !self.is_stoken_valid(&user.userid, &stoken).await { + return Err(Unauthorized) + } + + if !self.is_user_in_server(&user.userid).await { + return Err(NotInServer) + } + + let result = query!("DELETE FROM user WHERE userid = ?",user.userid).execute(&self.db_pool).await; + + match result { + Ok(_) => Ok(()), + Err(_) => Err(MalformedDBResponse), + } + } + async fn send_message(self, _: Context, stoken: String, mut message: Message) -> Result { if !self.is_stoken_valid(&message.user.userid, &stoken).await { // Check sender userid return Err(Unauthorized) @@ -356,10 +392,6 @@ impl RealmChat for RealmChatServer { } } - async fn join_server(self, _: Context, stoken: String, user: User) -> Result { - todo!() - } - async fn create_room(self, _: Context, stoken: String, room: Room) -> Result { if !self.is_user_admin(&stoken).await { return Err(Unauthorized) diff --git a/server/src/types.rs b/server/src/types.rs index 7042b01..20ad024 100644 --- a/server/src/types.rs +++ b/server/src/types.rs @@ -10,6 +10,9 @@ use crate::types::MessageData::*; #[tarpc::service] pub trait RealmChat { async fn test(name: String) -> String; + + async fn join_server(stoken: String, user: User) -> Result<(), ErrorCode>; + async fn leave_server(stoken: String, user: User) -> Result<(), ErrorCode>; //NOTE: Any user authorized as themselves async fn send_message(stoken: String, message: Message) -> Result; @@ -27,7 +30,6 @@ pub trait RealmChat { async fn get_user(userid: String) -> Result; async fn get_users() -> Result, ErrorCode>; async fn get_online_users() -> Result, ErrorCode>; - async fn join_server(stoken: String, user: User) -> Result; async fn create_room(stoken: String, room: Room) -> Result; async fn delete_room(stoken: String, roomid: String) -> Result<(), ErrorCode>; async fn rename_room(stoken: String, roomid: String, new_name: String) -> Result<(), ErrorCode>;