) -> Option<()> {
if let Some(value) = strip_prefix(authorization.as_bytes(), b"Basic ") {
let value: Vec<u8> = STANDARD.decode(value).ok()?;
- let parts: Vec<&str> = std::str::from_utf8(&value).ok()?.split(':').collect();
+ let (user, pass) = std::str::from_utf8(&value).ok()?.split_once(':')?;
- if parts[0] != auth_user {
+ if user != auth_user {
return None;
}
if auth_pass.starts_with("$6$") {
- if let Ok(()) = sha_crypt::sha512_check(parts[1], auth_pass) {
+ if let Ok(()) = sha_crypt::sha512_check(pass, auth_pass) {
return Some(());
}
- } else if parts[1] == auth_pass {
+ } else if pass == auth_pass {
return Some(());
}
Ok(())
}
-const HASHED_PASSWORD_AUTH: &str = "user:$6$gQxZwKyWn/ZmWEA2$4uV7KKMnSUnET2BtWTj/9T5.Jq3h/MdkOlnIl5hdlTxDZ4MZKmJ.kl6C.NL9xnNPqC4lVHC1vuI0E5cLpTJX81@/:rw"; // user:pass
-
#[rstest]
+#[case(server(&["--auth", "user:$6$gQxZwKyWn/ZmWEA2$4uV7KKMnSUnET2BtWTj/9T5.Jq3h/MdkOlnIl5hdlTxDZ4MZKmJ.kl6C.NL9xnNPqC4lVHC1vuI0E5cLpTJX81@/:rw", "-A"]), "user", "pass")]
+#[case(server(&["--auth", "user:$6$YV1J6OHZAAgbzCbS$V55ZEgvJ6JFdz1nLO4AD696PRHAJYhfQf.Gy2HafrCz5itnbgNTtTgfUSqZrt4BJ7FcpRfSt/QZzAan68pido0@/:rw", "-A"]), "user", "pa:ss@1")]
fn auth_hashed_password(
- #[with(&["--auth", HASHED_PASSWORD_AUTH, "-A"])] server: TestServer,
+ #[case] server: TestServer,
+ #[case] user: &str,
+ #[case] pass: &str,
) -> Result<(), Error> {
let url = format!("{}file1", server.url());
let resp = fetch!(b"PUT", &url).body(b"abc".to_vec()).send()?;
assert_eq!(resp.status(), 401);
- if let Err(err) =
- send_with_digest_auth(fetch!(b"PUT", &url).body(b"abc".to_vec()), "user", "pass")
+ if let Err(err) = send_with_digest_auth(fetch!(b"PUT", &url).body(b"abc".to_vec()), user, pass)
{
assert_eq!(
err.to_string(),
}
let resp = fetch!(b"PUT", &url)
.body(b"abc".to_vec())
- .basic_auth("user", Some("pass"))
+ .basic_auth(user, Some(pass))
.send()?;
assert_eq!(resp.status(), 201);
Ok(())