Mountain/Binary/Build/TlsCommands/
tls_generate_cert.rs1#![allow(non_snake_case)]
2
3use std::sync::{Arc, Mutex};
8
9use tauri::{AppHandle, Manager};
10
11use crate::{
12 Binary::Build::{
13 CertificateManager::{CertificateInfo, CertificateManager},
14 TlsCommands::CertificateGenerationResult::CertificateGenerationResult,
15 },
16 dev_log,
17};
18
19#[tauri::command]
20pub async fn tls_generate_cert(app_handle:AppHandle, hostname:String) -> Result<CertificateGenerationResult, String> {
21 dev_log!("security", "generating certificate for {}", hostname);
22
23 let state = app_handle
24 .try_state::<Arc<Mutex<CertificateManager>>>()
25 .ok_or("Certificate manager not found")?;
26
27 let cert_manager = state.clone();
28 let manager = cert_manager.lock().map_err(|e| format!("Failed to acquire lock: {}", e))?;
29 let hostname_clone = hostname.clone();
30
31 let _server_config = manager
32 .get_server_cert(&hostname)
33 .await
34 .map_err(|e| format!("Failed to generate certificate: {}", e))?;
35
36 let cert_info:CertificateInfo = manager
37 .get_server_cert_info(&hostname)
38 .ok_or_else(|| "Certificate not found after generation".to_string())?;
39
40 Ok(CertificateGenerationResult {
41 hostname:hostname_clone,
42 success:true,
43 valid_until:cert_info.valid_until,
44 message:format!("Certificate generated successfully for {}", hostname),
45 })
46}