reworked api errors, now returning proper error codes

This commit is contained in:
2026-01-28 19:51:23 +01:00
parent 30dc7475c2
commit fbf7eea59a
12 changed files with 463 additions and 563 deletions
+7 -10
View File
@@ -4,7 +4,6 @@ use axum::{
ConnectInfo, Path, Query, WebSocketUpgrade,
ws::{Message, WebSocket},
},
http::StatusCode,
response::IntoResponse,
routing::get,
};
@@ -17,9 +16,9 @@ use uuid::Uuid;
use crate::{
auth::verify_jwt_string,
db::{room_id_from_uuid, user_id_from_uuid},
errors::APIError,
realtime::RealTimeVoices,
routes::rooms::is_member,
routes::ws::WsAuthQuery,
routes::{rooms::is_member, ws::WsAuthQuery},
};
pub fn routes() -> Router {
@@ -33,7 +32,7 @@ async fn voice_ws_handler(
ConnectInfo(addr): ConnectInfo<SocketAddr>,
Extension(voice_manager): Extension<RealTimeVoices>,
Extension(db): Extension<PgPool>,
) -> Result<impl IntoResponse, (StatusCode, String)> {
) -> Result<impl IntoResponse, APIError> {
let claims = verify_jwt_string(&query.token)?;
let user_uuid = claims.sub;
@@ -47,20 +46,18 @@ async fn voice_ws_handler(
.bind(&query.token)
.execute(&db)
.await
.map_err(|e| {
tracing::error!("Failed to get WS token from DB: {e}");
(StatusCode::INTERNAL_SERVER_ERROR, "DB error".into())
})?;
// NOTE: Maybe wrong type of error
.map_err(|e| APIError::Internal(format!("Failed to get WS token from DB: {e}")))?;
if result.rows_affected() == 0 {
return Err((StatusCode::UNAUTHORIZED, "Invalid or expired token".into()));
return Err(APIError::InvalidToken);
}
let user_id = user_id_from_uuid(&db, user_uuid).await?;
let room_id = room_id_from_uuid(&db, room_uuid).await?;
if !is_member(user_id, room_id, &db).await {
return Err((StatusCode::FORBIDDEN, "Not a member of this room".into()));
return Err(APIError::NotAMember);
}
tracing::info!("User {} joining voice in room {}", user_uuid, room_uuid);