mirror of https://github.com/fafhrd91/actix-web
				
				
				
			Merge branch 'master' into scope_work
This commit is contained in:
		
						commit
						4a8b05c837
					
				| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
overrides:
 | 
					overrides:
 | 
				
			||||||
  - files: '*.md'
 | 
					  - files: "*.md"
 | 
				
			||||||
    options:
 | 
					    options:
 | 
				
			||||||
      printWidth: 9999
 | 
					      printWidth: 9999
 | 
				
			||||||
      proseWrap: never
 | 
					      proseWrap: never
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,10 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Unreleased
 | 
					## Unreleased
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 0.6.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Fix handling of special characters in filenames.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 0.6.4
 | 
					## 0.6.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Fix handling of newlines in filenames.
 | 
					- Fix handling of newlines in filenames.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
[package]
 | 
					[package]
 | 
				
			||||||
name = "actix-files"
 | 
					name = "actix-files"
 | 
				
			||||||
version = "0.6.4"
 | 
					version = "0.6.5"
 | 
				
			||||||
authors = [
 | 
					authors = [
 | 
				
			||||||
    "Nikolay Kim <fafhrd91@gmail.com>",
 | 
					    "Nikolay Kim <fafhrd91@gmail.com>",
 | 
				
			||||||
    "Rob Ede <robjtede@icloud.com>",
 | 
					    "Rob Ede <robjtede@icloud.com>",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,18 +1,32 @@
 | 
				
			||||||
# actix-files
 | 
					# `actix-files`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Static file serving for Actix Web
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-files)
 | 
					[](https://crates.io/crates/actix-files)
 | 
				
			||||||
[](https://docs.rs/actix-files/0.6.4)
 | 
					[](https://docs.rs/actix-files/0.6.5)
 | 
				
			||||||

 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
<br />
 | 
					<br />
 | 
				
			||||||
[](https://deps.rs/crate/actix-files/0.6.4)
 | 
					[](https://deps.rs/crate/actix-files/0.6.5)
 | 
				
			||||||
[](https://crates.io/crates/actix-files)
 | 
					[](https://crates.io/crates/actix-files)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/actix-files)
 | 
					<!-- cargo-rdme start -->
 | 
				
			||||||
- [Example Project](https://github.com/actix/examples/tree/master/basics/static-files)
 | 
					
 | 
				
			||||||
- Minimum Supported Rust Version (MSRV): 1.68
 | 
					Static file serving for Actix Web.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Provides a non-blocking service for serving static files from disk.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Examples
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```rust
 | 
				
			||||||
 | 
					use actix_web::App;
 | 
				
			||||||
 | 
					use actix_files::Files;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let app = App::new()
 | 
				
			||||||
 | 
					    .service(Files::new("/static", ".").prefer_utf8(true));
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- cargo-rdme end -->
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -569,18 +569,20 @@ mod tests {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[actix_rt::test]
 | 
					    #[actix_rt::test]
 | 
				
			||||||
    async fn test_static_files_with_newlines() {
 | 
					    async fn test_static_files_with_special_characters() {
 | 
				
			||||||
        // Create the file we want to test against ad-hoc. We can't check it in as otherwise
 | 
					        // Create the file we want to test against ad-hoc. We can't check it in as otherwise
 | 
				
			||||||
        // Windows can't even checkout this repository.
 | 
					        // Windows can't even checkout this repository.
 | 
				
			||||||
        let temp_dir = tempfile::tempdir().unwrap();
 | 
					        let temp_dir = tempfile::tempdir().unwrap();
 | 
				
			||||||
        let file_with_newlines = temp_dir.path().join("test\nnewline.text");
 | 
					        let file_with_newlines = temp_dir.path().join("test\n\x0B\x0C\rnewline.text");
 | 
				
			||||||
        fs::write(&file_with_newlines, "Look at my newlines").unwrap();
 | 
					        fs::write(&file_with_newlines, "Look at my newlines").unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let srv = test::init_service(
 | 
					        let srv = test::init_service(
 | 
				
			||||||
            App::new().service(Files::new("/", temp_dir.path()).index_file("Cargo.toml")),
 | 
					            App::new().service(Files::new("/", temp_dir.path()).index_file("Cargo.toml")),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        .await;
 | 
					        .await;
 | 
				
			||||||
        let request = TestRequest::get().uri("/test%0Anewline.text").to_request();
 | 
					        let request = TestRequest::get()
 | 
				
			||||||
 | 
					            .uri("/test%0A%0B%0C%0Dnewline.text")
 | 
				
			||||||
 | 
					            .to_request();
 | 
				
			||||||
        let response = test::call_service(&srv, request).await;
 | 
					        let response = test::call_service(&srv, request).await;
 | 
				
			||||||
        assert_eq!(response.status(), StatusCode::OK);
 | 
					        assert_eq!(response.status(), StatusCode::OK);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -139,8 +139,12 @@ impl NamedFile {
 | 
				
			||||||
                _ => DispositionType::Attachment,
 | 
					                _ => DispositionType::Attachment,
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            // Replace newlines in filenames which could occur on some filesystems.
 | 
					            // replace special characters in filenames which could occur on some filesystems
 | 
				
			||||||
            let filename_s = filename.replace('\n', "%0A");
 | 
					            let filename_s = filename
 | 
				
			||||||
 | 
					                .replace('\n', "%0A") // \n line break
 | 
				
			||||||
 | 
					                .replace('\x0B', "%0B") // \v vertical tab
 | 
				
			||||||
 | 
					                .replace('\x0C', "%0C") // \f form feed
 | 
				
			||||||
 | 
					                .replace('\r', "%0D"); // \r carriage return
 | 
				
			||||||
            let mut parameters = vec![DispositionParam::Filename(filename_s)];
 | 
					            let mut parameters = vec![DispositionParam::Filename(filename_s)];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if !filename.is_ascii() {
 | 
					            if !filename.is_ascii() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
# actix-http-test
 | 
					# `actix-http-test`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Various helpers for Actix applications to use during testing.
 | 
					> Various helpers for Actix applications to use during testing.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-http-test)
 | 
					[](https://crates.io/crates/actix-http-test)
 | 
				
			||||||
[](https://docs.rs/actix-http-test/3.1.0)
 | 
					[](https://docs.rs/actix-http-test/3.1.0)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +13,8 @@
 | 
				
			||||||
[](https://crates.io/crates/actix-http-test)
 | 
					[](https://crates.io/crates/actix-http-test)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					## Documentation & Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/actix-http-test)
 | 
					- [API Documentation](https://docs.rs/actix-http-test)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
# actix-multipart-derive
 | 
					# `actix-multipart-derive`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> The derive macro implementation for actix-multipart-derive.
 | 
					> The derive macro implementation for actix-multipart-derive.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-multipart-derive)
 | 
					[](https://crates.io/crates/actix-multipart-derive)
 | 
				
			||||||
[](https://docs.rs/actix-multipart-derive/0.6.1)
 | 
					[](https://docs.rs/actix-multipart-derive/0.6.1)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +13,8 @@
 | 
				
			||||||
[](https://crates.io/crates/actix-multipart-derive)
 | 
					[](https://crates.io/crates/actix-multipart-derive)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					## Documentation & Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/actix-multipart-derive)
 | 
					- [API Documentation](https://docs.rs/actix-multipart-derive)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
# actix-multipart
 | 
					# `actix-multipart`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Multipart form support for Actix Web.
 | 
					> Multipart form support for Actix Web.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-multipart)
 | 
					[](https://crates.io/crates/actix-multipart)
 | 
				
			||||||
[](https://docs.rs/actix-multipart/0.6.1)
 | 
					[](https://docs.rs/actix-multipart/0.6.1)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +13,8 @@
 | 
				
			||||||
[](https://crates.io/crates/actix-multipart)
 | 
					[](https://crates.io/crates/actix-multipart)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					## Documentation & Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/actix-multipart)
 | 
					- [API Documentation](https://docs.rs/actix-multipart)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,7 @@
 | 
				
			||||||
# `actix-router`
 | 
					# `actix-router`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-router)
 | 
					[](https://crates.io/crates/actix-router)
 | 
				
			||||||
[](https://docs.rs/actix-router/0.5.2)
 | 
					[](https://docs.rs/actix-router/0.5.2)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,6 +11,8 @@
 | 
				
			||||||
[](https://crates.io/crates/actix-router)
 | 
					[](https://crates.io/crates/actix-router)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<!-- cargo-rdme start -->
 | 
					<!-- cargo-rdme start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Resource path matching and router.
 | 
					Resource path matching and router.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
# actix-web-actors
 | 
					# `actix-web-actors`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Actix actors support for Actix Web.
 | 
					> Actix actors support for Actix Web.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-web-actors)
 | 
					[](https://crates.io/crates/actix-web-actors)
 | 
				
			||||||
[](https://docs.rs/actix-web-actors/4.2.0)
 | 
					[](https://docs.rs/actix-web-actors/4.2.0)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +13,8 @@
 | 
				
			||||||
[](https://crates.io/crates/actix-web-actors)
 | 
					[](https://crates.io/crates/actix-web-actors)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					## Documentation & Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/actix-web-actors)
 | 
					- [API Documentation](https://docs.rs/actix-web-actors)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,9 @@
 | 
				
			||||||
# actix-web-codegen
 | 
					# `actix-web-codegen`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Routing and runtime macros for Actix Web.
 | 
					> Routing and runtime macros for Actix Web.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/actix-web-codegen)
 | 
					[](https://crates.io/crates/actix-web-codegen)
 | 
				
			||||||
[](https://docs.rs/actix-web-codegen/4.2.2)
 | 
					[](https://docs.rs/actix-web-codegen/4.2.2)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +13,8 @@
 | 
				
			||||||
[](https://crates.io/crates/actix-web-codegen)
 | 
					[](https://crates.io/crates/actix-web-codegen)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					## Documentation & Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/actix-web-codegen)
 | 
					- [API Documentation](https://docs.rs/actix-web-codegen)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,17 @@
 | 
				
			||||||
# awc (Actix Web Client)
 | 
					# `awc` (Actix Web Client)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Async HTTP and WebSocket client library.
 | 
					> Async HTTP and WebSocket client library.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-start -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[](https://crates.io/crates/awc)
 | 
					[](https://crates.io/crates/awc)
 | 
				
			||||||
[](https://docs.rs/awc/3.3.0)
 | 
					[](https://docs.rs/awc/3.3.0)
 | 
				
			||||||

 | 
					
 | 
				
			||||||
[](https://deps.rs/crate/awc/3.3.0)
 | 
					[](https://deps.rs/crate/awc/3.3.0)
 | 
				
			||||||
[](https://discord.gg/NWpN5mmg3x)
 | 
					[](https://discord.gg/NWpN5mmg3x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- prettier-ignore-end -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Documentation & Resources
 | 
					## Documentation & Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [API Documentation](https://docs.rs/awc)
 | 
					- [API Documentation](https://docs.rs/awc)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								justfile
								
								
								
								
							
							
						
						
									
										10
									
								
								justfile
								
								
								
								
							| 
						 | 
					@ -1,6 +1,11 @@
 | 
				
			||||||
_list:
 | 
					_list:
 | 
				
			||||||
    @just --list
 | 
					    @just --list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Format workspace.
 | 
				
			||||||
 | 
					fmt:
 | 
				
			||||||
 | 
					    cargo +nightly fmt
 | 
				
			||||||
 | 
					    npx -y prettier --write $(fd --type=file --hidden --extension=md --extension=yml)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Document crates in workspace.
 | 
					# Document crates in workspace.
 | 
				
			||||||
doc:
 | 
					doc:
 | 
				
			||||||
    RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl
 | 
					    RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl
 | 
				
			||||||
| 
						 | 
					@ -9,3 +14,8 @@ doc:
 | 
				
			||||||
doc-watch:
 | 
					doc-watch:
 | 
				
			||||||
    RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl --open
 | 
					    RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl --open
 | 
				
			||||||
    cargo watch -- RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl
 | 
					    cargo watch -- RUSTDOCFLAGS="--cfg=docsrs" cargo +nightly doc --no-deps --workspace --features=rustls,openssl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Update READMEs from crate root documentation.
 | 
				
			||||||
 | 
					update-readmes: && fmt
 | 
				
			||||||
 | 
					    cd ./actix-files && cargo rdme --force
 | 
				
			||||||
 | 
					    cd ./actix-router && cargo rdme --force
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue