- Added JWT authentication with token generation and validation. - Introduced user registration functionality with email and password. - Integrated Argon2 for password hashing. - Created SQLite user repository for user data persistence. - Updated application context to include user repository and configuration settings. - Added environment variable support for JWT secret and registration allowance. - Enhanced error handling for unauthorized access and validation errors. - Updated presentation layer to handle login and registration requests.
34 lines
1.0 KiB
Rust
34 lines
1.0 KiB
Rust
use axum::{
|
|
http::StatusCode,
|
|
response::{IntoResponse, Response},
|
|
};
|
|
use domain::errors::DomainError;
|
|
|
|
pub struct ApiError(pub DomainError);
|
|
|
|
impl From<DomainError> for ApiError {
|
|
fn from(err: DomainError) -> Self {
|
|
Self(err)
|
|
}
|
|
}
|
|
|
|
impl IntoResponse for ApiError {
|
|
fn into_response(self) -> Response {
|
|
let (status, error_message) = match self.0 {
|
|
DomainError::InvalidRating { .. } => (StatusCode::BAD_REQUEST, self.0.to_string()),
|
|
DomainError::ValidationError(msg) => (StatusCode::BAD_REQUEST, msg),
|
|
DomainError::NotFound(msg) => (StatusCode::NOT_FOUND, msg),
|
|
DomainError::Unauthorized(msg) => (StatusCode::UNAUTHORIZED, msg),
|
|
DomainError::InfrastructureError(_) => {
|
|
tracing::error!("Internal Infrastructure Error: {:?}", self.0);
|
|
(
|
|
StatusCode::INTERNAL_SERVER_ERROR,
|
|
"Internal server error".to_string(),
|
|
)
|
|
}
|
|
};
|
|
|
|
(status, error_message).into_response()
|
|
}
|
|
}
|