Skip to content

Commit

Permalink
Implement Claim::set_expires_in and use for new and new_expires_in (#107
Browse files Browse the repository at this point in the history
)
  • Loading branch information
franklx authored Dec 12, 2023
1 parent 66b2f11 commit 8dce01a
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions src/claims.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,44 +25,44 @@ impl Claims {
/// Errors:
/// - If adding current time with one hour would overflow
pub fn new() -> Result<Self, Error> {
let iat = OffsetDateTime::now_utc();
let nbf = iat;
let mut exp = iat;
exp += Duration::hours(1);
Self::new_expires_in(&core::time::Duration::from_secs(3600))
}

/// 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 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)?)?;
claims.set_expires_in(duration)?;

Ok(claims)
}

/// Create a new `Claims` instance expiring in `duration`, setting:
/// Set `iat`, `nbf`, `exp` claims 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> {
pub fn set_expires_in(&mut self, duration: &core::time::Duration) -> Result<(), 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)?)?;
self.issued_at(&iat.format(&Rfc3339).map_err(|_| Error::InvalidClaim)?)?;
self.not_before(&nbf.format(&Rfc3339).map_err(|_| Error::InvalidClaim)?)?;
self.expiration(&exp.format(&Rfc3339).map_err(|_| Error::InvalidClaim)?)?;

Ok(claims)
Ok(())
}

/// Removes the `exp` claim, indicating a token that never expires.
Expand Down

0 comments on commit 8dce01a

Please sign in to comment.