creddy/src-tauri/src/errors.rs
2022-12-22 16:36:32 -08:00

101 lines
3.0 KiB
Rust

use thiserror::Error;
use aws_sdk_sts::{
types::SdkError as AwsSdkError,
error::GetSessionTokenError,
};
use sqlx::{
error::Error as SqlxError,
migrate::MigrateError,
};
// error during initial setup (primarily loading state from db)
#[derive(Debug, Error)]
pub enum SetupError {
#[error("Invalid database record")]
InvalidRecord, // e.g. wrong size blob for nonce or salt
#[error("Error from database: {0}")]
DbError(#[from] SqlxError),
#[error("Error running migrations: {0}")]
MigrationError(#[from] MigrateError),
#[error("Error parsing configuration from database")]
ConfigParseError(#[from] serde_json::Error),
}
// error when attempting to tell a request handler whether to release or deny credentials
#[derive(Debug, Error)]
pub enum SendResponseError {
#[error("The specified credentials request was not found")]
NotFound, // no request with the given id
#[error("The specified request was already closed by the client")]
Abandoned, // request has already been closed by client
}
// errors encountered while handling an HTTP request
#[derive(Debug, Error)]
pub enum RequestError {
#[error("Error writing to stream: {0}")]
StreamIOError(#[from] std::io::Error),
#[error("Received invalid UTF-8 in request")]
InvalidUtf8,
// MalformedHttpRequest,
#[error("HTTP request too large")]
RequestTooLarge,
#[error("Error accessing credentials: {0}")]
NoCredentials(#[from] GetCredentialsError),
#[error("Error getting client details: {0}")]
ClientInfo(#[from] ClientInfoError),
#[error("Error from Tauri: {0}")]
Tauri(#[from] tauri::Error),
#[error("No main application window found")]
NoMainWindow,
}
#[derive(Debug, Error)]
pub enum GetCredentialsError {
#[error("Credentials are currently locked")]
Locked,
#[error("No credentials are known")]
Empty,
}
#[derive(Debug, Error)]
pub enum GetSessionError {
#[error("Request completed successfully but no credentials were returned")]
NoCredentials, // SDK returned successfully but credentials are None
#[error("Error response from AWS SDK: {0}")]
SdkError(#[from] AwsSdkError<GetSessionTokenError>),
}
#[derive(Debug, Error)]
pub enum UnlockError {
#[error("App is not locked")]
NotLocked,
#[error("No saved credentials were found")]
NoCredentials,
#[error("Invalid passphrase")]
BadPassphrase,
#[error("Data was found to be corrupt after decryption")]
InvalidUtf8, // Somehow we got invalid utf-8 even though decryption succeeded
#[error("Database error: {0}")]
DbError(#[from] SqlxError),
#[error("Failed to create AWS session: {0}")]
GetSession(#[from] GetSessionError),
}
// Errors encountered while trying to figure out who's on the other end of a request
#[derive(Debug, Error)]
pub enum ClientInfoError {
#[error("Found PID for client socket, but no corresponding process")]
ProcessNotFound,
#[error("Couldn't get client socket details: {0}")]
NetstatError(#[from] netstat2::error::Error),
}