reworked api errors, now returning proper error codes
This commit is contained in:
+7
-10
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user