From c5766ebb51683b211a984ebc6ff2689c291e6764 Mon Sep 17 00:00:00 2001 From: itsvyle <65409906+itsvyle@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:22:47 +0100 Subject: [PATCH] fix: add chrono to display validity range --- Cargo.lock | 1 + Cargo.toml | 1 + yazi-shared/src/time.rs | 31 +----------------------------- yazi-vfs/Cargo.toml | 1 + yazi-vfs/src/provider/sftp/conn.rs | 25 +++++++++++++++--------- 5 files changed, 20 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ec82542..2e865ad9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6238,6 +6238,7 @@ name = "yazi-vfs" version = "26.2.2" dependencies = [ "anyhow", + "chrono", "deadpool", "either", "futures", diff --git a/Cargo.toml b/Cargo.toml index cbed9f95..dc1bc0ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,7 @@ ansi-to-tui = "8.0.1" anyhow = "1.0.102" base64 = "0.22.1" bitflags = { version = "2.11.0", features = [ "serde" ] } +chrono = "0.4.44" clap = { version = "4.5.60", features = [ "derive" ] } core-foundation-sys = "0.8.7" crossterm = { version = "0.29.0", features = [ "event-stream" ] } diff --git a/yazi-shared/src/time.rs b/yazi-shared/src/time.rs index 59d72c61..e512a2d3 100644 --- a/yazi-shared/src/time.rs +++ b/yazi-shared/src/time.rs @@ -1,35 +1,6 @@ -use std::time::{Duration, SystemTime, UNIX_EPOCH}; +use std::time::{SystemTime, UNIX_EPOCH}; #[inline] pub fn timestamp_us() -> u64 { SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards").as_micros() as _ -} - -pub fn format_duration(duration: Duration) -> String { - // go till days precision, but only show the non-zero parts - let mut secs = duration.as_secs(); - let days = secs / 86_400; - secs %= 86_400; - let hours = secs / 3_600; - secs %= 3_600; - let minutes = secs / 60; - secs %= 60; - let mut parts = Vec::with_capacity(4); - if days > 0 { - parts.push(format!("{}d", days)); - } - if hours > 0 || days > 0 { - parts.push(format!("{:0>2}h", hours)); - } - if minutes > 0 || hours > 0 || days > 0 { - parts.push(format!("{:0>2}m", minutes)); - } - if secs > 0 || minutes > 0 || hours > 0 || days > 0 { - parts.push(format!("{:0>2}s", secs)); - } - if parts.is_empty() { - "0s".to_string() - } else { - parts.join("") - } } \ No newline at end of file diff --git a/yazi-vfs/Cargo.toml b/yazi-vfs/Cargo.toml index 21a0782b..04ca946f 100644 --- a/yazi-vfs/Cargo.toml +++ b/yazi-vfs/Cargo.toml @@ -21,6 +21,7 @@ yazi-shared = { path = "../yazi-shared", version = "26.2.2" } # External dependencies anyhow = { workspace = true } +chrono = {workspace = true} deadpool = { version = "0.13.0", default-features = false, features = [ "managed", "rt_tokio_1" ] } either = { workspace = true } futures = { workspace = true } diff --git a/yazi-vfs/src/provider/sftp/conn.rs b/yazi-vfs/src/provider/sftp/conn.rs index c51e8000..06923796 100644 --- a/yazi-vfs/src/provider/sftp/conn.rs +++ b/yazi-vfs/src/provider/sftp/conn.rs @@ -3,7 +3,7 @@ use std::{io, sync::Arc, time::Duration}; use russh::keys::PrivateKeyWithHashAlg; use yazi_config::vfs::ServiceSftp; use yazi_fs::provider::local::Local; -use yazi_shared::{format_duration, timestamp_us}; +use yazi_shared::timestamp_us; #[derive(Clone, Copy)] pub(super) struct Conn { @@ -175,15 +175,22 @@ impl Conn { russh::Error::InvalidConfig(format!("Certificate signature verification failed: {e}")) })?; let unix_timestamp = timestamp_us() / 1_000_000; - if unix_timestamp < cert.valid_after() { + + if unix_timestamp < cert.valid_after() || unix_timestamp > cert.valid_before() { + let format_time = |ts: u64| { + i64::try_from(ts) + .ok() + .and_then(chrono::DateTime::from_timestamp_secs) + .map(|dt| dt.with_timezone(&chrono::Local).format("%Y-%m-%d %H:%M:%S").to_string()) + .unwrap_or_else(|| "unknown date".to_string()) + }; + + let start = format_time(cert.valid_after()); + let end = format_time(cert.valid_before()); + return Err(russh::Error::InvalidConfig(format!( - "Certificate will be valid in {}", - format_duration(Duration::from_secs(cert.valid_after() - unix_timestamp)) - ))); - } else if unix_timestamp > cert.valid_before() { - return Err(russh::Error::InvalidConfig(format!( - "Certificate expired {} ago", - format_duration(Duration::from_secs(unix_timestamp - cert.valid_before())) + "Certificate is invalid. The validity range is {} to {}", + start, end ))); } }