rvault/src/engines.rs
sam 2f570a7a9d + Update + refactor KvSecret struct
+ Update Secretmeta + default()
2024-05-01 16:52:37 +02:00

77 lines
2.4 KiB
Rust

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<Any>) -> Router<Pool<Any>> {
// 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<String>, Path(kv_path): Path<String>, 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<Body>) -> &'static str {
// TODO: Find a solution for this mess
// async fn handler(request: Request<Body>) -> Result<Request<Body>, StatusCode> {
// // let path: Vec<&str> = request.uri().path().split('/').clone().collect();
// // log::info!("path, {:?}", path[1]);
// let root = service_fn(|req: Request<String>| 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)
// }