diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
commit | dc0db358abe19481e475e10c32149b53370f1a1c (patch) | |
tree | ab8ce99c4b255ce46f99ef402c27916055b899ee /vendor/pasetors/src | |
parent | Releasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff) | |
download | rustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip |
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/pasetors/src')
-rw-r--r-- | vendor/pasetors/src/claims.rs | 45 | ||||
-rw-r--r-- | vendor/pasetors/src/lib.rs | 2 |
2 files changed, 46 insertions, 1 deletions
diff --git a/vendor/pasetors/src/claims.rs b/vendor/pasetors/src/claims.rs index b6d97580a..10f20b618 100644 --- a/vendor/pasetors/src/claims.rs +++ b/vendor/pasetors/src/claims.rs @@ -1,6 +1,7 @@ #![cfg_attr(docsrs, doc(cfg(feature = "std")))] use crate::errors::Error; +use core::convert::TryFrom; use serde_json::Value; use std::collections::HashMap; use time::format_description::well_known::Rfc3339; @@ -40,6 +41,30 @@ impl Claims { Ok(claims) } + /// Create a new `Claims` instance expiring in `duration`, setting: + /// - `iat`, `nbf` to current UTC time + /// - `iat + duration` + /// + /// Errors: + /// - If adding current time with `duration` would overflow + /// - If `core::time::Duration` failed to convert to `time::Duration` + pub fn new_expires_in(duration: &core::time::Duration) -> Result<Self, Error> { + let iat = OffsetDateTime::now_utc(); + let nbf = iat; + let mut exp = iat; + exp += Duration::try_from(*duration).map_err(|_| Error::InvalidClaim)?; + + let mut claims = Self { + list_of: HashMap::new(), + }; + + claims.issued_at(&iat.format(&Rfc3339).map_err(|_| Error::InvalidClaim)?)?; + claims.not_before(&nbf.format(&Rfc3339).map_err(|_| Error::InvalidClaim)?)?; + claims.expiration(&exp.format(&Rfc3339).map_err(|_| Error::InvalidClaim)?)?; + + Ok(claims) + } + /// Removes the `exp` claim, indicating a token that never expires. pub fn non_expiring(&mut self) { if self.contains_claim("exp") { @@ -731,4 +756,24 @@ mod test { claims.list_of.remove("exp"); assert!(claims_validation.validate_claims(&claims).is_err()); } + + #[test] + fn test_custom_expiration_duration() { + // Duration of 3 hours instead of 1. + let duration = core::time::Duration::new(10800, 0); + let mut claims = Claims::new_expires_in(&duration).unwrap(); + + let claims_validation = ClaimsValidationRules::new(); + assert!(claims_validation.validate_claims(&claims).is_ok()); + + claims + .list_of + .insert("exp".to_string(), "2019-01-01T00:00:00+00:00".into()) + .unwrap(); + // Expired + assert_eq!( + claims_validation.validate_claims(&claims).unwrap_err(), + Error::ClaimValidation + ); + } } diff --git a/vendor/pasetors/src/lib.rs b/vendor/pasetors/src/lib.rs index 6b58b8378..eb29a7166 100644 --- a/vendor/pasetors/src/lib.rs +++ b/vendor/pasetors/src/lib.rs @@ -183,7 +183,7 @@ unused_qualifications, overflowing_literals )] -#![doc(html_root_url = "https://docs.rs/pasetors/0.6.6")] +#![doc(html_root_url = "https://docs.rs/pasetors/0.6.7")] #![cfg_attr(docsrs, feature(doc_cfg))] #[macro_use] |