163 lines
5.3 KiB
Rust
163 lines
5.3 KiB
Rust
mod fixtures;
|
|
mod utils;
|
|
|
|
use diqwest::blocking::WithDigestAuth;
|
|
use fixtures::{server, Error, TestServer};
|
|
use rstest::rstest;
|
|
|
|
#[rstest]
|
|
fn no_auth(#[with(&["--auth", "/@user:pass", "-A"])] server: TestServer) -> Result<(), Error> {
|
|
let resp = reqwest::blocking::get(server.url())?;
|
|
assert_eq!(resp.status(), 401);
|
|
assert!(resp.headers().contains_key("www-authenticate"));
|
|
let url = format!("{}file1", server.url());
|
|
let resp = fetch!(b"PUT", &url).body(b"abc".to_vec()).send()?;
|
|
assert_eq!(resp.status(), 401);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth(#[with(&["--auth", "/@user:pass", "-A"])] server: TestServer) -> 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);
|
|
let resp = fetch!(b"PUT", &url)
|
|
.body(b"abc".to_vec())
|
|
.send_with_digest_auth("user", "pass")?;
|
|
assert_eq!(resp.status(), 201);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_skip(#[with(&["--auth", "/@user:pass@*"])] server: TestServer) -> Result<(), Error> {
|
|
let resp = reqwest::blocking::get(server.url())?;
|
|
assert_eq!(resp.status(), 200);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_skip_on_options_method(
|
|
#[with(&["--auth", "/@user:pass"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let url = format!("{}index.html", server.url());
|
|
let resp = fetch!(b"OPTIONS", &url).send()?;
|
|
assert_eq!(resp.status(), 200);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_check(
|
|
#[with(&["--auth", "/@user:pass@user2:pass2", "-A"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let url = format!("{}index.html", server.url());
|
|
let resp = fetch!(b"WRITEABLE", &url).send()?;
|
|
assert_eq!(resp.status(), 401);
|
|
let resp = fetch!(b"WRITEABLE", &url).send_with_digest_auth("user2", "pass2")?;
|
|
assert_eq!(resp.status(), 401);
|
|
let resp = fetch!(b"WRITEABLE", &url).send_with_digest_auth("user", "pass")?;
|
|
assert_eq!(resp.status(), 200);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_readonly(
|
|
#[with(&["--auth", "/@user:pass@user2:pass2", "-A"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let url = format!("{}index.html", server.url());
|
|
let resp = fetch!(b"GET", &url).send()?;
|
|
assert_eq!(resp.status(), 401);
|
|
let resp = fetch!(b"GET", &url).send_with_digest_auth("user2", "pass2")?;
|
|
assert_eq!(resp.status(), 200);
|
|
let url = format!("{}file1", server.url());
|
|
let resp = fetch!(b"PUT", &url)
|
|
.body(b"abc".to_vec())
|
|
.send_with_digest_auth("user2", "pass2")?;
|
|
assert_eq!(resp.status(), 401);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_nest(
|
|
#[with(&["--auth", "/@user:pass@user2:pass2", "--auth", "/dir1@user3:pass3", "-A"])]
|
|
server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let url = format!("{}dir1/file1", server.url());
|
|
let resp = fetch!(b"PUT", &url).body(b"abc".to_vec()).send()?;
|
|
assert_eq!(resp.status(), 401);
|
|
let resp = fetch!(b"PUT", &url)
|
|
.body(b"abc".to_vec())
|
|
.send_with_digest_auth("user3", "pass3")?;
|
|
assert_eq!(resp.status(), 201);
|
|
let resp = fetch!(b"PUT", &url)
|
|
.body(b"abc".to_vec())
|
|
.send_with_digest_auth("user", "pass")?;
|
|
assert_eq!(resp.status(), 201);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_nest_share(
|
|
#[with(&["--auth", "/@user:pass@*", "--auth", "/dir1@user3:pass3", "-A"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let url = format!("{}index.html", server.url());
|
|
let resp = fetch!(b"GET", &url).send()?;
|
|
assert_eq!(resp.status(), 200);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
#[case(server(&["--auth", "/@user:pass", "--auth-method", "basic", "-A"]), "user", "pass")]
|
|
#[case(server(&["--auth", "/@u1:p1", "--auth-method", "basic", "-A"]), "u1", "p1")]
|
|
fn auth_basic(
|
|
#[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);
|
|
let resp = fetch!(b"PUT", &url)
|
|
.body(b"abc".to_vec())
|
|
.basic_auth(user, Some(pass))
|
|
.send()?;
|
|
assert_eq!(resp.status(), 201);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_webdav_move(
|
|
#[with(&["--auth", "/@user:pass@*", "--auth", "/dir1@user3:pass3", "-A"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let origin_url = format!("{}dir1/test.html", server.url());
|
|
let new_url = format!("{}test2.html", server.url());
|
|
let resp = fetch!(b"MOVE", &origin_url)
|
|
.header("Destination", &new_url)
|
|
.send_with_digest_auth("user3", "pass3")?;
|
|
assert_eq!(resp.status(), 403);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_webdav_copy(
|
|
#[with(&["--auth", "/@user:pass@*", "--auth", "/dir1@user3:pass3", "-A"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let origin_url = format!("{}dir1/test.html", server.url());
|
|
let new_url = format!("{}test2.html", server.url());
|
|
let resp = fetch!(b"COPY", &origin_url)
|
|
.header("Destination", &new_url)
|
|
.send_with_digest_auth("user3", "pass3")?;
|
|
assert_eq!(resp.status(), 403);
|
|
Ok(())
|
|
}
|
|
|
|
#[rstest]
|
|
fn auth_path_prefix(
|
|
#[with(&["--auth", "/@user:pass", "--path-prefix", "xyz", "-A"])] server: TestServer,
|
|
) -> Result<(), Error> {
|
|
let url = format!("{}xyz/index.html", server.url());
|
|
let resp = fetch!(b"GET", &url).send()?;
|
|
assert_eq!(resp.status(), 401);
|
|
let resp = fetch!(b"GET", &url).send_with_digest_auth("user", "pass")?;
|
|
assert_eq!(resp.status(), 200);
|
|
Ok(())
|
|
}
|