From caed1444c1676525f14245228a27962bb148c47b Mon Sep 17 00:00:00 2001 From: shockrah Date: Wed, 29 Sep 2021 21:17:15 -0700 Subject: [PATCH] - filename is now a function dont @ me --- dblib/src/keystore.rs | 21 +++++++++++---------- dblib/src/lib.rs | 22 ++++++++++++++++++---- dblib/src/request.rs | 10 ++-------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/dblib/src/keystore.rs b/dblib/src/keystore.rs index 1e154b6..2811667 100644 --- a/dblib/src/keystore.rs +++ b/dblib/src/keystore.rs @@ -3,13 +3,14 @@ use std::fs::File; use std::io::BufReader; use std::io::BufWriter; use crate::{err, DB, dev_urandom, KeyStore}; -use crate::ApiKey; +use crate::{ApiKey, filename}; + impl KeyStore for DB { - fn new_entry(filename: String, name: String) -> err::Result { + fn new_entry(name: String) -> err::Result { //! Create a new API key entry in the data-store given by //! Key value is generated via /dev/urandom on unix systems - let file = File::open(filename.as_str())?; + let file = File::open(filename())?; let reader = BufReader::new(file); let mut data: DB = serde_json::from_reader(reader)?; @@ -19,16 +20,16 @@ impl KeyStore for DB { // Finally write back the data to the structure and disk data.keys.push(entry); - let file = File::open(filename.as_str())?; + let file = File::open(filename())?; let writer = BufWriter::new(file); serde_json::to_writer(writer, &data)?; Ok(key) } - fn remove_entry(filename: String, name: String) -> err::Result { + fn remove_entry(name: String) -> err::Result { //! Removes the API key entry based on the given name - let file = File::open(filename.as_str())?; + let file = File::open(filename())?; let reader = BufReader::new(file); let mut data: DB = serde_json::from_reader(reader)?; @@ -41,9 +42,9 @@ impl KeyStore for DB { } } - fn get_entry(filename: String, name: String) -> err::Result> { + fn get_entry(name: String) -> err::Result> { //! Get the API key based on name - let file = File::open(filename.as_str())?; + let file = File::open(filename())?; let reader = BufReader::new(file); let data: DB = serde_json::from_reader(reader)?; @@ -54,10 +55,10 @@ impl KeyStore for DB { } } - fn new_store(filename: String) -> err::Result<()> { + fn new_store(new_filename: String) -> err::Result<()> { //! Generate a new empty data store with the given filename //! NOTE: The filename must include the extension(programmatically) - let file = File::create(filename)?; + let file = File::create(new_filename)?; let empty = DB { keys: vec![] , videos: HashMap::new() }; let writer = BufWriter::new(file); serde_json::to_writer(writer, &empty)?; diff --git a/dblib/src/lib.rs b/dblib/src/lib.rs index 9d27441..6f91fc9 100644 --- a/dblib/src/lib.rs +++ b/dblib/src/lib.rs @@ -1,6 +1,7 @@ use std::collections::HashMap; use std::fs::File; use std::io::prelude::*; +use std::env; use serde::{Serialize, Deserialize}; @@ -10,7 +11,15 @@ pub mod videostore; pub mod err; use request::ApiKey; +fn filename() -> String { + match env::var("CLIP_KEY_STORE") { + Ok(val) => val, + Err(_) => "store.json".to_string() + } +} + fn dev_urandom() -> std::io::Result { + // Creates a random hex string that is generated from 48 bytes let mut file = File::open("/dev/urandom")?; let mut buf: [u8;48] = [0;48]; file.read_exact(&mut buf)?; @@ -24,6 +33,11 @@ fn dev_urandom() -> std::io::Result { return Ok(output); } +fn uid() -> std::io::Result { + let raw = dev_urandom()?; + Ok(raw[..8].to_string()) +} + #[derive(Serialize, Deserialize)] pub struct VideoMeta { pub id: String, @@ -46,10 +60,10 @@ pub struct DB { // TODO: add some proper lifetime management here and some docs pub trait KeyStore { - fn new_entry(filename: String, name: String) -> err::Result; - fn remove_entry(filename: String, name: String) -> err::Result; - fn get_entry(filename: String, name: String) -> err::Result>; - fn new_store(filename: String) -> err::Result<()>; + fn new_entry(name: String) -> err::Result; + fn remove_entry(name: String) -> err::Result; + fn get_entry(name: String) -> err::Result>; + fn new_store(new_filename: String) -> err::Result<()>; } pub trait VideoStore { diff --git a/dblib/src/request.rs b/dblib/src/request.rs index 194dbc4..c080978 100644 --- a/dblib/src/request.rs +++ b/dblib/src/request.rs @@ -1,6 +1,4 @@ -use std::env; -use crate::DB; -use crate::KeyStore; +use crate::{DB, KeyStore}; use rocket::request::{self, Request, FromRequest}; use rocket::http::Status; @@ -24,12 +22,8 @@ pub enum ApiKeyError { } fn verify_api_key(key: &str, name: &str) -> request::Outcome { - let storage_target = match env::var("CLIP_KEY_STORE") { - Ok(val) => val, - Err(_) => "store.json".to_string() - }; // yolo unwrap because i cba to deal w/ edge cases and shit - match DB::get_entry(storage_target, name.to_string()).unwrap() { + match DB::get_entry(name.to_string()).unwrap() { Some(db_key) => { if db_key == key { Outcome::Success(