2022-05-01 17:49:50 +00:00
|
|
|
use axum::Extension;
|
|
|
|
use homedisk_database::{Database, User};
|
2022-04-23 19:21:04 +00:00
|
|
|
use homedisk_types::errors::{AuthError, ServerError};
|
|
|
|
use rust_utilities::crypto::jsonwebtoken::{Claims, Token};
|
|
|
|
|
2022-04-30 20:32:08 +00:00
|
|
|
pub fn create_token(user: &User, secret: &[u8], expires: i64) -> Result<String, ServerError> {
|
|
|
|
let token = Token::new(secret, Claims::new(user.id.clone(), expires));
|
2022-04-23 19:21:04 +00:00
|
|
|
|
|
|
|
match token {
|
|
|
|
Ok(token) => Ok(token.encoded),
|
|
|
|
Err(_) => Err(ServerError::AuthError(AuthError::TokenGenerate)),
|
|
|
|
}
|
|
|
|
}
|
2022-05-01 17:49:50 +00:00
|
|
|
|
|
|
|
pub async fn find_user(db: Extension<Database>, user_id: String) -> Result<User, ServerError> {
|
|
|
|
match db.find_user_by_id(user_id).await {
|
|
|
|
Ok(user) => Ok(user),
|
|
|
|
Err(err) => match err {
|
|
|
|
homedisk_database::Error::UserNotFound => {
|
|
|
|
Err(ServerError::AuthError(AuthError::UserNotFound))
|
|
|
|
}
|
|
|
|
_ => Err(ServerError::AuthError(AuthError::UnknowError(
|
|
|
|
err.to_string(),
|
|
|
|
))),
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|