) -> Result<()> {
let mut paths = vec![];
if exist {
- paths = match self.list_dir(path, path, access_paths).await {
+ paths = match self.list_dir(path, path, access_paths.clone()).await {
Ok(paths) => paths,
Err(_) => {
status_forbid(res);
}
}
};
- self.send_index(path, paths, exist, query_params, head_only, user, res)
+ self.send_index(
+ path,
+ paths,
+ exist,
+ query_params,
+ head_only,
+ user,
+ access_paths,
+ res,
+ )
}
async fn handle_search_dir(
let hidden = Arc::new(self.args.hidden.to_vec());
let hidden = hidden.clone();
let running = self.running.clone();
+ let access_paths = access_paths.clone();
let search_paths = tokio::task::spawn_blocking(move || {
let mut paths: Vec<PathBuf> = vec![];
for dir in access_paths.leaf_paths(&path_buf) {
}
}
}
- self.send_index(path, paths, true, query_params, head_only, user, res)
+ self.send_index(
+ path,
+ paths,
+ true,
+ query_params,
+ head_only,
+ user,
+ access_paths,
+ res,
+ )
}
async fn handle_zip_dir(
query_params: &HashMap<String, String>,
head_only: bool,
user: Option<String>,
+ access_paths: AccessPaths,
res: &mut Response,
) -> Result<()> {
if let Some(sort) = query_params.get("sort") {
return Ok(());
}
let href = format!("/{}", normalize_path(path.strip_prefix(&self.args.path)?));
+ let readwrite = access_paths.perm().readwrite();
let data = IndexData {
kind: DataKind::Index,
href,
uri_prefix: self.args.uri_prefix.clone(),
- allow_upload: self.args.allow_upload,
- allow_delete: self.args.allow_delete,
+ allow_upload: self.args.allow_upload && readwrite,
+ allow_delete: self.args.allow_delete && readwrite,
allow_search: self.args.allow_search,
allow_archive: self.args.allow_archive,
dir_exists: exist,
assert!(body.contains("<D:href>/dir1/</D:href>"));
Ok(())
}
+
+#[rstest]
+fn auth_data(
+ #[with(&["--auth", "user:pass@/:rw|@/", "-A", "--auth-method", "basic"])] server: TestServer,
+) -> Result<(), Error> {
+ let resp = reqwest::blocking::get(server.url())?;
+ let content = resp.text()?;
+ let json = utils::retrive_json(&content).unwrap();
+ assert_eq!(json["allow_delete"], serde_json::Value::Bool(false));
+ assert_eq!(json["allow_upload"], serde_json::Value::Bool(false));
+ let resp = fetch!(b"GET", server.url())
+ .basic_auth("user", Some("pass"))
+ .send()?;
+ let content = resp.text()?;
+ let json = utils::retrive_json(&content).unwrap();
+ assert_eq!(json["allow_delete"], serde_json::Value::Bool(true));
+ assert_eq!(json["allow_upload"], serde_json::Value::Bool(true));
+ Ok(())
+}