Skip to main content

Mountain/Binary/Build/TlsCommands/
tls_generate_cert.rs

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