From a38677aa284042caafda4a310122a2253dc650d0 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 1 Aug 2025 15:45:08 -0400 Subject: [PATCH 1/4] Refactored function --- src/token.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/token.rs b/src/token.rs index 68f355a..205c524 100644 --- a/src/token.rs +++ b/src/token.rs @@ -80,22 +80,36 @@ mod util { } } +#[derive(Debug)] +pub struct TokenResource { + pub message: String, + pub issuer: String, + pub audiences: Vec, +} + pub fn create_token( key: &String, - message: &String, - issuer: &String, - audience: &String, + // message: &String, + // issuer: &String, + // audience: &String, + token_resource: &TokenResource, + duration: time::Duration, ) -> Result<(String, i64), josekit::JoseError> { let mut header = josekit::jws::JwsHeader::new(); header.set_token_type("JWT"); let mut payload = josekit::jwt::JwtPayload::new(); + let message = &token_resource.message; + let issuer = &token_resource.issuer; + let audiences: &Vec = &token_resource.audiences; payload.set_subject(message); payload.set_issuer(issuer); - payload.set_audience(vec![audience]); + // payload.set_audience(vec![audience]); + payload.set_audience(audiences.clone()); match get_issued() { Ok(issued) => { - let expire = get_expiration(&issued).unwrap(); + // let expire = get_expiration(&issued).unwrap(); + let expire = issued + duration; payload.set_issued_at(&util::time_to_std_time(&issued).unwrap()); payload.set_expires_at(&util::time_to_std_time(&expire).unwrap()); -- 2.43.0 From bc3cdabe9cad993d515b1cd019c4bd381613a594 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 1 Aug 2025 15:52:43 -0400 Subject: [PATCH 2/4] Added test --- src/token.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/token.rs b/src/token.rs index 205c524..2def3fd 100644 --- a/src/token.rs +++ b/src/token.rs @@ -66,10 +66,12 @@ pub fn get_issued() -> time::Result { Ok(time::OffsetDateTime::now_utc()) } +/* pub fn get_expiration(issued: &time::OffsetDateTime) -> Result { let duration_expire = time::Duration::hours(4); Ok(*issued + duration_expire) } +*/ mod util { pub fn time_to_std_time( @@ -143,4 +145,25 @@ mod tests { check_scope, token.scope ); } + + #[test] + fn test_token_creation() { + let key = String::from("c3092urmc2219ix320i40m293ic29IM09IN0u879Y8B98YB8yb86TN7B55R4yv4RCVU6Bi8YO8U"); + let test_token_resource = TokenResource { + issuer: String::from("icarus_auth_test"), + message: String::from("Authorization"), + audiences: vec![String::from("icarus_test")] + }; + let token_expiration_duration = time::Duration::hours(2); + + match create_token(&key, &test_token_resource, token_expiration_duration) { + Ok((token, expire_duration)) => { + assert_eq!(false, token.is_empty(), "Error: Token is empty"); + assert!(expire_duration > 0, "Token expire duration is invalid {expire_duration:?}"); + } + Err(err) => { + assert!(false, "Error: {err:?}"); + } + } + } } -- 2.43.0 From 159a04c3de886884de1ac9d147a6d48fd3e2f549 Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 1 Aug 2025 15:57:05 -0400 Subject: [PATCH 3/4] Cleanup --- src/token.rs | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/token.rs b/src/token.rs index 2def3fd..7655671 100644 --- a/src/token.rs +++ b/src/token.rs @@ -66,13 +66,6 @@ pub fn get_issued() -> time::Result { Ok(time::OffsetDateTime::now_utc()) } -/* -pub fn get_expiration(issued: &time::OffsetDateTime) -> Result { - let duration_expire = time::Duration::hours(4); - Ok(*issued + duration_expire) -} -*/ - mod util { pub fn time_to_std_time( provided_time: &time::OffsetDateTime, @@ -89,16 +82,15 @@ pub struct TokenResource { pub audiences: Vec, } +pub const TOKEN_TYPE: &str = "JWT"; + pub fn create_token( key: &String, - // message: &String, - // issuer: &String, - // audience: &String, token_resource: &TokenResource, duration: time::Duration, ) -> Result<(String, i64), josekit::JoseError> { let mut header = josekit::jws::JwsHeader::new(); - header.set_token_type("JWT"); + header.set_token_type(TOKEN_TYPE); let mut payload = josekit::jwt::JwtPayload::new(); let message = &token_resource.message; @@ -106,11 +98,9 @@ pub fn create_token( let audiences: &Vec = &token_resource.audiences; payload.set_subject(message); payload.set_issuer(issuer); - // payload.set_audience(vec![audience]); payload.set_audience(audiences.clone()); match get_issued() { Ok(issued) => { - // let expire = get_expiration(&issued).unwrap(); let expire = issued + duration; payload.set_issued_at(&util::time_to_std_time(&issued).unwrap()); payload.set_expires_at(&util::time_to_std_time(&expire).unwrap()); @@ -148,18 +138,23 @@ mod tests { #[test] fn test_token_creation() { - let key = String::from("c3092urmc2219ix320i40m293ic29IM09IN0u879Y8B98YB8yb86TN7B55R4yv4RCVU6Bi8YO8U"); + let key = String::from( + "c3092urmc2219ix320i40m293ic29IM09IN0u879Y8B98YB8yb86TN7B55R4yv4RCVU6Bi8YO8U", + ); let test_token_resource = TokenResource { issuer: String::from("icarus_auth_test"), message: String::from("Authorization"), - audiences: vec![String::from("icarus_test")] + audiences: vec![String::from("icarus_test")], }; let token_expiration_duration = time::Duration::hours(2); match create_token(&key, &test_token_resource, token_expiration_duration) { Ok((token, expire_duration)) => { assert_eq!(false, token.is_empty(), "Error: Token is empty"); - assert!(expire_duration > 0, "Token expire duration is invalid {expire_duration:?}"); + assert!( + expire_duration > 0, + "Token expire duration is invalid {expire_duration:?}" + ); } Err(err) => { assert!(false, "Error: {err:?}"); -- 2.43.0 From c3051bc055adae69e8b02656c83379f1d34d3dce Mon Sep 17 00:00:00 2001 From: phoenix Date: Fri, 1 Aug 2025 15:57:13 -0400 Subject: [PATCH 4/4] Version bump --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6df3cab..b9df5e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -142,7 +142,7 @@ checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" [[package]] name = "icarus_models" -version = "0.5.2" +version = "0.5.3" dependencies = [ "josekit", "rand", diff --git a/Cargo.toml b/Cargo.toml index db65653..6bac4f5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus_models" -version = "0.5.2" +version = "0.5.3" edition = "2024" rust-version = "1.88" description = "models used for the icarus project" -- 2.43.0