mirror of
https://github.com/danbulant/Portfolio
synced 2026-05-24 12:35:31 +00:00
96 lines
3.6 KiB
Rust
96 lines
3.6 KiB
Rust
use thiserror::Error;
|
|
|
|
#[derive(Error, Debug)]
|
|
|
|
// TODO: Lepší hlášky
|
|
pub enum ServiceError {
|
|
#[error("Invalid application id")]
|
|
InvalidApplicationId,
|
|
#[error("Invalid credentials")]
|
|
InvalidCredentials,
|
|
#[error("Forbidden")]
|
|
Forbidden,
|
|
#[error("Session expired, please login agai")]
|
|
ExpiredSession,
|
|
#[error("Error while encoding JWT")]
|
|
JwtError,
|
|
#[error("User already exists")]
|
|
UserAlreadyExists,
|
|
#[error("Candidate not found")]
|
|
CandidateNotFound,
|
|
#[error("Parrent not found")]
|
|
ParentNotFound,
|
|
#[error("Database error")]
|
|
DbError(#[from] sea_orm::DbErr),
|
|
#[error("User not found, please contact technical support")]
|
|
UserNotFoundByJwtId,
|
|
#[error("User not found, please contact technical support")]
|
|
UserNotFoundBySessionId,
|
|
#[error("Crypto hash failed, please contact technical support")]
|
|
CryptoHashFailed,
|
|
#[error("Crypto encryption failed, please contact technical support")]
|
|
CryptoEncryptFailed,
|
|
#[error("Crypto decryption failed, please contact technical support")]
|
|
CryptoDecryptFailed,
|
|
#[error("Candidate details not set, please contact technical support")]
|
|
CandidateDetailsNotSet,
|
|
#[error("Tokio join error")]
|
|
TokioJoinError(#[from] tokio::task::JoinError),
|
|
#[error("Age encrypt error")]
|
|
AgeEncryptError(#[from] age::EncryptError),
|
|
#[error("Age decrypt error")]
|
|
AgeDecryptError(#[from] age::DecryptError),
|
|
#[error("Age key error")]
|
|
AgeKeyError(String),
|
|
#[error("IO error")]
|
|
IOError(#[from] std::io::Error),
|
|
#[error("Base64 decode error")]
|
|
Base64DecodeError(#[from] base64::DecodeError),
|
|
#[error("UTF8 decode error")]
|
|
UTF8DecodeError(#[from] std::string::FromUtf8Error),
|
|
#[error("Argon config error")]
|
|
ArgonConfigError(#[from] argon2::Error),
|
|
#[error("Argon hash error")]
|
|
ArgonHashError(#[from] argon2::password_hash::Error),
|
|
#[error("AES error")]
|
|
AesError(#[from] aes_gcm_siv::Error),
|
|
#[error("Portfolio is incomplete")]
|
|
IncompletePortfolio,
|
|
#[error("Zip error")]
|
|
ZipError(#[from] async_zip::error::ZipError)
|
|
}
|
|
|
|
impl ServiceError {
|
|
pub fn code(&self) -> u16 {
|
|
match self {
|
|
ServiceError::InvalidApplicationId => 400,
|
|
ServiceError::InvalidCredentials => 401,
|
|
ServiceError::Forbidden => 403,
|
|
ServiceError::ExpiredSession => 401,
|
|
ServiceError::JwtError => 500,
|
|
ServiceError::UserAlreadyExists => 409,
|
|
ServiceError::CandidateNotFound => 404,
|
|
ServiceError::ParentNotFound => 500,
|
|
ServiceError::DbError(_) => 500,
|
|
ServiceError::UserNotFoundByJwtId => 500,
|
|
ServiceError::UserNotFoundBySessionId => 500,
|
|
ServiceError::CryptoHashFailed => 500,
|
|
ServiceError::CryptoEncryptFailed => 500,
|
|
ServiceError::CryptoDecryptFailed => 500,
|
|
ServiceError::CandidateDetailsNotSet => 500,
|
|
ServiceError::AgeEncryptError(_) => 500,
|
|
ServiceError::AgeDecryptError(_) => 500,
|
|
ServiceError::AgeKeyError(_) => 500,
|
|
ServiceError::IOError(_) => 500,
|
|
ServiceError::Base64DecodeError(_) => 500,
|
|
ServiceError::UTF8DecodeError(_) => 500,
|
|
ServiceError::ArgonHashError(_) => 500,
|
|
ServiceError::TokioJoinError(_) => 500,
|
|
ServiceError::AesError(_) => 500,
|
|
ServiceError::ArgonConfigError(_) => 500,
|
|
//TODO: Correct code
|
|
ServiceError::IncompletePortfolio => 500,
|
|
ServiceError::ZipError(_) => 500,
|
|
}
|
|
}
|
|
}
|