diff --git a/labadoor-auth/src/cli.rs b/labadoor-auth/src/cli.rs index 9937ec6..21ea272 100644 --- a/labadoor-auth/src/cli.rs +++ b/labadoor-auth/src/cli.rs @@ -1,26 +1,27 @@ use clap::{Parser, ValueEnum}; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; -#[derive(Parser, Debug)] +#[derive(Serialize, Parser, Debug)] pub struct Cli { #[command(subcommand)] pub command: Command, #[arg(short, long, value_enum)] - pub backend: Backend, + pub backends: Option>, } -#[derive(Parser, ValueEnum, Clone, Debug)] +#[derive(Serialize, Deserialize, Parser, ValueEnum, Clone, Debug)] +#[serde(rename_all = "lowercase")] pub enum Backend { #[cfg(feature = "csv")] CSV, } -#[derive(Parser, Debug)] +#[derive(Serialize, Parser, Debug)] pub enum Command { Open(Open), } -#[derive(Parser, Debug)] +#[derive(Serialize, Parser, Debug)] pub struct Open { pub method: String, pub identifier: String, diff --git a/labadoor-auth/src/lib.rs b/labadoor-auth/src/lib.rs index ca8376c..d9d6843 100644 --- a/labadoor-auth/src/lib.rs +++ b/labadoor-auth/src/lib.rs @@ -3,16 +3,34 @@ pub mod to_config; use labadoor_acl::ACL; use to_config::ToConfig; -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(), - ), +macro_rules! add_cliargs { + ($d:ident,$section:expr,$i:ident) => { + $d.add_source(config::File::from_str( + &format!("[{}]\n{}", $section, toml::to_string($i).unwrap()), + config::FileFormat::Toml, + )) + .build() + .unwrap() }; } + +use std::collections::{HashMap, HashSet}; +pub fn auth(cli: &cli::Cli, config: config::ConfigBuilder) { + let config = add_cliargs!(config, "auth", cli); + let backends = config.get::>("auth.backends").unwrap(); + for backend in backends { + let acl = match backend { + #[cfg(feature = "csv")] + cli::Backend::CSV => config.get::("csv").unwrap().to_config().new(), + }; + match &cli.command { + cli::Command::Open(cliargs) => { + let found = acl.auth_user( + cliargs.method.clone(), + cliargs.identifier.clone(), + cliargs.resource.clone(), + ); + } + }; + } +} diff --git a/labadoor/config.toml b/labadoor/config.toml index 37c7ba6..dfc05aa 100644 --- a/labadoor/config.toml +++ b/labadoor/config.toml @@ -11,3 +11,6 @@ device = "" pin = 1 active_low = false active_time = 2000 + +[auth] +backends = ["csv"] diff --git a/labadoor/src/main.rs b/labadoor/src/main.rs index f79134c..488756d 100644 --- a/labadoor/src/main.rs +++ b/labadoor/src/main.rs @@ -39,7 +39,6 @@ fn main() { } #[cfg(feature = "auth")] cli::Command::Auth(cli) => { - let config = config.build().unwrap(); labadoor_auth::auth(&cli, config); } }