diff --git a/labadoor-auth/Cargo.toml b/labadoor-auth/Cargo.toml index 6319f94..adee5fa 100644 --- a/labadoor-auth/Cargo.toml +++ b/labadoor-auth/Cargo.toml @@ -5,7 +5,10 @@ edition = "2021" [dependencies] clap = { version = "4.4.8", features = ["derive"] } +config = "0.13.4" +labadoor-acl = { path = "../labadoor-acl" } labadoor-csv = { path = "../labadoor-csv", optional = true } +serde = { version = "1.0.193", features = ["derive"] } [features] csv = ["dep:labadoor-csv"] diff --git a/labadoor-auth/src/cli.rs b/labadoor-auth/src/cli.rs index 119e651..9937ec6 100644 --- a/labadoor-auth/src/cli.rs +++ b/labadoor-auth/src/cli.rs @@ -1,4 +1,5 @@ use clap::{Parser, ValueEnum}; +use serde::Deserialize; #[derive(Parser, Debug)] pub struct Cli { @@ -29,3 +30,11 @@ pub struct Open { pub fn parse() -> Cli { Cli::parse() } + +#[cfg(feature = "csv")] +#[derive(Deserialize, Parser, Debug)] +pub struct CSV { + #[clap(short, long)] + #[arg(default_value = "Some(String::from(\"/etc/labadoor\"))")] + pub path: String, +} diff --git a/labadoor-auth/src/lib.rs b/labadoor-auth/src/lib.rs index 7b5b07f..ca8376c 100644 --- a/labadoor-auth/src/lib.rs +++ b/labadoor-auth/src/lib.rs @@ -1,7 +1,18 @@ pub mod cli; +pub mod to_config; +use labadoor_acl::ACL; +use to_config::ToConfig; -pub fn auth(i: &cli::Cli) { - match i.command { - cli::Command::Open(_) => todo!(), +pub fn auth(i: &cli::Cli, config: config::Config) { + let acl = match &i.backend { + #[cfg(feature = "csv")] + cli::Backend::CSV => config.get::("csv").unwrap().to_config().new(), + }; + match &i.command { + cli::Command::Open(open) => acl.auth_user( + open.method.clone(), + open.identifier.clone(), + open.resource.clone(), + ), }; } diff --git a/labadoor-auth/src/to_config.rs b/labadoor-auth/src/to_config.rs new file mode 100644 index 0000000..a134f59 --- /dev/null +++ b/labadoor-auth/src/to_config.rs @@ -0,0 +1,14 @@ +use crate::cli::*; + +pub trait ToConfig { + fn to_config(&self) -> T; +} + +#[cfg(feature = "csv")] +impl ToConfig for CSV { + fn to_config(&self) -> labadoor_csv::CSVArgs { + labadoor_csv::CSVArgs { + path: self.path.clone(), + } + } +} diff --git a/labadoor/src/cli.rs b/labadoor/src/cli.rs index 000b7fe..b543596 100644 --- a/labadoor/src/cli.rs +++ b/labadoor/src/cli.rs @@ -13,8 +13,6 @@ pub enum Command { Telegram(Telegram), #[cfg(feature = "matrix")] Matrix(Matrix), - #[cfg(feature = "csv")] - CSV(CSV), #[cfg(feature = "gpio")] GPIO(GPIO), #[cfg(feature = "auth")] @@ -39,21 +37,6 @@ pub struct Matrix { pub device_id: Option, } -#[cfg(feature = "csv")] -#[derive(Deserialize, Parser, Debug)] -pub struct CSV { - #[clap(short, long)] - #[arg(default_value = "Some(String::from(\"/etc/labadoor\"))")] - pub path: Option, - #[clap(short, long)] - pub method: String, - #[clap(short, long)] - pub identifier: String, - // #[cfg(feature = "multiple_resources")] - #[clap(short, long)] - pub resource_shortcut: i8, -} - #[cfg(feature = "gpio")] #[derive(Deserialize, Parser, Debug)] pub struct GPIO { diff --git a/labadoor/src/main.rs b/labadoor/src/main.rs index f471d44..6763a5b 100644 --- a/labadoor/src/main.rs +++ b/labadoor/src/main.rs @@ -1,4 +1,3 @@ -use labadoor_acl::ACL; mod cli; mod to_config; use to_config::ToConfig; @@ -21,14 +20,6 @@ fn main() { let matrix = config.get::("matrix").unwrap().to_config(); labadoor_matrix::matrix(matrix); } - #[cfg(feature = "csv")] - cli::Command::CSV(_) => { - let csv = config.get::("csv").unwrap(); - let c = labadoor_csv::CSV { - path: csv.path.unwrap(), - }; - c.auth_user(csv.method, csv.identifier, csv.resource_shortcut); - } #[cfg(feature = "gpio")] cli::Command::GPIO(_) => { let gpio = config.get::("gpio").unwrap().to_config(); @@ -36,7 +27,7 @@ fn main() { } #[cfg(feature = "auth")] cli::Command::Auth(cli) => { - labadoor_auth::auth(cli); + labadoor_auth::auth(cli, config); } } }