Expose subject certificate getter.

This commit is contained in:
Jean-Christophe Amiel 2025-12-14 12:00:28 +01:00
parent cd3534e411
commit 10e56ff441
No known key found for this signature in database
GPG Key ID: 07FF11CFD55356CC
4 changed files with 45 additions and 12 deletions

View File

@ -27,7 +27,7 @@ use super::easy_ext::CertInfo;
/// (i.e. a certificate without serial number).
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Certificate {
pub subject: Option<String>,
subject: Option<String>,
pub issuer: String,
pub start_date: DateTime<Utc>,
pub expire_date: DateTime<Utc>,
@ -35,6 +35,31 @@ pub struct Certificate {
pub subject_alt_name: Option<String>,
}
impl Certificate {
/// Creates a new instance.
pub fn new(
subject: Option<String>,
issuer: String,
start_date: DateTime<Utc>,
expire_date: DateTime<Utc>,
serial_number: String,
subject_alt_name: Option<String>,
) -> Self {
Self {
subject,
issuer,
start_date,
expire_date,
serial_number,
subject_alt_name,
}
}
pub fn subject(&self) -> Option<&String> {
self.subject.as_ref()
}
}
impl TryFrom<CertInfo> for Certificate {
type Error = String;

View File

@ -446,7 +446,7 @@ impl ResponseCookieJson {
impl CertificateJson {
fn from_certificate(c: &Certificate) -> Self {
CertificateJson {
subject: c.subject.clone(),
subject: c.subject().cloned(),
issuer: c.issuer.clone(),
start_date: c.start_date.to_string(),
expire_date: c.expire_date.to_string(),

View File

@ -135,7 +135,7 @@ fn get_call_html(
let end_date = certificate.expire_date.to_string();
let mut values = vec![];
if let Some(subject) = certificate.subject.as_ref() {
if let Some(subject) = certificate.subject() {
values.push(("Subject", subject.as_str()));
}
values.push(("Issuer", certificate.issuer.as_str()));

View File

@ -384,7 +384,7 @@ fn eval_query_certificate(
) -> QueryResult {
if let Some(certificate) = &response.certificate {
let value = match certificate_attribute {
CertificateAttributeName::Subject => match certificate.subject.as_ref() {
CertificateAttributeName::Subject => match certificate.subject() {
Some(s) => Value::String(s.clone()),
None => return Ok(None),
},
@ -1485,17 +1485,25 @@ pub mod tests {
)
.unwrap()
.is_none());
let subject = Some("A=B, C=D".to_string());
let issuer = String::new();
let start_date = Default::default();
let expire_date = Default::default();
let serial_number = String::new();
let subject_alt_name = Some(String::new());
let certificate = http::Certificate::new(
subject,
issuer,
start_date,
expire_date,
serial_number,
subject_alt_name,
);
assert_eq!(
eval_query_certificate(
&Response {
certificate: Some(http::Certificate {
subject: Some("A=B, C=D".to_string()),
issuer: String::new(),
start_date: Default::default(),
expire_date: Default::default(),
serial_number: String::new(),
subject_alt_name: Some(String::new())
}),
certificate: Some(certificate),
..default_response()
},
CertificateAttributeName::Subject