interactsh_rs/client/
errors.rs

1//! Error types for the [Client](crate::client) module.
2
3use snafu::prelude::*;
4use snafu::Backtrace;
5
6use super::http_utils::Client;
7use crate::crypto::errors::CryptoError;
8
9
10/// Inner error type for [ClientRegistrationError]
11#[derive(Debug, Snafu)]
12#[snafu(module, context(suffix(false)), visibility(pub(crate)))]
13pub enum RegistrationError {
14    #[snafu(display("Failed to send the request to the server"))]
15    RequestSendFailure { source: reqwest::Error },
16
17    #[snafu(display("Server returned an Unauthorized status code"))]
18    Unauthorized { backtrace: Backtrace },
19
20    #[snafu(display(
21        "Failed to register or deregister with the server - {status_code}: {server_msg}"
22    ))]
23    RegistrationFailure {
24        server_msg: String,
25        status_code: u16,
26        backtrace: Backtrace,
27    },
28}
29
30/// Error returned during client registration or deregistration
31///
32/// This is a wrapper error. See [RegistrationError] for the inner error types.
33#[derive(Debug, Snafu)]
34#[snafu(
35    module,
36    context(suffix(false)),
37    visibility(pub(crate)),
38    display("Failure occured during registration/deregistration")
39)]
40pub struct ClientRegistrationError<C: Client + Clone> {
41    #[snafu(source)]
42    pub error: RegistrationError,
43    pub client: C,
44}
45
46
47/// Errors returned by the [ClientBuilder](crate::client::ClientBuilder)
48#[derive(Debug, Snafu)]
49#[snafu(module, context(suffix(false)), visibility(pub(crate)))]
50pub enum ClientBuildError {
51    #[snafu(display("Builder failed to generate the RSA private key"))]
52    RsaGen { source: CryptoError },
53
54    #[snafu(display("RSA key size was not set"))]
55    MissingRsaKeySize { backtrace: Backtrace },
56
57    #[snafu(display("Interactsh server was not set"))]
58    MissingServer { backtrace: Backtrace },
59
60    #[snafu(display("Failed to extract the RSA public key"))]
61    PubKeyExtract { source: CryptoError },
62
63    #[snafu(display("Failed to encode the RSA public key"))]
64    PubKeyEncode { source: CryptoError },
65
66    #[snafu(display("Failed to build the reqwest client"))]
67    ReqwestBuildFailed { source: reqwest::Error },
68}
69
70
71/// Errors returned by the [RegisteredClient](crate::client::RegisteredClient) when polling the server
72#[derive(Debug, Snafu)]
73#[snafu(module, context(suffix(false)), visibility(pub(crate)))]
74pub enum ClientPollError {
75    #[snafu(display("Client failed to poll the Interactsh server"))]
76    PollFailure { source: reqwest::Error },
77
78    #[snafu(display("Interactsh server returned error status - {status_code}: {server_msg}"))]
79    PollErrorStatus {
80        server_msg: String,
81        status_code: u16,
82        backtrace: Backtrace,
83    },
84
85    #[snafu(display("Server response is not valid JSON"))]
86    ResponseJsonParseFailed { source: reqwest::Error },
87
88    #[snafu(display("Failed to decrypt the AES key"))]
89    AesKeyDecryptFailed { source: CryptoError },
90
91    #[snafu(display("Failed to decrypt the received data"))]
92    DataDecryptFailed { source: CryptoError },
93
94    #[snafu(display("Base64 decoding failed"))]
95    Base64DecodeFailed { source: base64::DecodeError },
96}