updated fetch to surf2.2 and feature h1-client-rustls (#3120)

This commit is contained in:
Darren Schroeder 2021-03-03 12:18:11 -06:00 committed by GitHub
parent 28a6a5ea57
commit 9c375b33a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 696 additions and 46 deletions

656
Cargo.lock generated
View File

@ -31,6 +31,60 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
[[package]]
name = "aead"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"
dependencies = [
"generic-array 0.14.4",
]
[[package]]
name = "aes"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
dependencies = [
"aes-soft",
"aesni",
"cipher",
]
[[package]]
name = "aes-gcm"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da"
dependencies = [
"aead",
"aes",
"cipher",
"ctr",
"ghash",
"subtle",
]
[[package]]
name = "aes-soft"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
dependencies = [
"cipher",
"opaque-debug",
]
[[package]]
name = "aesni"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
dependencies = [
"cipher",
"opaque-debug",
]
[[package]] [[package]]
name = "ahash" name = "ahash"
version = "0.4.7" version = "0.4.7"
@ -82,6 +136,12 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "anyhow"
version = "1.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
[[package]] [[package]]
name = "arboard" name = "arboard"
version = "1.1.0" version = "1.1.0"
@ -144,6 +204,16 @@ dependencies = [
"futures-core", "futures-core",
] ]
[[package]]
name = "async-dup"
version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7427a12b8dc09291528cfb1da2447059adb4a257388c2acd6497a79d55cf6f7c"
dependencies = [
"futures-io",
"simple-mutex",
]
[[package]] [[package]]
name = "async-executor" name = "async-executor"
version = "1.4.0" version = "1.4.0"
@ -174,6 +244,24 @@ dependencies = [
"once_cell", "once_cell",
] ]
[[package]]
name = "async-h1"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e9e2a9745d9cd0d92ed7641ce4d07568985762f92633260f0afe8ac7917d9d7"
dependencies = [
"async-channel",
"async-dup",
"async-std",
"byte-pool",
"futures-core",
"http-types",
"httparse",
"lazy_static 1.4.0",
"log 0.4.14",
"pin-project 1.0.4",
]
[[package]] [[package]]
name = "async-io" name = "async-io"
version = "1.3.1" version = "1.3.1"
@ -257,6 +345,19 @@ version = "4.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"
[[package]]
name = "async-tls"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d85a97c4a0ecce878efd3f945f119c78a646d8975340bca0398f9bb05c30cc52"
dependencies = [
"futures-core",
"futures-io",
"rustls",
"webpki",
"webpki-roots",
]
[[package]] [[package]]
name = "async-trait" name = "async-trait"
version = "0.1.42" version = "0.1.42"
@ -305,6 +406,12 @@ dependencies = [
"rustc-demangle", "rustc-demangle",
] ]
[[package]]
name = "base-x"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b"
[[package]] [[package]]
name = "base64" name = "base64"
version = "0.6.0" version = "0.6.0"
@ -474,7 +581,7 @@ dependencies = [
"rand 0.7.3", "rand 0.7.3",
"serde 1.0.123", "serde 1.0.123",
"serde_json", "serde_json",
"time", "time 0.1.43",
] ]
[[package]] [[package]]
@ -495,6 +602,16 @@ version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820"
[[package]]
name = "byte-pool"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e38e98299d518ec351ca016363e0cbfc77059dcd08dfa9700d15e405536097a"
dependencies = [
"crossbeam-queue 0.2.3",
"stable_deref_trait",
]
[[package]] [[package]]
name = "byte-tools" name = "byte-tools"
version = "0.2.0" version = "0.2.0"
@ -623,7 +740,7 @@ dependencies = [
"num-integer", "num-integer",
"num-traits 0.2.14", "num-traits 0.2.14",
"serde 1.0.123", "serde 1.0.123",
"time", "time 0.1.43",
"winapi 0.3.9", "winapi 0.3.9",
] ]
@ -637,6 +754,15 @@ dependencies = [
"parse-zoneinfo", "parse-zoneinfo",
] ]
[[package]]
name = "cipher"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
dependencies = [
"generic-array 0.14.4",
]
[[package]] [[package]]
name = "clap" name = "clap"
version = "2.33.3" version = "2.33.3"
@ -772,6 +898,23 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "cookie"
version = "0.14.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
dependencies = [
"aes-gcm",
"base64 0.13.0",
"hkdf",
"hmac 0.10.1",
"percent-encoding 2.1.0",
"rand 0.8.3",
"sha2 0.9.3",
"time 0.2.25",
"version_check",
]
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
version = "0.9.1" version = "0.9.1"
@ -806,6 +949,12 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634" checksum = "8aebca1129a03dc6dc2b127edd729435bbc4a37e1d5f4d7513165089ceb02634"
[[package]]
name = "cpuid-bool"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba"
[[package]] [[package]]
name = "crc32fast" name = "crc32fast"
version = "1.2.1" version = "1.2.1"
@ -896,6 +1045,16 @@ dependencies = [
"maybe-uninit", "maybe-uninit",
] ]
[[package]]
name = "crossbeam-queue"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f6cb3c7f5b8e51bc3ebb73a2327ad4abdbd119dc13223f14f961d2f38486756"
dependencies = [
"cfg-if 1.0.0",
"crossbeam-utils 0.8.1",
]
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.6.6" version = "0.6.6"
@ -988,6 +1147,16 @@ dependencies = [
"generic-array 0.8.3", "generic-array 0.8.3",
] ]
[[package]]
name = "crypto-mac"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4857fd85a0c34b3c3297875b747c1e02e06b6a0ea32dd892d8192b9ce0813ea6"
dependencies = [
"generic-array 0.14.4",
"subtle",
]
[[package]] [[package]]
name = "cssparser" name = "cssparser"
version = "0.27.2" version = "0.27.2"
@ -1047,6 +1216,15 @@ dependencies = [
"syn 1.0.60", "syn 1.0.60",
] ]
[[package]]
name = "ctr"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f"
dependencies = [
"cipher",
]
[[package]] [[package]]
name = "ctrlc" name = "ctrlc"
version = "3.1.7" version = "3.1.7"
@ -1088,6 +1266,36 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "dashmap"
version = "4.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"
dependencies = [
"cfg-if 1.0.0",
"num_cpus",
]
[[package]]
name = "data-encoding"
version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
[[package]]
name = "deadpool"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d126179d86aee4556e54f5f3c6bf6d9884e7cc52cef82f77ee6f90a7747616d"
dependencies = [
"async-trait",
"config",
"crossbeam-queue 0.3.1",
"num_cpus",
"serde 1.0.123",
"tokio 1.2.0",
]
[[package]] [[package]]
name = "decimal" name = "decimal"
version = "2.0.4" version = "2.0.4"
@ -1241,6 +1449,12 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "discard"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
[[package]] [[package]]
name = "doc-comment" name = "doc-comment"
version = "0.3.3" version = "0.3.3"
@ -1515,6 +1729,17 @@ dependencies = [
"miniz_oxide 0.3.7", "miniz_oxide 0.3.7",
] ]
[[package]]
name = "flume"
version = "0.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132"
dependencies = [
"futures-core",
"futures-sink",
"spinning_top",
]
[[package]] [[package]]
name = "fnv" name = "fnv"
version = "1.0.7" version = "1.0.7"
@ -1879,6 +2104,16 @@ dependencies = [
"syn 1.0.60", "syn 1.0.60",
] ]
[[package]]
name = "ghash"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375"
dependencies = [
"opaque-debug",
"polyval",
]
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.23.0" version = "0.23.0"
@ -1998,24 +2233,44 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35"
[[package]]
name = "hkdf"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f"
dependencies = [
"digest 0.9.0",
"hmac 0.10.1",
]
[[package]] [[package]]
name = "hmac" name = "hmac"
version = "0.4.2" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a13f4163aa0c5ca1be584aace0e2212b2e41be5478218d4f657f5f778b2ae2a" checksum = "7a13f4163aa0c5ca1be584aace0e2212b2e41be5478218d4f657f5f778b2ae2a"
dependencies = [ dependencies = [
"crypto-mac", "crypto-mac 0.4.0",
"digest 0.6.2", "digest 0.6.2",
"generic-array 0.8.3", "generic-array 0.8.3",
] ]
[[package]]
name = "hmac"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
dependencies = [
"crypto-mac 0.10.0",
"digest 0.9.0",
]
[[package]] [[package]]
name = "hmac-sha1" name = "hmac-sha1"
version = "0.1.3" version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1333fad8d94b82cab989da428b0b36a3435db3870d85e971a1d6dc0a8576722" checksum = "e1333fad8d94b82cab989da428b0b36a3435db3870d85e971a1d6dc0a8576722"
dependencies = [ dependencies = [
"sha1", "sha1 0.2.0",
] ]
[[package]] [[package]]
@ -2070,6 +2325,47 @@ dependencies = [
"http 0.2.3", "http 0.2.3",
] ]
[[package]]
name = "http-client"
version = "6.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "663563ebc56b0bac7e08722cca7742612fd99d9bd6d05cf904ed9d9212065a34"
dependencies = [
"async-h1",
"async-std",
"async-tls",
"async-trait",
"cfg-if 1.0.0",
"dashmap",
"deadpool",
"futures 0.3.12",
"http-types",
"isahc 0.9.14",
"log 0.4.14",
]
[[package]]
name = "http-types"
version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32613ebb139d1d430ef5783676f84abfa06fc5f2b4b5a25220cdeeff7e16ef5c"
dependencies = [
"anyhow",
"async-channel",
"async-std",
"base64 0.13.0",
"cookie",
"futures-lite",
"infer",
"pin-project-lite 0.2.4",
"rand 0.7.3",
"serde 1.0.123",
"serde_json",
"serde_qs",
"serde_urlencoded 0.7.0",
"url",
]
[[package]] [[package]]
name = "httparse" name = "httparse"
version = "1.3.4" version = "1.3.4"
@ -2109,7 +2405,7 @@ dependencies = [
"net2", "net2",
"percent-encoding 1.0.1", "percent-encoding 1.0.1",
"relay", "relay",
"time", "time 0.1.43",
"tokio-core", "tokio-core",
"tokio-io", "tokio-io",
"tokio-proto", "tokio-proto",
@ -2228,6 +2524,12 @@ dependencies = [
"serde 1.0.123", "serde 1.0.123",
] ]
[[package]]
name = "infer"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
[[package]] [[package]]
name = "inflate" name = "inflate"
version = "0.4.5" version = "0.4.5"
@ -2278,7 +2580,30 @@ dependencies = [
"lazy_static 1.4.0", "lazy_static 1.4.0",
"log 0.4.14", "log 0.4.14",
"slab 0.4.2", "slab 0.4.2",
"sluice", "sluice 0.4.2",
]
[[package]]
name = "isahc"
version = "0.9.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a"
dependencies = [
"bytes 0.5.6",
"crossbeam-utils 0.8.1",
"curl",
"curl-sys",
"flume",
"futures-lite",
"http 0.2.3",
"log 0.4.14",
"once_cell",
"slab 0.4.2",
"sluice 0.5.4",
"tracing",
"tracing-futures",
"url",
"waker-fn",
] ]
[[package]] [[package]]
@ -2617,6 +2942,17 @@ dependencies = [
"autocfg", "autocfg",
] ]
[[package]]
name = "minus"
version = "3.2.0"
source = "git+https://github.com/rezural/minus?branch=add-finished-callback#b943ed5c9143924ca1f871e4911a82c2e784001a"
dependencies = [
"async-std",
"crossterm 0.19.0",
"regex 1.4.3",
"thiserror",
]
[[package]] [[package]]
name = "mio" name = "mio"
version = "0.6.23" version = "0.6.23"
@ -3006,6 +3342,7 @@ dependencies = [
"lazy_static 1.4.0", "lazy_static 1.4.0",
"log 0.4.14", "log 0.4.14",
"meval", "meval",
"minus",
"nu-ansi-term", "nu-ansi-term",
"nu-data", "nu-data",
"nu-engine", "nu-engine",
@ -3324,11 +3661,12 @@ version = "0.27.2"
dependencies = [ dependencies = [
"base64 0.13.0", "base64 0.13.0",
"futures 0.3.12", "futures 0.3.12",
"mime",
"nu-errors", "nu-errors",
"nu-plugin", "nu-plugin",
"nu-protocol", "nu-protocol",
"nu-source", "nu-source",
"surf", "surf 2.2.0",
"url", "url",
] ]
@ -3397,7 +3735,7 @@ dependencies = [
"nu-source", "nu-source",
"num-traits 0.2.14", "num-traits 0.2.14",
"serde_json", "serde_json",
"surf", "surf 1.0.3",
"url", "url",
] ]
@ -4067,6 +4405,17 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "polyval"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"
dependencies = [
"cpuid-bool 0.2.0",
"opaque-debug",
"universal-hash",
]
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.10" version = "0.2.10"
@ -4570,6 +4919,21 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560" checksum = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560"
[[package]]
name = "ring"
version = "0.16.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
dependencies = [
"cc",
"libc",
"once_cell",
"spin",
"untrusted",
"web-sys",
"winapi 0.3.9",
]
[[package]] [[package]]
name = "roxmltree" name = "roxmltree"
version = "0.14.0" version = "0.14.0"
@ -4616,7 +4980,7 @@ dependencies = [
"libc", "libc",
"rand 0.3.23", "rand 0.3.23",
"rustc-serialize", "rustc-serialize",
"time", "time 0.1.43",
] ]
[[package]] [[package]]
@ -4691,6 +5055,19 @@ dependencies = [
"semver 0.9.0", "semver 0.9.0",
] ]
[[package]]
name = "rustls"
version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81"
dependencies = [
"base64 0.12.3",
"log 0.4.14",
"ring",
"sct",
"webpki",
]
[[package]] [[package]]
name = "rustversion" name = "rustversion"
version = "1.0.4" version = "1.0.4"
@ -4758,7 +5135,7 @@ dependencies = [
"failure", "failure",
"failure_derive", "failure_derive",
"futures 0.3.12", "futures 0.3.12",
"hmac", "hmac 0.4.2",
"hmac-sha1", "hmac-sha1",
"http 0.2.3", "http 0.2.3",
"hyper 0.11.27", "hyper 0.11.27",
@ -4821,6 +5198,16 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "sct"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
dependencies = [
"ring",
"untrusted",
]
[[package]] [[package]]
name = "security-framework" name = "security-framework"
version = "2.0.0" version = "2.0.0"
@ -4978,6 +5365,18 @@ dependencies = [
"serde 1.0.123", "serde 1.0.123",
] ]
[[package]]
name = "serde_qs"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5af82de3c6549b001bec34961ff2d6a54339a87bab37ce901b693401f27de6cb"
dependencies = [
"data-encoding",
"percent-encoding 2.1.0",
"serde 1.0.123",
"thiserror",
]
[[package]] [[package]]
name = "serde_test" name = "serde_test"
version = "0.8.23" version = "0.8.23"
@ -5061,6 +5460,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" checksum = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c"
[[package]]
name = "sha1"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d"
[[package]] [[package]]
name = "sha2" name = "sha2"
version = "0.6.0" version = "0.6.0"
@ -5082,7 +5487,7 @@ checksum = "fa827a14b29ab7f44778d14a88d3cb76e949c45083f7dbfa507d0cb699dc12de"
dependencies = [ dependencies = [
"block-buffer 0.9.0", "block-buffer 0.9.0",
"cfg-if 1.0.0", "cfg-if 1.0.0",
"cpuid-bool", "cpuid-bool 0.1.2",
"digest 0.9.0", "digest 0.9.0",
"opaque-debug", "opaque-debug",
] ]
@ -5132,6 +5537,15 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "simple-mutex"
version = "1.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38aabbeafa6f6dead8cebf246fe9fae1f9215c8d29b3a69f93bd62a9e4a3dcd6"
dependencies = [
"event-listener",
]
[[package]] [[package]]
name = "siphasher" name = "siphasher"
version = "0.3.3" version = "0.3.3"
@ -5161,6 +5575,17 @@ dependencies = [
"futures-io-preview", "futures-io-preview",
] ]
[[package]]
name = "sluice"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fa0333a60ff2e3474a6775cc611840c2a55610c831dd366503474c02f1a28f5"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
]
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "0.2.1" version = "0.2.1"
@ -5204,12 +5629,36 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "spin"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spinning_top"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e529d73e80d64b5f2631f9035113347c578a1c9c7774b83a2b880788459ab36"
dependencies = [
"lock_api 0.4.2",
]
[[package]] [[package]]
name = "stable_deref_trait" name = "stable_deref_trait"
version = "1.2.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]]
name = "standback"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2beb4d1860a61f571530b3f855a1b538d0200f7871c63331ecd6f17b1f014f8"
dependencies = [
"version_check",
]
[[package]] [[package]]
name = "static_assertions" name = "static_assertions"
version = "1.1.0" version = "1.1.0"
@ -5222,6 +5671,55 @@ version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe" checksum = "8207e78455ffdf55661170876f88daf85356e4edd54e0a3dbc79586ca1e50cbe"
[[package]]
name = "stdweb"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
dependencies = [
"discard",
"rustc_version",
"stdweb-derive",
"stdweb-internal-macros",
"stdweb-internal-runtime",
"wasm-bindgen",
]
[[package]]
name = "stdweb-derive"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
dependencies = [
"proc-macro2",
"quote 1.0.8",
"serde 1.0.123",
"serde_derive",
"syn 1.0.60",
]
[[package]]
name = "stdweb-internal-macros"
version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
dependencies = [
"base-x",
"proc-macro2",
"quote 1.0.8",
"serde 1.0.123",
"serde_derive",
"serde_json",
"sha1 0.6.0",
"syn 1.0.60",
]
[[package]]
name = "stdweb-internal-runtime"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
[[package]] [[package]]
name = "str-buf" name = "str-buf"
version = "1.0.5" version = "1.0.5"
@ -5268,6 +5766,12 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]]
name = "subtle"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e81da0851ada1f3e9d4312c704aa4f8806f0f9d69faaf8df2f3464b4a9437c2"
[[package]] [[package]]
name = "surf" name = "surf"
version = "1.0.3" version = "1.0.3"
@ -5276,7 +5780,7 @@ checksum = "741a8008f8a833ef16f47df94a30754478fb2c2bf822b9c2e6f7f09203b97ace"
dependencies = [ dependencies = [
"futures-preview", "futures-preview",
"http 0.1.21", "http 0.1.21",
"isahc", "isahc 0.7.6",
"js-sys", "js-sys",
"log 0.4.14", "log 0.4.14",
"mime", "mime",
@ -5290,6 +5794,28 @@ dependencies = [
"web-sys", "web-sys",
] ]
[[package]]
name = "surf"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a154d33ca6b5e1fe6fd1c760e5a5cc1202425f6cca2e13229f16a69009f6328"
dependencies = [
"async-std",
"async-trait",
"cfg-if 1.0.0",
"encoding_rs",
"futures-util",
"http-client",
"http-types",
"log 0.4.14",
"mime_guess",
"once_cell",
"pin-project-lite 0.2.4",
"serde 1.0.123",
"serde_json",
"web-sys",
]
[[package]] [[package]]
name = "sxd-document" name = "sxd-document"
version = "0.3.2" version = "0.3.2"
@ -5540,6 +6066,44 @@ dependencies = [
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[package]]
name = "time"
version = "0.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7"
dependencies = [
"const_fn",
"libc",
"standback",
"stdweb",
"time-macros",
"version_check",
"winapi 0.3.9",
]
[[package]]
name = "time-macros"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
dependencies = [
"proc-macro-hack",
"time-macros-impl",
]
[[package]]
name = "time-macros-impl"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa"
dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote 1.0.8",
"standback",
"syn 1.0.60",
]
[[package]] [[package]]
name = "tint" name = "tint"
version = "1.0.1" version = "1.0.1"
@ -5617,6 +6181,16 @@ dependencies = [
"tokio-macros", "tokio-macros",
] ]
[[package]]
name = "tokio"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8190d04c665ea9e6b6a0dc45523ade572c088d2e6566244c1122671dbf4ae3a"
dependencies = [
"autocfg",
"pin-project-lite 0.2.4",
]
[[package]] [[package]]
name = "tokio-codec" name = "tokio-codec"
version = "0.1.2" version = "0.1.2"
@ -5777,7 +6351,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89" checksum = "df720b6581784c118f0eb4310796b12b1d242a7eb95f716a8367855325c25f89"
dependencies = [ dependencies = [
"crossbeam-deque 0.7.3", "crossbeam-deque 0.7.3",
"crossbeam-queue", "crossbeam-queue 0.2.3",
"crossbeam-utils 0.7.2", "crossbeam-utils 0.7.2",
"futures 0.1.30", "futures 0.1.30",
"lazy_static 1.4.0", "lazy_static 1.4.0",
@ -5880,9 +6454,21 @@ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"log 0.4.14", "log 0.4.14",
"pin-project-lite 0.2.4", "pin-project-lite 0.2.4",
"tracing-attributes",
"tracing-core", "tracing-core",
] ]
[[package]]
name = "tracing-attributes"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8a9bd1db7706f2373a190b0d067146caa39350c486f3d455b0e33b431f94c07"
dependencies = [
"proc-macro2",
"quote 1.0.8",
"syn 1.0.60",
]
[[package]] [[package]]
name = "tracing-core" name = "tracing-core"
version = "0.1.17" version = "0.1.17"
@ -6018,15 +6604,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564"
[[package]] [[package]]
name = "url" name = "universal-hash"
version = "2.2.0" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402"
dependencies = [
"generic-array 0.14.4",
"subtle",
]
[[package]]
name = "untrusted"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
name = "url"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b"
dependencies = [ dependencies = [
"form_urlencoded", "form_urlencoded",
"idna", "idna",
"matches", "matches",
"percent-encoding 2.1.0", "percent-encoding 2.1.0",
"serde 1.0.123",
] ]
[[package]] [[package]]
@ -6280,6 +6883,25 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "webpki"
version = "0.21.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "webpki-roots"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f20dea7535251981a9670857150d571846545088359b28e4951d350bdaf179f"
dependencies = [
"webpki",
]
[[package]] [[package]]
name = "weezl" name = "weezl"
version = "0.1.3" version = "0.1.3"
@ -6428,5 +7050,5 @@ dependencies = [
"crc32fast", "crc32fast",
"flate2", "flate2",
"thiserror", "thiserror",
"time", "time 0.1.43",
] ]

