#![allow(clippy::multiple_crate_versions)]
pub mod commands;
pub mod config;
pub mod identity;
pub mod passphrase_cache;
pub mod picker;
pub mod process;
pub mod pubkey;
#[cfg(feature = "rollback-protection")]
pub mod rollback;
pub mod rollback_checkpoint;
#[cfg(feature = "runtime-hardening")]
pub mod runtime_hardening;
pub mod security_state;
pub mod session_registry;
use anyhow::Result;
use sshenv_cli_models::{
Cli, Command, DeviceCommand, HardwareCommand, PassphraseCacheCommand, ProfilePolicyCommand,
RecoveryCommand, RemoteCommand, RollbackCommand, SecurityCommand, SessionsCommand,
ShimsCommand,
};
pub fn run(cli: Cli) -> Result<()> {
let ctx = commands::Context::from_cli(&cli);
match cli.command {
Command::Init(args) => commands::init::run(&ctx, args),
Command::Doctor => commands::doctor::run(&ctx),
Command::RotateKey(args) => commands::rekey::rotate_key(&ctx, args),
Command::MigrateVault(args) => commands::migrate::run(&ctx, args),
Command::Harden(args) => commands::security::harden(&ctx, args),
Command::Security(sub) => match sub {
SecurityCommand::Status => commands::security::status(&ctx),
SecurityCommand::EnablePassphrase(args) => {
commands::security::enable_passphrase(&ctx, args)
}
SecurityCommand::ChangePassphrase(args) => {
commands::security::change_passphrase(&ctx, args)
}
SecurityCommand::DisablePassphrase(args) => {
commands::security::disable_passphrase(&ctx, args)
}
SecurityCommand::EnableDeviceSeal => commands::security::enable_device_seal(&ctx),
SecurityCommand::Preset(args) => commands::security::preset(&ctx, args),
SecurityCommand::PassphraseCache(sub) => match sub {
PassphraseCacheCommand::Status(args) => {
commands::security::passphrase_cache_status(args)
}
PassphraseCacheCommand::Plan(args) => {
commands::security::passphrase_cache_plan(args)
}
PassphraseCacheCommand::Clear => commands::security::passphrase_cache_clear(&ctx),
},
SecurityCommand::Rollback(sub) => match sub {
RollbackCommand::Status(args) => commands::security::rollback_status(&ctx, args),
RollbackCommand::Plan(args) => commands::security::rollback_plan(args),
RollbackCommand::CheckpointTemplate(args) => {
commands::security::rollback_checkpoint_template(&ctx, args)
}
RollbackCommand::ValidateCheckpoint(args) => {
commands::security::rollback_validate_checkpoint(&ctx, args)
}
},
SecurityCommand::Device(sub) => match sub {
DeviceCommand::List => commands::security::device_list(&ctx),
DeviceCommand::Authorize => commands::security::device_authorize(&ctx),
DeviceCommand::Remove => commands::security::device_remove(&ctx),
DeviceCommand::Plan(args) => commands::security::device_plan(args),
},
SecurityCommand::Hardware(sub) => match sub {
HardwareCommand::Status(args) => commands::security::hardware_status(args),
HardwareCommand::Plan(args) => commands::security::hardware_plan(args),
HardwareCommand::Discover(args) => commands::security::hardware_discover(args),
HardwareCommand::Enroll(args) => commands::security::hardware_enroll(args),
HardwareCommand::ValidateRecipient(args) => {
commands::security::hardware_validate_recipient(args)
}
},
SecurityCommand::Recovery(sub) => match sub {
RecoveryCommand::List(args) => commands::security::recovery_list(&ctx, args),
RecoveryCommand::Import(args) => commands::security::recovery_import(&ctx, args),
RecoveryCommand::Remove(args) => commands::security::recovery_remove(&ctx, args),
RecoveryCommand::Split(args) => commands::security::recovery_split(args),
RecoveryCommand::SplitVaultKey(args) => {
commands::security::recovery_split_vault_key(&ctx, args)
}
RecoveryCommand::ValidateShare(args) => {
commands::security::recovery_validate_share(args)
}
RecoveryCommand::Combine(args) => commands::security::recovery_combine(args),
RecoveryCommand::RecoverRecipient(args) => {
commands::security::recovery_recover_recipient(&ctx, args)
}
RecoveryCommand::Validate(args) => commands::security::recovery_validate(args),
RecoveryCommand::Plan(args) => commands::security::recovery_plan(args),
},
SecurityCommand::Remote(sub) => match sub {
RemoteCommand::List(args) => commands::security::remote_list(&ctx, args),
RemoteCommand::Import(args) => commands::security::remote_import(&ctx, args),
RemoteCommand::Remove(args) => commands::security::remote_remove(&ctx, args),
RemoteCommand::Plan(args) => commands::security::remote_plan(args),
RemoteCommand::RequestTemplate(args) => {
commands::security::remote_request_template(args)
}
RemoteCommand::ValidateRequest(args) => {
commands::security::remote_validate_request(args)
}
RemoteCommand::CommandWrap(args) => commands::security::remote_command_wrap(args),
RemoteCommand::CommandUnwrap(args) => {
commands::security::remote_command_unwrap(args)
}
RemoteCommand::EnableCommand(args) => {
commands::security::remote_enable_command(&ctx, args)
}
RemoteCommand::Validate(args) => commands::security::remote_validate(args),
},
SecurityCommand::ProfilePolicy(sub) => match sub {
ProfilePolicyCommand::List => commands::security::profile_policy_list(&ctx),
ProfilePolicyCommand::Backups(args) => {
commands::security::profile_policy_backups(&ctx, args)
}
ProfilePolicyCommand::PruneBackups(args) => {
commands::security::profile_policy_prune_backups(&ctx, args)
}
ProfilePolicyCommand::Status(args) => {
commands::security::profile_policy_status(&ctx, args)
}
ProfilePolicyCommand::Check(args) => {
commands::security::profile_policy_check(&ctx, args)
}
ProfilePolicyCommand::Migrate => commands::security::profile_policy_migrate(&ctx),
ProfilePolicyCommand::RotateKey(args) => {
commands::security::profile_policy_rotate_key(&ctx, args)
}
ProfilePolicyCommand::RequirePassphrase(args) => {
commands::security::profile_policy_require_passphrase(&ctx, args)
}
ProfilePolicyCommand::ChangePassphrase(args) => {
commands::security::profile_policy_change_passphrase(&ctx, args)
}
ProfilePolicyCommand::DisablePassphrase(args) => {
commands::security::profile_policy_disable_passphrase(&ctx, args)
}
ProfilePolicyCommand::RequireDeviceSeal(args) => {
commands::security::profile_policy_require_device_seal(&ctx, args)
}
ProfilePolicyCommand::DisableDeviceSeal(args) => {
commands::security::profile_policy_disable_device_seal(&ctx, args)
}
ProfilePolicyCommand::ClearRequirements(args) => {
commands::security::profile_policy_clear_requirements(&ctx, args)
}
ProfilePolicyCommand::Apply(args) => {
commands::security::profile_policy_apply(&ctx, args)
}
ProfilePolicyCommand::ApplyAll(args) => {
commands::security::profile_policy_apply_all(&ctx, args)
}
ProfilePolicyCommand::Repair(args) => {
commands::security::profile_policy_repair(&ctx, args)
}
ProfilePolicyCommand::RepairAll(args) => {
commands::security::profile_policy_repair_all(&ctx, args)
}
ProfilePolicyCommand::RestoreBackup(args) => {
commands::security::profile_policy_restore_backup(&ctx, args)
}
ProfilePolicyCommand::VerifyBackup(args) => {
commands::security::profile_policy_verify_backup(&ctx, args)
}
ProfilePolicyCommand::Set(args) => {
commands::security::profile_policy_set(&ctx, args)
}
},
},
Command::AddRecipient(args) => commands::recipient::add(&ctx, args),
Command::ListRecipients(args) => commands::recipient::list(&ctx, args),
Command::RemoveRecipient(args) => commands::recipient::remove(&ctx, args),
Command::Set(args) => commands::profile::set(&ctx, args),
Command::Unset(args) => commands::profile::unset(&ctx, args),
Command::List(args) => commands::profile::list(&ctx, args),
Command::Show(args) => commands::profile::show(&ctx, args),
Command::RmProfile(args) => commands::profile::rm(&ctx, args),
Command::RenameProfile(args) => commands::profile::rename(&ctx, args),
Command::Run(args) => commands::run::run(&ctx, args),
Command::Export(args) => commands::export::run(&ctx, args),
Command::Sessions(sub) => match sub {
SessionsCommand::List(args) => commands::sessions::list(&ctx, args),
SessionsCommand::Kill(args) => commands::sessions::kill(&ctx, args),
},
Command::Shims(sub) => match sub {
ShimsCommand::Bind(args) => commands::shims::bind(&ctx, args),
ShimsCommand::Unbind(args) => commands::shims::unbind(&ctx, args),
ShimsCommand::Rename(args) => commands::shims::rename(&ctx, args),
ShimsCommand::List => commands::shims::list(&ctx),
ShimsCommand::Sync => commands::shims::sync(&ctx),
ShimsCommand::Dir => commands::shims::dir(&ctx),
ShimsCommand::Path => commands::shims::path(&ctx),
},
}
}