1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use crate::config::Config;
use crate::errors::*;
use crate::persist::FilePersist;
use colored::Colorize;
use nix::unistd::AccessFlags;

pub fn run(config: Config) -> Result<()> {
    let persist = FilePersist::new(&config);

    nix::unistd::access(&config.data_dir, AccessFlags::X_OK).with_context(|| {
        anyhow!(
            "Detected insufficient permissions to access {:?}",
            config.data_dir
        )
    })?;

    for cert in config.certs {
        let name = cert.name;
        // TODO: also show alt names?
        if let Some(cert) = persist.load_cert_info(&name)? {
            let days_left = cert.days_left();
            let status = format!("{} days left", days_left);
            let status = if days_left > config.renew_if_days_left {
                status.green()
            } else if days_left > 0 {
                status.yellow()
            } else {
                status.red()
            };
            println!("{:50} {}", name.bold(), status);
        } else {
            println!("{:50} -", name.bold());
        }
    }

    Ok(())
}