View File

@ -16,7 +16,8 @@ nu-errors = { path = "../nu-errors", version = "0.27.2" }
nu-plugin = { path = "../nu-plugin", version = "0.27.2" } nu-plugin = { path = "../nu-plugin", version = "0.27.2" }
nu-protocol = { path = "../nu-protocol", version = "0.27.2" } nu-protocol = { path = "../nu-protocol", version = "0.27.2" }
nu-source = { path = "../nu-source", version = "0.27.2" } nu-source = { path = "../nu-source", version = "0.27.2" }
surf = "1.0.3" surf = { version = "2.2.0", features = ["h1-client-rustls"] }
url = "2.1.1" url = "2.2.1"
mime = "0.3.16"
[build-dependencies] [build-dependencies]

View File

@ -1,11 +1,9 @@
use base64::encode; use base64::encode;
use mime::Mime;
use nu_errors::ShellError; use nu_errors::ShellError;
use nu_protocol::{CallInfo, CommandAction, ReturnSuccess, ReturnValue, UntaggedValue, Value}; use nu_protocol::{CallInfo, CommandAction, ReturnSuccess, ReturnValue, UntaggedValue, Value};
use nu_source::{AnchorLocation, Span, Tag}; use nu_source::{AnchorLocation, Span, Tag};
use std::path::PathBuf; use std::path::PathBuf;
use std::str::FromStr; use std::str::FromStr;
use surf::mime;
#[derive(Default)] #[derive(Default)]
pub struct Fetch { pub struct Fetch {
@ -97,25 +95,31 @@ async fn helper(
has_raw: bool, has_raw: bool,
user: Option<String>, user: Option<String>,
password: Option<String>, password: Option<String>,
) -> Result<(Option<String>, Value), ShellError> { ) -> std::result::Result<(Option<String>, Value), ShellError> {
if let Err(e) = url::Url::parse(location) { let url = match url::Url::parse(location) {
return Err(ShellError::labeled_error( Ok(u) => u,
format!("Incomplete or incorrect url:\n{:?}", e), Err(e) => {
"expected a full url", return Err(ShellError::labeled_error(
span, format!("Incomplete or incorrect url:\n{:?}", e),
)); "expected a full url",
} span,
));
}
};
let login = match (user, password) { let login = match (user, password) {
(Some(user), Some(password)) => Some(encode(&format!("{}:{}", user, password))), (Some(user), Some(password)) => Some(encode(&format!("{}:{}", user, password))),
(Some(user), _) => Some(encode(&format!("{}:", user))), (Some(user), _) => Some(encode(&format!("{}:", user))),
_ => None, _ => None,
}; };
let mut response = surf::get(location);
let mut response = surf::RequestBuilder::new(surf::http::Method::Get, url);
if let Some(login) = login { if let Some(login) = login {
response = response.set_header("Authorization", format!("Basic {}", login)); response = surf::get(location).header("Authorization", format!("Basic {}", login));
} }
let generate_error = |t: &str, e: Box<dyn std::error::Error>, span: &Span| {
let generate_error = |t: &str, e: surf::Error, span: &Span| {
ShellError::labeled_error( ShellError::labeled_error(
format!("Could not load {} from remote url: {:?}", t, e), format!("Could not load {} from remote url: {:?}", t, e),
"could not load", "could not load",
@ -126,16 +130,29 @@ async fn helper(
span, span,
anchor: Some(AnchorLocation::Url(location.to_string())), anchor: Some(AnchorLocation::Url(location.to_string())),
}; };
match response.await { match response.await {
Ok(mut r) => match r.headers().get("content-type") { Ok(mut r) => match r.header("content-type") {
Some(content_type) => { Some(content_type) => {
let content_type = Mime::from_str(content_type).map_err(|_| { let content_type_header_value = content_type.get(0);
ShellError::labeled_error( let content_type_header_value = match content_type_header_value {
format!("MIME type unknown: {}", content_type), Some(h) => h,
"given unknown MIME type", None => {
span, return Err(ShellError::labeled_error(
) "no content type found",
})?; "no content type found",
span,
))
}
};
let content_type = mime::Mime::from_str(content_type_header_value.as_str())
.map_err(|_| {
ShellError::labeled_error(
format!("MIME type unknown: {}", content_type_header_value),
"given unknown MIME type",
span,
)
})?;
match (content_type.type_(), content_type.subtype()) { match (content_type.type_(), content_type.subtype()) {
(mime::APPLICATION, mime::XML) => Ok(( (mime::APPLICATION, mime::XML) => Ok((
Some("xml".to_string()), Some("xml".to_string()),
@ -159,7 +176,7 @@ async fn helper(
let buf: Vec<u8> = r let buf: Vec<u8> = r
.body_bytes() .body_bytes()
.await .await
.map_err(|e| generate_error("binary", Box::new(e), &span))?; .map_err(|e| generate_error("binary", e, &span))?;
Ok((None, UntaggedValue::binary(buf).into_value(tag))) Ok((None, UntaggedValue::binary(buf).into_value(tag)))
} }
(mime::IMAGE, mime::SVG) => Ok(( (mime::IMAGE, mime::SVG) => Ok((
@ -175,7 +192,7 @@ async fn helper(
let buf: Vec<u8> = r let buf: Vec<u8> = r
.body_bytes() .body_bytes()
.await .await
.map_err(|e| generate_error("image", Box::new(e), &span))?; .map_err(|e| generate_error("image", e, &span))?;
Ok(( Ok((
Some(image_ty.to_string()), Some(image_ty.to_string()),
UntaggedValue::binary(buf).into_value(tag), UntaggedValue::binary(buf).into_value(tag),
@ -228,7 +245,17 @@ async fn helper(
)) ))
} }
(_ty, _sub_ty) if has_raw => { (_ty, _sub_ty) if has_raw => {
let raw_bytes = r.body_bytes().await?; let raw_bytes = r.body_bytes().await;
let raw_bytes = match raw_bytes {
Ok(r) => r,
Err(e) => {
return Err(ShellError::labeled_error(
"error with raw_bytes",
e.to_string(),
&span,
));
}
};
// For unsupported MIME types, we do not know if the data is UTF-8, // For unsupported MIME types, we do not know if the data is UTF-8,
// so we get the raw body bytes and try to convert to UTF-8 if possible. // so we get the raw body bytes and try to convert to UTF-8 if possible.
@ -251,9 +278,9 @@ async fn helper(
UntaggedValue::string("No content type found".to_owned()).into_value(tag), UntaggedValue::string("No content type found".to_owned()).into_value(tag),
)), )),
}, },
Err(_) => Err(ShellError::labeled_error( Err(e) => Err(ShellError::labeled_error(
"URL could not be opened", "url could not be opened",
"url not found", e.to_string(),
span, span,
)), )),
} }