From 82c0cbc8bdfeb14ade473505dbbc3ed9faef9528 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Tue, 20 Jun 2023 07:20:44 +0000 Subject: [PATCH] refactor api router lcoation --- core/src/api.rs | 41 ------------------------------------ core/src/main.rs | 3 +-- core/src/requests/api/mod.rs | 37 ++++++++++++++++++++++++++++++-- 3 files changed, 36 insertions(+), 45 deletions(-) delete mode 100644 core/src/api.rs diff --git a/core/src/api.rs b/core/src/api.rs deleted file mode 100644 index 902511071..000000000 --- a/core/src/api.rs +++ /dev/null @@ -1,41 +0,0 @@ -use std::time::Instant; - -use axum::{headers::ContentType, middleware, routing::post, Extension, Json, Router, TypedHeader}; -use reqwest::StatusCode; -use resolver_api::Resolver; -use uuid::Uuid; - -use crate::{ - auth::{auth_request, RequestUserExtension}, - requests::api::ApiRequest, - state::StateExtension, -}; - -pub fn router() -> Router { - Router::new() - .route( - "/", - post( - |state: StateExtension, - Extension(user): RequestUserExtension, - Json(request): Json| async move { - let timer = Instant::now(); - let req_id = Uuid::new_v4(); - info!("/auth request {req_id} | {request:?}"); - let res = state - .resolve_request(request, user) - .await - .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}"))); - if let Err(e) = &res { - info!("/auth request {req_id} ERROR: {e:?}"); - } - let res = res?; - let elapsed = timer.elapsed(); - info!("/auth request {req_id} | resolve time: {elapsed:?}"); - debug!("/auth request {req_id} RESPONSE: {res}"); - Result::<_, (StatusCode, String)>::Ok((TypedHeader(ContentType::json()), res)) - }, - ), - ) - .layer(middleware::from_fn(auth_request)) -} diff --git a/core/src/main.rs b/core/src/main.rs index 8044df88f..87a773a9b 100644 --- a/core/src/main.rs +++ b/core/src/main.rs @@ -4,7 +4,6 @@ extern crate log; use axum::{Extension, Router}; use termination_signal::tokio::immediate_term_handle; -mod api; mod auth; mod config; mod db; @@ -23,7 +22,7 @@ async fn app() -> anyhow::Result<()> { let app = Router::new() .nest("/auth", auth::router(&state)) - .nest("/api", api::router()) + .nest("/api", requests::api::router()) .nest("/ws", ws::router()) .layer(Extension(state)); diff --git a/core/src/requests/api/mod.rs b/core/src/requests/api/mod.rs index 5e678ef64..68699ab87 100644 --- a/core/src/requests/api/mod.rs +++ b/core/src/requests/api/mod.rs @@ -1,3 +1,6 @@ +use std::time::Instant; + +use axum::{Router, routing::post, Extension, Json, http::StatusCode, TypedHeader, headers::ContentType, middleware}; use monitor_types::requests::api::{ CreateLoginSecret, CreateServer, DeleteLoginSecret, DeleteServer, GetAllSystemStats, GetBasicSystemStats, GetCpuUsage, GetDiskUsage, GetDockerContainers, GetDockerImages, @@ -5,10 +8,11 @@ use monitor_types::requests::api::{ GetSystemInformation, GetSystemProcesses, ListServers, PruneDockerContainers, PruneDockerImages, PruneDockerNetworks, RenameServer, UpdateServer, }; -use resolver_api::{derive::Resolver, Resolve, ResolveToString}; +use resolver_api::{derive::Resolver, Resolve, ResolveToString, Resolver}; use serde::{Deserialize, Serialize}; +use uuid::Uuid; -use crate::{auth::RequestUser, state::State}; +use crate::{auth::{RequestUser, RequestUserExtension, auth_request}, state::{State, StateExtension}}; mod secret; mod server; @@ -61,3 +65,32 @@ pub enum ApiRequest { // ==== DEPLOYMENT ==== // } + +pub fn router() -> Router { + Router::new() + .route( + "/", + post( + |state: StateExtension, + Extension(user): RequestUserExtension, + Json(request): Json| async move { + let timer = Instant::now(); + let req_id = Uuid::new_v4(); + info!("/auth request {req_id} | {request:?}"); + let res = state + .resolve_request(request, user) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, format!("{e:?}"))); + if let Err(e) = &res { + info!("/auth request {req_id} ERROR: {e:?}"); + } + let res = res?; + let elapsed = timer.elapsed(); + info!("/auth request {req_id} | resolve time: {elapsed:?}"); + debug!("/auth request {req_id} RESPONSE: {res}"); + Result::<_, (StatusCode, String)>::Ok((TypedHeader(ContentType::json()), res)) + }, + ), + ) + .layer(middleware::from_fn(auth_request)) +} \ No newline at end of file