) -> Result<()> {
let depth: u32 = match headers.get("depth") {
Some(v) => match v.to_str().ok().and_then(|v| v.parse().ok()) {
- Some(v) => v,
- None => {
- status_bad_request(res, "");
+ Some(0) => 0,
+ Some(1) => 1,
+ _ => {
+ status_bad_request(res, "Invalid depth: only 0 and 1 are allowed.");
return Ok(());
}
},
Some(v) => vec![v],
None => vec![],
};
- if depth != 0 {
+ if depth == 1 {
match self
.list_dir(path, &self.args.serve_path, access_paths)
.await
Ok(())
}
+#[rstest]
+fn propfind_dir_depth2(server: TestServer) -> Result<(), Error> {
+ let resp = fetch!(b"PROPFIND", format!("{}dir1", server.url()))
+ .header("depth", "2")
+ .send()?;
+ assert_eq!(resp.status(), 400);
+ let body = resp.text()?;
+ assert_eq!(body, "Invalid depth: only 0 and 1 are allowed.");
+ Ok(())
+}
+
#[rstest]
fn propfind_404(server: TestServer) -> Result<(), Error> {
let resp = fetch!(b"PROPFIND", format!("{}404", server.url())).send()?;