Users can join and leave
This commit is contained in:
@@ -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<Message, ErrorCode> {
|
||||
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<User, ErrorCode> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn create_room(self, _: Context, stoken: String, room: Room) -> Result<Room, ErrorCode> {
|
||||
if !self.is_user_admin(&stoken).await {
|
||||
return Err(Unauthorized)
|
||||
|
||||
@@ -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<Message, ErrorCode>;
|
||||
@@ -27,7 +30,6 @@ pub trait RealmChat {
|
||||
async fn get_user(userid: String) -> Result<User, ErrorCode>;
|
||||
async fn get_users() -> Result<Vec<User>, ErrorCode>;
|
||||
async fn get_online_users() -> Result<Vec<User>, ErrorCode>;
|
||||
async fn join_server(stoken: String, user: User) -> Result<User, ErrorCode>;
|
||||
async fn create_room(stoken: String, room: Room) -> Result<Room, ErrorCode>;
|
||||
async fn delete_room(stoken: String, roomid: String) -> Result<(), ErrorCode>;
|
||||
async fn rename_room(stoken: String, roomid: String, new_name: String) -> Result<(), ErrorCode>;
|
||||
|
||||
Reference in New Issue
Block a user