Mountain/Binary/Build/TlsCommands/
tls_check_cert_status.rs1
2use std::sync::{Arc, Mutex};
8
9use tauri::{AppHandle, Manager};
10
11use crate::{
12 Binary::Build::{CertificateManager::CertificateManager, TlsCommands::CertificateStatus::CertificateStatus},
13 dev_log,
14};
15
16#[tauri::command]
17pub async fn tls_check_cert_status(app_handle:AppHandle, hostname:String) -> Result<CertificateStatus, String> {
18 dev_log!("security", "checking certificate status for {}", hostname);
19
20 let state = app_handle
21 .try_state::<Arc<Mutex<CertificateManager>>>()
22 .ok_or("Certificate manager not found")?;
23
24 let cert_manager = state.clone();
25
26 let manager = cert_manager.lock().map_err(|e| format!("Failed to acquire lock: {}", e))?;
27
28 if let Some(cert_info) = manager.get_server_cert_info(&hostname) {
29 let valid_until = chrono::DateTime::parse_from_rfc3339(&cert_info.valid_until)
30 .map_err(|e| format!("Invalid certificate expiry time: {}", e))?
31 .with_timezone(&chrono::Utc);
32
33 let now = chrono::Utc::now();
34
35 let days_until_expiry = (valid_until - now).num_days();
36
37 let needs_renewal = days_until_expiry <= CertificateManager::RENEWAL_THRESHOLD_DAYS;
38
39 Ok(CertificateStatus {
40 exists:true,
41 is_valid:now <= valid_until,
42 days_until_expiry,
43 needs_renewal,
44 valid_until:cert_info.valid_until,
45 })
46 } else {
47 Ok(CertificateStatus {
48 exists:false,
49 is_valid:false,
50 days_until_expiry:0,
51 needs_renewal:true,
52 valid_until:String::new(),
53 })
54 }
55}