diff --git a/src/token_stuff/mod.rs b/src/token_stuff/mod.rs index 2771dec..31ca615 100644 --- a/src/token_stuff/mod.rs +++ b/src/token_stuff/mod.rs @@ -18,11 +18,28 @@ pub fn get_key() -> Result { Ok(key) } -pub fn get_expiration() -> time::Result { +pub fn get_issued() -> time::Result { let now = time::OffsetDateTime::now_utc(); - let epoch = time::OffsetDateTime::UNIX_EPOCH; - let since_the_epoch = now - epoch; - Ok(since_the_epoch) + // let epoch = time::OffsetDateTime::UNIX_EPOCH; + // let since_the_epoch = now - epoch; + // Ok(since_the_epoch) + Ok(now) +} + +pub fn get_expiration(issued: &time::OffsetDateTime) -> Result { + let duration_expire = time::Duration::hours(4); + let expiration = *issued + duration_expire; + Ok(expiration) +} + +mod util { + // use std::time; + pub fn time_to_std_time( + provided_time: &time::OffsetDateTime, + ) -> Result { + let converted = std::time::SystemTime::from(*provided_time); + Ok(converted) + } } pub fn create_token(provided_key: &String) -> Result<(String, i64), josekit::JoseError> { @@ -33,13 +50,19 @@ pub fn create_token(provided_key: &String) -> Result<(String, i64), josekit::Jos payload.set_subject(MESSAGE); payload.set_issuer(ISSUER); payload.set_audience(vec![AUDIENCE]); - match get_expiration() { - Ok(duration) => { + match get_issued() { + Ok(issued) => { + /* let expire = duration.whole_seconds(); let _ = payload.set_claim( - "expiration", + "issued", Some(serde_json::to_value(expire.to_string()).unwrap()), ); + */ + let expire = get_expiration(&issued).unwrap(); + // payload.set_issued_at(std::time::Duration::try_from(duration).unwrap()); + payload.set_issued_at(&util::time_to_std_time(&issued).unwrap()); + payload.set_expires_at(&util::time_to_std_time(&expire).unwrap()); let key: String = if provided_key.is_empty() { get_key().unwrap() @@ -47,6 +70,8 @@ pub fn create_token(provided_key: &String) -> Result<(String, i64), josekit::Jos provided_key.to_owned() }; + let duration = expire - time::OffsetDateTime::UNIX_EPOCH; + let signer = Hs256.signer_from_bytes(key.as_bytes()).unwrap(); Ok(( josekit::jwt::encode_with_signer(&payload, &header, &signer).unwrap(),