summaryrefslogtreecommitdiffstats
path: root/vendor/pasetors/src
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:57:31 +0000
commitdc0db358abe19481e475e10c32149b53370f1a1c (patch)
treeab8ce99c4b255ce46f99ef402c27916055b899ee /vendor/pasetors/src
parentReleasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff)
downloadrustc-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.rs45
-rw-r--r--vendor/pasetors/src/lib.rs2
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]