use clap::Parser;
use ez_token::cli::args::{AuthArgs, Cli, Commands};
use ez_token::commands;
use ez_token::config::cli_config::CliConfig;
use miette::Result;
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
let mut config = CliConfig::load()?;
let profile_name = cli.profile;
let profile = config
.profiles
.get(&profile_name)
.cloned()
.unwrap_or_default();
match cli.command {
None => {
if profile.provider.is_some() {
commands::pkce::run(profile, AuthArgs::default(), 3000).await?;
} else {
miette::bail!(
help = "Set up a default profile with `ez-token config set` or run `ez-token login` / `ez-token m2m` directly",
"No command provided and no default profile configured"
);
}
}
Some(Commands::Login { auth, port }) => {
commands::pkce::run(profile, auth, port).await?;
}
Some(Commands::M2m {
auth,
client_secret,
}) => {
commands::client_credentials::run(profile, auth, client_secret).await?;
}
Some(Commands::Config { action }) => {
commands::config::handle(action, &mut config, &profile_name)?;
}
}
Ok(())
}