Added return value to get_data

This commit is contained in:
someone 2024-05-08 13:11:32 +02:00
parent 3c9bc7f848
commit 3447a9f4ff
2 changed files with 74 additions and 73 deletions

View file

@ -1,26 +1,26 @@
// TODO: Remove
#![allow(dead_code)]
// pub mod logic;
pub mod logic;
pub mod structs;
// #[cfg(test)]
// mod tests;
use std::{collections::HashMap, convert::Infallible};
use crate::{
engines::kv::{
logic::body_to_json,
structs::{KvSecret, SecretMeta},
},
engines::kv::{logic::body_to_json, structs::*},
storage::DatabaseDriver,
};
use axum::{
extract::{Path, State},
response::IntoResponse,
routing::*,
Router,
Json, Router,
};
use log::{info, trace};
use sqlx::{error::UnexpectedNullError, Row};
use log::{info, error};
use sqlx::Row;
pub fn kv_router(pool: DatabaseDriver) -> Router {
Router::new()
@ -49,40 +49,41 @@ async fn post_config() -> &'static str {
todo!("not implemented")
}
async fn get_data(State(pool): State<DatabaseDriver>, Path(path): Path<String>) -> &'static str {
// SQL Anfrage gegen Path
async fn get_data(
State(pool): State<DatabaseDriver>,
Path(path): Path<String>,
) -> Result<impl IntoResponse, Infallible> {
match sqlx::query("SELECT * FROM secret_versions WHERE secret_path = $1")
.bind(path)
.fetch_one(&pool)
.await
{
Ok(v) => {
let secret_data: String = v.get("secret_data");
let created_time: String = v.get("created_time");
let deletion_time: String = v.get("deletion_time");
let version_number: i64 = v.get("version_number");
let secret_path: String = v.get("secret_path");
info!(
"{:?}",
(
secret_data,
created_time,
deletion_time,
version_number,
secret_path
)
);
// Handle returned data
return "Success";
}
Err(e) => {
match e {
sqlx::Error::RowNotFound => trace!("{:?}", e),
_ => panic!("{:?}", e),
}
info!("{:?}", e);
return "Error";
let version: i64 = v.get("version_number");
let secret_content: HashMap<String, String> = HashMap::from([
("secret_data".to_string(), v.get("secret_data")),
("created_time".to_string(), v.get("created_time")),
("deletion_time".to_string(), v.get("deletion_time")),
("version_number".to_string(), version.to_string()),
("secret_path".to_string(), v.get("secret_path")),
]);
let return_secret = KvSecretReq {
data: secret_content,
options: None,
};
info!("{:?}", return_secret);
Ok(Json(return_secret))
}
Err(e) => match e {
sqlx::Error::RowNotFound => {
error!("{:?}", e);
let error_data: HashMap<String, String> = HashMap::from([("error".to_string(), "Secret not found".to_string())]);
let error_secret = KvSecretReq{data: error_data, options: None};
Ok(Json(error_secret))
},
_ => panic!("{:?}", e),
},
}
}
@ -93,45 +94,45 @@ async fn post_data(
) -> &'static str {
// Insert Metadata first -> Else: Error because of foreign key constraint
let mut body_json = body_to_json(body);
// let mut body_json = body_to_json(body);
let secret: KvSecret = KvSecret {
data: body_json["data"]["password1"].take().to_string(),
version: body_json["data"]["version"].take().as_i64(),
};
log::debug!(
"Secret: {}, Content: {}, Version: {}, path: {}",
path,
secret.data,
secret.version.unwrap_or(0),
path
);
// let secret: KvSecret = KvSecret {
// data: body_json["data"]["password1"].take().to_string(),
// version: body_json["data"]["version"].take().as_i64(),
// };
// log::debug!(
// "Secret: {}, Content: {}, Version: {}, path: {}",
// path,
// secret.data,
// secret.version.unwrap_or(0),
// path
// );
let created_time = "05-03-2024 12:00:00";
let deletion_time = "05-03-2024 12:00:00";
let version = "0";
match sqlx::query!(
"INSERT INTO secret_versions VALUES ($1, $2, $3, $4, $5)",
secret.data,
created_time,
deletion_time,
version,
version
)
.execute(&pool)
.await
{
Ok(v) => {
trace!("{:?}", v);
"Success"
}
Err(e) => {
trace!("{:?}", e);
"Error"
}
}
// let created_time = "05-03-2024 12:00:00";
// let deletion_time = "05-03-2024 12:00:00";
// let version = "0";
// match sqlx::query!(
// "INSERT INTO secret_versions VALUES ($1, $2, $3, $4, $5)",
// secret.data,
// created_time,
// deletion_time,
// version,
// version
// )
// .execute(&pool)
// .await
// {
// Ok(v) => {
// trace!("{:?}", v);
// "Success"
// }
// Err(e) => {
// trace!("{:?}", e);
// "Error"
// }
// }
// todo!("not implemented")
todo!("not implemented")
}
/* mock for return

View file

@ -5,7 +5,7 @@ use std::{collections::HashMap, vec};
pub type KvSecretData = HashMap<String, String>;
#[derive(Deserialize, Debug)]
#[derive(Serialize, Deserialize, Debug)]
pub struct KvSecretReq {
/// Map (required)
pub data: KvSecretData,