actix / actix/actix-web

Setting the path_filter and show_files_listing, but list page still show all files.

未關閉
#3,207 3 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
A-files C-improvement good-first-issue
主要語言
Rust
星號
24.8k
分支
1.9k
平均合併
23 小時 10 分鐘
30 天內合併 PR
26

描述

```rs
Files::new("/", EXAMPLES_DIR)
.path_filter(|n, _| {
println!("{:?}", n);
let s = n.to_str().unwrap();
if s == "lib.rs" || s == "" {
true
} else {
false
}
})
.show_files_listing(),
```
## Expected Behavior
Only display the files that pass the filter, as in the example above, only the lib.rs file should be displayed.

## Current Behavior
![image](https://github.com/actix/actix-web/assets/19884146/32cc8e41-d54a-4140-bc61-f977da14ae3c)
Display all files, but only those passed by the filter can be accessed.

## Possible Solution
Add a filter parameter to the DirectoryRenderer function, or add a filter field to the Directory.

## Steps to Reproduce (for bugs)

```rs
use actix_files::Files;
use actix_web::{get, guard, middleware, App, HttpServer, Responder};
const EXAMPLES_DIR: &str = concat![env!("CARGO_MANIFEST_DIR"), "/src"];

#[actix_web::main]
async fn main() -> std::io::Result<()> {
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));

log::info!("starting HTTP server at http://localhost:8080");

HttpServer::new(|| {
App::new()
.service(
Files::new("/", EXAMPLES_DIR)
.path_filter(|n, _| {
println!("{:?}", n);
let s = n.to_str().unwrap();
if s == "lib.rs" || s == "" {
true
} else {
false
}
})
.show_files_listing(),
)
.wrap(middleware::Logger::default())
})
.bind(("127.0.0.1", 8080))?
.run()
.await
}

```
## Context
When I set a filter, it indicates that I don't want users to be aware of the existence of certain files. However, these files are still displayed on the list page and are inaccessible, which can confuse users.

## Your Environment
- Rust Version (I.e, output of `rustc -V`): rustc 1.76.0-nightly (1e9dda77b 2023-11-22)
- Actix Web Version: e95c8fe5a6d466ba674ea2ea35c0c4d18e1bb9d0

貢獻指南

開啟貢獻指南

研究方向

The reproduction uses Files::new with path_filter and show_files_listing; start by running it, then trace the directory-listing path through DirectoryRenderer and Directory. Done means the listing omits files rejected by path_filter while access behavior remains consistent with that filter.

由索引模型根據 Issue 內容生成。

評估

技術堆疊
rust
領域
backend
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
活躍
描述清晰度
基本清楚
新手友好度
68/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。