]> OzVa Git service - ozva-cloud/commitdiff
feat: allow search with --render-try-index (#88)
authorsigoden <sigoden@gmail.com>
Sat, 2 Jul 2022 15:25:57 +0000 (23:25 +0800)
committerGitHub <noreply@github.com>
Sat, 2 Jul 2022 15:25:57 +0000 (23:25 +0800)
src/server.rs
tests/render.rs

index 356c6ef3a862521cd390378f9a2f0f429bfddb31..577cc67ee5d6a3c971503344fc62212b322936a5 100644 (file)
@@ -155,9 +155,18 @@ impl Server {
         match method {
             Method::GET | Method::HEAD => {
                 if is_dir {
-                    if render_try_index && query == "zip" {
-                        self.handle_zip_dir(path, head_only, &mut res).await?;
-                    } else if render_index || render_spa || render_try_index {
+                    if render_try_index {
+                        if query == "zip" {
+                            self.handle_zip_dir(path, head_only, &mut res).await?;
+                        } else if allow_search && query.starts_with("q=") {
+                            let q = decode_uri(&query[2..]).unwrap_or_default();
+                            self.handle_search_dir(path, &q, head_only, &mut res)
+                                .await?;
+                        } else {
+                            self.handle_render_index(path, headers, head_only, &mut res)
+                                .await?;
+                        }
+                    } else if render_index || render_spa {
                         self.handle_render_index(path, headers, head_only, &mut res)
                             .await?;
                     } else if query == "zip" {
index 9ecfd8e36525ca55f749b27529bfb80f9c743ffa..29644c6a0c0b91b0adabd53fcecf43298482215f 100644 (file)
@@ -50,6 +50,18 @@ fn render_try_index3(#[with(&["--render-try-index"])] server: TestServer) -> Res
     Ok(())
 }
 
+#[rstest]
+#[case(server(&["--render-try-index"] as &[&str]), false)]
+#[case(server(&["--render-try-index", "--allow-search"] as &[&str]), true)]
+fn render_try_index4(#[case] server: TestServer, #[case] searched: bool) -> Result<(), Error> {
+    let resp = reqwest::blocking::get(format!("{}{}?q={}", server.url(), DIR_NO_INDEX, "😀.bin"))?;
+    assert_eq!(resp.status(), 200);
+    let paths = utils::retrive_index_paths(&resp.text()?);
+    assert!(!paths.is_empty());
+    assert_eq!(paths.iter().all(|v| v.contains("😀.bin")), searched);
+    Ok(())
+}
+
 #[rstest]
 fn render_spa(#[with(&["--render-spa"])] server: TestServer) -> Result<(), Error> {
     let resp = reqwest::blocking::get(server.url())?;