agate

Simple gemini server for static files
git clone https://github.com/mbrubeck/agate.git
Log | Files | Refs | README

commit 2c4118b590eab358f21b1f6d7756f61259713a81
parent 3a05cefe6fa014d0057bf7550760b4b15220a25a
Author: Matt Brubeck <mbrubeck@limpet.net>
Date:   Wed, 22 Jul 2020 08:28:42 -0700

Switch from tree_magic to mime_guess

Diffstat:
MCargo.lock | 108++++++++++++-------------------------------------------------------------------
MCargo.toml | 2+-
Msrc/main.rs | 8++++----
3 files changed, 21 insertions(+), 97 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -6,19 +6,13 @@ version = "1.2.1" dependencies = [ "async-std", "async-tls", + "mime_guess", "once_cell", "rustls", - "tree_magic_mini", "url", ] [[package]] -name = "arrayvec" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" - -[[package]] name = "async-channel" version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -87,12 +81,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" [[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" - -[[package]] name = "blocking" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -163,18 +151,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36a9cb09840f81cd211e435d00a4e487edd263dc3c8ff815c32dd76ad668ebed" [[package]] -name = "fixedbitset" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] name = "futures" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -285,15 +261,6 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34f595585f103464d8d2f6e9864682d74c1601fed5e07d62b1c9058dba8246fb" -dependencies = [ - "autocfg", -] - -[[package]] name = "hermit-abi" version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -314,16 +281,6 @@ dependencies = [ ] [[package]] -name = "indexmap" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b88cd59ee5f71fea89a62248fc8f387d44400cefe05ef548466d61ced9029a7" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] name = "js-sys" version = "0.3.42" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -348,19 +305,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] -name = "lexical-core" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db65c6da02e61f55dae90a0ae427b2a5f6b3e8db09f58d10efab23af92592616" -dependencies = [ - "arrayvec", - "bitflags", - "cfg-if", - "ryu", - "static_assertions", -] - -[[package]] name = "libc" version = "0.2.73" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -388,14 +332,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" [[package]] -name = "nom" -version = "5.1.2" +name = "mime" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "mime_guess" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ - "lexical-core", - "memchr", - "version_check", + "mime", + "unicase", ] [[package]] @@ -427,16 +376,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] -name = "petgraph" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] name = "pin-project" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -533,12 +472,6 @@ dependencies = [ ] [[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - -[[package]] name = "scoped-tls" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -600,12 +533,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - -[[package]] name = "syn" version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -623,15 +550,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed" [[package]] -name = "tree_magic_mini" -version = "1.0.0" +name = "unicase" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92a265e0c5b89a31cb939a9d7ffce63382e450af10df56a3b9bfb7084d3c2178" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ - "fnv", - "lazy_static", - "nom", - "petgraph", + "version_check", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml @@ -13,9 +13,9 @@ edition = "2018" [dependencies] async-tls = { version = "0.9.0", default-features = false, features = ["server"] } async-std = "1.5" +mime_guess = "2.0" once_cell = "1.4" rustls = "0.18.0" -tree_magic_mini = "1.0" url = "2.1" [profile.release] diff --git a/src/main.rs b/src/main.rs @@ -132,15 +132,15 @@ async fn send_response<W: Write + Unpin>(url: &Url, mut stream: W) -> Result { // Make sure the file opens successfully before sending the success header. let mut file = async_std::fs::File::open(&path).await?; - + // Send header. if path.extension() == Some(OsStr::new("gmi")) { respond(&mut stream, "20", &["text/gemini"]).await?; } else { - let mime = tree_magic_mini::from_filepath(&path).ok_or("Can't read file")?; - respond(&mut stream, "20", &[mime]).await?; + let mime = mime_guess::from_path(&path).first_or_octet_stream(); + respond(&mut stream, "20", &[mime.essence_str()]).await?; } - + // Send body. async_std::io::copy(&mut file, &mut stream).await?; Ok(())