commit 01f64375f22b0667c5093d90b2d6f966337caaa2 Author: shockrah Date: Mon Sep 6 16:32:37 2021 -0700 + DBLib which is basically our "datbase" driver This stands to be the only data we're going to bother supporting right now THe reason for this is because of sheer lazyness diff --git a/dblib/Cargo.toml b/dblib/Cargo.toml new file mode 100644 index 0000000..5caf219 --- /dev/null +++ b/dblib/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "dblib" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0" } diff --git a/dblib/src/lib.rs b/dblib/src/lib.rs new file mode 100644 index 0000000..d844753 --- /dev/null +++ b/dblib/src/lib.rs @@ -0,0 +1,77 @@ +use std::error::Error; +use std::fs::File; +use std::io::BufReader; +use std::io::prelude::*; + +use serde::{Serialize, Deserialize}; + +fn dev_urandom() -> std::io::Result { + let mut file = File::open("/dev/urandom")?; + let mut buf: [u8;48] = [0;48]; + file.read_exact(&mut buf)?; + let mut output = String::new(); + for byte in buf.iter() { + let hex = format!("{:02X}", byte); + output.push_str(hex.as_str()); + } + + // Return the hex encoded random bytes + return Ok(output); +} + + +#[derive(Serialize, Deserialize)] +pub struct DB { + keys: Vec +} + + +impl DB { + pub fn new_entry(filename: String) -> Result> { + let file = File::open(filename.as_str())?; + let reader = BufReader::new(file); + + let mut data: DB = serde_json::from_reader(reader)?; + // Generate some new key data + let key = dev_urandom(); // create a new key + // Add that new key to the json file + match key { + Ok(key) => { + data.keys.push(key.clone()); + + let file = File::open(filename)?; + serde_json::to_writer(file, &data)?; + + return Ok(key) + }, + Err(e) => { + panic!() + } + } + } + + pub fn remove_entry(filename: String, key: String) -> Result<(), Box> { + let file = File::open(filename.as_str())?; + let reader = BufReader::new(file); + + let mut data: DB = serde_json::from_reader(reader)?; + let idx = data.keys.iter().position(|item| key == key); + if let Some(idx) = idx { + data.keys.remove(idx); + } + + Ok(()) + } + + pub fn get_entry(filename: String, key: String) -> Result, Box> { + let file = File::open(filename.as_str())?; + let reader = BufReader::new(file); + + let data: DB = serde_json::from_reader(reader)?; + // WARNING: extreme autism + match data.keys.iter().find(|item| item.clone() == &key) { + Some(item) => Ok(Some(item.clone())), + None => Ok(None) + } + } +}