diff options
Diffstat (limited to 'src/security.rs')
-rw-r--r-- | src/security.rs | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/src/security.rs b/src/security.rs deleted file mode 100644 index bc3b381..0000000 --- a/src/security.rs +++ /dev/null @@ -1,57 +0,0 @@ -//! Provides [`Key`] and functions to encode & decode expiring claims. - -pub use signed::Key; -pub use std::time::{SystemTime, UNIX_EPOCH}; - -mod signed; - -/// Join a string and an expiry date together into a string. -pub fn encode_expiring_claim(claim: &str, expiry_date: SystemTime) -> String { - format!( - "{}:{}", - claim, - expiry_date.duration_since(UNIX_EPOCH).unwrap().as_secs() - ) -} - -/// Extract the string, failing if the expiry date is in the past. -pub fn decode_expiring_claim(value: &str) -> Result<&str, &'static str> { - let mut parts = value.rsplitn(2, ':'); - let expiry_date = parts - .next() - .expect("first .rsplitn().next() is expected to return Some"); - let claim = parts.next().ok_or("expected colon")?; - let expiry_date: u64 = expiry_date - .parse() - .map_err(|_| "failed to parse timestamp")?; - - if expiry_date - > SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs() - { - Ok(claim) - } else { - Err("token is expired") - } -} - -#[cfg(test)] -mod tests { - use std::time::{Duration, SystemTime}; - - #[test] - fn test_expiring_claim() { - for claim in vec!["test", "", "foo:bar"] { - let encoded_claim = - super::encode_expiring_claim(claim, SystemTime::now() + Duration::from_secs(60)); - assert_eq!(super::decode_expiring_claim(&encoded_claim).unwrap(), claim); - - let encoded_claim = - super::encode_expiring_claim(claim, SystemTime::now() - Duration::from_secs(60)); - assert!(super::decode_expiring_claim(&encoded_claim).is_err()); - } - assert!(super::decode_expiring_claim("test".into()).is_err()); - } -} |