+internal openssl cert provider

This commit is contained in:
2024-10-22 00:41:06 +03:00
parent e20aecea81
commit 8c1add6ff1
6 changed files with 773 additions and 171 deletions

View File

@@ -1,9 +1,9 @@
use anyhow::{anyhow, Result};
use anyhow::{anyhow, Context, Result};
use std::{path::PathBuf, sync::Arc};
use crate::common::{is_file_exist, read_file, write_file, AppConfig};
use crate::crypto::ICryptoProvider;
use crate::common::{is_file_exist, read_file, write_file, AppConfig, OpenSSLProviderArg, VarsMap};
use crate::crypto::{ICryptoProvider, OpenSSLBinProvider, OpenSSLLibProvider};
pub(crate) struct Certs<T>
where
@@ -56,8 +56,8 @@ where
return Ok(false);
}
self.request().await?;
self.sign().await?;
self.request().await.context("req error")?;
self.sign().await.context("sign error")?;
let (template_file, ca_file, cert_file, key_file) = (
self.template_file.clone(),
@@ -87,3 +87,35 @@ where
}
}
}
pub async fn build_client_config(config: &AppConfig, vars: VarsMap) -> Result<()> {
let result_file: PathBuf;
let created: bool;
if let OpenSSLProviderArg::ExternalBin(_) = config.openssl {
let certs = Certs::new(config, OpenSSLBinProvider::from_cfg(config, vars));
created = certs
.build_client_config()
.await
.context("external openssl error")?;
result_file = certs.config_file;
} else {
let certs = Certs::new(config, OpenSSLLibProvider::from_cfg(config, vars));
created = certs
.build_client_config()
.await
.context("internal openssl error")?;
result_file = certs.config_file;
}
let result_file = result_file
.to_str()
.ok_or(anyhow!("result_file PathBuf to str convert error"))?;
if created {
println!("created: {result_file}");
Ok(())
} else {
Err(anyhow!("file exists: {result_file}"))
}
}