fix(bonfire): make error handling consistent

This commit is contained in:
Paul Makles
2024-11-11 12:31:34 +00:00
parent bf0fc504a9
commit b9ae333b02
2 changed files with 10 additions and 23 deletions

View File

@@ -79,7 +79,9 @@ pub async fn client(db: &'static Database, stream: TcpStream, addr: SocketAddr)
// Try to authenticate the user. // Try to authenticate the user.
let Some(token) = config.get_session_token().as_ref() else { let Some(token) = config.get_session_token().as_ref() else {
write write
.send(config.encode(&create_error!(InvalidSession))) .send(config.encode(&EventV1::Error {
data: create_error!(InvalidSession),
}))
.await .await
.ok(); .ok();
return; return;
@@ -88,7 +90,10 @@ pub async fn client(db: &'static Database, stream: TcpStream, addr: SocketAddr)
let (user, session_id) = match User::from_token(db, token, UserHint::Any).await { let (user, session_id) = match User::from_token(db, token, UserHint::Any).await {
Ok(user) => user, Ok(user) => user,
Err(err) => { Err(err) => {
write.send(config.encode(&err)).await.ok(); write
.send(config.encode(&EventV1::Error { data: err }))
.await
.ok();
return; return;
} }
}; };

View File

@@ -1,4 +1,5 @@
use authifier::AuthifierEvent; use authifier::AuthifierEvent;
use revolt_result::Error;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use revolt_models::v0::{ use revolt_models::v0::{
@@ -7,22 +8,9 @@ use revolt_models::v0::{
PartialChannel, PartialMember, PartialMessage, PartialRole, PartialServer, PartialUser, PartialChannel, PartialMember, PartialMessage, PartialRole, PartialServer, PartialUser,
PartialWebhook, RemovalIntention, Report, Server, User, UserSettings, Webhook, PartialWebhook, RemovalIntention, Report, Server, User, UserSettings, Webhook,
}; };
use revolt_result::Error;
use crate::Database; use crate::Database;
/// WebSocket Client Errors
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(tag = "error")]
pub enum WebSocketError {
LabelMe,
InternalError { at: String },
InvalidSession,
OnboardingNotFinished,
AlreadyAuthenticated,
MalformedData { msg: String },
}
/// Ping Packet /// Ping Packet
#[derive(Serialize, Deserialize, Debug, Clone)] #[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(untagged)] #[serde(untagged)]
@@ -31,14 +19,6 @@ pub enum Ping {
Number(usize), Number(usize),
} }
/// Untagged Error
#[derive(Serialize)]
#[serde(untagged)]
pub enum ErrorEvent {
Error(WebSocketError),
APIError(Error),
}
/// Fields provided in Ready payload /// Fields provided in Ready payload
#[derive(PartialEq)] #[derive(PartialEq)]
pub enum ReadyPayloadFields { pub enum ReadyPayloadFields {
@@ -58,6 +38,8 @@ pub enum ReadyPayloadFields {
pub enum EventV1 { pub enum EventV1 {
/// Multiple events /// Multiple events
Bulk { v: Vec<EventV1> }, Bulk { v: Vec<EventV1> },
/// Error event
Error { data: Error },
/// Successfully authenticated /// Successfully authenticated
Authenticated, Authenticated,