Skip to main content

Mountain/Binary/Build/TlsCommands/
tls_generate_cert.rs

1#![allow(non_snake_case)]
2
3//! `tls_generate_cert` Tauri command - issue a fresh server
4//! cert under the CA for `hostname` (or return the existing
5//! valid one).
6
7use 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}