From 3447a9f4ff7a5698675da01a69501b00885dfc06 Mon Sep 17 00:00:00 2001 From: someone Date: Wed, 8 May 2024 13:11:32 +0200 Subject: [PATCH] Added return value to get_data --- src/engines/kv.rs | 145 +++++++++++++++++++------------------- src/engines/kv/structs.rs | 2 +- 2 files changed, 74 insertions(+), 73 deletions(-) diff --git a/src/engines/kv.rs b/src/engines/kv.rs index fede5c5..fbf914d 100644 --- a/src/engines/kv.rs +++ b/src/engines/kv.rs @@ -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, Path(path): Path) -> &'static str { - // SQL Anfrage gegen Path +async fn get_data( + State(pool): State, + Path(path): Path, +) -> Result { 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 = 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 = 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 @@ -157,7 +158,7 @@ async fn post_data( version: 1, }, }; - + Json(res) } */ diff --git a/src/engines/kv/structs.rs b/src/engines/kv/structs.rs index edd2129..90b847b 100644 --- a/src/engines/kv/structs.rs +++ b/src/engines/kv/structs.rs @@ -5,7 +5,7 @@ use std::{collections::HashMap, vec}; pub type KvSecretData = HashMap; -#[derive(Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug)] pub struct KvSecretReq { /// Map (required) pub data: KvSecretData,