Skip to main content

Mountain/Binary/Build/TlsCommands/
tls_generate_cert.rs

1//! `tls_generate_cert` Tauri command - issue a fresh server
2//! cert under the CA for `hostname` (or return the existing
3//! valid one).
4
5use std::sync::{Arc, Mutex};
6
7use tauri::{AppHandle, Manager};
8
9use crate::{
10	Binary::Build::{
11		CertificateManager::{CertificateInfo, CertificateManager},
12		TlsCommands::CertificateGenerationResult::CertificateGenerationResult,
13	},
14	dev_log,
15};
16
17#[tauri::command]
18pub async fn tls_generate_cert(app_handle:AppHandle, hostname:String) -> Result<CertificateGenerationResult, String> {
19	dev_log!("security", "generating certificate for {}", hostname);
20
21	let state = app_handle
22		.try_state::<Arc<Mutex<CertificateManager>>>()
23		.ok_or("Certificate manager not found")?;
24
25	let cert_manager = state.clone();
26
27	let manager = cert_manager.lock().map_err(|e| format!("Failed to acquire lock: {}", e))?;
28
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}