#password #email #type #credentials

email_pass

Rust中的Email和Password类型

9个版本 (5个破坏性版本)

0.8.3 2024年4月29日
0.8.2 2023年12月7日
0.7.0 2023年4月14日
0.5.0 2023年3月29日
0.1.1 2022年11月29日

#334编码

Download history 197/week @ 2024-04-29 4/week @ 2024-05-20 11/week @ 2024-07-01

990 每月下载量

MIT 协议

33KB
708

email_pass

Crates.io

EmailPassword 类型在 Rust 中。

Email数据类型

use email_pass::Email;
fn main() {
    let email1 = Email::build("john", "example.com").expect("Error creating a email");
    
    let email2 = Email::from_str("[email protected]").expect("Error with string email");

    assert_eq!(&email1, &email2);

    assert_eq!(email2.username(), "john");
    assert_eq!(email2.domain(), "example.com");
}

Password数据类型

Password 类型区分原始密码和加密密码,并只提供每种密码的正确方法。

use email_pass::Password;
fn main() -> Result<(), Error> {
    let encrypt_password = Password::new("ThisIsAPassPhrase.And.Secure.Password")
        .check()? // raw password method
        .to_encrypt_default()?; // raw password method
    
    // encrypted passwords implements the Deref trait
    let password = Password::from_encrypt(encrypt_password.as_str())?;
    
    println!("{}", password);

    Ok(())
}

以下代码无法编译,因为原始密码没有实现 Display 特性或 Debug 特性。

use email_pass::Password;
fn main() {
    let password = Password::new("ThisIsAPassPhrase.And.Secure.Password");
    println!("{}", &password); //
    println!("{:?}", &password); //
}

旧版密码和Email类型

您可以使用 legacy 功能使用旧类型。

email_pass = { version = "0.7.0", features = ["legacy"] }

密码

use email_pass::Password;
fn main() {
    let unsafe_password = Password::new("01234".to_string());
    let safe_password = Password::new(
        "ThisIsAPassPhrase.And.Secure.Password".to_string(),
    );

    assert!(unsafe_password.is_err());
    assert!(safe_password.is_ok());
}

如果密码未加密,则无法访问内部值。

use email_pass::password::legacy::Password;
fn main() {
    let mut password = Password::from_raw(
        "ThisIsAPassPhrase.And.Secure.Password".to_string(),
    );
    assert!(password.try_to_str().is_err());

    password.encrypt_password().expect("Error encrypting password");
    assert!(password.try_to_str().is_ok());
}

Password 类型安全地实现了 Debug 特性。

fn main(){
    let safe_password = Password::from_raw("ThisIsAPassPhrase.And.Secure.Password".to_string());
    let str_password = format!("{:?}", &safe_password);
    assert!(!str_password.contains("ThisIs"))
}

Email

您可以使用 new 方法构建 Email

fn main(){
    let correct_email = Email::new("[email protected]");
    let incorrect_email = Email::new("example.com");
    assert!(correct_email.is_ok());
    assert!(incorrect_email.is_err());
}

Serde 支持

serde 功能中,EmailPassword 类型实现了 SerializeDeserialize 特性。

[dependencies]
email_pass = { version = "0.7.0", features = ["serde"] }

从版本 0.4.1 迁移到版本 <= 0.7.0

如果您不想破坏代码,只需使用 legacy 功能即可。

[dependencies]
email_pass = { version = "0.7.0", features = ["legacy"] }

然后,您可以使用导入尝试新密码类型

use email_pass::password::safe::Password;

从版本 0.4.1 迁移到版本 0.8.0+

升级时,您的代码可能已损坏,因为 v0.8.0 使用了新的错误API,并使用了新的 Email 构造函数。为了修复您的代码

  • 将错误类型调整为迁移到新版本。
  • 将所有 Deref 特性的使用替换为 Password 类型。
  • 将所有 Email::new 方法的使用替换为 Email::buildEmail::from_str

从版本 0.7.0 迁移到版本 0.8.0+

与上述相同。但如果您已经使用过 safelegacy 密码类型,则应选择其中之一。

致谢

感谢 letsgetrusty 提供的 代码库,这激发了 Password 类型的灵感。

依赖项

~6–8.5MB
~139K SLoC