diff --git a/src/callers/login.rs b/src/callers/login.rs index 5ced23b..152c837 100644 --- a/src/callers/login.rs +++ b/src/callers/login.rs @@ -70,7 +70,7 @@ pub mod endpoint { if hashing::verify_password(&usr.password, hash_password.clone()).unwrap() { // Create token let key = token_stuff::get_key().unwrap(); - let token_literal = token_stuff::create_token(&key).unwrap(); + let (token_literal, duration) = token_stuff::create_token(&key).unwrap(); if token_stuff::verify_token(&key, &token_literal) { ( @@ -82,7 +82,7 @@ pub mod endpoint { username: user.username, token: token_literal, token_type: String::from(token_stuff::TOKENTYPE), - expiration: -1, + expiration: duration as i32, }], }), ) diff --git a/src/token_stuff/mod.rs b/src/token_stuff/mod.rs index 66b4045..66f78b3 100644 --- a/src/token_stuff/mod.rs +++ b/src/token_stuff/mod.rs @@ -25,7 +25,7 @@ pub fn get_expiration() -> time::Result { Ok(since_the_epoch) } -pub fn create_token(provided_key: &String) -> Result { +pub fn create_token(provided_key: &String) -> Result<(String, i64), josekit::JoseError> { let mut header = JwsHeader::new(); header.set_token_type(TOKENTYPE); @@ -40,18 +40,20 @@ pub fn create_token(provided_key: &String) -> Result "expiration", Some(serde_json::to_value(expire.to_string()).unwrap()), ); + + let key: String = if provided_key.is_empty() { + get_key().unwrap() + } else { + provided_key.to_owned() + }; + + let signer = Hs256.signer_from_bytes(key.as_bytes()).unwrap(); + Ok((josekit::jwt::encode_with_signer(&payload, &header, &signer).unwrap(), duration.whole_seconds())) } - Err(_) => {} - }; - - let key: String = if provided_key.is_empty() { - get_key().unwrap() - } else { - provided_key.to_owned() - }; - - let signer = Hs256.signer_from_bytes(key.as_bytes()).unwrap(); - Ok(josekit::jwt::encode_with_signer(&payload, &header, &signer).unwrap()) + Err(e) => { + Err(josekit::JoseError::InvalidClaim(e.into())) + } + } } pub fn verify_token(key: &String, token: &String) -> bool { @@ -72,7 +74,7 @@ mod tests { fn test_tokenize() { let special_key = get_key().unwrap(); match create_token(&special_key) { - Ok(token) => { + Ok((token, _duration)) => { let result = verify_token(&special_key, &token); assert!(result, "Token not verified"); }