mod shim;
use clap::Parser;
use shim::cli::{Cli, Commands};
fn main() {
let cli = Cli::parse();
match cli.command {
Commands::Mcp => {
shim::mcp::run();
}
Commands::Login { token } => {
let token = match token {
Some(t) => t,
None => {
eprintln!("Enter your FalseGreen key: ");
let mut input = String::new();
std::io::stdin()
.read_line(&mut input)
.expect("failed to read input");
input.trim().to_string()
}
};
if token.is_empty() {
eprintln!("Key cannot be empty.");
std::process::exit(1);
}
println!("Establishing an individual FalseGreen session...");
match shim::device::login(&token) {
Ok(session) => {
match shim::config::save_credentials(&session.access_token, &session.session_id)
{
Ok(_) => {
println!("Logged in.");
println!(
"Credentials stored in {:?}.",
shim::config::credentials_path()
);
}
Err(e) => {
eprintln!("Failed to store credentials: {}", e);
std::process::exit(1);
}
}
}
Err(e) => {
eprintln!("Login failed: {}", e);
std::process::exit(1);
}
}
}
Commands::Logout => {
if let Some(token) = shim::config::load_token() {
print!("Revoking session... ");
match shim::device::logout(&token) {
Ok(_) => println!("done."),
Err(e) => {
println!("failed: {}", e);
eprintln!("Removing local credentials anyway.");
}
}
}
match shim::config::clear_token() {
Ok(_) => println!("Logged out."),
Err(e) => {
eprintln!("Failed to remove credentials: {}", e);
std::process::exit(1);
}
}
}
Commands::Status => {
match shim::config::load_token() {
Some(_) => {
println!(
"Authenticated. Key stored in {:?}.",
shim::config::credentials_path()
);
if let Some(id) = shim::config::load_session_id() {
println!("Session: {}", id);
}
}
None => println!("Not authenticated. Run `falsegreen login` to set up."),
}
println!("API endpoint: {}", shim::config::api_url());
}
Commands::Terraform { command } => match shim::iac::run(command) {
Ok(output) => println!("{output}"),
Err(error) => {
eprintln!("Terraform operation failed: {error}");
std::process::exit(1);
}
},
Commands::Install { agent } => match shim::install::install(&agent) {
Ok(_) => {}
Err(e) => {
eprintln!("Install failed: {}", e);
std::process::exit(1);
}
},
}
}