Fix certificate list links to detail route

This commit is contained in:
2026-10-26 05:17:51 +00:00
parent 1a7b4a10e8
commit c1d8711cb4
2 changed files with 47 additions and 6 deletions
+34 -6
View File
@@ -234,6 +234,10 @@ pub fn CertificatesPage(vault_id: String) -> View {
}
}
fn certificate_href(vault_id: &str, cert_id: &str) -> String {
format!("/vaults/{}/certificates/{}", escape(vault_id), escape(cert_id))
}
fn flat_html(rows: &[CertificateSummary], vault_id: &str, selected: &[String]) -> String {
if rows.is_empty() {
return "<p class=\"empty-state\">No certificates match.</p>".to_string();
@@ -242,10 +246,9 @@ fn flat_html(rows: &[CertificateSummary], vault_id: &str, selected: &[String]) -
for cert in rows {
let (badge_class, badge_label) = status_badge(cert);
body.push_str(&format!(
"<tr><td>{}</td><td><a href=\"/vaults/{}/{}\">{}</a><div class=\"item-sub\">{}</div></td><td>{}</td><td>{}</td><td class=\"fingerprint\">{}</td><td>{}</td><td><span class=\"badge {}\">{}</span>{}</td><td class=\"fingerprint\">{}</td></tr>",
"<tr><td>{}</td><td><a href=\"{}\">{}</a><div class=\"item-sub\">{}</div></td><td>{}</td><td>{}</td><td class=\"fingerprint\">{}</td><td>{}</td><td><span class=\"badge {}\">{}</span>{}</td><td class=\"fingerprint\">{}</td></tr>",
checkbox(cert, selected),
escape(vault_id),
escape(&cert.id),
certificate_href(vault_id, &cert.id),
escape(&cert.name),
escape(&cert.subject),
escape(&cert.issuer_name),
@@ -303,10 +306,9 @@ fn node_html(
format!("issuer: {}", cert.issuer_name)
};
let mut row = format!(
"<div class=\"cert-row\">{}<a class=\"item-name\" href=\"/vaults/{}/{}\">{}</a>{} <span class=\"badge {}\">{}</span><span class=\"item-sub\">{}</span><span class=\"item-sub\">expires {}</span><span class=\"item-sub fingerprint\">{}</span></div>",
"<div class=\"cert-row\">{}<a class=\"item-name\" href=\"{}\">{}</a>{} <span class=\"badge {}\">{}</span><span class=\"item-sub\">{}</span><span class=\"item-sub\">expires {}</span><span class=\"item-sub fingerprint\">{}</span></div>",
checkbox(cert, selected),
escape(vault_id),
escape(&cert.id),
certificate_href(vault_id, &cert.id),
escape(&cert.name),
if cert.is_ca { " <span class=\"badge badge-ca\">CA</span>" } else { "" },
badge_class,
@@ -371,3 +373,29 @@ fn escape(value: &str) -> String {
.replace('>', "&gt;")
.replace('"', "&quot;")
}
#[cfg(test)]
mod tests {
use super::*;
fn cert(id: &str, name: &str) -> CertificateSummary {
CertificateSummary {
id: id.to_string(),
name: name.to_string(),
..CertificateSummary::default()
}
}
#[test]
fn certificate_links_point_at_the_detail_route() {
let cert = cert("cert-1", "Leaf");
let flat = flat_html(std::slice::from_ref(&cert), "vault-1", &[]);
assert!(flat.contains("href=\"/vaults/vault-1/certificates/cert-1\""));
assert!(!flat.contains("href=\"/vaults/vault-1/cert-1\""));
let tree = tree_html(std::slice::from_ref(&cert), "vault-1", &[]);
assert!(tree.contains("href=\"/vaults/vault-1/certificates/cert-1\""));
assert!(!tree.contains("href=\"/vaults/vault-1/cert-1\""));
}
}