use anyhow::Error;
use async_trait::async_trait;
use clap::Parser;
use minotari_app_grpc::tls::certs::{generate_self_signed_certs, print_warning, write_cert_to_disk};
use super::{CommandContext, HandleCommand};
#[derive(Debug, Parser)]
pub struct Args {}
#[async_trait]
impl HandleCommand<Args> for CommandContext {
async fn handle_command(&mut self, _: Args) -> Result<(), Error> {
self.create_tls_certs()
}
}
impl CommandContext {
pub fn create_tls_certs(&self) -> Result<(), Error> {
match generate_self_signed_certs() {
Ok((cacert, cert, private_key)) => {
print_warning();
write_cert_to_disk(self.config.base_node.config_dir.clone(), "node_ca.pem", &cacert)?;
write_cert_to_disk(self.config.base_node.config_dir.clone(), "server.pem", &cert)?;
write_cert_to_disk(self.config.base_node.config_dir.clone(), "server.key", &private_key)?;
println!();
println!("Certificates generated successfully.");
println!(
"To continue configuration move the `node_ca.pem` to the client service's `application/config/` \
directory. Restart the base node with the configuration grpc_tls_enabled=true"
);
println!();
},
Err(err) => eprintln!("Error generating certificates: {err}"),
}
Ok(())
}
}