argon2_creds/
errors.rs

1// SPDX-FileCopyrightText: 2023 Aravinth Manivannan <realaravinth@batsense.net>
2//
3// SPDX-License-Identifier: AGPL-3.0-or-later
4
5//! Result and error datatypes
6use std::convert::From;
7
8use derive_more::{Display, Error};
9use validator::ValidationErrors;
10
11/// Errors that can occur when processing credentials
12#[derive(Debug, PartialEq, Display, Clone, Error)]
13#[cfg(not(tarpaulin_include))]
14pub enum CredsError {
15    /// when the value passed contains profainity
16    #[display(fmt = "the value you passed contains profainity")]
17    ProfainityError,
18
19    /// when the value passed contains characters not present
20    /// in [UsernameCaseMapped](https://tools.ietf.org/html/rfc8265#page-7)
21    /// profile
22    #[display(fmt = "username_case_mapped violation")]
23    UsernameCaseMappedError,
24
25    /// when the value passed contains blacklisted words
26    /// see [blacklist](https://github.com/shuttlecraft/The-Big-Username-Blacklist)
27    #[display(fmt = "contains blacklisted words")]
28    BlacklistError,
29
30    /// email validation error
31    #[display(fmt = "The value passed in not an email")]
32    NotAnEmail,
33
34    /// password too short
35    #[display(fmt = "Password too short")]
36    PasswordTooShort,
37
38    /// password too long
39    #[display(fmt = "Password too long")]
40    PasswordTooLong,
41
42    /// Errors from argon2
43    #[display(fmt = "{}", _0)]
44    Argon2Error(argon2::Error),
45}
46
47impl From<argon2::Error> for CredsError {
48    fn from(e: argon2::Error) -> CredsError {
49        CredsError::Argon2Error(e)
50    }
51}
52
53impl From<ValidationErrors> for CredsError {
54    fn from(_: ValidationErrors) -> CredsError {
55        CredsError::NotAnEmail
56    }
57}
58
59pub type CredsResult<V> = std::result::Result<V, crate::errors::CredsError>;