pub mod kv; use crate::engines::kv::logic::body_to_json; use crate::engines::kv::structs::KvSecret; use axum::{ extract::{Path, Request}, http::StatusCode, middleware::{self, Next}, response::Response, routing::*, Router, }; use log::*; use sqlx::{Any, Pool}; pub fn secrets_router(pool: Pool) -> Router> { // Router::new().layer(map_request(handler)) Router::new() .route("/:mount_path/data/:kv_path", post(baz)) .with_state(pool) } /// Routing handler for path "/v1/kv-v2/data/foo" /// expects payload as JSON, prints payload into struct async fn baz(Path(mount_path): Path, Path(kv_path): Path, body: String) -> String { let mut body_json = body_to_json(body); // TODO: If version field provided during a read, the value at the version number will be returned let secret: KvSecret = KvSecret { data: body_json.to_string(), // content: body_json["data"]["password1"].take().to_string(), version: body_json["data"]["version"].take().as_i64(), }; log::debug!( "Secret: {}, Content: {}, Version: {:?}, path: {}", kv_path, secret.data, secret.version, mount_path, ); String::from("RoutingTest baz successful") } // async fn handler(Host(hostname): Host, request: Request) -> &'static str { // TODO: Find a solution for this mess // async fn handler(request: Request) -> Result, StatusCode> { // // let path: Vec<&str> = request.uri().path().split('/').clone().collect(); // // log::info!("path, {:?}", path[1]); // let root = service_fn(|req: Request| async move { // let res = Response::new("Hello, World!".to_string()); // Ok::<_, Infallible>(res) // }); // let root = BoxService::new(root); // let mut routes = vec!["/abc", "/def"]; // routes.sort_unstable_by(|a, b| a.len().cmp(&b.len())); // let mut app = Router::new(); // app.as_service().call(request).await.unwrap(); // // match path[1] { // // "test" => { // // log::info!("test route"); // // // TODO: Nest another Router here // // return Ok(Request::new(Body::empty())); // // } // // _ => { // // log::info!("default"); // // return Err(StatusCode::NOT_FOUND); // // } // // } // Err(StatusCode::IM_A_TEAPOT) // }