HomeDisk/server/src/middleware/auth.rs

47 lines
1.2 KiB
Rust
Raw Normal View History

2022-06-23 09:52:48 +00:00
use crypto_utils::jsonwebtoken::{Token, TokenData};
use homedisk_types::errors::{AuthError, ServerError};
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> {
match Token::decode(secret, token.to_string()) {
2022-06-11 08:19:47 +00:00
// if success return claims
Ok(claims) => Ok(claims),
2022-06-11 08:19:47 +00:00
// invalid token
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
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() {
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() {
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
}
}