labadoor-csv: Initial commit
This commit is contained in:
parent
aaf9b4b33b
commit
b8ec7ed5c6
3 changed files with 89 additions and 0 deletions
|
@ -3,4 +3,5 @@ members = [
|
|||
"labadoor-matrix",
|
||||
"labadoor-gpio",
|
||||
"labadoor-telegram",
|
||||
"labadoor-csv",
|
||||
]
|
||||
|
|
10
labadoor-csv/Cargo.toml
Normal file
10
labadoor-csv/Cargo.toml
Normal file
|
@ -0,0 +1,10 @@
|
|||
[package]
|
||||
name = "labadoor-csv"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
license = "AGPL-3.0-or-later"
|
||||
|
||||
[dependencies]
|
||||
csv = "1.1.6"
|
||||
serde = "1.0.130"
|
||||
serde_derive = "1.0.130"
|
78
labadoor-csv/src/main.rs
Normal file
78
labadoor-csv/src/main.rs
Normal file
|
@ -0,0 +1,78 @@
|
|||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
struct ACLEntry {
|
||||
username: String,
|
||||
resource: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
struct AuthMethod {
|
||||
username: String,
|
||||
method: String,
|
||||
identifier: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
struct ResourceShortcuts {
|
||||
username: String,
|
||||
resource: String,
|
||||
id: i8,
|
||||
}
|
||||
|
||||
fn get_username(method: String, identifier: String) -> Result<String, ()> {
|
||||
let mut ret = Err(());
|
||||
let file = std::fs::File::open("./auth_methods.csv").unwrap();
|
||||
let mut reader = csv::Reader::from_reader(file);
|
||||
for result in reader.deserialize() {
|
||||
let m: AuthMethod = result.unwrap();
|
||||
if m.method == method && m.identifier == identifier {
|
||||
ret = Ok(m.username);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
fn get_resource_name(username: String, id: i8) -> Result<String, ()> {
|
||||
let mut ret = Err(());
|
||||
let file = std::fs::File::open("./resource_shortcuts.csv").unwrap();
|
||||
let mut reader = csv::Reader::from_reader(file);
|
||||
for result in reader.deserialize() {
|
||||
let rs: ResourceShortcuts = result.unwrap();
|
||||
if rs.username == username && rs.id == id {
|
||||
ret = Ok(rs.resource);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
fn auth_user(username: String, resource: String) -> Result<(), ()> {
|
||||
let mut ret = Err(());
|
||||
let file = std::fs::File::open("./acl_entries.csv").unwrap();
|
||||
let mut reader = csv::Reader::from_reader(file);
|
||||
for result in reader.deserialize() {
|
||||
let e: ACLEntry = result.unwrap();
|
||||
if e.username == username && e.resource == resource {
|
||||
ret = Ok(());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
let method = String::from(&args[1]);
|
||||
let identifier = String::from(&args[2]);
|
||||
let resource_shortcut = args[3].parse::<i8>().unwrap();
|
||||
|
||||
if let Ok(username) = get_username(method, identifier) {
|
||||
if let Ok(resource_name) = get_resource_name(username.clone(), resource_shortcut) {
|
||||
if auth_user(username, resource_name).is_ok() {
|
||||
println!("Open Sesame!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue