101 lines
3.0 KiB
Rust
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),
|
|
}
|