2022-06-23 09:52:48 +00:00
|
|
|
use crypto_utils::jsonwebtoken::{Token, TokenData};
|
2022-04-23 21:48:20 +00:00
|
|
|
use homedisk_types::errors::{AuthError, ServerError};
|
2022-04-23 19:21:04 +00:00
|
|
|
|
2022-06-08 17:08:06 +00:00
|
|
|
/// Validate user token
|
2022-06-23 09:52:48 +00:00
|
|
|
pub fn validate_jwt(secret: &[u8], token: &str) -> Result<TokenData, ServerError> {
|
2022-04-23 21:48:20 +00:00
|
|
|
match Token::decode(secret, token.to_string()) {
|
2022-06-11 08:19:47 +00:00
|
|
|
// if success return claims
|
2022-04-23 21:48:20 +00:00
|
|
|
Ok(claims) => Ok(claims),
|
2022-06-11 08:19:47 +00:00
|
|
|
// invalid token
|
2022-04-23 21:48:20 +00:00
|
|
|
Err(_) => Err(ServerError::AuthError(AuthError::InvalidToken)),
|
|
|
|
}
|
|
|
|
}
|
2022-06-08 22:02:20 +00:00
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
|
|
|
use homedisk_database::User;
|
|
|
|
|
|
|
|
use super::validate_jwt;
|
2022-08-15 19:34:23 +00:00
|
|
|
use crate::middleware::create_token;
|
2022-06-08 22:02:20 +00:00
|
|
|
|
2022-07-04 20:19:12 +00:00
|
|
|
const USERNAME: &str = "username";
|
|
|
|
const PASSWORD: &str = "password";
|
|
|
|
|
2022-07-02 10:36:02 +00:00
|
|
|
const SECRET: &[u8] = b"secret";
|
|
|
|
const INVALID_SECRET: &[u8] = b"invalid secret";
|
|
|
|
|
2022-06-11 08:19:47 +00:00
|
|
|
/// Test a token validation
|
2022-06-08 22:02:20 +00:00
|
|
|
#[test]
|
|
|
|
fn validate_token() {
|
2022-07-04 20:19:12 +00:00
|
|
|
let user = User::new(USERNAME, PASSWORD);
|
2022-06-08 22:02:20 +00:00
|
|
|
|
2022-07-02 10:36:02 +00:00
|
|
|
let token = create_token(&user, SECRET, 1).unwrap();
|
|
|
|
|
|
|
|
validate_jwt(SECRET, &token).unwrap();
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Test a token validation (invalid secret)
|
|
|
|
#[test]
|
|
|
|
fn validate_token_invalid_secret() {
|
2022-07-04 20:19:12 +00:00
|
|
|
let user = User::new(USERNAME, PASSWORD);
|
2022-07-02 10:36:02 +00:00
|
|
|
|
|
|
|
let token = create_token(&user, SECRET, 1).unwrap();
|
2022-06-08 22:02:20 +00:00
|
|
|
|
2022-07-02 10:36:02 +00:00
|
|
|
validate_jwt(INVALID_SECRET, &token).unwrap_err();
|
2022-06-08 22:02:20 +00:00
|
|
|
}
|
|
|
|
}
|