From c5d8ebd89f2a830697362c69d8444797e44263c9 Mon Sep 17 00:00:00 2001 From: Ultradesu Date: Sat, 19 Jul 2025 12:20:37 +0300 Subject: [PATCH] Added web ui --- Cargo.toml | 2 +- src/server.rs | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 24c9a9b..fd5b4ea 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "khm" -version = "0.8.0" +version = "0.8.1" edition = "2021" authors = ["AB "] diff --git a/src/server.rs b/src/server.rs index b0ca4b4..39147cc 100644 --- a/src/server.rs +++ b/src/server.rs @@ -89,6 +89,7 @@ pub async fn get_keys( flow_id: web::Path, allowed_flows: web::Data>, req: HttpRequest, + query: web::Query>, ) -> impl Responder { let client_hostname = get_client_hostname(&req); let flow_id_str = flow_id.into_inner(); @@ -108,10 +109,24 @@ pub async fn get_keys( let flows = flows.lock().unwrap(); if let Some(flow) = flows.iter().find(|flow| flow.name == flow_id_str) { - let servers: Vec<&SshKey> = flow.servers.iter().collect(); + // Check if we should include deprecated keys (default: false for CLI clients) + let include_deprecated = query.get("include_deprecated") + .map(|v| v == "true") + .unwrap_or(false); + + let servers: Vec<&SshKey> = if include_deprecated { + // Return all keys (for web interface) + flow.servers.iter().collect() + } else { + // Return only active keys (for CLI clients) + flow.servers.iter().filter(|key| !key.deprecated).collect() + }; + info!( - "Returning {} keys for flow '{}' to client '{}'", + "Returning {} keys ({} total, deprecated filtered: {}) for flow '{}' to client '{}'", servers.len(), + flow.servers.len(), + !include_deprecated, flow_id_str, client_hostname );