easy_rsa_registry/
lib.rs

1use std::str::FromStr;
2
3use crate::error::EasyRsaRegistryError;
4
5pub mod read;
6pub mod update;
7
8pub mod error;
9
10#[derive(PartialEq,Clone,Debug)]
11pub struct EasyRsaCertificate {
12    pub status: EasyRsaCertificateStatus,
13
14    /// Format: `YYMMDDHHMMSSZ`
15    pub expiration_date: String,
16
17    pub revocation_date: Option<String>,
18
19    pub serial_number: String,
20
21    pub status_code: EasyRsaCertificateStatusCode,
22
23    /// Example: `/CN=example-client`
24    pub certificate_subject: String
25}
26
27impl EasyRsaCertificate {
28    pub fn to_registry_row(&self) -> String {
29
30        let mut revocation_date: String = String::new();
31
32        if self.revocation_date.is_some() {
33            let tmp = &self.revocation_date.clone().unwrap();
34            revocation_date = tmp.to_string();
35        }
36
37        format!(
38            "{}\t{}\t{}\t{}\t{}\t{}", self.status.to_string(), self.expiration_date.to_string(),
39            revocation_date, self.serial_number.to_string(), self.status_code.to_string(),
40            self.certificate_subject.to_string()
41        )
42    }
43}
44
45#[derive(PartialEq,Clone,Debug)]
46pub enum EasyRsaCertificateStatus {
47    /// Certificate is currently valid and has not been revoked.
48    Valid,
49
50    /// Certificate has been revoked and is no longer considered valid.
51    Revoked,
52
53    /// Certificate has reached its expiration date and is no longer considered valid.
54    Expired,
55
56    /// Indicates that the status of the certificate is unknown or hasn't been checked yet.
57    Unknown
58}
59
60impl ToString for EasyRsaCertificateStatus {
61    fn to_string(&self) -> String {
62        match self {
63            EasyRsaCertificateStatus::Valid => "V".to_string(),
64            EasyRsaCertificateStatus::Expired => "E".to_string(),
65            EasyRsaCertificateStatus::Revoked => "R".to_string(),
66            EasyRsaCertificateStatus::Unknown => "X".to_string()
67        }
68    }
69}
70
71impl FromStr for EasyRsaCertificateStatus {
72    type Err = EasyRsaRegistryError;
73
74    fn from_str(s: &str) -> Result<Self, Self::Err> {
75        let result = match s {
76            "V" => EasyRsaCertificateStatus::Valid,
77            "E" => EasyRsaCertificateStatus::Expired,
78            "R" => EasyRsaCertificateStatus::Revoked,
79            _ => EasyRsaCertificateStatus::Unknown,
80        };
81
82        Ok(result)
83    }
84}
85
86#[derive(PartialEq,Clone,Debug)]
87pub enum EasyRsaCertificateStatusCode {
88    /// Certificate is currently valid and has not been revoked.
89    Valid,
90
91    /// Certificate has been revoked and is no longer considered valid.
92    Revoked,
93
94    /// Certificate has reached its expiration date and is no longer considered valid.
95    Expired,
96
97    /// Indicates that the status of the certificate is unknown or hasn't been checked yet.
98    Unknown
99}
100
101impl ToString for EasyRsaCertificateStatusCode {
102    fn to_string(&self) -> String {
103        match &self {
104            EasyRsaCertificateStatusCode::Valid => "01".to_string(),
105            EasyRsaCertificateStatusCode::Expired => "02".to_string(),
106            EasyRsaCertificateStatusCode::Revoked => "03".to_string(),
107            _ => "unknown".to_string()
108        }
109    }
110}
111
112impl FromStr for EasyRsaCertificateStatusCode {
113    type Err = EasyRsaRegistryError;
114
115    fn from_str(s: &str) -> Result<Self, Self::Err> {
116        let result = match s {
117            "01" => EasyRsaCertificateStatusCode::Valid,
118            "02" => EasyRsaCertificateStatusCode::Expired,
119            "03" => EasyRsaCertificateStatusCode::Revoked,
120            _ => EasyRsaCertificateStatusCode::Unknown,
121        };
122
123        Ok(result)
124    }
125}