diff --git a/security/vaultwarden/Makefile b/security/vaultwarden/Makefile index 74327c4202d..24e4a5e3fdf 100644 --- a/security/vaultwarden/Makefile +++ b/security/vaultwarden/Makefile @@ -5,8 +5,7 @@ COMMENT = unofficial bitwarden compatible server GH_ACCOUNT = dani-garcia GH_PROJECT = vaultwarden -GH_TAGNAME = 1.24.0 -REVISION = 1 +GH_TAGNAME = 1.25.0 CATEGORIES = security diff --git a/security/vaultwarden/crates.inc b/security/vaultwarden/crates.inc index 8c908aa6aab..36da597c656 100644 --- a/security/vaultwarden/crates.inc +++ b/security/vaultwarden/crates.inc @@ -1,375 +1,397 @@ -MODCARGO_CRATES += addr2line 0.17.0 # Apache-2.0 OR MIT -MODCARGO_CRATES += adler 1.0.2 # 0BSD OR MIT OR Apache-2.0 -MODCARGO_CRATES += aho-corasick 0.7.18 # Unlicense/MIT -MODCARGO_CRATES += alloc-no-stdlib 2.0.3 # BSD-3-Clause -MODCARGO_CRATES += alloc-stdlib 0.2.1 # BSD-3-Clause -MODCARGO_CRATES += ansi_term 0.12.1 # MIT -MODCARGO_CRATES += async-compression 0.3.12 # MIT OR Apache-2.0 -MODCARGO_CRATES += async-stream 0.3.2 # MIT -MODCARGO_CRATES += async-stream-impl 0.3.2 # MIT -MODCARGO_CRATES += async-trait 0.1.52 # MIT OR Apache-2.0 -MODCARGO_CRATES += atomic 0.5.1 # Apache-2.0/MIT -MODCARGO_CRATES += atty 0.2.14 # MIT -MODCARGO_CRATES += autocfg 1.0.1 # Apache-2.0 OR MIT -MODCARGO_CRATES += backtrace 0.3.64 # MIT/Apache-2.0 -MODCARGO_CRATES += base-x 0.2.8 # MIT -MODCARGO_CRATES += base64 0.11.0 # MIT/Apache-2.0 -MODCARGO_CRATES += base64 0.12.3 # MIT/Apache-2.0 -MODCARGO_CRATES += base64 0.13.0 # MIT/Apache-2.0 -MODCARGO_CRATES += binascii 0.1.4 # MIT -MODCARGO_CRATES += bitflags 1.3.2 # MIT/Apache-2.0 -MODCARGO_CRATES += block-buffer 0.7.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += block-buffer 0.9.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += block-padding 0.1.5 # MIT OR Apache-2.0 -MODCARGO_CRATES += brotli 3.3.3 # BSD-3-Clause/MIT -MODCARGO_CRATES += brotli-decompressor 2.3.2 # BSD-3-Clause/MIT -MODCARGO_CRATES += bumpalo 3.9.1 # MIT/Apache-2.0 -MODCARGO_CRATES += byte-tools 0.3.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += byteorder 1.4.3 # Unlicense OR MIT -MODCARGO_CRATES += bytes 0.4.12 # MIT -MODCARGO_CRATES += bytes 1.1.0 # MIT -MODCARGO_CRATES += cc 1.0.72 # MIT/Apache-2.0 -MODCARGO_CRATES += cfg-if 0.1.10 # MIT/Apache-2.0 -MODCARGO_CRATES += cfg-if 1.0.0 # MIT/Apache-2.0 -MODCARGO_CRATES += chashmap 2.2.2 # MIT -MODCARGO_CRATES += chrono 0.4.19 # MIT/Apache-2.0 -MODCARGO_CRATES += chrono-tz 0.6.1 # MIT/Apache-2.0 -MODCARGO_CRATES += chrono-tz-build 0.0.2 # MIT/Apache-2.0 -MODCARGO_CRATES += const_fn 0.4.9 # Apache-2.0 OR MIT -MODCARGO_CRATES += cookie 0.15.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += cookie 0.16.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += cookie_store 0.15.1 # MIT/Apache-2.0 -MODCARGO_CRATES += core-foundation 0.9.2 # MIT / Apache-2.0 -MODCARGO_CRATES += core-foundation-sys 0.8.3 # MIT / Apache-2.0 -MODCARGO_CRATES += cpufeatures 0.2.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += crc32fast 1.3.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += cron 0.9.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += crossbeam-utils 0.8.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += crypto-mac 0.10.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += crypto-mac 0.11.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += ctrlc 3.2.1 # MIT/Apache-2.0 -MODCARGO_CRATES += dashmap 4.0.2 # MIT -MODCARGO_CRATES += data-encoding 2.3.2 # MIT -MODCARGO_CRATES += data-url 0.1.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += devise 0.3.1 # MIT/Apache-2.0 -MODCARGO_CRATES += devise_codegen 0.3.1 # MIT/Apache-2.0 -MODCARGO_CRATES += devise_core 0.3.1 # MIT/Apache-2.0 -MODCARGO_CRATES += diesel 1.4.8 # MIT OR Apache-2.0 -MODCARGO_CRATES += diesel_derives 1.4.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += diesel_migrations 1.4.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += digest 0.8.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += digest 0.9.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += discard 1.0.4 # MIT -MODCARGO_CRATES += dotenv 0.15.0 # MIT -MODCARGO_CRATES += either 1.6.1 # MIT/Apache-2.0 -MODCARGO_CRATES += encoding_rs 0.8.30 # COPYRIGHT -MODCARGO_CRATES += enum-as-inner 0.3.3 # MIT/Apache-2.0 -MODCARGO_CRATES += error-chain 0.11.0 # MIT/Apache-2.0 -MODCARGO_CRATES += fake-simd 0.1.2 # MIT/Apache-2.0 -MODCARGO_CRATES += fastrand 1.7.0 # Apache-2.0 OR MIT -MODCARGO_CRATES += fern 0.6.0 # MIT -MODCARGO_CRATES += figment 0.10.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += flate2 1.0.22 # MIT/Apache-2.0 -MODCARGO_CRATES += fnv 1.0.7 # Apache-2.0 / MIT -MODCARGO_CRATES += foreign-types 0.3.2 # MIT/Apache-2.0 -MODCARGO_CRATES += foreign-types-shared 0.1.1 # MIT/Apache-2.0 -MODCARGO_CRATES += form_urlencoded 1.0.1 # MIT/Apache-2.0 -MODCARGO_CRATES += fuchsia-cprng 0.1.1 # LICENSE -MODCARGO_CRATES += fuchsia-zircon 0.3.3 # BSD-3-Clause -MODCARGO_CRATES += fuchsia-zircon-sys 0.3.3 # BSD-3-Clause -MODCARGO_CRATES += futf 0.1.4 # MIT / Apache-2.0 -MODCARGO_CRATES += futures 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-channel 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-core 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-executor 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-io 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-macro 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-sink 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-task 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += futures-timer 3.0.2 # MIT/Apache-2.0 -MODCARGO_CRATES += futures-util 0.3.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += generator 0.7.0 # MIT/Apache-2.0 -MODCARGO_CRATES += generic-array 0.12.4 # MIT -MODCARGO_CRATES += generic-array 0.14.5 # MIT -MODCARGO_CRATES += getrandom 0.1.16 # MIT OR Apache-2.0 -MODCARGO_CRATES += getrandom 0.2.4 # MIT OR Apache-2.0 -MODCARGO_CRATES += gimli 0.26.1 # Apache-2.0/MIT -MODCARGO_CRATES += glob 0.3.0 # MIT/Apache-2.0 -MODCARGO_CRATES += governor 0.4.1 # MIT -MODCARGO_CRATES += h2 0.3.11 # MIT -MODCARGO_CRATES += half 1.8.2 # MIT OR Apache-2.0 -MODCARGO_CRATES += handlebars 4.2.1 # MIT -MODCARGO_CRATES += hashbrown 0.11.2 # Apache-2.0/MIT -MODCARGO_CRATES += heck 0.3.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += hermit-abi 0.1.19 # MIT/Apache-2.0 -MODCARGO_CRATES += hmac 0.10.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += hmac 0.11.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += hostname 0.3.1 # MIT -MODCARGO_CRATES += html5ever 0.25.1 # MIT / Apache-2.0 -MODCARGO_CRATES += http 0.2.6 # MIT/Apache-2.0 -MODCARGO_CRATES += http-body 0.4.4 # MIT -MODCARGO_CRATES += httparse 1.5.1 # MIT/Apache-2.0 -MODCARGO_CRATES += httpdate 1.0.2 # MIT/Apache-2.0 -MODCARGO_CRATES += hyper 0.14.16 # MIT -MODCARGO_CRATES += hyper-tls 0.5.0 # MIT/Apache-2.0 -MODCARGO_CRATES += idna 0.1.5 # MIT/Apache-2.0 -MODCARGO_CRATES += idna 0.2.3 # MIT/Apache-2.0 -MODCARGO_CRATES += indexmap 1.8.0 # Apache-2.0/MIT -MODCARGO_CRATES += inlinable_string 0.1.15 # Apache-2.0/MIT -MODCARGO_CRATES += instant 0.1.12 # BSD-3-Clause -MODCARGO_CRATES += iovec 0.1.4 # MIT/Apache-2.0 -MODCARGO_CRATES += ipconfig 0.2.2 # MIT/Apache-2.0 -MODCARGO_CRATES += ipnet 2.3.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += itoa 0.4.8 # MIT OR Apache-2.0 -MODCARGO_CRATES += itoa 1.0.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += js-sys 0.3.56 # MIT/Apache-2.0 -MODCARGO_CRATES += jsonwebtoken 7.2.0 # MIT -MODCARGO_CRATES += kernel32-sys 0.2.2 # MIT -MODCARGO_CRATES += lazy_static 1.4.0 # MIT/Apache-2.0 -MODCARGO_CRATES += lazycell 1.3.0 # MIT/Apache-2.0 -MODCARGO_CRATES += lettre 0.10.0-rc.4 # MIT -MODCARGO_CRATES += libc 0.2.116 # MIT OR Apache-2.0 -MODCARGO_CRATES += libsqlite3-sys 0.22.2 # MIT -MODCARGO_CRATES += linked-hash-map 0.5.4 # MIT/Apache-2.0 -MODCARGO_CRATES += lock_api 0.4.6 # Apache-2.0/MIT -MODCARGO_CRATES += log 0.4.14 # MIT OR Apache-2.0 -MODCARGO_CRATES += loom 0.5.4 # MIT -MODCARGO_CRATES += lru-cache 0.1.2 # MIT/Apache-2.0 -MODCARGO_CRATES += mac 0.1.1 # MIT/Apache-2.0 -MODCARGO_CRATES += mach 0.3.2 # BSD-2-Clause -MODCARGO_CRATES += maplit 1.0.2 # MIT/Apache-2.0 -MODCARGO_CRATES += markup5ever 0.10.1 # MIT / Apache-2.0 -MODCARGO_CRATES += markup5ever_rcdom 0.1.0 # MIT / Apache-2.0 -MODCARGO_CRATES += match_cfg 0.1.0 # MIT/Apache-2.0 -MODCARGO_CRATES += matchers 0.1.0 # MIT -MODCARGO_CRATES += matches 0.1.9 # MIT -MODCARGO_CRATES += maybe-uninit 2.0.0 # Apache-2.0 OR MIT -MODCARGO_CRATES += memchr 2.4.1 # Unlicense/MIT -MODCARGO_CRATES += memoffset 0.6.5 # MIT -MODCARGO_CRATES += migrations_internals 1.4.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += migrations_macros 1.4.2 # MIT OR Apache-2.0 -MODCARGO_CRATES += mime 0.3.16 # MIT/Apache-2.0 -MODCARGO_CRATES += minimal-lexical 0.2.1 # MIT/Apache-2.0 -MODCARGO_CRATES += miniz_oxide 0.4.4 # MIT OR Zlib OR Apache-2.0 -MODCARGO_CRATES += mio 0.6.23 # MIT -MODCARGO_CRATES += mio 0.7.14 # MIT -MODCARGO_CRATES += mio-extras 2.0.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += miow 0.2.2 # MIT/Apache-2.0 -MODCARGO_CRATES += miow 0.3.7 # MIT/Apache-2.0 -MODCARGO_CRATES += multer 2.0.2 # MIT -MODCARGO_CRATES += mysqlclient-sys 0.2.5 # MIT OR Apache-2.0 -MODCARGO_CRATES += native-tls 0.2.8 # MIT/Apache-2.0 -MODCARGO_CRATES += net2 0.2.37 # MIT/Apache-2.0 -MODCARGO_CRATES += new_debug_unreachable 1.0.4 # MIT -MODCARGO_CRATES += nix 0.23.1 # MIT -MODCARGO_CRATES += no-std-compat 0.4.1 # MIT -MODCARGO_CRATES += nom 4.1.1 # MIT -MODCARGO_CRATES += nom 7.1.0 # MIT -MODCARGO_CRATES += nonzero_ext 0.3.0 # Apache-2.0 -MODCARGO_CRATES += ntapi 0.3.6 # Apache-2.0 OR MIT -MODCARGO_CRATES += num-bigint 0.2.6 # MIT/Apache-2.0 -MODCARGO_CRATES += num-derive 0.3.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += num-integer 0.1.44 # MIT OR Apache-2.0 -MODCARGO_CRATES += num-traits 0.2.14 # MIT OR Apache-2.0 -MODCARGO_CRATES += num_cpus 1.13.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += num_threads 0.1.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += object 0.27.1 # Apache-2.0/MIT -MODCARGO_CRATES += once_cell 1.9.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += opaque-debug 0.2.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += opaque-debug 0.3.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += openssl 0.10.38 # Apache-2.0 -MODCARGO_CRATES += openssl-probe 0.1.5 # MIT/Apache-2.0 -MODCARGO_CRATES += openssl-src 111.17.0+1.1.1m # MIT/Apache-2.0 -MODCARGO_CRATES += openssl-sys 0.9.72 # MIT -MODCARGO_CRATES += owning_ref 0.3.3 # MIT -MODCARGO_CRATES += parity-ws 0.11.1 # MIT -MODCARGO_CRATES += parking_lot 0.4.8 # Apache-2.0/MIT -MODCARGO_CRATES += parking_lot 0.11.2 # Apache-2.0/MIT -MODCARGO_CRATES += parking_lot_core 0.2.14 # Apache-2.0/MIT -MODCARGO_CRATES += parking_lot_core 0.8.5 # Apache-2.0/MIT -MODCARGO_CRATES += parse-zoneinfo 0.3.0 # MIT -MODCARGO_CRATES += paste 1.0.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += pear 0.2.3 # MIT/Apache-2.0 -MODCARGO_CRATES += pear_codegen 0.2.3 # MIT/Apache-2.0 -MODCARGO_CRATES += pem 0.8.3 # MIT -MODCARGO_CRATES += percent-encoding 1.0.1 # MIT/Apache-2.0 -MODCARGO_CRATES += percent-encoding 2.1.0 # MIT/Apache-2.0 -MODCARGO_CRATES += pest 2.1.3 # MIT/Apache-2.0 -MODCARGO_CRATES += pest_derive 2.1.0 # MIT/Apache-2.0 -MODCARGO_CRATES += pest_generator 2.1.3 # MIT/Apache-2.0 -MODCARGO_CRATES += pest_meta 2.1.3 # MIT/Apache-2.0 -MODCARGO_CRATES += phf 0.8.0 # MIT -MODCARGO_CRATES += phf 0.10.1 # MIT -MODCARGO_CRATES += phf_codegen 0.8.0 # MIT -MODCARGO_CRATES += phf_codegen 0.10.0 # MIT -MODCARGO_CRATES += phf_generator 0.8.0 # MIT -MODCARGO_CRATES += phf_generator 0.10.0 # MIT -MODCARGO_CRATES += phf_shared 0.8.0 # MIT -MODCARGO_CRATES += phf_shared 0.10.0 # MIT -MODCARGO_CRATES += pico-args 0.4.2 # MIT -MODCARGO_CRATES += pin-project-lite 0.2.8 # Apache-2.0 OR MIT -MODCARGO_CRATES += pin-utils 0.1.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += pkg-config 0.3.24 # MIT/Apache-2.0 -MODCARGO_CRATES += ppv-lite86 0.2.16 # MIT/Apache-2.0 -MODCARGO_CRATES += pq-sys 0.4.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += precomputed-hash 0.1.1 # MIT -MODCARGO_CRATES += proc-macro-hack 0.5.19 # MIT OR Apache-2.0 -MODCARGO_CRATES += proc-macro2 1.0.36 # MIT OR Apache-2.0 -MODCARGO_CRATES += proc-macro2-diagnostics 0.9.1 # MIT/Apache-2.0 -MODCARGO_CRATES += psl-types 2.0.10 # MIT/Apache-2.0 -MODCARGO_CRATES += publicsuffix 2.1.1 # MIT/Apache-2.0 -MODCARGO_CRATES += quanta 0.9.3 # MIT -MODCARGO_CRATES += quick-error 1.2.3 # MIT/Apache-2.0 -MODCARGO_CRATES += quick-error 2.0.1 # MIT/Apache-2.0 -MODCARGO_CRATES += quote 1.0.15 # MIT OR Apache-2.0 -MODCARGO_CRATES += quoted_printable 0.4.5 # 0BSD -MODCARGO_CRATES += r2d2 0.8.9 # MIT/Apache-2.0 -MODCARGO_CRATES += rand 0.4.6 # MIT/Apache-2.0 -MODCARGO_CRATES += rand 0.7.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand 0.8.4 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand_chacha 0.2.2 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand_chacha 0.3.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand_core 0.3.1 # MIT/Apache-2.0 -MODCARGO_CRATES += rand_core 0.4.2 # MIT/Apache-2.0 -MODCARGO_CRATES += rand_core 0.5.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand_core 0.6.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand_hc 0.2.0 # MIT/Apache-2.0 -MODCARGO_CRATES += rand_hc 0.3.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += rand_pcg 0.2.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += raw-cpuid 10.2.0 # MIT -MODCARGO_CRATES += rdrand 0.4.0 # ISC -MODCARGO_CRATES += redox_syscall 0.2.10 # MIT -MODCARGO_CRATES += ref-cast 1.0.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += ref-cast-impl 1.0.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += regex 1.5.4 # MIT OR Apache-2.0 -MODCARGO_CRATES += regex-automata 0.1.10 # Unlicense/MIT -MODCARGO_CRATES += regex-syntax 0.6.25 # MIT/Apache-2.0 -MODCARGO_CRATES += remove_dir_all 0.5.3 # MIT/Apache-2.0 -MODCARGO_CRATES += reqwest 0.11.9 # MIT/Apache-2.0 -MODCARGO_CRATES += resolv-conf 0.7.0 # MIT/Apache-2.0 -MODCARGO_CRATES += ring 0.16.20 # LICENSE -MODCARGO_CRATES += rmp 0.8.10 # MIT -MODCARGO_CRATES += rmpv 1.0.0 # MIT -MODCARGO_CRATES += rustc-demangle 0.1.21 # MIT/Apache-2.0 -MODCARGO_CRATES += rustc_version 0.2.3 # MIT/Apache-2.0 -MODCARGO_CRATES += rustls 0.19.1 # Apache-2.0/ISC/MIT -MODCARGO_CRATES += rustversion 1.0.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += ryu 1.0.9 # Apache-2.0 OR BSL-1.0 -MODCARGO_CRATES += same-file 1.0.6 # Unlicense/MIT -MODCARGO_CRATES += schannel 0.1.19 # MIT -MODCARGO_CRATES += scheduled-thread-pool 0.2.5 # MIT/Apache-2.0 -MODCARGO_CRATES += scoped-tls 1.0.0 # MIT/Apache-2.0 -MODCARGO_CRATES += scopeguard 1.1.0 # MIT/Apache-2.0 -MODCARGO_CRATES += sct 0.6.1 # Apache-2.0/ISC/MIT -MODCARGO_CRATES += security-framework 2.6.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += security-framework-sys 2.6.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += semver 0.9.0 # MIT/Apache-2.0 -MODCARGO_CRATES += semver-parser 0.7.0 # MIT/Apache-2.0 -MODCARGO_CRATES += serde 1.0.136 # MIT OR Apache-2.0 -MODCARGO_CRATES += serde_cbor 0.11.2 # MIT/Apache-2.0 -MODCARGO_CRATES += serde_derive 1.0.136 # MIT OR Apache-2.0 -MODCARGO_CRATES += serde_json 1.0.78 # MIT OR Apache-2.0 -MODCARGO_CRATES += serde_urlencoded 0.7.1 # MIT/Apache-2.0 -MODCARGO_CRATES += sha-1 0.8.2 # MIT OR Apache-2.0 -MODCARGO_CRATES += sha-1 0.9.8 # MIT OR Apache-2.0 -MODCARGO_CRATES += sha1 0.6.1 # BSD-3-Clause -MODCARGO_CRATES += sha1_smol 1.0.0 # BSD-3-Clause -MODCARGO_CRATES += sha2 0.9.9 # MIT OR Apache-2.0 -MODCARGO_CRATES += sharded-slab 0.1.4 # MIT -MODCARGO_CRATES += signal-hook-registry 1.4.0 # Apache-2.0/MIT -MODCARGO_CRATES += simple_asn1 0.4.1 # ISC -MODCARGO_CRATES += siphasher 0.3.9 # MIT/Apache-2.0 -MODCARGO_CRATES += slab 0.4.5 # MIT -MODCARGO_CRATES += smallvec 0.6.14 # MIT/Apache-2.0 -MODCARGO_CRATES += smallvec 1.8.0 # MIT/Apache-2.0 -MODCARGO_CRATES += socket2 0.3.19 # MIT/Apache-2.0 -MODCARGO_CRATES += socket2 0.4.4 # MIT OR Apache-2.0 -MODCARGO_CRATES += spin 0.5.2 # MIT -MODCARGO_CRATES += spin 0.9.2 # MIT -MODCARGO_CRATES += stable-pattern 0.1.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += stable_deref_trait 1.2.0 # MIT/Apache-2.0 -MODCARGO_CRATES += standback 0.2.17 # MIT OR Apache-2.0 -MODCARGO_CRATES += state 0.5.2 # MIT/Apache-2.0 -MODCARGO_CRATES += stdweb 0.4.20 # MIT/Apache-2.0 -MODCARGO_CRATES += stdweb-derive 0.5.3 # MIT/Apache-2.0 -MODCARGO_CRATES += stdweb-internal-macros 0.2.9 # MIT/Apache-2.0 -MODCARGO_CRATES += stdweb-internal-runtime 0.1.5 # MIT/Apache-2.0 -MODCARGO_CRATES += string_cache 0.8.2 # MIT / Apache-2.0 -MODCARGO_CRATES += string_cache_codegen 0.5.1 # MIT / Apache-2.0 -MODCARGO_CRATES += subtle 2.4.1 # BSD-3-Clause -MODCARGO_CRATES += syn 1.0.86 # MIT OR Apache-2.0 -MODCARGO_CRATES += syslog 4.0.1 # MIT -MODCARGO_CRATES += tempfile 3.3.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += tendril 0.4.2 # MIT/Apache-2.0 -MODCARGO_CRATES += thiserror 1.0.30 # MIT OR Apache-2.0 -MODCARGO_CRATES += thiserror-impl 1.0.30 # MIT OR Apache-2.0 -MODCARGO_CRATES += thread_local 1.1.4 # Apache-2.0/MIT -MODCARGO_CRATES += threadpool 1.8.1 # MIT/Apache-2.0 -MODCARGO_CRATES += time 0.1.44 # MIT/Apache-2.0 -MODCARGO_CRATES += time 0.2.27 # MIT OR Apache-2.0 -MODCARGO_CRATES += time 0.3.7 # MIT OR Apache-2.0 -MODCARGO_CRATES += time-macros 0.1.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += time-macros 0.2.3 # MIT OR Apache-2.0 -MODCARGO_CRATES += time-macros-impl 0.1.2 # MIT OR Apache-2.0 -MODCARGO_CRATES += tinyvec 1.5.1 # Zlib OR Apache-2.0 OR MIT -MODCARGO_CRATES += tinyvec_macros 0.1.0 # MIT OR Apache-2.0 OR Zlib -MODCARGO_CRATES += tokio 1.16.1 # MIT -MODCARGO_CRATES += tokio-macros 1.7.0 # MIT -MODCARGO_CRATES += tokio-native-tls 0.3.0 # MIT -MODCARGO_CRATES += tokio-rustls 0.22.0 # MIT/Apache-2.0 -MODCARGO_CRATES += tokio-socks 0.5.1 # MIT -MODCARGO_CRATES += tokio-stream 0.1.8 # MIT -MODCARGO_CRATES += tokio-util 0.6.9 # MIT -MODCARGO_CRATES += toml 0.5.8 # MIT/Apache-2.0 -MODCARGO_CRATES += totp-lite 1.0.3 # MIT -MODCARGO_CRATES += tower-service 0.3.1 # MIT -MODCARGO_CRATES += tracing 0.1.29 # MIT -MODCARGO_CRATES += tracing-attributes 0.1.18 # MIT -MODCARGO_CRATES += tracing-core 0.1.21 # MIT -MODCARGO_CRATES += tracing-log 0.1.2 # MIT -MODCARGO_CRATES += tracing-subscriber 0.3.7 # MIT -MODCARGO_CRATES += trust-dns-proto 0.20.3 # MIT/Apache-2.0 -MODCARGO_CRATES += trust-dns-resolver 0.20.3 # MIT/Apache-2.0 -MODCARGO_CRATES += try-lock 0.2.3 # MIT -MODCARGO_CRATES += typenum 1.15.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += u2f 0.2.0 # MIT OR Apache-2.0 -MODCARGO_CRATES += ubyte 0.10.1 # MIT OR Apache-2.0 -MODCARGO_CRATES += ucd-trie 0.1.3 # MIT/Apache-2.0 -MODCARGO_CRATES += uncased 0.9.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += unicode-bidi 0.3.7 # MIT / Apache-2.0 -MODCARGO_CRATES += unicode-normalization 0.1.19 # MIT/Apache-2.0 -MODCARGO_CRATES += unicode-segmentation 1.8.0 # MIT/Apache-2.0 -MODCARGO_CRATES += unicode-xid 0.2.2 # MIT OR Apache-2.0 -MODCARGO_CRATES += untrusted 0.7.1 # ISC -MODCARGO_CRATES += url 1.7.2 # MIT/Apache-2.0 -MODCARGO_CRATES += url 2.2.2 # MIT/Apache-2.0 -MODCARGO_CRATES += utf-8 0.7.6 # MIT OR Apache-2.0 -MODCARGO_CRATES += uuid 0.8.2 # Apache-2.0 OR MIT -MODCARGO_CRATES += vcpkg 0.2.15 # MIT/Apache-2.0 -MODCARGO_CRATES += version_check 0.9.4 # MIT/Apache-2.0 -MODCARGO_CRATES += walkdir 2.3.2 # Unlicense/MIT -MODCARGO_CRATES += want 0.3.0 # MIT -MODCARGO_CRATES += wasi 0.9.0+wasi-snapshot-preview1 # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT -MODCARGO_CRATES += wasi 0.10.0+wasi-snapshot-preview1 # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT -MODCARGO_CRATES += wasm-bindgen 0.2.79 # MIT/Apache-2.0 -MODCARGO_CRATES += wasm-bindgen-backend 0.2.79 # MIT/Apache-2.0 -MODCARGO_CRATES += wasm-bindgen-futures 0.4.29 # MIT/Apache-2.0 -MODCARGO_CRATES += wasm-bindgen-macro 0.2.79 # MIT/Apache-2.0 -MODCARGO_CRATES += wasm-bindgen-macro-support 0.2.79 # MIT/Apache-2.0 -MODCARGO_CRATES += wasm-bindgen-shared 0.2.79 # MIT/Apache-2.0 -MODCARGO_CRATES += web-sys 0.3.56 # MIT/Apache-2.0 -MODCARGO_CRATES += webauthn-rs 0.3.2 # MPL-2.0 -MODCARGO_CRATES += webpki 0.21.4 # LICENSE -MODCARGO_CRATES += widestring 0.4.3 # MIT/Apache-2.0 -MODCARGO_CRATES += winapi 0.2.8 # MIT -MODCARGO_CRATES += winapi 0.3.9 # MIT/Apache-2.0 -MODCARGO_CRATES += winapi-build 0.1.1 # MIT -MODCARGO_CRATES += winapi-i686-pc-windows-gnu 0.4.0 # MIT/Apache-2.0 -MODCARGO_CRATES += winapi-util 0.1.5 # Unlicense/MIT -MODCARGO_CRATES += winapi-x86_64-pc-windows-gnu 0.4.0 # MIT/Apache-2.0 -MODCARGO_CRATES += winreg 0.6.2 # MIT -MODCARGO_CRATES += winreg 0.7.0 # MIT -MODCARGO_CRATES += ws2_32-sys 0.2.1 # MIT -MODCARGO_CRATES += xml5ever 0.16.2 # MIT / Apache-2.0 -MODCARGO_CRATES += yansi 0.5.0 # MIT/Apache-2.0 -MODCARGO_CRATES += yubico 0.10.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += addr2line 0.17.0 # Apache-2.0 OR MIT +MODCARGO_CRATES += adler 1.0.2 # 0BSD OR MIT OR Apache-2.0 +MODCARGO_CRATES += aead 0.4.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += aes 0.7.5 # MIT OR Apache-2.0 +MODCARGO_CRATES += aes-gcm 0.9.4 # Apache-2.0 OR MIT +MODCARGO_CRATES += aho-corasick 0.7.18 # Unlicense/MIT +MODCARGO_CRATES += alloc-no-stdlib 2.0.3 # BSD-3-Clause +MODCARGO_CRATES += alloc-stdlib 0.2.1 # BSD-3-Clause +MODCARGO_CRATES += ansi_term 0.12.1 # MIT +MODCARGO_CRATES += async-compression 0.3.13 # MIT OR Apache-2.0 +MODCARGO_CRATES += async-stream 0.3.3 # MIT +MODCARGO_CRATES += async-stream-impl 0.3.3 # MIT +MODCARGO_CRATES += async-trait 0.1.53 # MIT OR Apache-2.0 +MODCARGO_CRATES += async_once 0.2.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += atomic 0.5.1 # Apache-2.0/MIT +MODCARGO_CRATES += atty 0.2.14 # MIT +MODCARGO_CRATES += autocfg 1.1.0 # Apache-2.0 OR MIT +MODCARGO_CRATES += backtrace 0.3.65 # MIT/Apache-2.0 +MODCARGO_CRATES += base-x 0.2.10 # MIT +MODCARGO_CRATES += base64 0.13.0 # MIT/Apache-2.0 +MODCARGO_CRATES += binascii 0.1.4 # MIT +MODCARGO_CRATES += bitflags 1.3.2 # MIT/Apache-2.0 +MODCARGO_CRATES += block-buffer 0.7.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += block-buffer 0.9.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += block-buffer 0.10.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += block-padding 0.1.5 # MIT OR Apache-2.0 +MODCARGO_CRATES += brotli 3.3.4 # BSD-3-Clause/MIT +MODCARGO_CRATES += brotli-decompressor 2.3.2 # BSD-3-Clause/MIT +MODCARGO_CRATES += bumpalo 3.9.1 # MIT/Apache-2.0 +MODCARGO_CRATES += byte-tools 0.3.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += byteorder 1.4.3 # Unlicense OR MIT +MODCARGO_CRATES += bytes 0.4.12 # MIT +MODCARGO_CRATES += bytes 1.1.0 # MIT +MODCARGO_CRATES += cached 0.34.0 # MIT +MODCARGO_CRATES += cached_proc_macro 0.12.0 # MIT +MODCARGO_CRATES += cached_proc_macro_types 0.1.0 # MIT +MODCARGO_CRATES += cc 1.0.73 # MIT/Apache-2.0 +MODCARGO_CRATES += cfg-if 0.1.10 # MIT/Apache-2.0 +MODCARGO_CRATES += cfg-if 1.0.0 # MIT/Apache-2.0 +MODCARGO_CRATES += chashmap 2.2.2 # MIT +MODCARGO_CRATES += chrono 0.4.19 # MIT/Apache-2.0 +MODCARGO_CRATES += chrono-tz 0.6.1 # MIT/Apache-2.0 +MODCARGO_CRATES += chrono-tz-build 0.0.2 # MIT/Apache-2.0 +MODCARGO_CRATES += cipher 0.3.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += const_fn 0.4.9 # Apache-2.0 OR MIT +MODCARGO_CRATES += cookie 0.15.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += cookie 0.16.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += cookie_store 0.15.1 # MIT/Apache-2.0 +MODCARGO_CRATES += cookie_store 0.16.0 # MIT/Apache-2.0 +MODCARGO_CRATES += core-foundation 0.9.3 # MIT / Apache-2.0 +MODCARGO_CRATES += core-foundation-sys 0.8.3 # MIT / Apache-2.0 +MODCARGO_CRATES += cpufeatures 0.2.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += crc32fast 1.3.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += cron 0.11.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += crossbeam-utils 0.8.8 # MIT OR Apache-2.0 +MODCARGO_CRATES += crypto-common 0.1.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += crypto-mac 0.11.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += ctr 0.8.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += ctrlc 3.2.2 # MIT/Apache-2.0 +MODCARGO_CRATES += darling 0.13.4 # MIT +MODCARGO_CRATES += darling_core 0.13.4 # MIT +MODCARGO_CRATES += darling_macro 0.13.4 # MIT +MODCARGO_CRATES += dashmap 5.3.3 # MIT +MODCARGO_CRATES += data-encoding 2.3.2 # MIT +MODCARGO_CRATES += data-url 0.1.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += devise 0.3.1 # MIT/Apache-2.0 +MODCARGO_CRATES += devise_codegen 0.3.1 # MIT/Apache-2.0 +MODCARGO_CRATES += devise_core 0.3.1 # MIT/Apache-2.0 +MODCARGO_CRATES += diesel 1.4.8 # MIT OR Apache-2.0 +MODCARGO_CRATES += diesel_derives 1.4.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += diesel_migrations 1.4.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += digest 0.8.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += digest 0.9.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += digest 0.10.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += dirs 4.0.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += dirs-sys 0.3.7 # MIT OR Apache-2.0 +MODCARGO_CRATES += discard 1.0.4 # MIT +MODCARGO_CRATES += dotenvy 0.15.1 # MIT +MODCARGO_CRATES += either 1.6.1 # MIT/Apache-2.0 +MODCARGO_CRATES += email-encoding 0.1.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += encoding_rs 0.8.31 # (Apache-2.0 OR MIT) AND BSD-3-Clause +MODCARGO_CRATES += enum-as-inner 0.3.4 # MIT/Apache-2.0 +MODCARGO_CRATES += error-chain 0.12.4 # MIT/Apache-2.0 +MODCARGO_CRATES += fake-simd 0.1.2 # MIT/Apache-2.0 +MODCARGO_CRATES += fastrand 1.7.0 # Apache-2.0 OR MIT +MODCARGO_CRATES += fern 0.6.1 # MIT +MODCARGO_CRATES += figment 0.10.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += flate2 1.0.23 # MIT/Apache-2.0 +MODCARGO_CRATES += fnv 1.0.7 # Apache-2.0 / MIT +MODCARGO_CRATES += foreign-types 0.3.2 # MIT/Apache-2.0 +MODCARGO_CRATES += foreign-types-shared 0.1.1 # MIT/Apache-2.0 +MODCARGO_CRATES += form_urlencoded 1.0.1 # MIT/Apache-2.0 +MODCARGO_CRATES += fuchsia-cprng 0.1.1 # LICENSE +MODCARGO_CRATES += fuchsia-zircon 0.3.3 # BSD-3-Clause +MODCARGO_CRATES += fuchsia-zircon-sys 0.3.3 # BSD-3-Clause +MODCARGO_CRATES += futures 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-channel 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-core 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-executor 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-io 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-macro 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-sink 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-task 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += futures-timer 3.0.2 # MIT/Apache-2.0 +MODCARGO_CRATES += futures-util 0.3.21 # MIT OR Apache-2.0 +MODCARGO_CRATES += generator 0.7.0 # MIT/Apache-2.0 +MODCARGO_CRATES += generic-array 0.12.4 # MIT +MODCARGO_CRATES += generic-array 0.14.5 # MIT +MODCARGO_CRATES += getrandom 0.1.16 # MIT OR Apache-2.0 +MODCARGO_CRATES += getrandom 0.2.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += ghash 0.4.4 # Apache-2.0 OR MIT +MODCARGO_CRATES += gimli 0.26.1 # Apache-2.0/MIT +MODCARGO_CRATES += glob 0.3.0 # MIT/Apache-2.0 +MODCARGO_CRATES += governor 0.4.2 # MIT +MODCARGO_CRATES += h2 0.3.13 # MIT +MODCARGO_CRATES += half 1.8.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += handlebars 4.2.2 # MIT +MODCARGO_CRATES += hashbrown 0.11.2 # Apache-2.0/MIT +MODCARGO_CRATES += hashbrown 0.12.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += heck 0.4.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += hermit-abi 0.1.19 # MIT/Apache-2.0 +MODCARGO_CRATES += hkdf 0.12.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += hmac 0.11.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += hmac 0.12.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += hostname 0.3.1 # MIT +MODCARGO_CRATES += html5gum 0.4.0 # MIT +MODCARGO_CRATES += http 0.2.7 # MIT OR Apache-2.0 +MODCARGO_CRATES += http-body 0.4.4 # MIT +MODCARGO_CRATES += httparse 1.7.1 # MIT/Apache-2.0 +MODCARGO_CRATES += httpdate 1.0.2 # MIT/Apache-2.0 +MODCARGO_CRATES += hyper 0.14.18 # MIT +MODCARGO_CRATES += hyper-tls 0.5.0 # MIT/Apache-2.0 +MODCARGO_CRATES += ident_case 1.0.1 # MIT/Apache-2.0 +MODCARGO_CRATES += idna 0.1.5 # MIT/Apache-2.0 +MODCARGO_CRATES += idna 0.2.3 # MIT/Apache-2.0 +MODCARGO_CRATES += indexmap 1.8.1 # Apache-2.0/MIT +MODCARGO_CRATES += inlinable_string 0.1.15 # Apache-2.0/MIT +MODCARGO_CRATES += instant 0.1.12 # BSD-3-Clause +MODCARGO_CRATES += iovec 0.1.4 # MIT/Apache-2.0 +MODCARGO_CRATES += ipconfig 0.2.2 # MIT/Apache-2.0 +MODCARGO_CRATES += ipnet 2.5.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += itoa 1.0.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += jetscii 0.5.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += js-sys 0.3.57 # MIT/Apache-2.0 +MODCARGO_CRATES += jsonwebtoken 8.1.0 # MIT +MODCARGO_CRATES += kernel32-sys 0.2.2 # MIT +MODCARGO_CRATES += lazy_static 1.4.0 # MIT/Apache-2.0 +MODCARGO_CRATES += lazycell 1.3.0 # MIT/Apache-2.0 +MODCARGO_CRATES += lettre 0.10.0-rc.6 # MIT +MODCARGO_CRATES += libc 0.2.125 # MIT OR Apache-2.0 +MODCARGO_CRATES += libmimalloc-sys 0.1.25 # MIT +MODCARGO_CRATES += libsqlite3-sys 0.22.2 # MIT +MODCARGO_CRATES += linked-hash-map 0.5.4 # MIT/Apache-2.0 +MODCARGO_CRATES += lock_api 0.4.7 # MIT OR Apache-2.0 +MODCARGO_CRATES += log 0.4.17 # MIT OR Apache-2.0 +MODCARGO_CRATES += loom 0.5.4 # MIT +MODCARGO_CRATES += lru-cache 0.1.2 # MIT/Apache-2.0 +MODCARGO_CRATES += mach 0.3.2 # BSD-2-Clause +MODCARGO_CRATES += maplit 1.0.2 # MIT/Apache-2.0 +MODCARGO_CRATES += match_cfg 0.1.0 # MIT/Apache-2.0 +MODCARGO_CRATES += matchers 0.1.0 # MIT +MODCARGO_CRATES += matches 0.1.9 # MIT +MODCARGO_CRATES += maybe-uninit 2.0.0 # Apache-2.0 OR MIT +MODCARGO_CRATES += memchr 2.5.0 # Unlicense/MIT +MODCARGO_CRATES += migrations_internals 1.4.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += migrations_macros 1.4.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += mimalloc 0.1.29 # MIT +MODCARGO_CRATES += mime 0.3.16 # MIT/Apache-2.0 +MODCARGO_CRATES += minimal-lexical 0.2.1 # MIT/Apache-2.0 +MODCARGO_CRATES += miniz_oxide 0.5.1 # MIT OR Zlib OR Apache-2.0 +MODCARGO_CRATES += mio 0.6.23 # MIT +MODCARGO_CRATES += mio 0.8.3 # MIT +MODCARGO_CRATES += mio-extras 2.0.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += miow 0.2.2 # MIT/Apache-2.0 +MODCARGO_CRATES += multer 2.0.2 # MIT +MODCARGO_CRATES += mysqlclient-sys 0.2.5 # MIT OR Apache-2.0 +MODCARGO_CRATES += native-tls 0.2.10 # MIT/Apache-2.0 +MODCARGO_CRATES += net2 0.2.37 # MIT/Apache-2.0 +MODCARGO_CRATES += nix 0.24.1 # MIT +MODCARGO_CRATES += no-std-compat 0.4.1 # MIT +MODCARGO_CRATES += nom 7.1.1 # MIT +MODCARGO_CRATES += nonzero_ext 0.3.0 # Apache-2.0 +MODCARGO_CRATES += num-bigint 0.4.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += num-derive 0.3.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += num-integer 0.1.45 # MIT OR Apache-2.0 +MODCARGO_CRATES += num-traits 0.2.15 # MIT OR Apache-2.0 +MODCARGO_CRATES += num_cpus 1.13.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += num_threads 0.1.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += object 0.28.4 # Apache-2.0 OR MIT +MODCARGO_CRATES += once_cell 1.10.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += opaque-debug 0.2.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += opaque-debug 0.3.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += openssl 0.10.40 # Apache-2.0 +MODCARGO_CRATES += openssl-macros 0.1.0 # MIT/Apache-2.0 +MODCARGO_CRATES += openssl-probe 0.1.5 # MIT/Apache-2.0 +MODCARGO_CRATES += openssl-src 111.18.0+1.1.1n # MIT/Apache-2.0 +MODCARGO_CRATES += openssl-sys 0.9.73 # MIT +MODCARGO_CRATES += owning_ref 0.3.3 # MIT +MODCARGO_CRATES += parity-ws 0.11.1 # MIT +MODCARGO_CRATES += parking_lot 0.4.8 # Apache-2.0/MIT +MODCARGO_CRATES += parking_lot 0.11.2 # Apache-2.0/MIT +MODCARGO_CRATES += parking_lot 0.12.0 # Apache-2.0/MIT +MODCARGO_CRATES += parking_lot_core 0.2.14 # Apache-2.0/MIT +MODCARGO_CRATES += parking_lot_core 0.8.5 # Apache-2.0/MIT +MODCARGO_CRATES += parking_lot_core 0.9.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += parse-zoneinfo 0.3.0 # MIT +MODCARGO_CRATES += paste 1.0.7 # MIT OR Apache-2.0 +MODCARGO_CRATES += pear 0.2.3 # MIT/Apache-2.0 +MODCARGO_CRATES += pear_codegen 0.2.3 # MIT/Apache-2.0 +MODCARGO_CRATES += pem 1.0.2 # MIT +MODCARGO_CRATES += percent-encoding 1.0.1 # MIT/Apache-2.0 +MODCARGO_CRATES += percent-encoding 2.1.0 # MIT/Apache-2.0 +MODCARGO_CRATES += pest 2.1.3 # MIT/Apache-2.0 +MODCARGO_CRATES += pest_derive 2.1.0 # MIT/Apache-2.0 +MODCARGO_CRATES += pest_generator 2.1.3 # MIT/Apache-2.0 +MODCARGO_CRATES += pest_meta 2.1.3 # MIT/Apache-2.0 +MODCARGO_CRATES += phf 0.10.1 # MIT +MODCARGO_CRATES += phf_codegen 0.10.0 # MIT +MODCARGO_CRATES += phf_generator 0.10.0 # MIT +MODCARGO_CRATES += phf_shared 0.10.0 # MIT +MODCARGO_CRATES += pico-args 0.4.2 # MIT +MODCARGO_CRATES += pin-project-lite 0.2.9 # Apache-2.0 OR MIT +MODCARGO_CRATES += pin-utils 0.1.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += pkg-config 0.3.25 # MIT OR Apache-2.0 +MODCARGO_CRATES += polyval 0.5.3 # Apache-2.0 OR MIT +MODCARGO_CRATES += ppv-lite86 0.2.16 # MIT/Apache-2.0 +MODCARGO_CRATES += pq-sys 0.4.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += proc-macro-hack 0.5.19 # MIT OR Apache-2.0 +MODCARGO_CRATES += proc-macro2 1.0.38 # MIT OR Apache-2.0 +MODCARGO_CRATES += proc-macro2-diagnostics 0.9.1 # MIT/Apache-2.0 +MODCARGO_CRATES += psl-types 2.0.10 # MIT/Apache-2.0 +MODCARGO_CRATES += publicsuffix 2.1.1 # MIT/Apache-2.0 +MODCARGO_CRATES += quanta 0.9.3 # MIT +MODCARGO_CRATES += quick-error 1.2.3 # MIT/Apache-2.0 +MODCARGO_CRATES += quick-error 2.0.1 # MIT/Apache-2.0 +MODCARGO_CRATES += quickcheck 1.0.3 # Unlicense/MIT +MODCARGO_CRATES += quote 1.0.18 # MIT OR Apache-2.0 +MODCARGO_CRATES += quoted_printable 0.4.5 # 0BSD +MODCARGO_CRATES += r2d2 0.8.9 # MIT/Apache-2.0 +MODCARGO_CRATES += rand 0.4.6 # MIT/Apache-2.0 +MODCARGO_CRATES += rand 0.7.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += rand 0.8.5 # MIT OR Apache-2.0 +MODCARGO_CRATES += rand_chacha 0.2.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += rand_chacha 0.3.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += rand_core 0.3.1 # MIT/Apache-2.0 +MODCARGO_CRATES += rand_core 0.4.2 # MIT/Apache-2.0 +MODCARGO_CRATES += rand_core 0.5.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += rand_core 0.6.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += rand_hc 0.2.0 # MIT/Apache-2.0 +MODCARGO_CRATES += raw-cpuid 10.3.0 # MIT +MODCARGO_CRATES += rdrand 0.4.0 # ISC +MODCARGO_CRATES += redox_syscall 0.2.13 # MIT +MODCARGO_CRATES += redox_users 0.4.3 # MIT +MODCARGO_CRATES += ref-cast 1.0.7 # MIT OR Apache-2.0 +MODCARGO_CRATES += ref-cast-impl 1.0.7 # MIT OR Apache-2.0 +MODCARGO_CRATES += regex 1.5.5 # MIT OR Apache-2.0 +MODCARGO_CRATES += regex-automata 0.1.10 # Unlicense/MIT +MODCARGO_CRATES += regex-syntax 0.6.25 # MIT/Apache-2.0 +MODCARGO_CRATES += remove_dir_all 0.5.3 # MIT/Apache-2.0 +MODCARGO_CRATES += reqwest 0.11.10 # MIT/Apache-2.0 +MODCARGO_CRATES += resolv-conf 0.7.0 # MIT/Apache-2.0 +MODCARGO_CRATES += ring 0.16.20 # LICENSE +MODCARGO_CRATES += rmp 0.8.11 # MIT +MODCARGO_CRATES += rmpv 1.0.0 # MIT +MODCARGO_CRATES += rocket 0.5.0-rc.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += rocket_codegen 0.5.0-rc.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += rocket_http 0.5.0-rc.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += rustc-demangle 0.1.21 # MIT/Apache-2.0 +MODCARGO_CRATES += rustc_version 0.2.3 # MIT/Apache-2.0 +MODCARGO_CRATES += rustls 0.20.4 # Apache-2.0/ISC/MIT +MODCARGO_CRATES += rustls-pemfile 1.0.0 # Apache-2.0/ISC/MIT +MODCARGO_CRATES += rustversion 1.0.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += ryu 1.0.9 # Apache-2.0 OR BSL-1.0 +MODCARGO_CRATES += same-file 1.0.6 # Unlicense/MIT +MODCARGO_CRATES += schannel 0.1.19 # MIT +MODCARGO_CRATES += scheduled-thread-pool 0.2.5 # MIT/Apache-2.0 +MODCARGO_CRATES += scoped-tls 1.0.0 # MIT/Apache-2.0 +MODCARGO_CRATES += scopeguard 1.1.0 # MIT/Apache-2.0 +MODCARGO_CRATES += sct 0.7.0 # Apache-2.0/ISC/MIT +MODCARGO_CRATES += security-framework 2.6.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += security-framework-sys 2.6.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += semver 0.9.0 # MIT/Apache-2.0 +MODCARGO_CRATES += semver-parser 0.7.0 # MIT/Apache-2.0 +MODCARGO_CRATES += serde 1.0.137 # MIT OR Apache-2.0 +MODCARGO_CRATES += serde_cbor 0.11.2 # MIT/Apache-2.0 +MODCARGO_CRATES += serde_derive 1.0.137 # MIT OR Apache-2.0 +MODCARGO_CRATES += serde_json 1.0.81 # MIT OR Apache-2.0 +MODCARGO_CRATES += serde_urlencoded 0.7.1 # MIT/Apache-2.0 +MODCARGO_CRATES += sha-1 0.8.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += sha-1 0.9.8 # MIT OR Apache-2.0 +MODCARGO_CRATES += sha1 0.6.1 # BSD-3-Clause +MODCARGO_CRATES += sha1 0.10.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += sha1_smol 1.0.0 # BSD-3-Clause +MODCARGO_CRATES += sha2 0.9.9 # MIT OR Apache-2.0 +MODCARGO_CRATES += sha2 0.10.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += sharded-slab 0.1.4 # MIT +MODCARGO_CRATES += signal-hook-registry 1.4.0 # Apache-2.0/MIT +MODCARGO_CRATES += simple_asn1 0.6.1 # ISC +MODCARGO_CRATES += siphasher 0.3.10 # MIT/Apache-2.0 +MODCARGO_CRATES += slab 0.4.6 # MIT +MODCARGO_CRATES += smallvec 0.6.14 # MIT/Apache-2.0 +MODCARGO_CRATES += smallvec 1.8.0 # MIT/Apache-2.0 +MODCARGO_CRATES += socket2 0.3.19 # MIT/Apache-2.0 +MODCARGO_CRATES += socket2 0.4.4 # MIT OR Apache-2.0 +MODCARGO_CRATES += spin 0.5.2 # MIT +MODCARGO_CRATES += spin 0.9.3 # MIT +MODCARGO_CRATES += stable-pattern 0.1.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += stable_deref_trait 1.2.0 # MIT/Apache-2.0 +MODCARGO_CRATES += standback 0.2.17 # MIT OR Apache-2.0 +MODCARGO_CRATES += state 0.5.3 # MIT/Apache-2.0 +MODCARGO_CRATES += stdweb 0.4.20 # MIT/Apache-2.0 +MODCARGO_CRATES += stdweb-derive 0.5.3 # MIT/Apache-2.0 +MODCARGO_CRATES += stdweb-internal-macros 0.2.9 # MIT/Apache-2.0 +MODCARGO_CRATES += stdweb-internal-runtime 0.1.5 # MIT/Apache-2.0 +MODCARGO_CRATES += strsim 0.10.0 # MIT +MODCARGO_CRATES += subtle 2.4.1 # BSD-3-Clause +MODCARGO_CRATES += syn 1.0.93 # MIT OR Apache-2.0 +MODCARGO_CRATES += syslog 6.0.1 # MIT +MODCARGO_CRATES += tempfile 3.3.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += thiserror 1.0.31 # MIT OR Apache-2.0 +MODCARGO_CRATES += thiserror-impl 1.0.31 # MIT OR Apache-2.0 +MODCARGO_CRATES += thread_local 1.1.4 # Apache-2.0/MIT +MODCARGO_CRATES += threadpool 1.8.1 # MIT/Apache-2.0 +MODCARGO_CRATES += time 0.1.43 # MIT/Apache-2.0 +MODCARGO_CRATES += time 0.2.27 # MIT OR Apache-2.0 +MODCARGO_CRATES += time 0.3.9 # MIT OR Apache-2.0 +MODCARGO_CRATES += time-macros 0.1.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += time-macros 0.2.4 # MIT OR Apache-2.0 +MODCARGO_CRATES += time-macros-impl 0.1.2 # MIT OR Apache-2.0 +MODCARGO_CRATES += tinyvec 1.6.0 # Zlib OR Apache-2.0 OR MIT +MODCARGO_CRATES += tinyvec_macros 0.1.0 # MIT OR Apache-2.0 OR Zlib +MODCARGO_CRATES += tokio 1.18.2 # MIT +MODCARGO_CRATES += tokio-macros 1.7.0 # MIT +MODCARGO_CRATES += tokio-native-tls 0.3.0 # MIT +MODCARGO_CRATES += tokio-rustls 0.23.4 # MIT/Apache-2.0 +MODCARGO_CRATES += tokio-socks 0.5.1 # MIT +MODCARGO_CRATES += tokio-stream 0.1.8 # MIT +MODCARGO_CRATES += tokio-util 0.6.9 # MIT +MODCARGO_CRATES += tokio-util 0.7.1 # MIT +MODCARGO_CRATES += toml 0.5.9 # MIT/Apache-2.0 +MODCARGO_CRATES += totp-lite 1.0.3 # MIT +MODCARGO_CRATES += tower-service 0.3.1 # MIT +MODCARGO_CRATES += tracing 0.1.34 # MIT +MODCARGO_CRATES += tracing-attributes 0.1.21 # MIT +MODCARGO_CRATES += tracing-core 0.1.26 # MIT +MODCARGO_CRATES += tracing-log 0.1.3 # MIT +MODCARGO_CRATES += tracing-subscriber 0.3.11 # MIT +MODCARGO_CRATES += trust-dns-proto 0.20.4 # MIT/Apache-2.0 +MODCARGO_CRATES += trust-dns-resolver 0.20.4 # MIT/Apache-2.0 +MODCARGO_CRATES += try-lock 0.2.3 # MIT +MODCARGO_CRATES += typenum 1.15.0 # MIT OR Apache-2.0 +MODCARGO_CRATES += ubyte 0.10.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += ucd-trie 0.1.3 # MIT/Apache-2.0 +MODCARGO_CRATES += uncased 0.9.6 # MIT OR Apache-2.0 +MODCARGO_CRATES += unicode-bidi 0.3.8 # MIT OR Apache-2.0 +MODCARGO_CRATES += unicode-normalization 0.1.19 # MIT/Apache-2.0 +MODCARGO_CRATES += unicode-xid 0.2.3 # MIT OR Apache-2.0 +MODCARGO_CRATES += universal-hash 0.4.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += untrusted 0.7.1 # ISC +MODCARGO_CRATES += url 1.7.2 # MIT/Apache-2.0 +MODCARGO_CRATES += url 2.2.2 # MIT/Apache-2.0 +MODCARGO_CRATES += uuid 1.0.0 # Apache-2.0 OR MIT +MODCARGO_CRATES += valuable 0.1.0 # MIT +MODCARGO_CRATES += vcpkg 0.2.15 # MIT/Apache-2.0 +MODCARGO_CRATES += version_check 0.9.4 # MIT/Apache-2.0 +MODCARGO_CRATES += walkdir 2.3.2 # Unlicense/MIT +MODCARGO_CRATES += want 0.3.0 # MIT +MODCARGO_CRATES += wasi 0.9.0+wasi-snapshot-preview1 # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +MODCARGO_CRATES += wasi 0.10.2+wasi-snapshot-preview1 # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +MODCARGO_CRATES += wasi 0.11.0+wasi-snapshot-preview1 # Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT +MODCARGO_CRATES += wasm-bindgen 0.2.80 # MIT/Apache-2.0 +MODCARGO_CRATES += wasm-bindgen-backend 0.2.80 # MIT/Apache-2.0 +MODCARGO_CRATES += wasm-bindgen-futures 0.4.30 # MIT/Apache-2.0 +MODCARGO_CRATES += wasm-bindgen-macro 0.2.80 # MIT/Apache-2.0 +MODCARGO_CRATES += wasm-bindgen-macro-support 0.2.80 # MIT/Apache-2.0 +MODCARGO_CRATES += wasm-bindgen-shared 0.2.80 # MIT/Apache-2.0 +MODCARGO_CRATES += web-sys 0.3.57 # MIT/Apache-2.0 +MODCARGO_CRATES += webauthn-rs 0.3.2 # MPL-2.0 +MODCARGO_CRATES += webpki 0.22.0 # LICENSE +MODCARGO_CRATES += widestring 0.4.3 # MIT/Apache-2.0 +MODCARGO_CRATES += winapi 0.2.8 # MIT +MODCARGO_CRATES += winapi 0.3.9 # MIT/Apache-2.0 +MODCARGO_CRATES += winapi-build 0.1.1 # MIT +MODCARGO_CRATES += winapi-i686-pc-windows-gnu 0.4.0 # MIT/Apache-2.0 +MODCARGO_CRATES += winapi-util 0.1.5 # Unlicense/MIT +MODCARGO_CRATES += winapi-x86_64-pc-windows-gnu 0.4.0 # MIT/Apache-2.0 +MODCARGO_CRATES += windows-sys 0.36.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += windows_aarch64_msvc 0.36.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += windows_i686_gnu 0.36.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += windows_i686_msvc 0.36.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += windows_x86_64_gnu 0.36.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += windows_x86_64_msvc 0.36.1 # MIT OR Apache-2.0 +MODCARGO_CRATES += winreg 0.6.2 # MIT +MODCARGO_CRATES += winreg 0.10.1 # MIT +MODCARGO_CRATES += ws2_32-sys 0.2.1 # MIT +MODCARGO_CRATES += yansi 0.5.1 # MIT/Apache-2.0 +MODCARGO_CRATES += yubico 0.11.0 # MIT OR Apache-2.0 diff --git a/security/vaultwarden/distinfo b/security/vaultwarden/distinfo index 1d493bc2eba..6068b31dedc 100644 --- a/security/vaultwarden/distinfo +++ b/security/vaultwarden/distinfo @@ -1,54 +1,66 @@ SHA256 (cargo/addr2line-0.17.0.tar.gz) = uezYioyDeMqROmgM2Y8PE6xnOD01mT+GyQpw4/E3gWs= SHA256 (cargo/adler-1.0.2.tar.gz) = 8mIBYEyHseAb09mPjV2aj8u4FejO20H/zL60v1k6Nf4= +SHA256 (cargo/aead-0.4.3.tar.gz) = C2E7jh48+RGghvU/A78ob1L9enJY5Ppgbw7yINOdiHc= +SHA256 (cargo/aes-0.7.5.tar.gz) = notH9S6puuQiKNB+wJ62dkM9fE7R698PHRwp7URvGrg= +SHA256 (cargo/aes-gcm-0.9.4.tar.gz) = 31+FqDp9iwRCtqp7UEuCEsFzPaB7mKrkPUvCGyyzzfY= SHA256 (cargo/aho-corasick-0.7.18.tar.gz) = HjfP1edletpF90LW6ZyleIWAtcUp3Hj68R7ObccCZW8= SHA256 (cargo/alloc-no-stdlib-2.0.3.tar.gz) = Ne9HMEkK0cTq5cQyWyqV9SHQI+XIhYU/96ygpqFjHbM= SHA256 (cargo/alloc-stdlib-0.2.1.tar.gz) = aX7X7cDxcR3knOEIxUFiOgr5fGxgsvbitlIphHrIQ8I= SHA256 (cargo/ansi_term-0.12.1.tar.gz) = 1Sqbt+wM9ITFUYMKfOJ70g1n6sZH4b77VrC+TuOaVdI= -SHA256 (cargo/async-compression-0.3.12.tar.gz) = 8r85TPu+h28KxnsTtsqBn5yfL7nsZyI8zrFVX7qxwxo= -SHA256 (cargo/async-stream-0.3.2.tar.gz) = FxN05+OyUE4OUjbjtZJgVg+f6Uv+msObpeTpKcVZBiU= -SHA256 (cargo/async-stream-impl-0.3.2.tar.gz) = ZI7YyNLOVAnM1XRT2dGyFLNCoNaTdqb+2h/WyuMpkwg= -SHA256 (cargo/async-trait-0.1.52.tar.gz) = Bhp6zMqihsAR3cMJcFILmPpA4AydZEYz+ya1/GOiZeM= +SHA256 (cargo/async-compression-0.3.13.tar.gz) = hYnHhP8CrIDa/F5BFsOio3Q6xeDJAkg1GKiO7GVZz5k= +SHA256 (cargo/async-stream-0.3.3.tar.gz) = 2tXIMHnq6Zab5/re/mQKHFZpAfBf+RqyId5Lb2jZUH4= +SHA256 (cargo/async-stream-impl-0.3.3.tar.gz) = EPID23OnHfovtt0idjmQ+ibz0mJabaLakA0juH0mvic= +SHA256 (cargo/async-trait-0.1.53.tar.gz) = 7WqjUkot/Pn+GAxR6uK1hzg0jYGVF86t+VeJxR//dgA= +SHA256 (cargo/async_once-0.2.6.tar.gz) = LOTxDqOrzWYXhzuun5HRxTMrSneL2c400M1RdHTB3oI= SHA256 (cargo/atomic-0.5.1.tar.gz) = uI2CZn7KdyxKoS8PE0izrmQ0JMiHZEjz971XhwMuI0w= SHA256 (cargo/atty-0.2.14.tar.gz) = 2bOb4Ydw0RQhzbG5lHpF3T836TCSy/N3YUgooxnV/ug= -SHA256 (cargo/autocfg-1.0.1.tar.gz) = zbAx3XjihzHYfVbMj/70qPNsomw4/i3nAFQ+Yn+KRko= -SHA256 (cargo/backtrace-0.3.64.tar.gz) = XhId7oAjzjOrJI2c4Uk98Dw7OKZZskAJb8vXBI/5wx8= -SHA256 (cargo/base-x-0.2.8.tar.gz) = pFIfPj0DE3BnmzsUC+s23+SAGwmsd+MMYZQfl98+8os= -SHA256 (cargo/base64-0.11.0.tar.gz) = tBt+pUoMnZIZneieIOWNSfAvjmmYFO8/3yZvb3SNFcc= -SHA256 (cargo/base64-0.12.3.tar.gz) = NEHw97AniOlI5H9FfKAfHX5tksaTvBMsIrCH0xQcA/8= +SHA256 (cargo/autocfg-1.1.0.tar.gz) = 1GiAK6sXy8DMV16bBT9B5yqja/prf1XjUp/6QxYbl/o= +SHA256 (cargo/backtrace-0.3.65.tar.gz) = EaF9RTSComX9X4R58qP0BVZubKYng3qt24Wvixq472E= +SHA256 (cargo/base-x-0.2.10.tar.gz) = 3Bmkk3tPvT/jN5eTEw5CBg0QYno2DyEngCsQuH57r3Q= SHA256 (cargo/base64-0.13.0.tar.gz) = kE3+rFDzzauij8b1f9zdt19J7WE0ZnanjE/+VYd4Av0= SHA256 (cargo/binascii-0.1.4.tar.gz) = OD0p1RPYdk3NxC6ildl565nDyfAGB7NpLPaKQx99ynI= SHA256 (cargo/bitflags-1.3.2.tar.gz) = vvONRRY8Lx3eCUp9/TPM9ZXJKQXI+PT9wY0G+xA3cYo= +SHA256 (cargo/block-buffer-0.10.2.tar.gz) = C/f+UYSepWn9RS83gi9galyrtoTckYcHoBk/1GZP8yQ= SHA256 (cargo/block-buffer-0.7.3.tar.gz) = wJQNxEHzFokmnhCscOsQAqOh060TkOAwBDZi63/kaIs= SHA256 (cargo/block-buffer-0.9.0.tar.gz) = QVIRb9bp2tspGuGPwew1de1thMKWQtl4kPS0o0Fyl+Q= SHA256 (cargo/block-padding-0.1.5.tar.gz) = +nne27CR9Enx855T7fiNXb6V+JXa5hNajXuIH7Wvc/U= -SHA256 (cargo/brotli-3.3.3.tar.gz) = +DjkekUdWo+lUjcfgAJN1qzpt6zfJcTD0Pm8aBb7HDk= +SHA256 (cargo/brotli-3.3.4.tar.gz) = oaCx28yK4pMpYh+NTw2DV4fBw4uxQBl5tJ0TsLMF/2g= SHA256 (cargo/brotli-decompressor-2.3.2.tar.gz) = Wa0tRlO/XKNq55ex9LtNvdtgzknKSu2KLOSCn2BCW4A= SHA256 (cargo/bumpalo-3.9.1.tar.gz) = pKRaRqsfJBLlPToK3nb/rSAlgEKUVpquOHIxoM1uCJk= SHA256 (cargo/byte-tools-0.3.1.tar.gz) = 47XKegSJitS81ByQxShURf9beRiZuxsKvdKiqnkSEdc= SHA256 (cargo/byteorder-1.4.3.tar.gz) = FMGJxT0JiUVJnN+n7MY1Z884hrMzKzEqW0WF2NOmphA= SHA256 (cargo/bytes-0.4.12.tar.gz) = IG/f/Pot98vhVgHvRsgT/OCWXrMobba1bFg7gUtRyBw= SHA256 (cargo/bytes-1.1.0.tar.gz) = xIctZ7q2NY5ZVZAnqjuRV8U9k1jFFCPBdVSAmohY4Pg= -SHA256 (cargo/cc-1.0.72.tar.gz) = IqkTe5XqBoZOAYN1tyrft9tub2jPyN9aBNACiAUEhe4= +SHA256 (cargo/cached-0.34.0.tar.gz) = qt923ep0urNevrjx6xFbm8BOruQtiswNX0d97msXbJo= +SHA256 (cargo/cached_proc_macro-0.12.0.tar.gz) = vODzf5t3xrk83z8GDImtyjA9KrBSyss8PRq1Q+jOzS8= +SHA256 (cargo/cached_proc_macro_types-0.1.0.tar.gz) = Ok+SUZG0NnMBhRxtmbCYkDEddLDUPydMCzTIbTCKNmM= +SHA256 (cargo/cc-1.0.73.tar.gz) = L/8qaSezu4f5WV1nGWpwST9idoenHYeg1pIkLDP1jBE= SHA256 (cargo/cfg-if-0.1.10.tar.gz) = R4W90clrKoRrK9fMAuhraz2/FOflNEbE9UySo2EECCI= SHA256 (cargo/cfg-if-1.0.0.tar.gz) = uvHeQzl2FYi8Bhnjy8ASDuWC67dLU7Tvv3kRe9LaQP0= SHA256 (cargo/chashmap-2.2.2.tar.gz) = /0GjwsHjmSG5AD3hS/BDnHtjqQOWN8KR4aZJJdjd+kU= SHA256 (cargo/chrono-0.4.19.tar.gz) = ZwrWjJCIwqljqqKYyzaWiM8/lGXOXi1MoQ5uAJihznM= SHA256 (cargo/chrono-tz-0.6.1.tar.gz) = WFSfGELaMIDOYwAhAtW8lUx7yEPU9HgY5kKr3DYlNVI= SHA256 (cargo/chrono-tz-build-0.0.2.tar.gz) = 2wWNST+y9l9Bhhv+1+P+YzUmSp8PknEMq1vfAf7wkGk= +SHA256 (cargo/cipher-0.3.0.tar.gz) = fuUgcuwVOG93CAWv0YmgHIhBvoaWvtJQ+i8TxMDW37c= SHA256 (cargo/const_fn-0.4.9.tar.gz) = +9zctthvccXpdAmtRYmK8Ry8mVtO6BEtWQlaKNN2yTU= SHA256 (cargo/cookie-0.15.1.tar.gz) = 1fHHcn5GA5flarxL3cHUngehrXj8mOsuHI8DKlii+A0= SHA256 (cargo/cookie-0.16.0.tar.gz) = lNRwbeGw+lsTInDN3/qFhRZgN4IuJgqUT+FhrNE3ygU= SHA256 (cargo/cookie_store-0.15.1.tar.gz) = s/cDTAky3Db1vY7Dc2jZcTRoCUNYJPJ3yzuCmfxWFnw= -SHA256 (cargo/core-foundation-0.9.2.tar.gz) = aIjhBVG7k+Qk2N8dB/GotPzrAAGjpLBIv8R1VJRvR7M= +SHA256 (cargo/cookie_store-0.16.0.tar.gz) = +Dv9NqZkxXg/3mAauTi81Bw+Ioxe2h36rnJ6Sie8uUU= +SHA256 (cargo/core-foundation-0.9.3.tar.gz) = GUp6nm3lP6VRFpNAZ8hE2ddJMS91xvbQmA6MJS+MIUY= SHA256 (cargo/core-foundation-sys-0.8.3.tar.gz) = WCfOv0ZwRouHct0ZGFZ2iu3LGwJ4oE+Yn3dmNRkXudw= -SHA256 (cargo/cpufeatures-0.2.1.tar.gz) = lQWUKPZt9WtjQx/bThlH7SGQWGr1xaiotxEivfWn9Gk= -SHA256 (cargo/crc32fast-1.3.1.tar.gz) = oiCcMQ4ph29/Cych5+JrhK/xeKo9pdCR+b+/R2aeYOM= -SHA256 (cargo/cron-0.9.0.tar.gz) = 4AntC3Ys96lno039xn1ZZ9P4KPEpAdNwgUMsPdFmj48= -SHA256 (cargo/crossbeam-utils-0.8.6.tar.gz) = z8rgPts0+UfmSs2xwz7BaYJOIGV+nsthzvbIx03LgSA= -SHA256 (cargo/crypto-mac-0.10.1.tar.gz) = v/BwCOxwHoAo4s64+D8OQnTuYr0tvcT+//LpqRgkCBo= +SHA256 (cargo/cpufeatures-0.2.2.tar.gz) = WaYAFmerEkrrripJURjhHTCYTDplPpnYbViXFwjPXks= +SHA256 (cargo/crc32fast-1.3.2.tar.gz) = tUC9i8gQ04hcbqkeIBgwL2i6uiEpqz6I8yOJ7pNwiA0= +SHA256 (cargo/cron-0.11.0.tar.gz) = 12IZ6SQ+EA1aN2dgBfCDeSl/it3+vCR2EymWAGJcc00= +SHA256 (cargo/crossbeam-utils-0.8.8.tar.gz) = C/EkxyC3aG48JmPPVAYqsPaKiK8vtqAw6H4wv3Ifyzg= +SHA256 (cargo/crypto-common-0.1.3.tar.gz) = V5UsonteNgb/TdebACAjGq+daqdtwF/TATdTjFC9POg= SHA256 (cargo/crypto-mac-0.11.1.tar.gz) = sdGob0kjbCFfJx1AiS1fyVBJBVFACwLvNgaSwpgVxxQ= -SHA256 (cargo/ctrlc-3.2.1.tar.gz) = oZxs7f/cjAOjNG1yPrIL2FoTNiu5bcKsAAhCxjgex78= -SHA256 (cargo/dashmap-4.0.2.tar.gz) = 53pDso0GaN8JQRywvJqMKtxA+aBIr+hj4F/UMlHo45w= +SHA256 (cargo/ctr-0.8.0.tar.gz) = BJu5H7Sq8OPH76bNXvh327vRWzna0G2ZSN5OyKdXYeo= +SHA256 (cargo/ctrlc-3.2.2.tar.gz) = s3/qqE5oYeAKH15aqNo+5W1gXJmS0z4IJ4Z1SCjiCGU= +SHA256 (cargo/darling-0.13.4.tar.gz) = oB2VhQxZKUDbm4GUvDn0vA6J3uXEJl5LGAfDSpq6RTw= +SHA256 (cargo/darling_core-0.13.4.tar.gz) = hZ1lqQe2hSyTYeMYXIYqrn+v0oh4dnmfpV9fmdxA1hA= +SHA256 (cargo/darling_macro-0.13.4.tar.gz) = nJcmefg735xCvZBTlrbDWIqEOhfw8W38+j4sXVdEGDU= +SHA256 (cargo/dashmap-5.3.3.tar.gz) = ORtW+9MC5YW3qUlPtw5AlJVnsc+QA6jkpgQaFofCZXM= SHA256 (cargo/data-encoding-2.3.2.tar.gz) = PuI5PEqRQp3/tL7fGfTWq/J9inMsjOSYAwXXguVCbVc= SHA256 (cargo/data-url-0.1.1.tar.gz) = OjC/znArz6lOkG74JCHywOYcB2rXYDDBbuXS6aMv4ZM= SHA256 (cargo/devise-0.3.1.tar.gz) = UMdYCwcvHIR2FI8W4KDV3t3at4famNhsUILF6e2KtZU= @@ -57,19 +69,23 @@ SHA256 (cargo/devise_core-0.3.1.tar.gz) = hB70b0eH2Ql0BcrE5w+4ZE/AN7Um6MFAVCR8Am SHA256 (cargo/diesel-1.4.8.tar.gz) = soE17Pa31Ea0PifiJWIqA4zE4pMKECL1HNuXraGbjk0= SHA256 (cargo/diesel_derives-1.4.1.tar.gz) = RfUJj2KNAqeg9o3bpYb7YegO3sO9wb47kh9M7sYIWNM= SHA256 (cargo/diesel_migrations-1.4.0.tar.gz) = vzzehBM1Pcf11y+ozguZpWCjWdLF7x5YF8pzHNkAj0w= +SHA256 (cargo/digest-0.10.3.tar.gz) = 8vuGDKb6+lVS+20OgWppyOSfCQi/Uk4wqQ2XyFiS1QY= SHA256 (cargo/digest-0.8.1.tar.gz) = 89DIyHUjEvlxPv05f/Y6y5+FWFr78XkoLnIOdwSVTdU= SHA256 (cargo/digest-0.9.0.tar.gz) = 091g0QgKV6BasDI3cEngWRQV0rMa/XAoNW2/PMbcsGY= +SHA256 (cargo/dirs-4.0.0.tar.gz) = yjqnKm+W6je7xaqRL2eIJCgy91Npvf2tyw44Qj8QAFk= +SHA256 (cargo/dirs-sys-0.3.7.tar.gz) = Gx0dkcky70HA8mY6qLDKA0LURNhCwGkUqgp+NS0LraY= SHA256 (cargo/discard-1.0.4.tar.gz) = IS0PV1TLZ2mTf0UBzA5n9PRIPI0sPh6SLuntvkq0x8A= -SHA256 (cargo/dotenv-0.15.0.tar.gz) = d8kLre3M9BBeyhAHVqCxKJ4ZH2/L2t087h0vYU+X2o8= +SHA256 (cargo/dotenvy-0.15.1.tar.gz) = foUag8MDZv0B11uRNYjpXnShcFwezF1YsfjhptVWUl8= SHA256 (cargo/either-1.6.1.tar.gz) = 541PHMSuM7v8FX7V1aXvO8KSJzA9WVhh3rI4/OxOlFc= -SHA256 (cargo/encoding_rs-0.8.30.tar.gz) = eJbcirslD/3aM5ElUPqlTIjsi5mN7AssVasiSSHOEd8= -SHA256 (cargo/enum-as-inner-0.3.3.tar.gz) = fF8AlqkdIQFZ7Osv9eHE2hg4ihcOHjzpSKrJyP279ZU= -SHA256 (cargo/error-chain-0.11.0.tar.gz) = /1EdXcQ11wP0lxvDmWR8m8OOIMtBRS47n+tHZUGe0/M= +SHA256 (cargo/email-encoding-0.1.0.tar.gz) = ZpApEWaCTkZ3kKwIukLyQXkVZ+gze78AxaboeIlin5g= +SHA256 (cargo/encoding_rs-0.8.31.tar.gz) = mFJjVYncn56htv6fBbUO8gjIXINKVi8MarscR1c27Cs= +SHA256 (cargo/enum-as-inner-0.3.4.tar.gz) = Vw0Qm4E+kEvsyA2NXaODdoGKFDNIQT9xSfE0D+BHVNQ= +SHA256 (cargo/error-chain-0.12.4.tar.gz) = LS8GucrBUG7OmP4yMePMnEQQ7D1bHySuHIlG8HQs3vw= SHA256 (cargo/fake-simd-0.1.2.tar.gz) = 6IqKzykdr7WcLZbo9Zgo84OLsacDmII63lGoTeam3u0= SHA256 (cargo/fastrand-1.7.0.tar.gz) = w/zwzuU1GchmwJtd4fbFb/nWRxAfgcGWT6Yy4UiJbN8= -SHA256 (cargo/fern-0.6.0.tar.gz) = jJpIIPDMyKev1nw5oPGg9LB8oXJRZCcaZJOdeuua8GU= +SHA256 (cargo/fern-0.6.1.tar.gz) = O917CEkHXnnumhg23yLHF9HrowRReW/cYxsEVl3RHio= SHA256 (cargo/figment-0.10.6.tar.gz) = eQtCkscmGKu6tQ94ekdwFP4VY0+WKR3kVnLORq/hIt8= -SHA256 (cargo/flate2-1.0.22.tar.gz) = HmmI6JfBycSF9DtHpSnO9C/eBUf52NQacGJRjx2PxT8= +SHA256 (cargo/flate2-1.0.23.tar.gz) = s5Ui6WaG049LyYS5GY46BhMmSrrrr/LFyRi/prbaCa8= SHA256 (cargo/fnv-1.0.7.tar.gz) = P57skY0/JAad7LmvFVTK18iA4tokqa/YisoABTGrgsE= SHA256 (cargo/foreign-types-0.3.2.tar.gz) = 9vM564rcBSzSyniRD9qGmu+jjSLVy2SOZIXk0/wG87E= SHA256 (cargo/foreign-types-shared-0.1.1.tar.gz) = ALAihBGQjKhoXbp/ws3XDsmZCm51Pom2rJGoTED7r0s= @@ -77,121 +93,121 @@ SHA256 (cargo/form_urlencoded-1.0.1.tar.gz) = X8Jah/pP0glL/7BpJYUgNNkKF/DR4FGX1J SHA256 (cargo/fuchsia-cprng-0.1.1.tar.gz) = oG931SbBpgG3xM3Zj1S16qv/wU1fLwKW/r3H81fG07o= SHA256 (cargo/fuchsia-zircon-0.3.3.tar.gz) = Lpdjxp66rmMLo190iI20ZeSeJZuhvA7afQb0oGdhXYI= SHA256 (cargo/fuchsia-zircon-sys-0.3.3.tar.gz) = Pcqprncl0SzbhbOtmaQ023C0aMCd7RfgEthrXBAQ96c= -SHA256 (cargo/futf-0.1.4.tar.gz) = fJwc4/qTNjAa+TWrhSxDeBfRTNM2kERlaTkuZRcKrDs= -SHA256 (cargo/futures-0.3.19.tar.gz) = KFYHV/4rs055+Qd5S7ayKuiw5cZptjihEy8lkrGQNbQ= -SHA256 (cargo/futures-channel-0.3.19.tar.gz) = uj3aC2WIM182CvxnXQVkwXp3or2oHKF4pLYIG9hsfws= -SHA256 (cargo/futures-core-0.3.19.tar.gz) = 0Mj/BGG4JVmBDNzP3jIVw/NzgH9eUjK3FHm/97slg9c= -SHA256 (cargo/futures-executor-0.3.19.tar.gz) = KdbS/1uxD7lchbjORlOKLl9ef9x1ViOn1FKauKTtnSo= -SHA256 (cargo/futures-io-0.3.19.tar.gz) = sfnTSvWhqsb7OA9zX+UQdGw4Bnxb8Wx/0lAoBQPJcbI= -SHA256 (cargo/futures-macro-0.3.19.tar.gz) = bb2Uet//sO/HBZmz3c97VZe7X6niReuZ9is6X3u4vTw= -SHA256 (cargo/futures-sink-0.3.19.tar.gz) = 4wVbrMto10/2SANQ+Nbrj8+jqhG9waGuOv3QUUYX1Qg= -SHA256 (cargo/futures-task-0.3.19.tar.gz) = bufGSFwwFnzk37g6xWioSf5TJ0yDEIFHbuE+Dc4arXI= +SHA256 (cargo/futures-0.3.21.tar.gz) = 9z/mX1TR4Styb1F9PiE1yjElpDe22ZjK8ZYpYfcXLZ4= +SHA256 (cargo/futures-channel-0.3.21.tar.gz) = wwg85LkUEkV1cIkTvKGb/oh1Itbi5tCVKUP16sSnQBA= +SHA256 (cargo/futures-core-0.3.21.tar.gz) = DAn9BLfkBzrHFWqVObV6SEqOqSD3nHxnXQXSiathENM= +SHA256 (cargo/futures-executor-0.3.21.tar.gz) = lCC5DPop4yfQQp8ZvhPn3baPoczLCdZeVwa4x6dJuKY= +SHA256 (cargo/futures-io-0.3.21.tar.gz) = /EBFlipaXpNe4v3tqk4IKEVHQCiFqzJnNEMr7V0Slms= +SHA256 (cargo/futures-macro-0.3.21.tar.gz) = M8HhOAAzf01NejFr9FpWfby2/+CH8WQkhS2X6XqR9RI= +SHA256 (cargo/futures-sink-0.3.21.tar.gz) = IRY+E5+jBhJubu2vSezbRYj5OWAPCx53D0IF7kt/qGg= +SHA256 (cargo/futures-task-0.3.21.tar.gz) = V8Zql2v1kJ2AG77zNBbEE3J3lQfnprOl4l5HScWPd2o= SHA256 (cargo/futures-timer-3.0.2.tar.gz) = 5ksDkJ34gDTCbcFUfolwuR+YvbZRZdak6RENlCY9uyw= -SHA256 (cargo/futures-util-0.3.19.tar.gz) = 2bXPQLR6Jx93qLG+wDygkETZnSNywN4kTmZDB2EScWQ= +SHA256 (cargo/futures-util-0.3.21.tar.gz) = 2Ler1dZZ2bkMjLqRf27HUKdOLcI5Au+c1MyMiyLmA2o= SHA256 (cargo/generator-0.7.0.tar.gz) = wdknnKgiiRwaTa4G0YVhLPj8as/l3/N3gbQSl4EbEu4= SHA256 (cargo/generic-array-0.12.4.tar.gz) = /9+fNPFEdEPTc5PMbCuDE6693NlpBsrzTlTGjY5X170= SHA256 (cargo/generic-array-0.14.5.tar.gz) = /UjTPsfwX7+hUjAP2tdkdXy97TQ8GqHP8vuvQTSFGAM= SHA256 (cargo/getrandom-0.1.16.tar.gz) = j8PLTZH1O1AVW9z9I/akw5rhlpwq6FmCsTV1DMyvX84= -SHA256 (cargo/getrandom-0.2.4.tar.gz) = QY03yLHUJVPJNki+Upy3D5INO6+O9Gm3S5Y430JuC0w= +SHA256 (cargo/getrandom-0.2.6.tar.gz) = m+cMmJUcg7jS+PYNcGX6bVFGhzCURSoQCNqMLx5CBa0= +SHA256 (cargo/ghash-0.4.4.tar.gz) = FYPMFlbXg5/TcyuAz084hQM2zbm43tHNOZymKVjePJk= SHA256 (cargo/gimli-0.26.1.tar.gz) = eMw3LQWNz21ezZhRDn+8nlrsTSHecPZf6o/s682IG9Q= SHA256 (cargo/glob-0.3.0.tar.gz) = m5GZM6OXt5w34zt3uyqj3I624WWtgJ5Y/3W8fbLjRXQ= -SHA256 (cargo/governor-0.4.1.tar.gz) = ffDuSyN6+3Hpn34vvYQP/sLWxLtWn2myrxiqH2MHfTg= -SHA256 (cargo/h2-0.3.11.tar.gz) = 2fH3F93Hsro2336HH9iNt5MmVR09bx/EBvv9KLWC/44= +SHA256 (cargo/governor-0.4.2.tar.gz) = GXdZle4gIJFjI5NVvDrS8z+D2jXZ73Leom5a91NVLIc= +SHA256 (cargo/h2-0.3.13.tar.gz) = N6gsbWN/yVFaRpS78cskV7edgc5SsxCL3upYsH3TSlc= SHA256 (cargo/half-1.8.2.tar.gz) = 6rtKREUNoCyQREz3RVjakE7d6PtOkDWppqThVEWvC9c= -SHA256 (cargo/handlebars-4.2.1.tar.gz) = JVRqZeXPH0cfNDh5b8Y0ZQsx1/zeAdREwwmusouS46g= +SHA256 (cargo/handlebars-4.2.2.tar.gz) = mdajAyDwlHECRRUDlbx2OtIxKNah67rXWU3EFktixWs= SHA256 (cargo/hashbrown-0.11.2.tar.gz) = q17w1JCe83JMyMzmzMhXLFyBdZLpKF9UZPjob4vTcm4= -SHA256 (cargo/heck-0.3.3.tar.gz) = bWIe+yaGPw6ZJMasV36CdeXmt3RV22T/psZckE6eEyw= +SHA256 (cargo/hashbrown-0.12.1.tar.gz) = 2w1M+Jir8AgflkQ23JgOlmcKDzaGPkuDqqzbZcnXzMM= +SHA256 (cargo/heck-0.4.0.tar.gz) = JUB3HmX8jLg81uiiN/cMMZvVwp947RCEul1Q7qyG9/k= SHA256 (cargo/hermit-abi-0.1.19.tar.gz) = YrRnNDuUukdtyyUA0kLa27OVV9+IkxCsd8XZkQCqrDM= -SHA256 (cargo/hmac-0.10.1.tar.gz) = wUQcax6TDigXQEtQRvH5iYmRQ6Er+S3mA7afTgruHhU= +SHA256 (cargo/hkdf-0.12.3.tar.gz) = eRoCn2ufwnZX9vGI7G5eQ/aRH2+Hjg3FUBOW4JgJ1Dc= SHA256 (cargo/hmac-0.11.0.tar.gz) = KiojIOt+wOvo2o90TXgS2fxMtNCTRKwBiY28tqIK5ps= +SHA256 (cargo/hmac-0.12.1.tar.gz) = bEnDfAnBelPZN9+7dC6zqWHWWplOa83PN+c5nQzIq14= SHA256 (cargo/hostname-0.3.1.tar.gz) = PHMcPhBQTMjtNc/i8dtMknTD01+khuOzHfRvBo7z6Gc= -SHA256 (cargo/html5ever-0.25.1.tar.gz) = qvzziho2EYJC0puS4bCO+E5n5KXtBuCoC+IOajK/7Ws= -SHA256 (cargo/http-0.2.6.tar.gz) = MfTGdGWEhm8P6rzGmJPFtRvu84MWVqlo7XriVM3E/QM= +SHA256 (cargo/html5gum-0.4.0.tar.gz) = La1Itm21UyKt0oGa4de9oMMvNBUmmggzBnnbyLCv6zA= +SHA256 (cargo/http-0.2.7.tar.gz) = /4ZwVwr1IklQmob14+GKCMYLF3BxgmiY/eiZfPX2v7s= SHA256 (cargo/http-body-0.4.4.tar.gz) = H/T4SRlncwPaXxR2RdvqaxiB82jQOshOHcCQMevXssY= -SHA256 (cargo/httparse-1.5.1.tar.gz) = rNlP2+HU/2iLZ7BO7i4XvVCZVTSmFTnkWt/vtF5eVQM= +SHA256 (cargo/httparse-1.7.1.tar.gz) = SWzim7WlJ4W0Tg98ooR64LuDnJvSj2msrJuZ1GHAwEw= SHA256 (cargo/httpdate-1.0.2.tar.gz) = xKHjbIIdvgRXT2AoSKGfdC9Ps8mNQESfEbytGNaxdCE= -SHA256 (cargo/hyper-0.14.16.tar.gz) = t+w+Yr3Jii8Dk6UEjkww72WUQOpuDlcpZRA+cr2Db1U= +SHA256 (cargo/hyper-0.14.18.tar.gz) = smrgqAr+vhMIYdkKv5jjgUpPKKTG/+tauOuyvjEeDvI= SHA256 (cargo/hyper-tls-0.5.0.tar.gz) = 1hg936mbhdphoUC+oO/JP99WzqoEGzfVU1GAMIJ/mQU= +SHA256 (cargo/ident_case-1.0.1.tar.gz) = ueA4S2GVhWbpJtxQZgMh0SFZAl52fBjgQ9rya3AQTDk= SHA256 (cargo/idna-0.1.5.tar.gz) = OPCeDwsftV/e4fF0cK2ADad69RhqGnbAJrZ5NYt+hE4= SHA256 (cargo/idna-0.2.3.tar.gz) = QYoKb6uCFHX2NO/jzMRcAT90Lv4D2FPo0zVdXLhQ7Pg= -SHA256 (cargo/indexmap-1.8.0.tar.gz) = KCpiR3Isq6QEwGUBa7+lIoBuUXFMNPXfw+SjpG/LQiM= +SHA256 (cargo/indexmap-1.8.1.tar.gz) = D2RwMt+qH4ttwpvT7be770hhuLgAfrsRjW2yhP1Z9u4= SHA256 (cargo/inlinable_string-0.1.15.tar.gz) = yPrlR4b2L7KRjc+uPVaFlOUOubXCW/BDca9v51FkUvs= SHA256 (cargo/instant-0.1.12.tar.gz) = elu+gkxQfF2llWNV6Gp0bYLg4UZPZdhizF5x2nDpSyw= SHA256 (cargo/iovec-0.1.4.tar.gz) = srPqb/leF1Rz+P/mp+t8ANBUJAMhuExXBRF1/jweB14= SHA256 (cargo/ipconfig-0.2.2.tar.gz) = 9+LxiuzpcJCUVzqfJPSDxPZcqkKY4veuG3HMZdhT+tc= -SHA256 (cargo/ipnet-2.3.1.tar.gz) = aPLWTy7evsTOhK0QgUjmfhBkeJvuQ17cW2CtOYcUo6k= -SHA256 (cargo/itoa-0.4.8.tar.gz) = txmR/1YpSqkitFATnuCLO/xwmCxrLHVidxN1z3NULdQ= +SHA256 (cargo/ipnet-2.5.0.tar.gz) = h51Ug0yMdkV+9Ck6aJsqjFmwdgZ613sV76+7BfkqWSs= SHA256 (cargo/itoa-1.0.1.tar.gz) = GquPw2dYi4nc7oOrD9ZrcrULcvoZBNcJUEWs4rDIHDU= -SHA256 (cargo/js-sys-0.3.56.tar.gz) = o4/CTjD9VkzpdMAr8dM3yt3/Zb5sxHNaH36rIqdEDwQ= -SHA256 (cargo/jsonwebtoken-7.2.0.tar.gz) = r6vMFeQ3pkhPxPEtD9YwaP5Fe/k/HBSNPZZJxgsQPzI= +SHA256 (cargo/jetscii-0.5.2.tar.gz) = SSiVt26MGnikGfKXejjkIDIHfKZ9EB0mtDXucFEZ43M= +SHA256 (cargo/js-sys-0.3.57.tar.gz) = Zxom+CDbF8KidQdD8d0Duv0VuYyfMMfCYowCTAXXM5c= +SHA256 (cargo/jsonwebtoken-8.1.0.tar.gz) = zJBRwX+BuueUQK+gQbOieOHecb+5bTJFS0d/1HA8y28= SHA256 (cargo/kernel32-sys-0.2.2.tar.gz) = dQdiSylINDHAui2Crs6Mps26k4K/9N3Q90kFYMBWCY0= SHA256 (cargo/lazy_static-1.4.0.tar.gz) = 4qutI/vEKzcA8vJ5hE3IMq2ysusGmy35GPRVxOGMxkY= SHA256 (cargo/lazycell-1.3.0.tar.gz) = gw0Izh0dlB5rMGRfGg61ZDAT2DXON3ml/CCCYdvhD1U= -SHA256 (cargo/lettre-0.10.0-rc.4.tar.gz) = cdjajzTQhrCBycw7V9O7O1HRb8BrXISKGI4vFNWKwqU= -SHA256 (cargo/libc-0.2.116.tar.gz) = Vl29iIctvkzIpG5SfyZIPB0fevpriEo71s2JPU+Y2nQ= +SHA256 (cargo/lettre-0.10.0-rc.6.tar.gz) = L2xwAB9+5sk7ZoegZgfHo4+aeuRgE5pJbCPaIelbwok= +SHA256 (cargo/libc-0.2.125.tar.gz) = WRbSrmmPbem/uJGteo1lwJ0jLcWMxKxDPH2jsv2EvCs= +SHA256 (cargo/libmimalloc-sys-0.1.25.tar.gz) = EcoTYFJVBEj1XfeJjG2+ZRxrV0/jig2epoep+AiKLiw= SHA256 (cargo/libsqlite3-sys-0.22.2.tar.gz) = KQtkkX+LDLiF2d4PmVn+H3ddf6EvHaLbkAHByKtg+J0= SHA256 (cargo/linked-hash-map-0.5.4.tar.gz) = f7mzivkmCBQLhraTYEuf/MWCQkCkhNHs1HlbrLL+iPM= -SHA256 (cargo/lock_api-0.4.6.tar.gz) = iJQ91+9KLlpL+idTqqswE+NM4lM9GZb7GO9ZHjFeKzs= -SHA256 (cargo/log-0.4.14.tar.gz) = Ubm75sR9Ufw+GpuUWWWUa0xEFCq4eSxQg1qYDTYsJxA= +SHA256 (cargo/lock_api-0.4.7.tar.gz) = Mn+ltqaUDkaZ7Empvq4epIRca6uTFOT4SsaHQhOdjFM= +SHA256 (cargo/log-0.4.17.tar.gz) = q7EuaHz7RKpA9B/Dl473ZEj5tgOMrWrvQlnTwJWiOC4= SHA256 (cargo/loom-0.5.4.tar.gz) = 7cXH0yjjLMSVTo4BGT1/DvWrJXtQkLcKlk4JmjYDQwk= SHA256 (cargo/lru-cache-0.1.2.tar.gz) = MeJPGtgyHKDooeCsE/I8tmjm9UZsLFcxn2pc8cyOOxw= -SHA256 (cargo/mac-0.1.1.tar.gz) = xB4MT++GlhrG1vioJgn1XzGwXk/OFJrFcQ5Dnfdhm6Q= SHA256 (cargo/mach-0.3.2.tar.gz) = uCPoOyr/2PQKnujCnbxWQEweNM0nEJIfKAHizylSevo= SHA256 (cargo/maplit-1.0.2.tar.gz) = Pi5loaLkPPy0eolcTIsQ0fSmEJf58lTxg67mDK2cZR0= -SHA256 (cargo/markup5ever-0.10.1.tar.gz) = ok9A+wOFLRzdhDMM3cr5jp7Aint3aOlS+tO0zwSOyP0= -SHA256 (cargo/markup5ever_rcdom-0.1.0.tar.gz) = 8BXaQ7zY1PFEVZo0I/RZHWm4zgZSyQU3TacgXfM2ris= SHA256 (cargo/match_cfg-0.1.0.tar.gz) = /77oY04NRdJYrLRI5+qrP856CkZzldTZ8ijjwfAfsuQ= SHA256 (cargo/matchers-0.1.0.tar.gz) = gmMHW7hsWhsUJ7Wuhi6IiWVvEm6fd8SESW6LR89cVVg= SHA256 (cargo/matches-0.1.9.tar.gz) = o+N4tmoGDUiUe1kHN7MKG+dnBsjde4ug8v45icaKhT8= SHA256 (cargo/maybe-uninit-2.0.0.tar.gz) = YDAuTbOmHacMDLeZGXYkg2LzAxnoiFDEh7m5W78FngA= -SHA256 (cargo/memchr-2.4.1.tar.gz) = MIzDm+Abc9DRj4Kg57Kj34UkX4Svlv3dxdIC0n5HuGo= -SHA256 (cargo/memoffset-0.6.5.tar.gz) = WqNh1Prqk2AwZKAnQV8HvY4dXIjJ+/aL9WooVCj9ec4= +SHA256 (cargo/memchr-2.5.0.tar.gz) = Lf/lLs8ndy5gGQW3Uiy073kNLMIDSIu9Di/oX8t0Vm0= SHA256 (cargo/migrations_internals-1.4.1.tar.gz) = K0/ITkrwILg3Ap4BeWb4ahwtXoPmS1iZY9UEdSWZWGA= SHA256 (cargo/migrations_macros-1.4.2.tar.gz) = l1PxKQn9jZI/da5cMljK4e08jsBS4bOMk8IabRV/eJw= +SHA256 (cargo/mimalloc-0.1.29.tar.gz) = L2Stg8lpry5zLpB1ZN6w0O05POxK+Ad2933XehpCdpg= SHA256 (cargo/mime-0.3.16.tar.gz) = KmDHzlAcceA6nJwNNbhhQTrpJb2XnMek4w0GAGmqrI0= SHA256 (cargo/minimal-lexical-0.2.1.tar.gz) = aDVMXGvTbXP/P+zrBe+lm2rLdiZhf0livjIqgl5h95o= -SHA256 (cargo/miniz_oxide-0.4.4.tar.gz) = qSUY6YwHhYa8bJNAKK3MpMkqU9apWBlt6DUXCgHYTks= +SHA256 (cargo/miniz_oxide-0.5.1.tar.gz) = 0rKb1Lw/MzkRBevuNYnBkZfEJx4+Wp7Jv+gSfu/48II= SHA256 (cargo/mio-0.6.23.tar.gz) = Sv1m9bkb8qO8E/rQ4hyu2sFoykxwdQTnVYVkiugOTMQ= -SHA256 (cargo/mio-0.7.14.tar.gz) = gGe0BP6Xxwgp8ILeyLz09xIl1+rqHYZFNJy3b6BiBcw= +SHA256 (cargo/mio-0.8.3.tar.gz) = cT1VDZtE2JF04Ga3piF64GI0wQy0eBmogpDSs1PDF5k= SHA256 (cargo/mio-extras-2.0.6.tar.gz) = UkA/4pABLOd3xGJnkMiVEySiueMxazFDd5xysCl0Lxk= SHA256 (cargo/miow-0.2.2.tar.gz) = 69gIQkFmMi1KONqHCDv93TrEwTEzTtVYVhEusG1GlE0= -SHA256 (cargo/miow-0.3.7.tar.gz) = ufHFsCXNqHb2bvQ6ET+R68n0zO80hDAA4K3267q4TiE= SHA256 (cargo/multer-2.0.2.tar.gz) = X4815odWHVwWZ1kJEeZpioy3FKE0p1BXGKGC57ydODY= SHA256 (cargo/mysqlclient-sys-0.2.5.tar.gz) = 9hs4FSi6KTAFxCpAndc9A0UI4nO/kEgfF+wulkpulps= -SHA256 (cargo/native-tls-0.2.8.tar.gz) = SLqfdxm1oPQvM4kHYUKF+1/XDlOFgUH2mJih+3IDsk0= +SHA256 (cargo/native-tls-0.2.10.tar.gz) = /X4vNhhVf5gOCxfohWJS7uPJf6EsVN/wyikPtiZspKk= SHA256 (cargo/net2-0.2.37.tar.gz) = ORYw0StoACrh4l6Pl0MGR0lmVQrYLaxohvuJEMGVaK4= -SHA256 (cargo/new_debug_unreachable-1.0.4.tar.gz) = 5KJHNiFuwxYEeh/EJS4n2rsEIYqko/N8bn3b8fl4K1Q= -SHA256 (cargo/nix-0.23.1.tar.gz) = n4ZjF6y9OiQHEMY/Bl/7Hk/UZiWQRcy1BBMLf2aPNcY= +SHA256 (cargo/nix-0.24.1.tar.gz) = jxffMHkErNBaqOMul7sg8qDfFyi7wtdxro+akEY0Qek= SHA256 (cargo/no-std-compat-0.4.1.tar.gz) = uThT2m2EwuPH1zDWRz6IF2kt2Jvjh+sBuU1/EI7LW4w= -SHA256 (cargo/nom-4.1.1.tar.gz) = nDSfaPJfWWufRM8OfGl1KlxjOwVQw/+ElRi/ugIzd0o= -SHA256 (cargo/nom-7.1.0.tar.gz) = Gx0R4e84nHb+W4G8ry6jLPiLYrxJThn0k9CzDnqTAQk= +SHA256 (cargo/nom-7.1.1.tar.gz) = qJA+WimjF1J4dNBAL4ZxUqPSHJCLsLkz5BbGXjAdTDY= SHA256 (cargo/nonzero_ext-0.3.0.tar.gz) = OL+WRcixRWmLsLGKRjfcrLxCHqSb7yMX5P2AZaOHzyE= -SHA256 (cargo/ntapi-0.3.6.tar.gz) = P2u5AuQ3tthuA8zhCn4q9mIpLF3+8jtliZ6jrJNUrUQ= -SHA256 (cargo/num-bigint-0.2.6.tar.gz) = CQx/mZjuD/Zapbcj5ACfeyF3B/H7XqVRMpzE1iMfswQ= +SHA256 (cargo/num-bigint-0.4.3.tar.gz) = +Tq2KJx7NEqKn2D4jYCqIAMjNv542jQa/JHIojQfx18= SHA256 (cargo/num-derive-0.3.3.tar.gz) = h2pT//mOA6k2pnSylWiw5gXwayk3LCSJ/03iPxlJdD0= -SHA256 (cargo/num-integer-0.1.44.tar.gz) = 0sxpimO1SacLwEcHPSlJzOJ80cewpKhi0IqAMbwoAds= -SHA256 (cargo/num-traits-0.2.14.tar.gz) = mmSx7FzaJYbihHIkhtgCrPH329xiPiv8V+Zcoc0JkpA= +SHA256 (cargo/num-integer-0.1.45.tar.gz) = Il0zifs1CaJMk/XCnra94lhrmNnwFmNt/1jXxvdWnNk= +SHA256 (cargo/num-traits-0.2.15.tar.gz) = V47eNM8C+JJKuUR/UMKAdbTT5bJplyNF5+A3KzjGzc0= SHA256 (cargo/num_cpus-1.13.1.tar.gz) = GeZFJuve4YI0FXLlDprQOWWqUQzZRCekVJRI8oXpV6E= -SHA256 (cargo/num_threads-0.1.3.tar.gz) = l7qZumOT4sNzR5FAG2aQLZgcsDvxkK9nTKaZSbbV+xU= -SHA256 (cargo/object-0.27.1.tar.gz) = Z6wdP5odNhb9mmDI10KW8iQGoji2py9cwebzFN9P+/k= -SHA256 (cargo/once_cell-1.9.0.tar.gz) = 2jJRXZ9ubkide8nYTHGwYNtyR9wDW75E6siM+HSG2NU= +SHA256 (cargo/num_threads-0.1.6.tar.gz) = KBnOBB0u4TEDb0/J1q564SWjpA6XumTQT+eZrZ2ru0Q= +SHA256 (cargo/object-0.28.4.tar.gz) = 5CyYLy2VX6yB3X4dDhQmp9cCrNnJjRmrAQg6agMoxCQ= +SHA256 (cargo/once_cell-1.10.0.tar.gz) = h/PgN+rBVtF3XakUGW8PN3QaJ0FV40oLfkJ8NdKi7Lk= SHA256 (cargo/opaque-debug-0.2.3.tar.gz) = KDnnlmXxMb21eC5R8sbJWZwTPGCYmCpUx5Q1i/QyUpw= SHA256 (cargo/opaque-debug-0.3.0.tar.gz) = YkqDQMOMG4D9VJCHhi2kukPgiFivAlsjblCbZkn8E9U= -SHA256 (cargo/openssl-0.10.38.tar.gz) = DHriIiNMMN8UEVTxWQZsUJP/c7YyBNzacSHrCC/FapU= +SHA256 (cargo/openssl-0.10.40.tar.gz) = +4GmQwrJEayyX+Wsjx0q8bTqik/f2g8e5Ckq8uLY6w4= +SHA256 (cargo/openssl-macros-0.1.0.tar.gz) = tQHkTxFmWWDH5/zwYsfZahSt5KqYEWwASy43tb59c2w= SHA256 (cargo/openssl-probe-0.1.5.tar.gz) = /wEaMCw5alGXaSQx/BlIAZFUr8F4uvfY43NnRCpGAc8= -SHA256 (cargo/openssl-src-111.17.0+1.1.1m.tar.gz) = BdajNqvRCBQZj2biqRzNczZhHzAzQRnKjOMAU2Zm/PQ= -SHA256 (cargo/openssl-sys-0.9.72.tar.gz) = fkYQnDg2AnNfoKLkjdK3yJKwSOG/aeXDsdgEt9nCA8s= +SHA256 (cargo/openssl-src-111.18.0+1.1.1n.tar.gz) = eJepJuHo0AIZEn3AIBMOykKS5cpmbdWSSA1yw+yi/2w= +SHA256 (cargo/openssl-sys-0.9.73.tar.gz) = nV/Rn7PgqBkcHjSTVxiXaj5wwRKrmiSvbXytzNnZC8A= SHA256 (cargo/owning_ref-0.3.3.tar.gz) = zfhPQWOeA3tIT5NDOqOJeGO1Ye1lxuWccHPXxWFxDzc= SHA256 (cargo/parity-ws-0.11.1.tar.gz) = WYPTkprVDxLD65pnQ/GdaRhm7NRNp0wKMwjD+KVt8MY= SHA256 (cargo/parking_lot-0.11.2.tar.gz) = fRe3gDamBmO3l63q7kb1yd/ruGlI0SVQB6HWvgJx/5k= +SHA256 (cargo/parking_lot-0.12.0.tar.gz) = h/XsJJOmGsBQbA9BmfmQcMvoOFewM3AGow8+Zxm471g= SHA256 (cargo/parking_lot-0.4.8.tar.gz) = FJ2PW5fzwRM+PPzYiGRJlZ6Fa1V/8oHikrcz18aeAF4= SHA256 (cargo/parking_lot_core-0.2.14.tar.gz) = TbGozPc0p7znlMwZs98G7YerLzkHA2tpPGj1a01FN/o= SHA256 (cargo/parking_lot_core-0.8.5.tar.gz) = 126OFJO8rA0nZsQnN/NEWPHIxQwNI7yyTqlTr/snMhY= +SHA256 (cargo/parking_lot_core-0.9.3.tar.gz) = CaJ5y/JcsHV4EDlPvB41mUm1njSBRcZDqTmlJWkuaSk= SHA256 (cargo/parse-zoneinfo-0.3.0.tar.gz) = xwXyVkScYNpl4R/2Ym4MFqCguWqqNI3mE3aySbw0D0E= -SHA256 (cargo/paste-1.0.6.tar.gz) = B0QSav4abdfzlMtQpxbb4IbLBuJV5T2NAYXYKCg1j7U= +SHA256 (cargo/paste-1.0.7.tar.gz) = DFIOBRNdbnYxSLZCaoN+I5BBZTunvs0uU4wHbHOAJfw= SHA256 (cargo/pear-0.2.3.tar.gz) = FeRCQcXkyGjj6qeLfBhIyt1jRO1PVNApgy0ytBWlhwI= SHA256 (cargo/pear_codegen-0.2.3.tar.gz) = gqXKZDwjA+y3QNUGU53roYnhbydUBApCkBzYEF0CgtA= -SHA256 (cargo/pem-0.8.3.tar.gz) = /VbL0h/qSNDEQLQc1pxYn6rK3gjJktmlTkcbedD9E+s= +SHA256 (cargo/pem-1.0.2.tar.gz) = 6aOwmiDjdFWFgKSRTTt9ib1huVSlpeHcvqmHU63bGUc= SHA256 (cargo/percent-encoding-1.0.1.tar.gz) = MQEN0uGsM9W0altBNJUjmIKBPgNp+O2KXiZvFzYC+DE= SHA256 (cargo/percent-encoding-2.1.0.tar.gz) = 1P1WQdAcjxiiPae2/ikpj/S1WvzM33iXOyTPMXX+4y4= SHA256 (cargo/pest-2.1.3.tar.gz) = EPSHKulNe5CuSHVN8i/UKtUs50C483CwPaSDVBdAPlM= @@ -199,34 +215,31 @@ SHA256 (cargo/pest_derive-2.1.0.tar.gz) = gz0a5VjcYB6aYDZkIRlqjZS8CsmAR20LZ+HQmI SHA256 (cargo/pest_generator-2.1.3.tar.gz) = mbjbYm4x5bgXh7l4NCV2loGzRwEcxZRx4z6kbS6gz1U= SHA256 (cargo/pest_meta-2.1.3.tar.gz) = VL5uQE9TFweYEvyPn1J53jdtiFaSniHBhOz2u9aSoR0= SHA256 (cargo/phf-0.10.1.tar.gz) = +rvx6tilvLwg9fi5Oe4/Ww9vKBtq00aLhGVrZYtFUlk= -SHA256 (cargo/phf-0.8.0.tar.gz) = PfthIy40/LYz9D0SxY+Dwd+Cli3N+lZaToZv/Bfa/hI= SHA256 (cargo/phf_codegen-0.10.0.tar.gz) = T7HDqLxN1OXPzim0T/wUvt0u4pRVmilOKk1MnppqE80= -SHA256 (cargo/phf_codegen-0.8.0.tar.gz) = y//uYVhbBBGEDT7Ok1zOnLYyHwHEVHfTAGZJjNXhqBU= SHA256 (cargo/phf_generator-0.10.0.tar.gz) = XVKFiTu164LmqvXVnukJoGoWc3qJcJhN13RrqSg0mNY= -SHA256 (cargo/phf_generator-0.8.0.tar.gz) = FzZ/DMhvLSWAKywm7linsj+uzPeKOWCUwT3O0NAYJSY= SHA256 (cargo/phf_shared-0.10.0.tar.gz) = tnlq13Gs3AEj0qiNxCi1447yRFZ0PdsXRO1ij5gVwJY= -SHA256 (cargo/phf_shared-0.8.0.tar.gz) = wAz4uer+aN3l6eqizvjuhKkzakfVZuxVyhZYljO2Wvc= SHA256 (cargo/pico-args-0.4.2.tar.gz) = 24vNlst0DQMUnLrVUY25/YcSahCrUZwBGJOxdUE0xGg= -SHA256 (cargo/pin-project-lite-0.2.8.tar.gz) = 4oD753zGLJFSclnpRCFT9GiHNnSNJGYBJihjKXQrTGw= +SHA256 (cargo/pin-project-lite-0.2.9.tar.gz) = 4KeuOsLxFzCF05hTHHBXVslKTFaEN4XfhaYMGgr6wRY= SHA256 (cargo/pin-utils-0.1.0.tar.gz) = i4cNjBUbby+5PoShMUYTjwXQLtEcfnxU+IJqqvfJ8YQ= -SHA256 (cargo/pkg-config-0.3.24.tar.gz) = WIk/dRybBBKHGgmr1i7NKgApjGyDvvoiPvmMUq70DL4= +SHA256 (cargo/pkg-config-0.3.25.tar.gz) = HfjE7EsGJ+U73yFGFa0oc2fkglWM+EsQklCzdGTcA64= +SHA256 (cargo/polyval-0.5.3.tar.gz) = hBnStiPHwIlv8tXZbiy07eWQ/tKPzDSTT0wzwDbmIKE= SHA256 (cargo/ppv-lite86-0.2.16.tar.gz) = 65+ebiM+XEo1VZphe/QKTsRH2y6EwgtVpvgxZ7fleHI= SHA256 (cargo/pq-sys-0.4.6.tar.gz) = asJe7loFgvRaZ+g341DXhOcAO9KaX0YHlncgYcpJ/9o= -SHA256 (cargo/precomputed-hash-0.1.1.tar.gz) = klOD76NGcwR4+0g42+kTfSpHZ1rXicVG0VCm4d1Ksxw= SHA256 (cargo/proc-macro-hack-0.5.19.tar.gz) = 2/DEi8HZE3WuXDzYHjci3/Grz4GjCWAkBkDSI/Wf4OU= -SHA256 (cargo/proc-macro2-1.0.36.tar.gz) = xzQtWIP7zK4cw3ojU7Cch8mw86/XP1+5u6aHofczsCk= +SHA256 (cargo/proc-macro2-1.0.38.tar.gz) = kCe0jp1MkXX6Ihit81V/kcETcCFzmVHUky9fgmisSKo= SHA256 (cargo/proc-macro2-diagnostics-0.9.1.tar.gz) = S/KXJtZ0ZNSfpiJKHQeTaowIuz+6cnx0k/bPFhb9qto= SHA256 (cargo/psl-types-2.0.10.tar.gz) = 6O2nxi2eyq/fi2I3TABt4K32Fmaulqlrp0o3E0qk5HA= SHA256 (cargo/publicsuffix-2.1.1.tar.gz) = KSly7a1rvswTerhMXjZCGkpsl56jHTzHNUDdBDFbM+E= SHA256 (cargo/quanta-0.9.3.tar.gz) = IK/nFCktXoedixJ0CqIjxqiPEYr0GHDothluOaAiOKg= SHA256 (cargo/quick-error-1.2.3.tar.gz) = odAZQdgvoqtQvh555nFCid183njrpMB0vFpDdPZQ3+A= SHA256 (cargo/quick-error-2.0.1.tar.gz) = qZNVXzHlpgn2F8EttiUN7crBsKhQdpEsQ25vybLI5qM= -SHA256 (cargo/quote-1.0.15.tar.gz) = hk0+lqiZhjE2/G6Z89fK4ona/kO/LFrBm3DfchDAoUU= +SHA256 (cargo/quickcheck-1.0.3.tar.gz) = WI9jeOTdmUWLYOwnW0R3rdQc5PqfZNy6bxWtzLGbUNY= +SHA256 (cargo/quote-1.0.18.tar.gz) = of61TtaTuTqE4UCUlDuEt8Tq4gTFErfMuVqwxm0nitE= SHA256 (cargo/quoted_printable-0.4.5.tar.gz) = P+4tzln3pDQY4zgsdmVUxhTgalUtU6jwfvSZ6kszLA8= SHA256 (cargo/r2d2-0.8.9.tar.gz) = VFxbwriAlzycEOQGdBhAegzKowkXgdFnHUbrNRB8sm8= SHA256 (cargo/rand-0.4.6.tar.gz) = VShAuXATsaJpksEerDS913jkZGAaTCBUtfC/98Z2EpM= SHA256 (cargo/rand-0.7.3.tar.gz) = amsWedSbJLv+DIA0KaoYdEcvUNmzYxMfDon8NWtUTQM= -SHA256 (cargo/rand-0.8.4.tar.gz) = LnVzYy5kVM9rmdeqxMzKVL4G2gWsou90I9ItJ9TUvNg= +SHA256 (cargo/rand-0.8.5.tar.gz) = NK+NGg4lkkvFt8Q8B5yUIznY8Ki1fDkEm+9YG0YydAQ= SHA256 (cargo/rand_chacha-0.2.2.tar.gz) = 9MjthWJ5yXNyBr9yW/NpNdhmbq16pptSvlWvNp0ZNAI= SHA256 (cargo/rand_chacha-0.3.1.tar.gz) = 5sEKY6D6MiUr5J0h53CdTUuvjSMcLbzh6qgUG5sSfYg= SHA256 (cargo/rand_core-0.3.1.tar.gz) = em/euDsHXoJm3Mh2LCJ3b2h3pjEREh9fjHQR5b5+7Us= @@ -234,25 +247,28 @@ SHA256 (cargo/rand_core-0.4.2.tar.gz) = nDOjxEygX6bxgH2OZ0Pzgk6FCb7KYlZpYzvgrL31 SHA256 (cargo/rand_core-0.5.1.tar.gz) = kL3lKW/IkbDO8SptA93MwWLOeyr/VBYK+TOPjUDfbRk= SHA256 (cargo/rand_core-0.6.3.tar.gz) = 008UCPVSlEU3kMSLLx67scW0t1Y+sfQYvPz9uwbrtOc= SHA256 (cargo/rand_hc-0.2.0.tar.gz) = yjEpr3uSoXES1ZrUmMb4Hq9GMlN2a5A5bTnqejnWYTw= -SHA256 (cargo/rand_hc-0.3.1.tar.gz) = 1R6fWW3iJ/2i6myEYH9VWOGW7q9DyYa3JLpPuP30l+c= -SHA256 (cargo/rand_pcg-0.2.1.tar.gz) = FqvQwbY56etNfFDAuBALDQ+Em+I0mCnHQP6ObrSBZCk= -SHA256 (cargo/raw-cpuid-10.2.0.tar.gz) = kp9U4paR1OapzFWEed5w23qj2YzW/nq4bXUHqiiGudI= +SHA256 (cargo/raw-cpuid-10.3.0.tar.gz) = c4vEcRnj7szH6UxKUGkBrqXntJROzQgpy+v0rwTO2hI= SHA256 (cargo/rdrand-0.4.0.tar.gz) = Z4BU63coa1FYG6Q2IMyRGr8CdYyR+T9Hl2eu0PkEWLI= -SHA256 (cargo/redox_syscall-0.2.10.tar.gz) = g4PzljkmnN6X0lWjK9towEczcpVBSUDGi90wwuEyA/8= -SHA256 (cargo/ref-cast-1.0.6.tar.gz) = MA8qg12AhzTuKV1FAHray567Kd064kJKz6F5MMrlQdo= -SHA256 (cargo/ref-cast-impl-1.0.6.tar.gz) = TDjjrs0rIcs5WWN7iDuzcUvH5D8CaLminTdD7j5VzdI= -SHA256 (cargo/regex-1.5.4.tar.gz) = 0HqGKTWetW8eL7FlK7BCEsByqHumhUagQGXVJWc6xGE= +SHA256 (cargo/redox_syscall-0.2.13.tar.gz) = YvJbxMflXgsLeh1D+4k/T6E2HQq+OLnOTzI8Kt/m70I= +SHA256 (cargo/redox_users-0.4.3.tar.gz) = sDPYN6fPFi15k63tkwTjCoMhPGSLbjidsjMZH4keXCs= +SHA256 (cargo/ref-cast-1.0.7.tar.gz) = aF1YYltsK4PkzIiifEv2Wtt7axbb3EE+UVyUBbR0Mqs= +SHA256 (cargo/ref-cast-impl-1.0.7.tar.gz) = oEOCTinJQWk3SsUYOsDtQ/VyTcRVaxlWgAdIa9hA+h8= +SHA256 (cargo/regex-1.5.5.tar.gz) = GhFke2sl/wWlFcuSw2XOwIgB6DQjojW1HiMeGAh0coY= SHA256 (cargo/regex-automata-0.1.10.tar.gz) = bCMNc/uNjBucCzE1xRQqis7joFWPuNtc8ctl+NeGITI= SHA256 (cargo/regex-syntax-0.6.25.tar.gz) = 9JcoWITz/P9CT/yTPlbXy8pRHe8MmDGn+bX2FT48yJs= SHA256 (cargo/remove_dir_all-0.5.3.tar.gz) = Os0SVmVCKXOjOsnT3S34XtrQ9K6bANr7GgXkOp9e+Oc= -SHA256 (cargo/reqwest-0.11.9.tar.gz) = h/JC8UiKU5p5usbb58hgmuQ7eRS3c2IQ8jmjfMyzJSU= +SHA256 (cargo/reqwest-0.11.10.tar.gz) = RqH3qk815ei0FgRJ9Rr8dY8M5kVDFan6fQ0RPpWMQes= SHA256 (cargo/resolv-conf-0.7.0.tar.gz) = UuRDlNIIbQEFUbFLU7HyTjFkdXDNHesDeeLCGzKaugA= SHA256 (cargo/ring-0.16.20.tar.gz) = MFPPUuI2o+10bfx0WqnKzxt5HYRr2vQS9gqNfW4XyPw= -SHA256 (cargo/rmp-0.8.10.tar.gz) = T1Xl+hRGxNXdH12u7SpP4ZMHF3GiY2J00NejsIKqetY= +SHA256 (cargo/rmp-0.8.11.tar.gz) = RFGRcjWP1tWGVshquOf7yeFJDD6PFNNe14yg3QdAPJ8= SHA256 (cargo/rmpv-1.0.0.tar.gz) = 3ogTs6L5XFE4/lklv7h4QXXYjWv/BZuozgkKqJExl1Q= +SHA256 (cargo/rocket-0.5.0-rc.2.tar.gz) = mOrQg/zkpAX+s0nPCavfZEccYHfxTgzlk2SqkNS5kxc= +SHA256 (cargo/rocket_codegen-0.5.0-rc.2.tar.gz) = 1q62u5xh6c0sANcOome/NvdqTMYV5ZCLNJwvnZOZm0c= +SHA256 (cargo/rocket_http-0.5.0-rc.2.tar.gz) = Le1l0SeVTePBJHFjC/S4GieS8GWYRGHmW5HQ/ar8F6I= SHA256 (cargo/rustc-demangle-0.1.21.tar.gz) = fvA+CisVDHqQ0B+vYlTJxIpB6V+yqMKsHG8NK5rvw0I= SHA256 (cargo/rustc_version-0.2.3.tar.gz) = E44+Cstsn7JYsZtny4q9Y8AGedKFGAXqFRRlRk/pAwo= -SHA256 (cargo/rustls-0.19.1.tar.gz) = Ne22df7uOa7JyZ+l/5hQgZlaBtWUEUrhTL55ete3ptc= +SHA256 (cargo/rustls-0.20.4.tar.gz) = T7/rjQ3bhHBrxZelV0q4kSgXxSo5f4GeW2FOImUgaSE= +SHA256 (cargo/rustls-pemfile-1.0.0.tar.gz) = 51IsneeH/wYUWP6agp3HkKP1si3FcWlPxYg/RIuU2ak= SHA256 (cargo/rustversion-1.0.6.tar.gz) = 8sw46Ppmbi3jxKun7etf/FJGwcLtDj0X5WCu66c2sj8= SHA256 (cargo/ryu-1.0.9.tar.gz) = c7S3UMeCllwhG0LwIvWa8fvOq90CZiNxTxBBUvHsFJ8= SHA256 (cargo/same-file-1.0.6.tar.gz) = k/wdw6qpv+2V4C5urau0uvfjB4sL0bTXtrC2g3iQBQI= @@ -260,106 +276,107 @@ SHA256 (cargo/schannel-0.1.19.tar.gz) = jwW6YJwjTmC+4NVH/pSkx+nacz0cliz25Z76TNnI SHA256 (cargo/scheduled-thread-pool-0.2.5.tar.gz) = 3G90/RIEBz+gLV1daL7IAhvkw4aQthJksv20gIPQ59c= SHA256 (cargo/scoped-tls-1.0.0.tar.gz) = 6mqSkOPJzw8YFF73/6YtaO4L9fzWUQF+WG3H/V2kSMI= SHA256 (cargo/scopeguard-1.1.0.tar.gz) = 0pqwxtP8Dukv5m4tmfcA6rF6jVfRwdO3SDgPsguqeM0= -SHA256 (cargo/sct-0.6.1.tar.gz) = s2K4OJjg5p84UVuC7hWqgGNr7+R8O209iakR54/CKM4= -SHA256 (cargo/security-framework-2.6.0.tar.gz) = P+15SLbGisu24gwzT1WtY13A91UGlj3kRkKJ+9OwUaw= -SHA256 (cargo/security-framework-sys-2.6.0.tar.gz) = pXMhv4vCNiCBslmZEtKWH+iZwO+t8bSy+NSLPiU7uWw= +SHA256 (cargo/sct-0.7.0.tar.gz) = 1T3Nt8n4FYk3p5gbSKzP05pDr0GFkaXQCMeyK14bfKQ= +SHA256 (cargo/security-framework-2.6.1.tar.gz) = LcFPFy+vigGUo63tYicSsN4naCGt3FdPpU/AoRZ+ENw= +SHA256 (cargo/security-framework-sys-2.6.1.tar.gz) = AWChOhd6Rb+0POccAVgJmEdPVWrYVNy8qTbdKEGlxVY= SHA256 (cargo/semver-0.9.0.tar.gz) = HX657ywYZhkCzEflNfm8UbeKzSVNpx03XC9nINmkBAM= SHA256 (cargo/semver-parser-0.7.0.tar.gz) = OIod8lPsoIVQvvbHI5LP58MJFL9B31Jptoy9b/j1cKM= -SHA256 (cargo/serde-1.0.136.tar.gz) = zjHiSwHh5STflvHC/dBUQF+Nc3YkmlEQiG+0tlhIR4k= +SHA256 (cargo/serde-1.0.137.tar.gz) = YeqNVMd/gxUUCgX0xyN0A784tycE0DFUOqHRarv1F9E= SHA256 (cargo/serde_cbor-0.11.2.tar.gz) = K+8uv95Fb7drvPn1kxUzPezE/aCytEtCAkPBHg9ewfU= -SHA256 (cargo/serde_derive-1.0.136.tar.gz) = CFl+cVL80wb0GDjtPje+nq7tK2HELiEXJmpVT6tGYvk= -SHA256 (cargo/serde_json-1.0.78.tar.gz) = 0jwbpM8O/US+MgF3CSgLMtHOpcPxJ1w7bZ6LxU91gIU= +SHA256 (cargo/serde_derive-1.0.137.tar.gz) = Hyb6ugw5WZcjd9Oy0wbun3H67pcUKU5Bu3d/g/iFeL4= +SHA256 (cargo/serde_json-1.0.81.tar.gz) = m3zisyoa7QPFWNxhpc0yjxWv8tvBfarY+4rwTSEA4Vw= SHA256 (cargo/serde_urlencoded-0.7.1.tar.gz) = 00kcFHFcoilMTWqI8V6Ec5eIwdAw7tjBEENqr9qi8/0= SHA256 (cargo/sha-1-0.8.2.tar.gz) = 99lNC+3pI7POph8/H/V/+M39d7QA+4+ZmJSeDPBBY98= SHA256 (cargo/sha-1-0.9.8.tar.gz) = mc1nE9s88WtshOBjIeBJqbn2mYJuFgltI7vMRNFdUaY= +SHA256 (cargo/sha1-0.10.1.tar.gz) = x39Of2VFVUXCFTwSU9JQVoJed+4lM/DkHetlqTo0hS8= SHA256 (cargo/sha1-0.6.1.tar.gz) = wdoFyXRFyqEtBehIxKT8u+op50isKPfoDpsBA5IGN3A= SHA256 (cargo/sha1_smol-1.0.0.tar.gz) = rhpHGGwDoyF3BC5V28X9Wu6QC44AaajXD7qWqTdc0BI= +SHA256 (cargo/sha2-0.10.2.tar.gz) = Vd6uxg+B7v48zg3FC9qS1tjojyon33xQM7Qq/rHtJnY= SHA256 (cargo/sha2-0.9.9.tar.gz) = TVih4b85dJgH2Jzy2YrC36D/HLP6o4+7ZN2IrIAT2AA= SHA256 (cargo/sharded-slab-0.1.4.tar.gz) = kA+6gG9wxjCwo4LQ2CXheg8Z/NBZoq3h/yN7zd9EazE= SHA256 (cargo/signal-hook-registry-1.4.0.tar.gz) = 5R5zMo3ErAx8y9o6SU36A98d4vRgGBJ/YMaT8mSEVbA= -SHA256 (cargo/simple_asn1-0.4.1.tar.gz) = aSyhPeV84GE6NjyMLx3pJa3ryBsEySOsYMVIi7RKvks= -SHA256 (cargo/siphasher-0.3.9.tar.gz) = qGIyq2D6cSh9fy3a5KcHP2t6rDNjHDAVq7VW8IxtCj4= -SHA256 (cargo/slab-0.4.5.tar.gz) = ne+R/R4Bj+AHAieR+GXQzMmzoNUAHgGqu4tA5GAAr7U= +SHA256 (cargo/simple_asn1-0.6.1.tar.gz) = SnYrHDi5uZDGlLnC+KvjNyzmqc6q5ryjnPxG4FT0V0U= +SHA256 (cargo/siphasher-0.3.10.tar.gz) = e9PjIGiZrz+LEq8oT6/AOMwdwrQdG4ndFylyIcXSJd4= +SHA256 (cargo/slab-0.4.6.tar.gz) = 63A8/pU7zO6VaFERre7bdvq+TpdUmljRbwPqe5NnuzI= SHA256 (cargo/smallvec-0.6.14.tar.gz) = uX/K66ie26MPBEoQxqPMOd+cPxfXzYKd0URsqzX4kOA= SHA256 (cargo/smallvec-1.8.0.tar.gz) = 8t1XRiaDkQbDIKMjMIYp3LGs/JbjKoy6Nk3cYawj7oM= SHA256 (cargo/socket2-0.3.19.tar.gz) = Ei5XARPSjXcwZ/qyQma2Z1P26pFXWGUWlrbjXkn4jW4= SHA256 (cargo/socket2-0.4.4.tar.gz) = ZtcrdZQ2rjKJiirwoUIY2/Ve/eP+6xcOtiNjfbhe4eA= SHA256 (cargo/spin-0.5.2.tar.gz) = bmPP8yCuLFeQRnm6fLYygKPcRhOIW+r7FI7nv5qpBC0= -SHA256 (cargo/spin-0.9.2.tar.gz) = URJUvgxbzwYrAZpsicAaZkqjWd7WL3iqcsb8E3wFkOU= +SHA256 (cargo/spin-0.9.3.tar.gz) = xTDCsNC/i2kwSzn+IAGZPiZ0YZSLiQzQN9itQpP6Gg0= SHA256 (cargo/stable-pattern-0.1.0.tar.gz) = RWQWjABjX4jq7UENXvqBMa+o2GmaYSyAxFWgugXCEEU= SHA256 (cargo/stable_deref_trait-1.2.0.tar.gz) = qPEScpUS+ORC2B+VqKfd8rfGuKGm9QmpWGQUKzDKstM= SHA256 (cargo/standback-0.2.17.tar.gz) = 4RP7bz3geiQ9Q0pW7G8Ybf1RywhEgjn+e8rnP4f/KP8= -SHA256 (cargo/state-0.5.2.tar.gz) = h89PU2nm0wRLXjZclpD0UVFqyPCVQIRiK0nqP94vbeU= +SHA256 (cargo/state-0.5.3.tar.gz) = 2+hm4eUegmDJ7tg2oEKl5/Zya7K0Ed/+qnEuGcOI8js= SHA256 (cargo/stdweb-0.4.20.tar.gz) = 0CJJaxYoE0i1LQ4wrpngGnPXN7L0XTj+1O33n5MlodU= SHA256 (cargo/stdweb-derive-0.5.3.tar.gz) = yHpgpA/MyEvvBlI0W7u74gpgW/XQzoFxn8R29cA7UO8= SHA256 (cargo/stdweb-internal-macros-0.2.9.tar.gz) = WPpf9q0NmNH/qMsRWJK25p1neZ9nY+FiocnbQh3CLhE= SHA256 (cargo/stdweb-internal-runtime-0.1.5.tar.gz) = ITcBujNwdE3NGhKWDKpIQ7PWi00cCl1XXg1lsu6dFsA= -SHA256 (cargo/string_cache-0.8.2.tar.gz) = kj8PObYmfTfSPOca5yNWAhNLJQrOcV3SyQQhmY3awMY= -SHA256 (cargo/string_cache_codegen-0.5.1.tar.gz) = 8kyOXhnSKnJmJvGl4W/hWxMtzyHRAXf6WkXOeWKZa5c= +SHA256 (cargo/strsim-0.10.0.tar.gz) = c0c8Dlnm1YEsXf4qBkpkRJSfCJ4g7smi5VBllklORiM= SHA256 (cargo/subtle-2.4.1.tar.gz) = a97zLoFQwqCBEQtCdy/+fXyQMrYGvCJsgmD9l+CXZgE= -SHA256 (cargo/syn-1.0.86.tar.gz) = imWz9P+gCS6Yh2adsOrgeUHwI5katY6kTaj+ji1RHGs= -SHA256 (cargo/syslog-4.0.1.tar.gz) = oGQRQrQIHT1Evv+k7v1zRqIozfke1wGG2yyizvdi0yc= +SHA256 (cargo/syn-1.0.93.tar.gz) = BAZliVaLcuxl9C1loaUkNulUsWh3MUiJPAICaVY97PI= +SHA256 (cargo/syslog-6.0.1.tar.gz) = l4BEzGgVCtXkAIPJ9qcl5v0C17obz2kewv8NZsC0Gsw= SHA256 (cargo/tempfile-3.3.0.tar.gz) = XNse9OrurdyPvTceUBcFcGSvCRGQLvNrOYAfZ8xteeQ= -SHA256 (cargo/tendril-0.4.2.tar.gz) = qe9VfLOXpPClo6Yo8GUV94Vj8iCeZNRwVdncYFK/XjM= -SHA256 (cargo/thiserror-1.0.30.tar.gz) = hUur5S5N8WU3BrmPz8BYQwEAObQGh1kwpw5NlkTlxBc= -SHA256 (cargo/thiserror-impl-1.0.30.tar.gz) = qjL9P2J/Nn/hb4k+JZeuPAUCD4u6Jmak5upz03flcUs= +SHA256 (cargo/thiserror-1.0.31.tar.gz) = vYKf4yNz0n92JlYgtTCdA0DLhVD1I8HdolHWKYBpBpo= +SHA256 (cargo/thiserror-impl-1.0.31.tar.gz) = A5a8ieYmJEZYvvgZ4i0MxFnnlaXr6Hjm7DNtFnSo15o= SHA256 (cargo/thread_local-1.1.4.tar.gz) = VRbCe3gxHFC/QsBxQlxWCseZsRwwsx+H4wgZZf5eAYA= SHA256 (cargo/threadpool-1.8.1.tar.gz) = 0FDmCzPUHBkQizLOoyFkAzqQE/47RsvURXVZv793r6o= -SHA256 (cargo/time-0.1.44.tar.gz) = bbnmkUq4sa4cJgpK56SbbFYRtAMopzWyGGJWdoXnMlU= +SHA256 (cargo/time-0.1.43.tar.gz) = yopQ7yNg+9HusOzUZ5WoehkCTrS1PF3JFsof2V/mJDg= SHA256 (cargo/time-0.2.27.tar.gz) = R1Kpf47r1oVP+R8cGCTNYWBiasS9RCh/f06iA1oCokI= -SHA256 (cargo/time-0.3.7.tar.gz) = AEy8mPMPojPGGji8d+lqkQbmXIjy077xgq6VICfldT0= +SHA256 (cargo/time-0.3.9.tar.gz) = wnAuCKeoYPAFgmxoFdysEBsZteszDCf+Slko/sHSDd0= SHA256 (cargo/time-macros-0.1.1.tar.gz) = lX6cbibxLLbQ3X/HdrtnpwYxLnKZrtdMjdWxfrsn4vE= -SHA256 (cargo/time-macros-0.2.3.tar.gz) = JesMo0aPwKzBGCh4Z5f275qhVV5KIRpg1kzI5NG+R9Y= +SHA256 (cargo/time-macros-0.2.4.tar.gz) = QmV7Gm9NgXzajnoKziYf4MyUbPOoAxQ5CyLMYa4IB5I= SHA256 (cargo/time-macros-impl-0.1.2.tar.gz) = /TwUGhtDGU8/VqFBEiXfhkbFV4HV8m24JbPZhQfrSC8= -SHA256 (cargo/tinyvec-1.5.1.tar.gz) = LBwdWkK2JFUgwklUnsJnGAvq/8wGFUAayOMYU9S22NI= +SHA256 (cargo/tinyvec-1.6.0.tar.gz) = h8xc6zh1uyDCiQAFpOImpGUSZKXHXtskIbUoYaCgy1A= SHA256 (cargo/tinyvec_macros-0.1.0.tar.gz) = zadNp+GmZPeVux+Kh+xAb7iaAlIs9uUGINAWrdbbv1w= -SHA256 (cargo/tokio-1.16.1.tar.gz) = DCemS2Jd5tMJ6MV3FrqTAh3M8bO1yX7dbT3S0hNa/Ao= +SHA256 (cargo/tokio-1.18.2.tar.gz) = SQO/BCfPaN3dWqapMiB1b4vgw0/PqfXmGR4QPhWjE5U= SHA256 (cargo/tokio-macros-1.7.0.tar.gz) = tVf3L0SMURqXniVk5V105sRDL8lv9PYkG8a97TQmQ7c= SHA256 (cargo/tokio-native-tls-0.3.0.tar.gz) = 99mVZgvSt/jBVoQUwRJgdsE/u3JcQBEtwBILeOubcXs= -SHA256 (cargo/tokio-rustls-0.22.0.tar.gz) = vGhE3nLlffGYAFSzi+Op9HAqukhYvmTdcAGBqKbQ4bY= +SHA256 (cargo/tokio-rustls-0.23.4.tar.gz) = xD7oOQMRPgOYTLnlzr5sBKURYmnpAOPduo8GimKt2lk= SHA256 (cargo/tokio-socks-0.5.1.tar.gz) = URZd+gKdKmWWlBOmzJbzVLhrRkSYcC8XSk76E2CP2MA= SHA256 (cargo/tokio-stream-0.1.8.tar.gz) = UBRUhO//iBi1zNJWaX82hj9Yfags+LQJxTrfHoQHmOM= SHA256 (cargo/tokio-util-0.6.9.tar.gz) = npnhmD5dN2zY60tmYE0umeefW9mIwwVYkdzYyeJgTMA= -SHA256 (cargo/toml-0.5.8.tar.gz) = oxFClwgmcz34JB7zXcBA75jGeasU18PlTYJwmbOs7Ko= +SHA256 (cargo/tokio-util-0.7.1.tar.gz) = Dt/esGdBHbogRNptHLLfeT3TWt14iNc8FuM4He1AF2Q= +SHA256 (cargo/toml-0.5.9.tar.gz) = jYLhp3WGIqRl+M7gd2FMc0hNrFuDbAL/akDV0QEDJNc= SHA256 (cargo/totp-lite-1.0.3.tar.gz) = sYAJ6L50v7LizFmmPQeNlcBChYocoRKKKU4fnOIlFIs= SHA256 (cargo/tower-service-0.3.1.tar.gz) = Ng39HW0w4F/aMqziyMcOnAqdpxMnV3f1pNu4oYk5MMY= -SHA256 (cargo/tracing-0.1.29.tar.gz) = N1pjkjLK8w7fx46NibLUw3VRU5Pnr34W8BzZaRf7IQU= -SHA256 (cargo/tracing-attributes-0.1.18.tar.gz) = 9PSAuPgVEugl8zetUelMHrXTu98rNj3NAeKxmp/+P44= -SHA256 (cargo/tracing-core-0.1.21.tar.gz) = H07WVje4OQdwgUCD0gdW+Hv6LCG/LxELq9xUODUXRuQ= -SHA256 (cargo/tracing-log-0.1.2.tar.gz) = ppI0d6SOQcGVHxmZ74u1owI+tyPOra/nj/tl3DZnYeM= -SHA256 (cargo/tracing-subscriber-0.3.7.tar.gz) = UxLzJf41iOJ3QV9abMofTMrQ8kjEzVpL0zAy1yhqvCI= -SHA256 (cargo/trust-dns-proto-0.20.3.tar.gz) = rQ1/XbQ4GZpuJgnevj9p+AjQdOCiiI7gvMtF/iNNA/Q= -SHA256 (cargo/trust-dns-resolver-0.20.3.tar.gz) = 9q0XtgimS9BzXme94WsGNviqhZH4MaJdGEQ+0Appl3A= +SHA256 (cargo/tracing-0.1.34.tar.gz) = XQ7Ny0Snnw/phE8MTzOjQsvLtRF96AAea6DcI1EyfQk= +SHA256 (cargo/tracing-attributes-0.1.21.tar.gz) = zGuK01Z0mfmKHbenUrB6fIx8fDTDMuwA7/srACeXS3w= +SHA256 (cargo/tracing-core-0.1.26.tar.gz) = 9UyMpxDoGIbUmML9MzG1bJOqJI1J3iIirSdCJHxgBy8= +SHA256 (cargo/tracing-log-0.1.3.tar.gz) = eN2tM9LRCx7X650fUYpWdHE4dul+W7m3NFp5hPu0+SI= +SHA256 (cargo/tracing-subscriber-0.3.11.tar.gz) = S8KPk7r/OAN/ZOb0PTTPoWBfJ6ScNOigTF54sLq/JZY= +SHA256 (cargo/trust-dns-proto-0.20.4.tar.gz) = ypTU6f62oYHGkMQEDXok7zQBjYMTrFBEph0hIiriTjE= +SHA256 (cargo/trust-dns-resolver-0.20.4.tar.gz) = 7K44O6rZmV76o0zo5X0Sw/MF5UWIdHKkkrg49LXPt3o= SHA256 (cargo/try-lock-0.2.3.tar.gz) = WVR7znHZw4uD2cDpK2BmxCUzcfFQBd7www2WV/UMdkI= SHA256 (cargo/typenum-1.15.0.tar.gz) = 3PgaxZ7cF8yGl/8xHo9e8tmfy9mBezTOxm+QtsPf2Yc= -SHA256 (cargo/u2f-0.2.0.tar.gz) = 4vKFOSNmGQxNRoI0WPRUOsDzUXR1nHjoDFuqOeH3qk8= SHA256 (cargo/ubyte-0.10.1.tar.gz) = QnVruecIhV3i+KmBlWQ9/zGpfwSF2Q2EZ7Odwkvp6P4= SHA256 (cargo/ucd-trie-0.1.3.tar.gz) = Vt7hhTCbUNHxG/7e8P5tA2hC4/t3QTq+8p+PjRxdTBw= SHA256 (cargo/uncased-0.9.6.tar.gz) = W67tcyfiUFSIm5vU+XXzLl9MXUNAQtWats1BQsCnbtA= -SHA256 (cargo/unicode-bidi-0.3.7.tar.gz) = GgFARmPj20Nu0nRtn+/vZA2GjtrjzOuBw7jVcy/aZ48= +SHA256 (cargo/unicode-bidi-0.3.8.tar.gz) = CZtxKDAdKF953dVbmoPV5rnpfJLg6g2uvucmPpMt6ZI= SHA256 (cargo/unicode-normalization-0.1.19.tar.gz) = 1UWQkylBqekmbwgy3u2E6+G/LkyeSjVU05PRj16FS/k= -SHA256 (cargo/unicode-segmentation-1.8.0.tar.gz) = iJWEmpSeeEXga9bcGqUXMaEDxCcHAQpbWRwAOPtzOFs= -SHA256 (cargo/unicode-xid-0.2.2.tar.gz) = jMuC1h+ApmPv4feHpRsWtaUeMxTWrDZbCGOfUjh7M/M= +SHA256 (cargo/unicode-xid-0.2.3.tar.gz) = lX5R82RpEFRkYuZ9X3WZueT7is3TBLCHpklHMPnuvwQ= +SHA256 (cargo/universal-hash-0.4.1.tar.gz) = nyFOj2l+klAB5m7CxuN6Tvk/D3jC7teBQ5ThDGICWwU= SHA256 (cargo/untrusted-0.7.1.tar.gz) = oVbGhMkep9YmJlCbzjy04dntXE2Xj3tDUmWPlqTCa0o= SHA256 (cargo/url-1.7.2.tar.gz) = 3U58DVMSZjaVGaSqTzmddIvTcEOwC94eT/H2ChILNVo= SHA256 (cargo/url-2.2.2.tar.gz) = pQfDg7LTO1/DXRhh535rOD0Viy2l4U/lG4Pf7fb9V4w= -SHA256 (cargo/utf-8-0.7.6.tar.gz) = CcyO5y0qm+zy8v6+AgW77Y/GYVt8tCmtBi3Ht93QNqk= -SHA256 (cargo/uuid-0.8.2.tar.gz) = vFz5jYGGJEQUyEgBfw4mdrP8tGgH9maKl9/mc1mjxLc= +SHA256 (cargo/uuid-1.0.0.tar.gz) = jPzTGUVsTW6hAIftQjRzJn4aBx87wKqJ+A1gmXhDxvA= +SHA256 (cargo/valuable-0.1.0.tar.gz) = gwt+XU2QA0AylA5Kzg2amgV+ekXNlObAB4MuOe24L20= SHA256 (cargo/vcpkg-0.2.15.tar.gz) = rM1Opi97t6gv4jBm+wlX1I72d/buuCFfNy9S5IuzJCY= SHA256 (cargo/version_check-0.9.4.tar.gz) = SYdLUWe2XXGTuKuhVn9cfZPQAcr8NGAM7gA+2nh+SD8= SHA256 (cargo/walkdir-2.3.2.tar.gz) = gIzyc1zUtoZhE/ZIt5HGrcVxRTe8Ii2TR7sgM4b/2lY= SHA256 (cargo/want-0.3.0.tar.gz) = HOipaMsc0RDRNv+LgZpVbW+22Rk2PGFTT2hgx+sXK6A= -SHA256 (cargo/wasi-0.10.0+wasi-snapshot-preview1.tar.gz) = GhQ1l8p8d5Pv95Te81LUF5KpPEgesQQkI/9/9yuiwx8= +SHA256 (cargo/wasi-0.10.2+wasi-snapshot-preview1.tar.gz) = /W+9mnmCndGtDMIGJ78e1gZ1an937f97ZrcGT5yzJ8Y= +SHA256 (cargo/wasi-0.11.0+wasi-snapshot-preview1.tar.gz) = nI2H5ytko7TbKNEc4pI3wkYYj09RBX1lp+q2O3mH5CM= SHA256 (cargo/wasi-0.9.0+wasi-snapshot-preview1.tar.gz) = zM3fMlVP7MastYX4KjKnLii0j4xMGIPd/u6qlvfY5Rk= -SHA256 (cargo/wasm-bindgen-0.2.79.tar.gz) = JfGvdCPYWIo9hAaBEi5y5qJN28s/DsOFysDRLSQlbAY= -SHA256 (cargo/wasm-bindgen-backend-0.2.79.tar.gz) = iyHA3wMPWhd/PLoi6bxDImlexD5yV9hlMCkAKQvN7co= -SHA256 (cargo/wasm-bindgen-futures-0.4.29.tar.gz) = LrbsJwoxsdPH4ma5mXORCavOi2yH5LMfz814i2Umc5U= -SHA256 (cargo/wasm-bindgen-macro-0.2.79.tar.gz) = L0ID1p5ApS7lI7JSmnc9X/wdwAcYAch7PScLRxuA7QE= -SHA256 (cargo/wasm-bindgen-macro-support-0.2.79.tar.gz) = v6ijDUYgjbIEhUytu11Lr1/PgHG6W/SBkMPlmTeWLrw= -SHA256 (cargo/wasm-bindgen-shared-0.2.79.tar.gz) = PZWNA1xEOOKMcOQyGikRMC8QE1znipx4NMDKtBI9BqI= -SHA256 (cargo/web-sys-0.3.56.tar.gz) = wGCzGfKd0lck8JoroUGPFC9Tmyvpn79NLVqPczCvuOs= +SHA256 (cargo/wasm-bindgen-0.2.80.tar.gz) = JzcBl8kHxV4/Gp++JvROk3/mRRNoMk4AnLo54TncCK0= +SHA256 (cargo/wasm-bindgen-backend-0.2.80.tar.gz) = U+BBhb+jp3knPaUy9QJeMzmECVc/NImFr5ocvzd00/Q= +SHA256 (cargo/wasm-bindgen-futures-0.4.30.tar.gz) = b3Qd5Et14Uw134hq/18etzqhFPpdTQDc03teASWb87I= +SHA256 (cargo/wasm-bindgen-macro-0.2.80.tar.gz) = F8rn/3hNfoOi/nYRz+dm7PA0ERtJ3rhQo9x2mcCCUfU= +SHA256 (cargo/wasm-bindgen-macro-support-0.2.80.tar.gz) = mewNx6R1b//CMaqxufL1eNI805E5CrJ/lSrgybPs4gs= +SHA256 (cargo/wasm-bindgen-shared-0.2.80.tar.gz) = 1VS39TDe5ZZNmpRo2Vwfi4rK5PKCgH59J9SwMJmkZ0Q= +SHA256 (cargo/web-sys-0.3.57.tar.gz) = exfnQWYscMi9JKxcWxjeMUosJsMr+DRu4eb1PekZwoM= SHA256 (cargo/webauthn-rs-0.3.2.tar.gz) = kLJm7MtLMllYdvXHPqRDsFFtoLHfcsoHvAjtm6f5bsE= -SHA256 (cargo/webpki-0.21.4.tar.gz) = uOOMBggmLEbUpWIC66vesJTO9+VgynoibGvwVRiKpOo= +SHA256 (cargo/webpki-0.22.0.tar.gz) = 8JXXgZLiCBgwgcwHvFUV71UhY5evSLhz5e3NcmN/ob0= SHA256 (cargo/widestring-0.4.3.tar.gz) = wWiUAUTdIf2ARph8FqRqM9X8hO7Cnvnc3cKsnjFSa3w= SHA256 (cargo/winapi-0.2.8.tar.gz) = Fn3J1pSam4V/NFEnXpEcP0QlWELB96dvM8VRA6kJCHo= SHA256 (cargo/winapi-0.3.9.tar.gz) = XIOaZ0/NepiVLlkyQupACr6TmSdGdh44ZBQF0osA9Bk= @@ -367,65 +384,82 @@ SHA256 (cargo/winapi-build-0.1.1.tar.gz) = LTFe7js0rKR5ey2msT7Ygmbm1hJWKgxGOQr4K SHA256 (cargo/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = rDuHxjYgQm3ZuZHlzgMp7/VFvMu7NPO+Cf9vtqtRt7Y= SHA256 (cargo/winapi-util-0.1.5.tar.gz) = cOxs6FuxWBUcrl5ch/lajpfSwMSwASI/M6M0485d4Xg= SHA256 (cargo/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = cS4ieEHQV8HuHNL7Ivp+WlRhro5I+iynnsQs/BkxGD8= +SHA256 (cargo/windows-sys-0.36.1.tar.gz) = 6gQVWhaln56reG/hKkpFDnXNsXX54NgNoeF9sJ9VuNI= +SHA256 (cargo/windows_aarch64_msvc-0.36.1.tar.gz) = m7jD/Tmt4tZ+mHSsTz2yHw1xC+4A/nyrFpSewYTuqkc= +SHA256 (cargo/windows_i686_gnu-0.36.1.tar.gz) = GA5szwHa9MQmuEbfxm2x/FGPB0uqeTqn2bmq7/rWo7Y= +SHA256 (cargo/windows_i686_msvc-0.36.1.tar.gz) = 4ueRcUiygS0e6vrrIql+SBPfpgo/j3jr4gS8yI8S8CQ= +SHA256 (cargo/windows_x86_64_gnu-0.36.1.tar.gz) = Tc0XG4d2xBuXUh5doSei2GrSgBFIB9Cyqx5GK8dk2eE= +SHA256 (cargo/windows_x86_64_msvc-0.36.1.tar.gz) = yBHKSoyFPvQgq9hZK6U927rJBBD6tpA7PnmXKmMfdoA= +SHA256 (cargo/winreg-0.10.1.tar.gz) = gND04nLIXe8TlHY4CxL5rGCSZondLgHUkjIi9AWAhp0= SHA256 (cargo/winreg-0.6.2.tar.gz) = spht61gcT+EbYhmYpeUzYe/mtIoVEXjQzZ7v+k3GrMk= -SHA256 (cargo/winreg-0.7.0.tar.gz) = ASDbguih4Ln7M0WlOcR4dnwASNhChgmU2WET1bZnvWk= SHA256 (cargo/ws2_32-sys-0.2.1.tar.gz) = 1Zzv69DIkvot1t5YHpNzAdhVLLREic3/A1xhh8tj+l4= -SHA256 (cargo/xml5ever-0.16.2.tar.gz) = kjQWOBj9jiQY/N4zBlXnV5ANQjas2Mxw/vNF75H22GU= -SHA256 (cargo/yansi-0.5.0.tar.gz) = n8efSh45hX/ADD9mLL8mUcdx8A6cFf4qvDQYBr1GvXE= -SHA256 (cargo/yubico-0.10.0.tar.gz) = TTw/WEc5BZ9HnKTeEUy/4DIxV1Krs75gr7MNtAqAIWk= -SHA256 (vaultwarden-1.24.0.tar.gz) = h80ICFcXZo7sLGAuC/cJw0K9zjnQP7N7aE8yduryXFg= -SHA256 (vaultwarden-1.24.0.vendor.tgz) = vOyDecYO22PdHy2CX7G4FnLLwWt5/F9uRuTbb8jD/tA= +SHA256 (cargo/yansi-0.5.1.tar.gz) = CQQc2Qz4X3+LLfYMZG+FO39TXOaPhSROtnMc+J+kmOw= +SHA256 (cargo/yubico-0.11.0.tar.gz) = Fz910sQBBCmi10rjoRSmmTDFnisaTJexx10lmklg1fs= +SHA256 (vaultwarden-1.25.0.tar.gz) = U5H2Czr6m2bK0DzBmQPMxa0inL/eFCBBx/kQ1g/S0s8= +SHA256 (vaultwarden-1.25.0.vendor.tgz) = +Nu54VlQ5LSggRSccwS0Z3Aj7t55GoUund4DYjBSSLk= SIZE (cargo/addr2line-0.17.0.tar.gz) = 32260 SIZE (cargo/adler-1.0.2.tar.gz) = 12778 +SIZE (cargo/aead-0.4.3.tar.gz) = 14717 +SIZE (cargo/aes-0.7.5.tar.gz) = 128544 +SIZE (cargo/aes-gcm-0.9.4.tar.gz) = 148477 SIZE (cargo/aho-corasick-0.7.18.tar.gz) = 112923 SIZE (cargo/alloc-no-stdlib-2.0.3.tar.gz) = 10199 SIZE (cargo/alloc-stdlib-0.2.1.tar.gz) = 6304 SIZE (cargo/ansi_term-0.12.1.tar.gz) = 24838 -SIZE (cargo/async-compression-0.3.12.tar.gz) = 57646 -SIZE (cargo/async-stream-0.3.2.tar.gz) = 11869 -SIZE (cargo/async-stream-impl-0.3.2.tar.gz) = 4100 -SIZE (cargo/async-trait-0.1.52.tar.gz) = 25913 +SIZE (cargo/async-compression-0.3.13.tar.gz) = 57733 +SIZE (cargo/async-stream-0.3.3.tar.gz) = 12142 +SIZE (cargo/async-stream-impl-0.3.3.tar.gz) = 4072 +SIZE (cargo/async-trait-0.1.53.tar.gz) = 26210 +SIZE (cargo/async_once-0.2.6.tar.gz) = 4678 SIZE (cargo/atomic-0.5.1.tar.gz) = 12817 SIZE (cargo/atty-0.2.14.tar.gz) = 5470 -SIZE (cargo/autocfg-1.0.1.tar.gz) = 12908 -SIZE (cargo/backtrace-0.3.64.tar.gz) = 74311 -SIZE (cargo/base-x-0.2.8.tar.gz) = 10614 -SIZE (cargo/base64-0.11.0.tar.gz) = 48362 -SIZE (cargo/base64-0.12.3.tar.gz) = 57545 +SIZE (cargo/autocfg-1.1.0.tar.gz) = 13272 +SIZE (cargo/backtrace-0.3.65.tar.gz) = 74129 +SIZE (cargo/base-x-0.2.10.tar.gz) = 10758 SIZE (cargo/base64-0.13.0.tar.gz) = 62070 SIZE (cargo/binascii-0.1.4.tar.gz) = 6076 SIZE (cargo/bitflags-1.3.2.tar.gz) = 23021 +SIZE (cargo/block-buffer-0.10.2.tar.gz) = 10258 SIZE (cargo/block-buffer-0.7.3.tar.gz) = 7179 SIZE (cargo/block-buffer-0.9.0.tar.gz) = 7108 SIZE (cargo/block-padding-0.1.5.tar.gz) = 7342 -SIZE (cargo/brotli-3.3.3.tar.gz) = 1369025 +SIZE (cargo/brotli-3.3.4.tar.gz) = 1369026 SIZE (cargo/brotli-decompressor-2.3.2.tar.gz) = 191197 SIZE (cargo/bumpalo-3.9.1.tar.gz) = 77507 SIZE (cargo/byte-tools-0.3.1.tar.gz) = 5526 SIZE (cargo/byteorder-1.4.3.tar.gz) = 22512 SIZE (cargo/bytes-0.4.12.tar.gz) = 46361 SIZE (cargo/bytes-1.1.0.tar.gz) = 49640 -SIZE (cargo/cc-1.0.72.tar.gz) = 57495 +SIZE (cargo/cached-0.34.0.tar.gz) = 48922 +SIZE (cargo/cached_proc_macro-0.12.0.tar.gz) = 8218 +SIZE (cargo/cached_proc_macro_types-0.1.0.tar.gz) = 1141 +SIZE (cargo/cc-1.0.73.tar.gz) = 57880 SIZE (cargo/cfg-if-0.1.10.tar.gz) = 7933 SIZE (cargo/cfg-if-1.0.0.tar.gz) = 7934 SIZE (cargo/chashmap-2.2.2.tar.gz) = 14824 SIZE (cargo/chrono-0.4.19.tar.gz) = 155663 SIZE (cargo/chrono-tz-0.6.1.tar.gz) = 585749 SIZE (cargo/chrono-tz-build-0.0.2.tar.gz) = 5840 +SIZE (cargo/cipher-0.3.0.tar.gz) = 12756 SIZE (cargo/const_fn-0.4.9.tar.gz) = 12624 SIZE (cargo/cookie-0.15.1.tar.gz) = 33649 SIZE (cargo/cookie-0.16.0.tar.gz) = 33950 SIZE (cargo/cookie_store-0.15.1.tar.gz) = 28265 -SIZE (cargo/core-foundation-0.9.2.tar.gz) = 26857 +SIZE (cargo/cookie_store-0.16.0.tar.gz) = 28462 +SIZE (cargo/core-foundation-0.9.3.tar.gz) = 27059 SIZE (cargo/core-foundation-sys-0.8.3.tar.gz) = 17519 -SIZE (cargo/cpufeatures-0.2.1.tar.gz) = 10500 -SIZE (cargo/crc32fast-1.3.1.tar.gz) = 38655 -SIZE (cargo/cron-0.9.0.tar.gz) = 18383 -SIZE (cargo/crossbeam-utils-0.8.6.tar.gz) = 38841 -SIZE (cargo/crypto-mac-0.10.1.tar.gz) = 9531 +SIZE (cargo/cpufeatures-0.2.2.tar.gz) = 10655 +SIZE (cargo/crc32fast-1.3.2.tar.gz) = 38661 +SIZE (cargo/cron-0.11.0.tar.gz) = 18603 +SIZE (cargo/crossbeam-utils-0.8.8.tar.gz) = 39681 +SIZE (cargo/crypto-common-0.1.3.tar.gz) = 8556 SIZE (cargo/crypto-mac-0.11.1.tar.gz) = 9551 -SIZE (cargo/ctrlc-3.2.1.tar.gz) = 12893 -SIZE (cargo/dashmap-4.0.2.tar.gz) = 21066 +SIZE (cargo/ctr-0.8.0.tar.gz) = 17740 +SIZE (cargo/ctrlc-3.2.2.tar.gz) = 12699 +SIZE (cargo/darling-0.13.4.tar.gz) = 20895 +SIZE (cargo/darling_core-0.13.4.tar.gz) = 52937 +SIZE (cargo/darling_macro-0.13.4.tar.gz) = 1910 +SIZE (cargo/dashmap-5.3.3.tar.gz) = 21183 SIZE (cargo/data-encoding-2.3.2.tar.gz) = 19159 SIZE (cargo/data-url-0.1.1.tar.gz) = 20039 SIZE (cargo/devise-0.3.1.tar.gz) = 902 @@ -434,19 +468,23 @@ SIZE (cargo/devise_core-0.3.1.tar.gz) = 12907 SIZE (cargo/diesel-1.4.8.tar.gz) = 191351 SIZE (cargo/diesel_derives-1.4.1.tar.gz) = 17646 SIZE (cargo/diesel_migrations-1.4.0.tar.gz) = 3063 +SIZE (cargo/digest-0.10.3.tar.gz) = 18990 SIZE (cargo/digest-0.8.1.tar.gz) = 9449 SIZE (cargo/digest-0.9.0.tar.gz) = 13247 +SIZE (cargo/dirs-4.0.0.tar.gz) = 12503 +SIZE (cargo/dirs-sys-0.3.7.tar.gz) = 10597 SIZE (cargo/discard-1.0.4.tar.gz) = 4700 -SIZE (cargo/dotenv-0.15.0.tar.gz) = 11668 +SIZE (cargo/dotenvy-0.15.1.tar.gz) = 11553 SIZE (cargo/either-1.6.1.tar.gz) = 13641 -SIZE (cargo/encoding_rs-0.8.30.tar.gz) = 1370089 -SIZE (cargo/enum-as-inner-0.3.3.tar.gz) = 11450 -SIZE (cargo/error-chain-0.11.0.tar.gz) = 27207 +SIZE (cargo/email-encoding-0.1.0.tar.gz) = 10887 +SIZE (cargo/encoding_rs-0.8.31.tar.gz) = 1370113 +SIZE (cargo/enum-as-inner-0.3.4.tar.gz) = 11522 +SIZE (cargo/error-chain-0.12.4.tar.gz) = 29274 SIZE (cargo/fake-simd-0.1.2.tar.gz) = 5398 SIZE (cargo/fastrand-1.7.0.tar.gz) = 11265 -SIZE (cargo/fern-0.6.0.tar.gz) = 299856 +SIZE (cargo/fern-0.6.1.tar.gz) = 300402 SIZE (cargo/figment-0.10.6.tar.gz) = 60523 -SIZE (cargo/flate2-1.0.22.tar.gz) = 76026 +SIZE (cargo/flate2-1.0.23.tar.gz) = 70440 SIZE (cargo/fnv-1.0.7.tar.gz) = 11266 SIZE (cargo/foreign-types-0.3.2.tar.gz) = 7504 SIZE (cargo/foreign-types-shared-0.1.1.tar.gz) = 5672 @@ -454,121 +492,121 @@ SIZE (cargo/form_urlencoded-1.0.1.tar.gz) = 8773 SIZE (cargo/fuchsia-cprng-0.1.1.tar.gz) = 2950 SIZE (cargo/fuchsia-zircon-0.3.3.tar.gz) = 22565 SIZE (cargo/fuchsia-zircon-sys-0.3.3.tar.gz) = 7191 -SIZE (cargo/futf-0.1.4.tar.gz) = 11341 -SIZE (cargo/futures-0.3.19.tar.gz) = 47605 -SIZE (cargo/futures-channel-0.3.19.tar.gz) = 31940 -SIZE (cargo/futures-core-0.3.19.tar.gz) = 14666 -SIZE (cargo/futures-executor-0.3.19.tar.gz) = 17286 -SIZE (cargo/futures-io-0.3.19.tar.gz) = 8901 -SIZE (cargo/futures-macro-0.3.19.tar.gz) = 11253 -SIZE (cargo/futures-sink-0.3.19.tar.gz) = 7849 -SIZE (cargo/futures-task-0.3.19.tar.gz) = 11894 +SIZE (cargo/futures-0.3.21.tar.gz) = 49935 +SIZE (cargo/futures-channel-0.3.21.tar.gz) = 31961 +SIZE (cargo/futures-core-0.3.21.tar.gz) = 14601 +SIZE (cargo/futures-executor-0.3.21.tar.gz) = 17306 +SIZE (cargo/futures-io-0.3.21.tar.gz) = 8902 +SIZE (cargo/futures-macro-0.3.21.tar.gz) = 11250 +SIZE (cargo/futures-sink-0.3.21.tar.gz) = 7843 +SIZE (cargo/futures-task-0.3.21.tar.gz) = 11815 SIZE (cargo/futures-timer-3.0.2.tar.gz) = 19879 -SIZE (cargo/futures-util-0.3.19.tar.gz) = 149240 +SIZE (cargo/futures-util-0.3.21.tar.gz) = 153768 SIZE (cargo/generator-0.7.0.tar.gz) = 28814 SIZE (cargo/generic-array-0.12.4.tar.gz) = 18212 SIZE (cargo/generic-array-0.14.5.tar.gz) = 28915 SIZE (cargo/getrandom-0.1.16.tar.gz) = 25077 -SIZE (cargo/getrandom-0.2.4.tar.gz) = 26800 +SIZE (cargo/getrandom-0.2.6.tar.gz) = 28043 +SIZE (cargo/ghash-0.4.4.tar.gz) = 9005 SIZE (cargo/gimli-0.26.1.tar.gz) = 716168 SIZE (cargo/glob-0.3.0.tar.gz) = 18724 -SIZE (cargo/governor-0.4.1.tar.gz) = 132786 -SIZE (cargo/h2-0.3.11.tar.gz) = 161592 +SIZE (cargo/governor-0.4.2.tar.gz) = 128054 +SIZE (cargo/h2-0.3.13.tar.gz) = 161962 SIZE (cargo/half-1.8.2.tar.gz) = 41874 -SIZE (cargo/handlebars-4.2.1.tar.gz) = 91920 +SIZE (cargo/handlebars-4.2.2.tar.gz) = 89122 SIZE (cargo/hashbrown-0.11.2.tar.gz) = 85713 -SIZE (cargo/heck-0.3.3.tar.gz) = 10260 +SIZE (cargo/hashbrown-0.12.1.tar.gz) = 90855 +SIZE (cargo/heck-0.4.0.tar.gz) = 11161 SIZE (cargo/hermit-abi-0.1.19.tar.gz) = 9979 -SIZE (cargo/hmac-0.10.1.tar.gz) = 11120 +SIZE (cargo/hkdf-0.12.3.tar.gz) = 170910 SIZE (cargo/hmac-0.11.0.tar.gz) = 11385 +SIZE (cargo/hmac-0.12.1.tar.gz) = 42657 SIZE (cargo/hostname-0.3.1.tar.gz) = 9272 -SIZE (cargo/html5ever-0.25.1.tar.gz) = 73165 -SIZE (cargo/http-0.2.6.tar.gz) = 106384 +SIZE (cargo/html5gum-0.4.0.tar.gz) = 49495 +SIZE (cargo/http-0.2.7.tar.gz) = 104219 SIZE (cargo/http-body-0.4.4.tar.gz) = 7836 -SIZE (cargo/httparse-1.5.1.tar.gz) = 26758 +SIZE (cargo/httparse-1.7.1.tar.gz) = 29379 SIZE (cargo/httpdate-1.0.2.tar.gz) = 10673 -SIZE (cargo/hyper-0.14.16.tar.gz) = 177577 +SIZE (cargo/hyper-0.14.18.tar.gz) = 179660 SIZE (cargo/hyper-tls-0.5.0.tar.gz) = 13257 +SIZE (cargo/ident_case-1.0.1.tar.gz) = 3492 SIZE (cargo/idna-0.1.5.tar.gz) = 258735 SIZE (cargo/idna-0.2.3.tar.gz) = 271023 -SIZE (cargo/indexmap-1.8.0.tar.gz) = 52583 +SIZE (cargo/indexmap-1.8.1.tar.gz) = 53220 SIZE (cargo/inlinable_string-0.1.15.tar.gz) = 19290 SIZE (cargo/instant-0.1.12.tar.gz) = 6128 SIZE (cargo/iovec-0.1.4.tar.gz) = 8720 SIZE (cargo/ipconfig-0.2.2.tar.gz) = 23017 -SIZE (cargo/ipnet-2.3.1.tar.gz) = 24932 -SIZE (cargo/itoa-0.4.8.tar.gz) = 11926 +SIZE (cargo/ipnet-2.5.0.tar.gz) = 25808 SIZE (cargo/itoa-1.0.1.tar.gz) = 11059 -SIZE (cargo/js-sys-0.3.56.tar.gz) = 70520 -SIZE (cargo/jsonwebtoken-7.2.0.tar.gz) = 20176 +SIZE (cargo/jetscii-0.5.2.tar.gz) = 18697 +SIZE (cargo/js-sys-0.3.57.tar.gz) = 78605 +SIZE (cargo/jsonwebtoken-8.1.0.tar.gz) = 41270 SIZE (cargo/kernel32-sys-0.2.2.tar.gz) = 24537 SIZE (cargo/lazy_static-1.4.0.tar.gz) = 10443 SIZE (cargo/lazycell-1.3.0.tar.gz) = 12502 -SIZE (cargo/lettre-0.10.0-rc.4.tar.gz) = 112201 -SIZE (cargo/libc-0.2.116.tar.gz) = 566648 +SIZE (cargo/lettre-0.10.0-rc.6.tar.gz) = 127312 +SIZE (cargo/libc-0.2.125.tar.gz) = 589236 +SIZE (cargo/libmimalloc-sys-0.1.25.tar.gz) = 1131254 SIZE (cargo/libsqlite3-sys-0.22.2.tar.gz) = 2345859 SIZE (cargo/linked-hash-map-0.5.4.tar.gz) = 16166 -SIZE (cargo/lock_api-0.4.6.tar.gz) = 25215 -SIZE (cargo/log-0.4.14.tar.gz) = 34582 +SIZE (cargo/lock_api-0.4.7.tar.gz) = 25371 +SIZE (cargo/log-0.4.17.tar.gz) = 38028 SIZE (cargo/loom-0.5.4.tar.gz) = 68124 SIZE (cargo/lru-cache-0.1.2.tar.gz) = 9307 -SIZE (cargo/mac-0.1.1.tar.gz) = 4838 SIZE (cargo/mach-0.3.2.tar.gz) = 19611 SIZE (cargo/maplit-1.0.2.tar.gz) = 8871 -SIZE (cargo/markup5ever-0.10.1.tar.gz) = 34668 -SIZE (cargo/markup5ever_rcdom-0.1.0.tar.gz) = 25165 SIZE (cargo/match_cfg-0.1.0.tar.gz) = 7153 SIZE (cargo/matchers-0.1.0.tar.gz) = 6948 SIZE (cargo/matches-0.1.9.tar.gz) = 2246 SIZE (cargo/maybe-uninit-2.0.0.tar.gz) = 11809 -SIZE (cargo/memchr-2.4.1.tar.gz) = 64977 -SIZE (cargo/memoffset-0.6.5.tar.gz) = 7686 +SIZE (cargo/memchr-2.5.0.tar.gz) = 65812 SIZE (cargo/migrations_internals-1.4.1.tar.gz) = 6914 SIZE (cargo/migrations_macros-1.4.2.tar.gz) = 3701 +SIZE (cargo/mimalloc-0.1.29.tar.gz) = 4988 SIZE (cargo/mime-0.3.16.tar.gz) = 15206 SIZE (cargo/minimal-lexical-0.2.1.tar.gz) = 94841 -SIZE (cargo/miniz_oxide-0.4.4.tar.gz) = 49938 +SIZE (cargo/miniz_oxide-0.5.1.tar.gz) = 52418 SIZE (cargo/mio-0.6.23.tar.gz) = 103554 -SIZE (cargo/mio-0.7.14.tar.gz) = 87429 +SIZE (cargo/mio-0.8.3.tar.gz) = 92506 SIZE (cargo/mio-extras-2.0.6.tar.gz) = 16292 SIZE (cargo/miow-0.2.2.tar.gz) = 22044 -SIZE (cargo/miow-0.3.7.tar.gz) = 24563 SIZE (cargo/multer-2.0.2.tar.gz) = 23220 SIZE (cargo/mysqlclient-sys-0.2.5.tar.gz) = 27493 -SIZE (cargo/native-tls-0.2.8.tar.gz) = 24956 +SIZE (cargo/native-tls-0.2.10.tar.gz) = 28590 SIZE (cargo/net2-0.2.37.tar.gz) = 21311 -SIZE (cargo/new_debug_unreachable-1.0.4.tar.gz) = 2561 -SIZE (cargo/nix-0.23.1.tar.gz) = 240531 +SIZE (cargo/nix-0.24.1.tar.gz) = 263506 SIZE (cargo/no-std-compat-0.4.1.tar.gz) = 7600 -SIZE (cargo/nom-4.1.1.tar.gz) = 113255 -SIZE (cargo/nom-7.1.0.tar.gz) = 115647 +SIZE (cargo/nom-7.1.1.tar.gz) = 115818 SIZE (cargo/nonzero_ext-0.3.0.tar.gz) = 15855 -SIZE (cargo/ntapi-0.3.6.tar.gz) = 127221 -SIZE (cargo/num-bigint-0.2.6.tar.gz) = 87275 +SIZE (cargo/num-bigint-0.4.3.tar.gz) = 97799 SIZE (cargo/num-derive-0.3.3.tar.gz) = 14545 -SIZE (cargo/num-integer-0.1.44.tar.gz) = 22216 -SIZE (cargo/num-traits-0.2.14.tar.gz) = 45476 +SIZE (cargo/num-integer-0.1.45.tar.gz) = 22529 +SIZE (cargo/num-traits-0.2.15.tar.gz) = 49262 SIZE (cargo/num_cpus-1.13.1.tar.gz) = 14752 -SIZE (cargo/num_threads-0.1.3.tar.gz) = 6374 -SIZE (cargo/object-0.27.1.tar.gz) = 228030 -SIZE (cargo/once_cell-1.9.0.tar.gz) = 30702 +SIZE (cargo/num_threads-0.1.6.tar.gz) = 7334 +SIZE (cargo/object-0.28.4.tar.gz) = 237248 +SIZE (cargo/once_cell-1.10.0.tar.gz) = 30414 SIZE (cargo/opaque-debug-0.2.3.tar.gz) = 5643 SIZE (cargo/opaque-debug-0.3.0.tar.gz) = 5767 -SIZE (cargo/openssl-0.10.38.tar.gz) = 207436 +SIZE (cargo/openssl-0.10.40.tar.gz) = 217120 +SIZE (cargo/openssl-macros-0.1.0.tar.gz) = 5566 SIZE (cargo/openssl-probe-0.1.5.tar.gz) = 7227 -SIZE (cargo/openssl-src-111.17.0+1.1.1m.tar.gz) = 5097946 -SIZE (cargo/openssl-sys-0.9.72.tar.gz) = 56510 +SIZE (cargo/openssl-src-111.18.0+1.1.1n.tar.gz) = 5100899 +SIZE (cargo/openssl-sys-0.9.73.tar.gz) = 59581 SIZE (cargo/owning_ref-0.3.3.tar.gz) = 11710 SIZE (cargo/parity-ws-0.11.1.tar.gz) = 68268 SIZE (cargo/parking_lot-0.11.2.tar.gz) = 39869 +SIZE (cargo/parking_lot-0.12.0.tar.gz) = 39761 SIZE (cargo/parking_lot-0.4.8.tar.gz) = 33640 SIZE (cargo/parking_lot_core-0.2.14.tar.gz) = 22140 SIZE (cargo/parking_lot_core-0.8.5.tar.gz) = 32466 +SIZE (cargo/parking_lot_core-0.9.3.tar.gz) = 32256 SIZE (cargo/parse-zoneinfo-0.3.0.tar.gz) = 76590 -SIZE (cargo/paste-1.0.6.tar.gz) = 17808 +SIZE (cargo/paste-1.0.7.tar.gz) = 18285 SIZE (cargo/pear-0.2.3.tar.gz) = 19110 SIZE (cargo/pear_codegen-0.2.3.tar.gz) = 7185 -SIZE (cargo/pem-0.8.3.tar.gz) = 9395 +SIZE (cargo/pem-1.0.2.tar.gz) = 10305 SIZE (cargo/percent-encoding-1.0.1.tar.gz) = 10057 SIZE (cargo/percent-encoding-2.1.0.tar.gz) = 9748 SIZE (cargo/pest-2.1.3.tar.gz) = 77986 @@ -576,34 +614,31 @@ SIZE (cargo/pest_derive-2.1.0.tar.gz) = 14049 SIZE (cargo/pest_generator-2.1.3.tar.gz) = 14227 SIZE (cargo/pest_meta-2.1.3.tar.gz) = 27818 SIZE (cargo/phf-0.10.1.tar.gz) = 5406 -SIZE (cargo/phf-0.8.0.tar.gz) = 3902 SIZE (cargo/phf_codegen-0.10.0.tar.gz) = 3402 -SIZE (cargo/phf_codegen-0.8.0.tar.gz) = 3192 SIZE (cargo/phf_generator-0.10.0.tar.gz) = 7525 -SIZE (cargo/phf_generator-0.8.0.tar.gz) = 7604 SIZE (cargo/phf_shared-0.10.0.tar.gz) = 4095 -SIZE (cargo/phf_shared-0.8.0.tar.gz) = 2860 SIZE (cargo/pico-args-0.4.2.tar.gz) = 11565 -SIZE (cargo/pin-project-lite-0.2.8.tar.gz) = 27847 +SIZE (cargo/pin-project-lite-0.2.9.tar.gz) = 27713 SIZE (cargo/pin-utils-0.1.0.tar.gz) = 7580 -SIZE (cargo/pkg-config-0.3.24.tar.gz) = 16489 +SIZE (cargo/pkg-config-0.3.25.tar.gz) = 16838 +SIZE (cargo/polyval-0.5.3.tar.gz) = 17368 SIZE (cargo/ppv-lite86-0.2.16.tar.gz) = 22245 SIZE (cargo/pq-sys-0.4.6.tar.gz) = 13642 -SIZE (cargo/precomputed-hash-0.1.1.tar.gz) = 1640 SIZE (cargo/proc-macro-hack-0.5.19.tar.gz) = 15556 -SIZE (cargo/proc-macro2-1.0.36.tar.gz) = 41411 +SIZE (cargo/proc-macro2-1.0.38.tar.gz) = 41687 SIZE (cargo/proc-macro2-diagnostics-0.9.1.tar.gz) = 12305 SIZE (cargo/psl-types-2.0.10.tar.gz) = 7929 SIZE (cargo/publicsuffix-2.1.1.tar.gz) = 89303 SIZE (cargo/quanta-0.9.3.tar.gz) = 23749 SIZE (cargo/quick-error-1.2.3.tar.gz) = 15066 SIZE (cargo/quick-error-2.0.1.tar.gz) = 14265 -SIZE (cargo/quote-1.0.15.tar.gz) = 27281 +SIZE (cargo/quickcheck-1.0.3.tar.gz) = 28069 +SIZE (cargo/quote-1.0.18.tar.gz) = 28911 SIZE (cargo/quoted_printable-0.4.5.tar.gz) = 6237 SIZE (cargo/r2d2-0.8.9.tar.gz) = 17711 SIZE (cargo/rand-0.4.6.tar.gz) = 76401 SIZE (cargo/rand-0.7.3.tar.gz) = 112246 -SIZE (cargo/rand-0.8.4.tar.gz) = 87406 +SIZE (cargo/rand-0.8.5.tar.gz) = 87113 SIZE (cargo/rand_chacha-0.2.2.tar.gz) = 13267 SIZE (cargo/rand_chacha-0.3.1.tar.gz) = 15251 SIZE (cargo/rand_core-0.3.1.tar.gz) = 15483 @@ -611,25 +646,28 @@ SIZE (cargo/rand_core-0.4.2.tar.gz) = 20243 SIZE (cargo/rand_core-0.5.1.tar.gz) = 21116 SIZE (cargo/rand_core-0.6.3.tar.gz) = 21938 SIZE (cargo/rand_hc-0.2.0.tar.gz) = 11670 -SIZE (cargo/rand_hc-0.3.1.tar.gz) = 11891 -SIZE (cargo/rand_pcg-0.2.1.tar.gz) = 11291 -SIZE (cargo/raw-cpuid-10.2.0.tar.gz) = 90945 +SIZE (cargo/raw-cpuid-10.3.0.tar.gz) = 91413 SIZE (cargo/rdrand-0.4.0.tar.gz) = 6456 -SIZE (cargo/redox_syscall-0.2.10.tar.gz) = 23582 -SIZE (cargo/ref-cast-1.0.6.tar.gz) = 10710 -SIZE (cargo/ref-cast-impl-1.0.6.tar.gz) = 7252 -SIZE (cargo/regex-1.5.4.tar.gz) = 236581 +SIZE (cargo/redox_syscall-0.2.13.tar.gz) = 23759 +SIZE (cargo/redox_users-0.4.3.tar.gz) = 15353 +SIZE (cargo/ref-cast-1.0.7.tar.gz) = 11032 +SIZE (cargo/ref-cast-impl-1.0.7.tar.gz) = 7308 +SIZE (cargo/regex-1.5.5.tar.gz) = 238119 SIZE (cargo/regex-automata-0.1.10.tar.gz) = 114533 SIZE (cargo/regex-syntax-0.6.25.tar.gz) = 293293 SIZE (cargo/remove_dir_all-0.5.3.tar.gz) = 9184 -SIZE (cargo/reqwest-0.11.9.tar.gz) = 139175 +SIZE (cargo/reqwest-0.11.10.tar.gz) = 140434 SIZE (cargo/resolv-conf-0.7.0.tar.gz) = 17352 SIZE (cargo/ring-0.16.20.tar.gz) = 5082615 -SIZE (cargo/rmp-0.8.10.tar.gz) = 23541 +SIZE (cargo/rmp-0.8.11.tar.gz) = 28829 SIZE (cargo/rmpv-1.0.0.tar.gz) = 27352 +SIZE (cargo/rocket-0.5.0-rc.2.tar.gz) = 278842 +SIZE (cargo/rocket_codegen-0.5.0-rc.2.tar.gz) = 108047 +SIZE (cargo/rocket_http-0.5.0-rc.2.tar.gz) = 91029 SIZE (cargo/rustc-demangle-0.1.21.tar.gz) = 27920 SIZE (cargo/rustc_version-0.2.3.tar.gz) = 10210 -SIZE (cargo/rustls-0.19.1.tar.gz) = 208143 +SIZE (cargo/rustls-0.20.4.tar.gz) = 256347 +SIZE (cargo/rustls-pemfile-1.0.0.tar.gz) = 14559 SIZE (cargo/rustversion-1.0.6.tar.gz) = 18380 SIZE (cargo/ryu-1.0.9.tar.gz) = 48391 SIZE (cargo/same-file-1.0.6.tar.gz) = 10183 @@ -637,106 +675,107 @@ SIZE (cargo/schannel-0.1.19.tar.gz) = 42755 SIZE (cargo/scheduled-thread-pool-0.2.5.tar.gz) = 9366 SIZE (cargo/scoped-tls-1.0.0.tar.gz) = 9146 SIZE (cargo/scopeguard-1.1.0.tar.gz) = 11470 -SIZE (cargo/sct-0.6.1.tar.gz) = 26825 -SIZE (cargo/security-framework-2.6.0.tar.gz) = 71481 -SIZE (cargo/security-framework-sys-2.6.0.tar.gz) = 17709 +SIZE (cargo/sct-0.7.0.tar.gz) = 27502 +SIZE (cargo/security-framework-2.6.1.tar.gz) = 71688 +SIZE (cargo/security-framework-sys-2.6.1.tar.gz) = 17717 SIZE (cargo/semver-0.9.0.tar.gz) = 17344 SIZE (cargo/semver-parser-0.7.0.tar.gz) = 10268 -SIZE (cargo/serde-1.0.136.tar.gz) = 76158 +SIZE (cargo/serde-1.0.137.tar.gz) = 76182 SIZE (cargo/serde_cbor-0.11.2.tar.gz) = 44570 -SIZE (cargo/serde_derive-1.0.136.tar.gz) = 54776 -SIZE (cargo/serde_json-1.0.78.tar.gz) = 144364 +SIZE (cargo/serde_derive-1.0.137.tar.gz) = 54831 +SIZE (cargo/serde_json-1.0.81.tar.gz) = 144480 SIZE (cargo/serde_urlencoded-0.7.1.tar.gz) = 12822 SIZE (cargo/sha-1-0.8.2.tar.gz) = 12338 SIZE (cargo/sha-1-0.9.8.tar.gz) = 14029 +SIZE (cargo/sha1-0.10.1.tar.gz) = 11785 SIZE (cargo/sha1-0.6.1.tar.gz) = 2931 SIZE (cargo/sha1_smol-1.0.0.tar.gz) = 9782 +SIZE (cargo/sha2-0.10.2.tar.gz) = 20213 SIZE (cargo/sha2-0.9.9.tar.gz) = 22247 SIZE (cargo/sharded-slab-0.1.4.tar.gz) = 52479 SIZE (cargo/signal-hook-registry-1.4.0.tar.gz) = 17912 -SIZE (cargo/simple_asn1-0.4.1.tar.gz) = 15752 -SIZE (cargo/siphasher-0.3.9.tar.gz) = 10108 -SIZE (cargo/slab-0.4.5.tar.gz) = 15888 +SIZE (cargo/simple_asn1-0.6.1.tar.gz) = 15961 +SIZE (cargo/siphasher-0.3.10.tar.gz) = 9889 +SIZE (cargo/slab-0.4.6.tar.gz) = 16067 SIZE (cargo/smallvec-0.6.14.tar.gz) = 22855 SIZE (cargo/smallvec-1.8.0.tar.gz) = 27992 SIZE (cargo/socket2-0.3.19.tar.gz) = 33782 SIZE (cargo/socket2-0.4.4.tar.gz) = 44048 SIZE (cargo/spin-0.5.2.tar.gz) = 12004 -SIZE (cargo/spin-0.9.2.tar.gz) = 28755 +SIZE (cargo/spin-0.9.3.tar.gz) = 29427 SIZE (cargo/stable-pattern-0.1.0.tar.gz) = 16533 SIZE (cargo/stable_deref_trait-1.2.0.tar.gz) = 8054 SIZE (cargo/standback-0.2.17.tar.gz) = 29011 -SIZE (cargo/state-0.5.2.tar.gz) = 30371 +SIZE (cargo/state-0.5.3.tar.gz) = 30385 SIZE (cargo/stdweb-0.4.20.tar.gz) = 194102 SIZE (cargo/stdweb-derive-0.5.3.tar.gz) = 3894 SIZE (cargo/stdweb-internal-macros-0.2.9.tar.gz) = 11828 SIZE (cargo/stdweb-internal-runtime-0.1.5.tar.gz) = 5445 -SIZE (cargo/string_cache-0.8.2.tar.gz) = 15770 -SIZE (cargo/string_cache_codegen-0.5.1.tar.gz) = 8243 +SIZE (cargo/strsim-0.10.0.tar.gz) = 11355 SIZE (cargo/subtle-2.4.1.tar.gz) = 12630 -SIZE (cargo/syn-1.0.86.tar.gz) = 235126 -SIZE (cargo/syslog-4.0.1.tar.gz) = 7131 +SIZE (cargo/syn-1.0.93.tar.gz) = 236682 +SIZE (cargo/syslog-6.0.1.tar.gz) = 9552 SIZE (cargo/tempfile-3.3.0.tar.gz) = 27578 -SIZE (cargo/tendril-0.4.2.tar.gz) = 37138 -SIZE (cargo/thiserror-1.0.30.tar.gz) = 17748 -SIZE (cargo/thiserror-impl-1.0.30.tar.gz) = 15230 +SIZE (cargo/thiserror-1.0.31.tar.gz) = 18013 +SIZE (cargo/thiserror-impl-1.0.31.tar.gz) = 15283 SIZE (cargo/thread_local-1.1.4.tar.gz) = 13106 SIZE (cargo/threadpool-1.8.1.tar.gz) = 14408 -SIZE (cargo/time-0.1.44.tar.gz) = 28885 +SIZE (cargo/time-0.1.43.tar.gz) = 28653 SIZE (cargo/time-0.2.27.tar.gz) = 65167 -SIZE (cargo/time-0.3.7.tar.gz) = 76358 +SIZE (cargo/time-0.3.9.tar.gz) = 81412 SIZE (cargo/time-macros-0.1.1.tar.gz) = 5447 -SIZE (cargo/time-macros-0.2.3.tar.gz) = 16838 +SIZE (cargo/time-macros-0.2.4.tar.gz) = 18421 SIZE (cargo/time-macros-impl-0.1.2.tar.gz) = 10096 -SIZE (cargo/tinyvec-1.5.1.tar.gz) = 44942 +SIZE (cargo/tinyvec-1.6.0.tar.gz) = 45991 SIZE (cargo/tinyvec_macros-0.1.0.tar.gz) = 1817 -SIZE (cargo/tokio-1.16.1.tar.gz) = 552194 +SIZE (cargo/tokio-1.18.2.tar.gz) = 572381 SIZE (cargo/tokio-macros-1.7.0.tar.gz) = 9261 SIZE (cargo/tokio-native-tls-0.3.0.tar.gz) = 20759 -SIZE (cargo/tokio-rustls-0.22.0.tar.gz) = 22706 +SIZE (cargo/tokio-rustls-0.23.4.tar.gz) = 27024 SIZE (cargo/tokio-socks-0.5.1.tar.gz) = 16137 SIZE (cargo/tokio-stream-0.1.8.tar.gz) = 30537 SIZE (cargo/tokio-util-0.6.9.tar.gz) = 76480 -SIZE (cargo/toml-0.5.8.tar.gz) = 54219 +SIZE (cargo/tokio-util-0.7.1.tar.gz) = 87364 +SIZE (cargo/toml-0.5.9.tar.gz) = 55667 SIZE (cargo/totp-lite-1.0.3.tar.gz) = 4387 SIZE (cargo/tower-service-0.3.1.tar.gz) = 6299 -SIZE (cargo/tracing-0.1.29.tar.gz) = 72444 -SIZE (cargo/tracing-attributes-0.1.18.tar.gz) = 22779 -SIZE (cargo/tracing-core-0.1.21.tar.gz) = 50683 -SIZE (cargo/tracing-log-0.1.2.tar.gz) = 14915 -SIZE (cargo/tracing-subscriber-0.3.7.tar.gz) = 165664 -SIZE (cargo/trust-dns-proto-0.20.3.tar.gz) = 245383 -SIZE (cargo/trust-dns-resolver-0.20.3.tar.gz) = 77051 +SIZE (cargo/tracing-0.1.34.tar.gz) = 72775 +SIZE (cargo/tracing-attributes-0.1.21.tar.gz) = 27552 +SIZE (cargo/tracing-core-0.1.26.tar.gz) = 53727 +SIZE (cargo/tracing-log-0.1.3.tar.gz) = 20549 +SIZE (cargo/tracing-subscriber-0.3.11.tar.gz) = 184827 +SIZE (cargo/trust-dns-proto-0.20.4.tar.gz) = 245486 +SIZE (cargo/trust-dns-resolver-0.20.4.tar.gz) = 76758 SIZE (cargo/try-lock-0.2.3.tar.gz) = 4158 SIZE (cargo/typenum-1.15.0.tar.gz) = 40741 -SIZE (cargo/u2f-0.2.0.tar.gz) = 7846 SIZE (cargo/ubyte-0.10.1.tar.gz) = 13520 SIZE (cargo/ucd-trie-0.1.3.tar.gz) = 44615 SIZE (cargo/uncased-0.9.6.tar.gz) = 10413 -SIZE (cargo/unicode-bidi-0.3.7.tar.gz) = 33759 +SIZE (cargo/unicode-bidi-0.3.8.tar.gz) = 36575 SIZE (cargo/unicode-normalization-0.1.19.tar.gz) = 107353 -SIZE (cargo/unicode-segmentation-1.8.0.tar.gz) = 94011 -SIZE (cargo/unicode-xid-0.2.2.tar.gz) = 14955 +SIZE (cargo/unicode-xid-0.2.3.tar.gz) = 15174 +SIZE (cargo/universal-hash-0.4.1.tar.gz) = 8503 SIZE (cargo/untrusted-0.7.1.tar.gz) = 7924 SIZE (cargo/url-1.7.2.tar.gz) = 68597 SIZE (cargo/url-2.2.2.tar.gz) = 68555 -SIZE (cargo/utf-8-0.7.6.tar.gz) = 10422 -SIZE (cargo/uuid-0.8.2.tar.gz) = 37909 +SIZE (cargo/uuid-1.0.0.tar.gz) = 48627 +SIZE (cargo/valuable-0.1.0.tar.gz) = 27718 SIZE (cargo/vcpkg-0.2.15.tar.gz) = 228735 SIZE (cargo/version_check-0.9.4.tar.gz) = 14895 SIZE (cargo/walkdir-2.3.2.tar.gz) = 23516 SIZE (cargo/want-0.3.0.tar.gz) = 6550 -SIZE (cargo/wasi-0.10.0+wasi-snapshot-preview1.tar.gz) = 26964 +SIZE (cargo/wasi-0.10.2+wasi-snapshot-preview1.tar.gz) = 27505 +SIZE (cargo/wasi-0.11.0+wasi-snapshot-preview1.tar.gz) = 28131 SIZE (cargo/wasi-0.9.0+wasi-snapshot-preview1.tar.gz) = 31521 -SIZE (cargo/wasm-bindgen-0.2.79.tar.gz) = 164276 -SIZE (cargo/wasm-bindgen-backend-0.2.79.tar.gz) = 25776 -SIZE (cargo/wasm-bindgen-futures-0.4.29.tar.gz) = 14730 -SIZE (cargo/wasm-bindgen-macro-0.2.79.tar.gz) = 11806 -SIZE (cargo/wasm-bindgen-macro-support-0.2.79.tar.gz) = 17861 -SIZE (cargo/wasm-bindgen-shared-0.2.79.tar.gz) = 7204 -SIZE (cargo/web-sys-0.3.56.tar.gz) = 666465 +SIZE (cargo/wasm-bindgen-0.2.80.tar.gz) = 164576 +SIZE (cargo/wasm-bindgen-backend-0.2.80.tar.gz) = 25741 +SIZE (cargo/wasm-bindgen-futures-0.4.30.tar.gz) = 15220 +SIZE (cargo/wasm-bindgen-macro-0.2.80.tar.gz) = 11805 +SIZE (cargo/wasm-bindgen-macro-support-0.2.80.tar.gz) = 17857 +SIZE (cargo/wasm-bindgen-shared-0.2.80.tar.gz) = 7204 +SIZE (cargo/web-sys-0.3.57.tar.gz) = 686563 SIZE (cargo/webauthn-rs-0.3.2.tar.gz) = 246188 -SIZE (cargo/webpki-0.21.4.tar.gz) = 58505 +SIZE (cargo/webpki-0.22.0.tar.gz) = 58663 SIZE (cargo/widestring-0.4.3.tar.gz) = 26215 SIZE (cargo/winapi-0.2.8.tar.gz) = 455145 SIZE (cargo/winapi-0.3.9.tar.gz) = 1200382 @@ -744,11 +783,16 @@ SIZE (cargo/winapi-build-0.1.1.tar.gz) = 669 SIZE (cargo/winapi-i686-pc-windows-gnu-0.4.0.tar.gz) = 2918815 SIZE (cargo/winapi-util-0.1.5.tar.gz) = 10164 SIZE (cargo/winapi-x86_64-pc-windows-gnu-0.4.0.tar.gz) = 2947998 +SIZE (cargo/windows-sys-0.36.1.tar.gz) = 3347053 +SIZE (cargo/windows_aarch64_msvc-0.36.1.tar.gz) = 661960 +SIZE (cargo/windows_i686_gnu-0.36.1.tar.gz) = 818115 +SIZE (cargo/windows_i686_msvc-0.36.1.tar.gz) = 724575 +SIZE (cargo/windows_x86_64_gnu-0.36.1.tar.gz) = 790934 +SIZE (cargo/windows_x86_64_msvc-0.36.1.tar.gz) = 661999 +SIZE (cargo/winreg-0.10.1.tar.gz) = 25725 SIZE (cargo/winreg-0.6.2.tar.gz) = 19338 -SIZE (cargo/winreg-0.7.0.tar.gz) = 21225 SIZE (cargo/ws2_32-sys-0.2.1.tar.gz) = 4697 -SIZE (cargo/xml5ever-0.16.2.tar.gz) = 40971 -SIZE (cargo/yansi-0.5.0.tar.gz) = 17261 -SIZE (cargo/yubico-0.10.0.tar.gz) = 17439 -SIZE (vaultwarden-1.24.0.tar.gz) = 490087 -SIZE (vaultwarden-1.24.0.vendor.tgz) = 487710 +SIZE (cargo/yansi-0.5.1.tar.gz) = 16525 +SIZE (cargo/yubico-0.11.0.tar.gz) = 17112 +SIZE (vaultwarden-1.25.0.tar.gz) = 510351 +SIZE (vaultwarden-1.25.0.vendor.tgz) = 9932 diff --git a/security/vaultwarden/files/config.vendor b/security/vaultwarden/files/config.vendor index c2baee60bc4..83296fb3107 100644 --- a/security/vaultwarden/files/config.vendor +++ b/security/vaultwarden/files/config.vendor @@ -1,11 +1,6 @@ -[source."https://github.com/SergioBenitez/Rocket"] -git = "https://github.com/SergioBenitez/Rocket" -rev = "8cae077ba1d54b92cdef3e171a730b819d5eeb8e" -replace-with = "vendored-sources" - -[source."https://github.com/jjlin/job_scheduler"] -git = "https://github.com/jjlin/job_scheduler" -rev = "ee023418dbba2bfe1e30a5fd7d937f9e33739806" +[source."https://github.com/BlackDex/job_scheduler"] +git = "https://github.com/BlackDex/job_scheduler" +rev = "9100fc596a083fd9c0b560f8f11f108e0a19d07e" replace-with = "vendored-sources" [source.vendored-sources] diff --git a/security/vaultwarden/patches/patch-Cargo_lock b/security/vaultwarden/patches/patch-Cargo_lock deleted file mode 100644 index d93db813bb5..00000000000 --- a/security/vaultwarden/patches/patch-Cargo_lock +++ /dev/null @@ -1,2337 +0,0 @@ -Index: Cargo.lock ---- Cargo.lock.orig -+++ Cargo.lock -@@ -18,12 +18,6 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - - [[package]] --name = "ahash" --version = "0.3.8" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" -- --[[package]] - name = "aho-corasick" - version = "0.7.18" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -48,10 +42,19 @@ dependencies = [ - ] - - [[package]] -+name = "ansi_term" -+version = "0.12.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -+dependencies = [ -+ "winapi 0.3.9", -+] -+ -+[[package]] - name = "async-compression" --version = "0.3.8" -+version = "0.3.12" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "5443ccbb270374a2b1055fc72da40e1f237809cd6bb0e97e66d264cd138473a6" -+checksum = "f2bf394cfbbe876f0ac67b13b6ca819f9c9f2fb9ec67223cceb1555fbab1c31a" - dependencies = [ - "brotli", - "flate2", -@@ -62,17 +65,47 @@ dependencies = [ - ] - - [[package]] -+name = "async-stream" -+version = "0.3.2" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" -+dependencies = [ -+ "async-stream-impl", -+ "futures-core", -+] -+ -+[[package]] -+name = "async-stream-impl" -+version = "0.3.2" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" -+dependencies = [ -+ "proc-macro2", -+ "quote", -+ "syn", -+] -+ -+[[package]] - name = "async-trait" - version = "0.1.52" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -+name = "atomic" -+version = "0.5.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" -+dependencies = [ -+ "autocfg", -+] -+ -+[[package]] - name = "atty" - version = "0.2.14" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -91,9 +124,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38 - - [[package]] - name = "backtrace" --version = "0.3.63" -+version = "0.3.64" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6" -+checksum = "5e121dee8023ce33ab248d9ce1493df03c3b38a659b240096fcbd7048ff9c31f" - dependencies = [ - "addr2line", - "cc", -@@ -112,16 +145,6 @@ checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac - - [[package]] - name = "base64" --version = "0.9.3" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" --dependencies = [ -- "byteorder", -- "safemem", --] -- --[[package]] --name = "base64" - version = "0.11.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -@@ -168,7 +191,7 @@ version = "0.9.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" - dependencies = [ -- "generic-array 0.14.4", -+ "generic-array 0.14.5", - ] - - [[package]] -@@ -182,9 +205,9 @@ dependencies = [ - - [[package]] - name = "brotli" --version = "3.3.2" -+version = "3.3.3" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "71cb90ade945043d3d53597b2fc359bb063db8ade2bcffe7997351d0756e9d50" -+checksum = "f838e47a451d5a8fa552371f80024dd6ace9b7acdf25c4c3d0f9bc6816fb1c39" - dependencies = [ - "alloc-no-stdlib", - "alloc-stdlib", -@@ -202,20 +225,10 @@ dependencies = [ - ] - - [[package]] --name = "buf_redux" --version = "0.8.4" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" --dependencies = [ -- "memchr", -- "safemem", --] -- --[[package]] - name = "bumpalo" --version = "3.8.0" -+version = "3.9.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "8f1e260c3a9040a7c19a12468758f4c16f31a81a1fe087482be9570ec864bb6c" -+checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" - - [[package]] - name = "byte-tools" -@@ -311,30 +324,30 @@ dependencies = [ - - [[package]] - name = "const_fn" --version = "0.4.8" -+version = "0.4.9" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" -+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" - - [[package]] - name = "cookie" --version = "0.14.4" -+version = "0.15.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" -+checksum = "d5f1c7727e460397e56abc4bddc1d49e07a1ad78fc98eb2e1c8f032a58a2f80d" - dependencies = [ - "percent-encoding 2.1.0", - "time 0.2.27", -- "version_check 0.9.3", -+ "version_check", - ] - - [[package]] - name = "cookie" --version = "0.15.1" -+version = "0.16.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "d5f1c7727e460397e56abc4bddc1d49e07a1ad78fc98eb2e1c8f032a58a2f80d" -+checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" - dependencies = [ - "percent-encoding 2.1.0", -- "time 0.2.27", -- "version_check 0.9.3", -+ "time 0.3.7", -+ "version_check", - ] - - [[package]] -@@ -345,7 +358,7 @@ checksum = "b3f7034c0932dc36f5bd8ec37368d9713468094358 - dependencies = [ - "cookie 0.15.1", - "idna 0.2.3", -- "log 0.4.14", -+ "log", - "publicsuffix", - "serde", - "serde_json", -@@ -380,9 +393,9 @@ dependencies = [ - - [[package]] - name = "crc32fast" --version = "1.3.0" -+version = "1.3.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" -+checksum = "a2209c310e29876f7f0b2721e7e26b84aff178aa3da5d091f9bfbf47669e60e3" - dependencies = [ - "cfg-if 1.0.0", - ] -@@ -399,12 +412,22 @@ dependencies = [ - ] - - [[package]] -+name = "crossbeam-utils" -+version = "0.8.6" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "cfcae03edb34f947e64acdb1c33ec169824e20657e9ecb61cef6c8c74dcb8120" -+dependencies = [ -+ "cfg-if 1.0.0", -+ "lazy_static", -+] -+ -+[[package]] - name = "crypto-mac" - version = "0.10.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" - dependencies = [ -- "generic-array 0.14.4", -+ "generic-array 0.14.5", - "subtle", - ] - -@@ -414,11 +437,21 @@ version = "0.11.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" - dependencies = [ -- "generic-array 0.14.4", -+ "generic-array 0.14.5", - "subtle", - ] - - [[package]] -+name = "ctrlc" -+version = "3.2.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "a19c6cedffdc8c03a3346d723eb20bd85a13362bb96dc2ac000842c6381ec7bf" -+dependencies = [ -+ "nix", -+ "winapi 0.3.9", -+] -+ -+[[package]] - name = "dashmap" - version = "4.0.2" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -445,8 +478,9 @@ dependencies = [ - - [[package]] - name = "devise" --version = "0.3.0" --source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" -+version = "0.3.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "50c7580b072f1c8476148f16e0a0d5dedddab787da98d86c5082c5e9ed8ab595" - dependencies = [ - "devise_codegen", - "devise_core", -@@ -454,22 +488,25 @@ dependencies = [ - - [[package]] - name = "devise_codegen" --version = "0.3.0" --source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" -+version = "0.3.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "123c73e7a6e51b05c75fe1a1b2f4e241399ea5740ed810b0e3e6cacd9db5e7b2" - dependencies = [ - "devise_core", -- "quote 1.0.10", -+ "quote", - ] - - [[package]] - name = "devise_core" --version = "0.3.0" --source = "git+https://github.com/SergioBenitez/Devise.git?rev=e58b3ac9a#e58b3ac9afc3b6ff10a8aaf02a3e768a8f530089" -+version = "0.3.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "841ef46f4787d9097405cac4e70fb8644fc037b526e8c14054247c0263c400d0" - dependencies = [ - "bitflags", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "proc-macro2-diagnostics", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -495,9 +532,9 @@ version = "1.4.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -525,7 +562,7 @@ version = "0.9.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" - dependencies = [ -- "generic-array 0.14.4", -+ "generic-array 0.14.5", - ] - - [[package]] -@@ -562,9 +599,9 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" - dependencies = [ - "heck", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -584,9 +621,9 @@ checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a703 - - [[package]] - name = "fastrand" --version = "1.6.0" -+version = "1.7.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "779d043b6a0b90cc4c0ed7ee380a6504394cee7efd7db050e3774eee387324b2" -+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" - dependencies = [ - "instant", - ] -@@ -597,11 +634,25 @@ version = "0.6.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065" - dependencies = [ -- "log 0.4.14", -+ "log", - "syslog", - ] - - [[package]] -+name = "figment" -+version = "0.10.6" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "790b4292c72618abbab50f787a477014fe15634f96291de45672ce46afe122df" -+dependencies = [ -+ "atomic", -+ "pear", -+ "serde", -+ "toml", -+ "uncased", -+ "version_check", -+] -+ -+[[package]] - name = "flate2" - version = "1.0.22" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -730,9 +781,9 @@ version = "0.3.19" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -772,6 +823,19 @@ dependencies = [ - ] - - [[package]] -+name = "generator" -+version = "0.7.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "c1d9279ca822891c1a4dae06d185612cf8fc6acfe5dff37781b41297811b12ee" -+dependencies = [ -+ "cc", -+ "libc", -+ "log", -+ "rustversion", -+ "winapi 0.3.9", -+] -+ -+[[package]] - name = "generic-array" - version = "0.12.4" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -782,12 +846,12 @@ dependencies = [ - - [[package]] - name = "generic-array" --version = "0.14.4" -+version = "0.14.5" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" -+checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" - dependencies = [ - "typenum", -- "version_check 0.9.3", -+ "version_check", - ] - - [[package]] -@@ -803,9 +867,9 @@ dependencies = [ - - [[package]] - name = "getrandom" --version = "0.2.3" -+version = "0.2.4" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" -+checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" - dependencies = [ - "cfg-if 1.0.0", - "libc", -@@ -826,9 +890,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad - - [[package]] - name = "governor" --version = "0.3.2" -+version = "0.4.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "06c5d2f987ee8f6dff3fa1a352058dc59b990e447e4c7846aa7d804971314f7b" -+checksum = "7df0ee4b237afb71e99f7e2fbd840ffec2d6c4bb569f69b2af18aa1f63077d38" - dependencies = [ - "dashmap", - "futures", -@@ -838,14 +902,14 @@ dependencies = [ - "parking_lot 0.11.2", - "quanta", - "rand 0.8.4", -- "smallvec 1.7.0", -+ "smallvec 1.8.0", - ] - - [[package]] - name = "h2" --version = "0.3.9" -+version = "0.3.11" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "8f072413d126e57991455e0a922b31e4c8ba7c2ffbebf6b78b4f8521397d65cd" -+checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" - dependencies = [ - "bytes 1.1.0", - "fnv", -@@ -868,11 +932,11 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e - - [[package]] - name = "handlebars" --version = "4.1.6" -+version = "4.2.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "167fa173496c9eadd8749cca6f8339ac88e248f3ad2442791d0b743318a94fc0" -+checksum = "25546a65e5cf1f471f3438796fc634650b31d7fcde01d444c309aeb28b92e3a8" - dependencies = [ -- "log 0.4.14", -+ "log", - "pest", - "pest_derive", - "quick-error 2.0.1", -@@ -883,16 +947,6 @@ dependencies = [ - - [[package]] - name = "hashbrown" --version = "0.8.2" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" --dependencies = [ -- "ahash", -- "autocfg", --] -- --[[package]] --name = "hashbrown" - version = "0.11.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -@@ -952,23 +1006,23 @@ version = "0.25.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "aafcf38a1a36118242d29b92e1b08ef84e67e4a5ed06e0a80be20e6a32bfed6b" - dependencies = [ -- "log 0.4.14", -+ "log", - "mac", - "markup5ever", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] - name = "http" --version = "0.2.5" -+version = "0.2.6" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" -+checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" - dependencies = [ - "bytes 1.1.0", - "fnv", -- "itoa 0.4.8", -+ "itoa 1.0.1", - ] - - [[package]] -@@ -996,25 +1050,6 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d - - [[package]] - name = "hyper" --version = "0.10.16" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273" --dependencies = [ -- "base64 0.9.3", -- "httparse", -- "language-tags", -- "log 0.3.9", -- "mime 0.2.6", -- "num_cpus", -- "time 0.1.44", -- "traitobject", -- "typeable", -- "unicase 1.4.2", -- "url 1.7.2", --] -- --[[package]] --name = "hyper" - version = "0.14.16" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "b7ec3e62bdc98a2f0393a5048e4c30ef659440ea6e0e572965103e72bd836f55" -@@ -1030,7 +1065,7 @@ dependencies = [ - "httpdate", - "itoa 0.4.8", - "pin-project-lite", -- "socket2 0.4.2", -+ "socket2 0.4.4", - "tokio", - "tower-service", - "tracing", -@@ -1038,25 +1073,13 @@ dependencies = [ - ] - - [[package]] --name = "hyper-sync-rustls" --version = "0.3.0-rc.17" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "4cb014c4ea00486e2b62860b5e15229d37516d4924177218beafbf46583de3ab" --dependencies = [ -- "hyper 0.10.16", -- "rustls", -- "webpki", -- "webpki-roots", --] -- --[[package]] - name = "hyper-tls" - version = "0.5.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" - dependencies = [ - "bytes 1.1.0", -- "hyper 0.14.16", -+ "hyper", - "native-tls", - "tokio", - "tokio-native-tls", -@@ -1086,15 +1109,22 @@ dependencies = [ - - [[package]] - name = "indexmap" --version = "1.7.0" -+version = "1.8.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" -+checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" - dependencies = [ - "autocfg", -- "hashbrown 0.11.2", -+ "hashbrown", -+ "serde", - ] - - [[package]] -+name = "inlinable_string" -+version = "0.1.15" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb" -+ -+[[package]] - name = "instant" - version = "0.1.12" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1154,9 +1184,9 @@ dependencies = [ - - [[package]] - name = "js-sys" --version = "0.3.55" -+version = "0.3.56" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84" -+checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" - dependencies = [ - "wasm-bindgen", - ] -@@ -1186,12 +1216,6 @@ dependencies = [ - ] - - [[package]] --name = "language-tags" --version = "0.2.2" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" -- --[[package]] - name = "lazy_static" - version = "1.4.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1214,7 +1238,7 @@ dependencies = [ - "hostname", - "httpdate", - "idna 0.2.3", -- "mime 0.3.16", -+ "mime", - "native-tls", - "nom 7.1.0", - "once_cell", -@@ -1226,9 +1250,9 @@ dependencies = [ - - [[package]] - name = "libc" --version = "0.2.112" -+version = "0.2.116" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" -+checksum = "565dbd88872dbe4cc8a46e527f26483c1d1f7afa6b884a3bd6cd893d4f98da74" - - [[package]] - name = "libsqlite3-sys" -@@ -1249,29 +1273,35 @@ checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a4 - - [[package]] - name = "lock_api" --version = "0.4.5" -+version = "0.4.6" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" -+checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" - dependencies = [ - "scopeguard", - ] - - [[package]] - name = "log" --version = "0.3.9" -+version = "0.4.14" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" -+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" - dependencies = [ -- "log 0.4.14", -+ "cfg-if 1.0.0", - ] - - [[package]] --name = "log" --version = "0.4.14" -+name = "loom" -+version = "0.5.4" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -+checksum = "edc5c7d328e32cc4954e8e01193d7f0ef5ab257b5090b70a964e099a36034309" - dependencies = [ - "cfg-if 1.0.0", -+ "generator", -+ "scoped-tls", -+ "serde", -+ "serde_json", -+ "tracing", -+ "tracing-subscriber", - ] - - [[package]] -@@ -1290,6 +1320,15 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - - [[package]] -+name = "mach" -+version = "0.3.2" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -+dependencies = [ -+ "libc", -+] -+ -+[[package]] - name = "maplit" - version = "1.0.2" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1301,7 +1340,7 @@ version = "0.10.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" - dependencies = [ -- "log 0.4.14", -+ "log", - "phf 0.8.0", - "phf_codegen 0.8.0", - "string_cache", -@@ -1328,6 +1367,15 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - - [[package]] -+name = "matchers" -+version = "0.1.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -+dependencies = [ -+ "regex-automata", -+] -+ -+[[package]] - name = "matches" - version = "0.1.9" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1346,6 +1394,15 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - - [[package]] -+name = "memoffset" -+version = "0.6.5" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -+dependencies = [ -+ "autocfg", -+] -+ -+[[package]] - name = "migrations_internals" - version = "1.4.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1361,37 +1418,18 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "9753f12909fd8d923f75ae5c3258cae1ed3c8ec052e1b38c93c21a6d157f789c" - dependencies = [ - "migrations_internals", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] - name = "mime" --version = "0.2.6" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0" --dependencies = [ -- "log 0.3.9", --] -- --[[package]] --name = "mime" - version = "0.3.16" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - - [[package]] --name = "mime_guess" --version = "2.0.3" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" --dependencies = [ -- "mime 0.3.16", -- "unicase 2.6.0", --] -- --[[package]] - name = "minimal-lexical" - version = "0.2.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1419,7 +1457,7 @@ dependencies = [ - "iovec", - "kernel32-sys", - "libc", -- "log 0.4.14", -+ "log", - "miow 0.2.2", - "net2", - "slab", -@@ -1433,7 +1471,7 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" - dependencies = [ - "libc", -- "log 0.4.14", -+ "log", - "miow 0.3.7", - "ntapi", - "winapi 0.3.9", -@@ -1446,7 +1484,7 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" - dependencies = [ - "lazycell", -- "log 0.4.14", -+ "log", - "mio 0.6.23", - "slab", - ] -@@ -1473,28 +1511,30 @@ dependencies = [ - ] - - [[package]] --name = "multipart" --version = "0.18.0" -+name = "multer" -+version = "2.0.2" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" -+checksum = "5f8f35e687561d5c1667590911e6698a8cb714a134a7505718a182e7bc9d3836" - dependencies = [ -- "buf_redux", -+ "bytes 1.1.0", -+ "encoding_rs", -+ "futures-util", -+ "http", - "httparse", -- "log 0.4.14", -- "mime 0.3.16", -- "mime_guess", -- "quick-error 1.2.3", -- "rand 0.8.4", -- "safemem", -- "tempfile", -- "twoway", -+ "log", -+ "memchr", -+ "mime", -+ "spin 0.9.2", -+ "tokio", -+ "tokio-util", -+ "version_check", - ] - - [[package]] - name = "mysqlclient-sys" --version = "0.2.4" -+version = "0.2.5" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7e9637d93448044078aaafea7419aed69d301b4a12bcc4aa0ae856eb169bef85" -+checksum = "f61b381528ba293005c42a409dd73d034508e273bf90481f17ec2e964a6e969b" - dependencies = [ - "pkg-config", - "vcpkg", -@@ -1508,7 +1548,7 @@ checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e5385 - dependencies = [ - "lazy_static", - "libc", -- "log 0.4.14", -+ "log", - "openssl", - "openssl-probe", - "openssl-sys", -@@ -1536,13 +1576,23 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" - - [[package]] -+name = "nix" -+version = "0.23.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" -+dependencies = [ -+ "bitflags", -+ "cc", -+ "cfg-if 1.0.0", -+ "libc", -+ "memoffset", -+] -+ -+[[package]] - name = "no-std-compat" - version = "0.4.1" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" --dependencies = [ -- "hashbrown 0.8.2", --] - - [[package]] - name = "nom" -@@ -1561,14 +1611,14 @@ checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc49 - dependencies = [ - "memchr", - "minimal-lexical", -- "version_check 0.9.3", -+ "version_check", - ] - - [[package]] - name = "nonzero_ext" --version = "0.2.0" -+version = "0.3.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "44a1290799eababa63ea60af0cbc3f03363e328e58f32fb0294798ed3e85f444" -+checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - - [[package]] - name = "ntapi" -@@ -1596,9 +1646,9 @@ version = "0.3.3" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -1631,6 +1681,15 @@ dependencies = [ - ] - - [[package]] -+name = "num_threads" -+version = "0.1.3" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "97ba99ba6393e2c3734791401b66902d981cb03bf190af674ca69949b6d5fb15" -+dependencies = [ -+ "libc", -+] -+ -+[[package]] - name = "object" - version = "0.27.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -1673,9 +1732,9 @@ dependencies = [ - - [[package]] - name = "openssl-probe" --version = "0.1.4" -+version = "0.1.5" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" -+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - - [[package]] - name = "openssl-src" -@@ -1718,7 +1777,7 @@ dependencies = [ - "byteorder", - "bytes 0.4.12", - "httparse", -- "log 0.4.14", -+ "log", - "mio 0.6.23", - "mio-extras", - "rand 0.7.3", -@@ -1770,7 +1829,7 @@ dependencies = [ - "instant", - "libc", - "redox_syscall", -- "smallvec 1.7.0", -+ "smallvec 1.8.0", - "winapi 0.3.9", - ] - -@@ -1791,24 +1850,25 @@ checksum = "0744126afe1a6dd7f394cb50a716dbe086cb06e255 - - [[package]] - name = "pear" --version = "0.1.4" -+version = "0.2.3" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "5320f212db967792b67cfe12bd469d08afd6318a249bd917d5c19bc92200ab8a" -+checksum = "15e44241c5e4c868e3eaa78b7c1848cadd6344ed4f54d029832d32b415a58702" - dependencies = [ -+ "inlinable_string", - "pear_codegen", -+ "yansi", - ] - - [[package]] - name = "pear_codegen" --version = "0.1.4" -+version = "0.2.3" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "bfc1c836fdc3d1ef87c348b237b5b5c4dff922156fb2d968f57734f9669768ca" -+checksum = "82a5ca643c2303ecb740d506539deba189e16f2754040a42901cd8105d0282d0" - dependencies = [ -- "proc-macro2 0.4.30", -- "quote 0.6.13", -- "syn 0.15.44", -- "version_check 0.9.3", -- "yansi", -+ "proc-macro2", -+ "proc-macro2-diagnostics", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -1861,9 +1921,9 @@ checksum = "99b8db626e31e5b81787b9783425769681b347011c - dependencies = [ - "pest", - "pest_meta", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -1962,9 +2022,9 @@ checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab - - [[package]] - name = "pin-project-lite" --version = "0.2.7" -+version = "0.2.8" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" -+checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" - - [[package]] - name = "pin-utils" -@@ -1980,9 +2040,9 @@ checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83 - - [[package]] - name = "ppv-lite86" --version = "0.2.15" -+version = "0.2.16" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" -+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - - [[package]] - name = "pq-sys" -@@ -2007,20 +2067,24 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a3 - - [[package]] - name = "proc-macro2" --version = "0.4.30" -+version = "1.0.36" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -+checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" - dependencies = [ -- "unicode-xid 0.1.0", -+ "unicode-xid", - ] - - [[package]] --name = "proc-macro2" --version = "1.0.34" -+name = "proc-macro2-diagnostics" -+version = "0.9.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "2f84e92c0f7c9d58328b85a78557813e4bd845130db68d7184635344399423b1" -+checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada" - dependencies = [ -- "unicode-xid 0.2.2", -+ "proc-macro2", -+ "quote", -+ "syn", -+ "version_check", -+ "yansi", - ] - - [[package]] -@@ -2036,18 +2100,24 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "292972edad6bbecc137ab84c5e36421a4a6c979ea31d3cc73540dd04315b33e1" - dependencies = [ - "byteorder", -- "hashbrown 0.11.2", -+ "hashbrown", - "idna 0.2.3", - "psl-types", - ] - - [[package]] - name = "quanta" --version = "0.4.1" -+version = "0.9.3" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "d98dc777a7a39b76b1a26ae9d3f691f4c1bc0455090aa0b64dfa8cb7fc34c135" -+checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8" - dependencies = [ -+ "crossbeam-utils", - "libc", -+ "mach", -+ "once_cell", -+ "raw-cpuid", -+ "wasi 0.10.0+wasi-snapshot-preview1", -+ "web-sys", - "winapi 0.3.9", - ] - -@@ -2065,23 +2135,14 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a850 - - [[package]] - name = "quote" --version = "0.6.13" -+version = "1.0.15" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -+checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" - dependencies = [ -- "proc-macro2 0.4.30", -+ "proc-macro2", - ] - - [[package]] --name = "quote" --version = "1.0.10" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" --dependencies = [ -- "proc-macro2 1.0.34", --] -- --[[package]] - name = "quoted_printable" - version = "0.4.5" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2093,7 +2154,7 @@ version = "0.8.9" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "545c5bc2b880973c9c10e4067418407a0ccaa3091781d1671d46eb35107cb26f" - dependencies = [ -- "log 0.4.14", -+ "log", - "parking_lot 0.11.2", - "scheduled-thread-pool", - ] -@@ -2187,7 +2248,7 @@ version = "0.6.3" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" - dependencies = [ -- "getrandom 0.2.3", -+ "getrandom 0.2.4", - ] - - [[package]] -@@ -2218,6 +2279,15 @@ dependencies = [ - ] - - [[package]] -+name = "raw-cpuid" -+version = "10.2.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "929f54e29691d4e6a9cc558479de70db7aa3d98cd6fe7ab86d7507aa2886b9d2" -+dependencies = [ -+ "bitflags", -+] -+ -+[[package]] - name = "rdrand" - version = "0.4.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2236,6 +2306,26 @@ dependencies = [ - ] - - [[package]] -+name = "ref-cast" -+version = "1.0.6" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "300f2a835d808734ee295d45007adacb9ebb29dd3ae2424acfa17930cae541da" -+dependencies = [ -+ "ref-cast-impl", -+] -+ -+[[package]] -+name = "ref-cast-impl" -+version = "1.0.6" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "4c38e3aecd2b21cb3959637b883bb3714bc7e43f0268b9a29d3743ee3e55cdd2" -+dependencies = [ -+ "proc-macro2", -+ "quote", -+ "syn", -+] -+ -+[[package]] - name = "regex" - version = "1.5.4" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2247,6 +2337,15 @@ dependencies = [ - ] - - [[package]] -+name = "regex-automata" -+version = "0.1.10" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -+dependencies = [ -+ "regex-syntax", -+] -+ -+[[package]] - name = "regex-syntax" - version = "0.6.25" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2263,9 +2362,9 @@ dependencies = [ - - [[package]] - name = "reqwest" --version = "0.11.8" -+version = "0.11.9" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7c4e0a76dc12a116108933f6301b95e83634e0c47b0afbed6abbaa0601e99258" -+checksum = "87f242f1488a539a79bac6dbe7c8609ae43b7914b7736210f239a37cccb32525" - dependencies = [ - "async-compression", - "base64 0.13.0", -@@ -2275,15 +2374,16 @@ dependencies = [ - "encoding_rs", - "futures-core", - "futures-util", -+ "h2", - "http", - "http-body", -- "hyper 0.14.16", -+ "hyper", - "hyper-tls", - "ipnet", - "js-sys", - "lazy_static", -- "log 0.4.14", -- "mime 0.3.16", -+ "log", -+ "mime", - "native-tls", - "percent-encoding 2.1.0", - "pin-project-lite", -@@ -2322,7 +2422,7 @@ dependencies = [ - "cc", - "libc", - "once_cell", -- "spin", -+ "spin 0.5.2", - "untrusted", - "web-sys", - "winapi 0.3.9", -@@ -2350,65 +2450,82 @@ dependencies = [ - - [[package]] - name = "rocket" --version = "0.5.0-dev" --source = "git+https://github.com/SergioBenitez/Rocket?rev=263e39b5b429de1913ce7e3036575a7b4d88b6d7#263e39b5b429de1913ce7e3036575a7b4d88b6d7" -+version = "0.5.0-rc.1" -+source = "git+https://github.com/SergioBenitez/Rocket?rev=8cae077ba1d54b92cdef3e171a730b819d5eeb8e#8cae077ba1d54b92cdef3e171a730b819d5eeb8e" - dependencies = [ -+ "async-stream", -+ "async-trait", -+ "atomic", - "atty", - "binascii", -- "log 0.4.14", -+ "bytes 1.1.0", -+ "either", -+ "figment", -+ "futures", -+ "indexmap", -+ "log", - "memchr", -+ "multer", - "num_cpus", -- "pear", -+ "parking_lot 0.11.2", -+ "pin-project-lite", -+ "rand 0.8.4", -+ "ref-cast", - "rocket_codegen", - "rocket_http", -+ "serde", -+ "serde_json", - "state", -- "time 0.2.27", -- "toml", -- "version_check 0.9.3", -+ "tempfile", -+ "time 0.3.7", -+ "tokio", -+ "tokio-stream", -+ "tokio-util", -+ "ubyte", -+ "version_check", - "yansi", - ] - - [[package]] - name = "rocket_codegen" --version = "0.5.0-dev" --source = "git+https://github.com/SergioBenitez/Rocket?rev=263e39b5b429de1913ce7e3036575a7b4d88b6d7#263e39b5b429de1913ce7e3036575a7b4d88b6d7" -+version = "0.5.0-rc.1" -+source = "git+https://github.com/SergioBenitez/Rocket?rev=8cae077ba1d54b92cdef3e171a730b819d5eeb8e#8cae077ba1d54b92cdef3e171a730b819d5eeb8e" - dependencies = [ - "devise", - "glob", - "indexmap", -- "quote 1.0.10", -+ "proc-macro2", -+ "quote", - "rocket_http", -- "version_check 0.9.3", -- "yansi", -+ "syn", -+ "unicode-xid", - ] - - [[package]] --name = "rocket_contrib" --version = "0.5.0-dev" --source = "git+https://github.com/SergioBenitez/Rocket?rev=263e39b5b429de1913ce7e3036575a7b4d88b6d7#263e39b5b429de1913ce7e3036575a7b4d88b6d7" --dependencies = [ -- "log 0.4.14", -- "rocket", -- "serde", -- "serde_json", --] -- --[[package]] - name = "rocket_http" --version = "0.5.0-dev" --source = "git+https://github.com/SergioBenitez/Rocket?rev=263e39b5b429de1913ce7e3036575a7b4d88b6d7#263e39b5b429de1913ce7e3036575a7b4d88b6d7" -+version = "0.5.0-rc.1" -+source = "git+https://github.com/SergioBenitez/Rocket?rev=8cae077ba1d54b92cdef3e171a730b819d5eeb8e#8cae077ba1d54b92cdef3e171a730b819d5eeb8e" - dependencies = [ -- "cookie 0.14.4", -- "hyper 0.10.16", -- "hyper-sync-rustls", -+ "cookie 0.16.0", -+ "either", -+ "http", -+ "hyper", - "indexmap", -+ "log", -+ "memchr", - "pear", -- "percent-encoding 1.0.1", -+ "percent-encoding 2.1.0", -+ "pin-project-lite", -+ "ref-cast", - "rustls", -- "smallvec 1.7.0", -+ "serde", -+ "smallvec 1.8.0", -+ "stable-pattern", - "state", -- "time 0.2.27", -- "unicode-xid 0.2.2", -+ "time 0.3.7", -+ "tokio", -+ "tokio-rustls", -+ "uncased", - ] - - [[package]] -@@ -2428,30 +2545,30 @@ dependencies = [ - - [[package]] - name = "rustls" --version = "0.17.0" -+version = "0.19.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" -+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" - dependencies = [ -- "base64 0.11.0", -- "log 0.4.14", -+ "base64 0.13.0", -+ "log", - "ring", - "sct", - "webpki", - ] - - [[package]] -+name = "rustversion" -+version = "1.0.6" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" -+ -+[[package]] - name = "ryu" - version = "1.0.9" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" - - [[package]] --name = "safemem" --version = "0.3.3" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" -- --[[package]] - name = "same-file" - version = "1.0.6" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2480,6 +2597,12 @@ dependencies = [ - ] - - [[package]] -+name = "scoped-tls" -+version = "1.0.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" -+ -+[[package]] - name = "scopeguard" - version = "1.1.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2497,9 +2620,9 @@ dependencies = [ - - [[package]] - name = "security-framework" --version = "2.4.2" -+version = "2.6.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "525bc1abfda2e1998d152c45cf13e696f76d0a4972310b22fac1658b05df7c87" -+checksum = "3fed7948b6c68acbb6e20c334f55ad635dc0f75506963de4464289fbd3b051ac" - dependencies = [ - "bitflags", - "core-foundation", -@@ -2510,9 +2633,9 @@ dependencies = [ - - [[package]] - name = "security-framework-sys" --version = "2.4.2" -+version = "2.6.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" -+checksum = "a57321bf8bc2362081b2599912d2961fe899c0efadf1b4b2f8d48b3e253bb96c" - dependencies = [ - "core-foundation-sys", - "libc", -@@ -2535,23 +2658,14 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41 - - [[package]] - name = "serde" --version = "1.0.132" -+version = "1.0.136" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008" -+checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" - dependencies = [ - "serde_derive", - ] - - [[package]] --name = "serde_bytes" --version = "0.11.5" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" --dependencies = [ -- "serde", --] -- --[[package]] - name = "serde_cbor" - version = "0.11.2" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2563,20 +2677,20 @@ dependencies = [ - - [[package]] - name = "serde_derive" --version = "1.0.132" -+version = "1.0.136" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276" -+checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] - name = "serde_json" --version = "1.0.73" -+version = "1.0.78" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "bcbd0344bc6533bc7ec56df11d42fb70f1b912351c0825ccb7211b59d8af7cf5" -+checksum = "d23c1ba4cf0efd44be32017709280b32d1cea5c3f1275c3b6d9e8bc54f758085" - dependencies = [ - "itoa 1.0.1", - "ryu", -@@ -2585,12 +2699,12 @@ dependencies = [ - - [[package]] - name = "serde_urlencoded" --version = "0.7.0" -+version = "0.7.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" -+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" - dependencies = [ - "form_urlencoded", -- "itoa 0.4.8", -+ "itoa 1.0.1", - "ryu", - "serde", - ] -@@ -2622,15 +2736,24 @@ dependencies = [ - - [[package]] - name = "sha1" --version = "0.6.0" -+version = "0.6.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" -+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" -+dependencies = [ -+ "sha1_smol", -+] - - [[package]] -+name = "sha1_smol" -+version = "1.0.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" -+ -+[[package]] - name = "sha2" --version = "0.9.8" -+version = "0.9.9" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" -+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" - dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", -@@ -2640,6 +2763,24 @@ dependencies = [ - ] - - [[package]] -+name = "sharded-slab" -+version = "0.1.4" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -+dependencies = [ -+ "lazy_static", -+] -+ -+[[package]] -+name = "signal-hook-registry" -+version = "1.4.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -+dependencies = [ -+ "libc", -+] -+ -+[[package]] - name = "simple_asn1" - version = "0.4.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2652,9 +2793,9 @@ dependencies = [ - - [[package]] - name = "siphasher" --version = "0.3.7" -+version = "0.3.9" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" -+checksum = "a86232ab60fa71287d7f2ddae4a7073f6b7aac33631c3015abb556f08c6d0a3e" - - [[package]] - name = "slab" -@@ -2673,9 +2814,9 @@ dependencies = [ - - [[package]] - name = "smallvec" --version = "1.7.0" -+version = "1.8.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" -+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" - - [[package]] - name = "socket2" -@@ -2690,9 +2831,9 @@ dependencies = [ - - [[package]] - name = "socket2" --version = "0.4.2" -+version = "0.4.4" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" -+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" - dependencies = [ - "libc", - "winapi 0.3.9", -@@ -2705,6 +2846,21 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - - [[package]] -+name = "spin" -+version = "0.9.2" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "511254be0c5bcf062b019a6c89c01a664aa359ded62f78aa72c6fc137c0590e5" -+ -+[[package]] -+name = "stable-pattern" -+version = "0.1.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045" -+dependencies = [ -+ "memchr", -+] -+ -+[[package]] - name = "stable_deref_trait" - version = "1.2.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2716,14 +2872,17 @@ version = "0.2.17" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" - dependencies = [ -- "version_check 0.9.3", -+ "version_check", - ] - - [[package]] - name = "state" --version = "0.4.2" -+version = "0.5.2" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "3015a7d0a5fd5105c91c3710d42f9ccf0abfb287d62206484dcc67f9569a6483" -+checksum = "87cf4f5369e6d3044b5e365c9690f451516ac8f0954084622b49ea3fde2f6de5" -+dependencies = [ -+ "loom", -+] - - [[package]] - name = "stdweb" -@@ -2745,11 +2904,11 @@ version = "0.5.3" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -+ "proc-macro2", -+ "quote", - "serde", - "serde_derive", -- "syn 1.0.84", -+ "syn", - ] - - [[package]] -@@ -2759,13 +2918,13 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" - dependencies = [ - "base-x", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -+ "proc-macro2", -+ "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", -- "syn 1.0.84", -+ "syn", - ] - - [[package]] -@@ -2796,8 +2955,8 @@ checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d1 - dependencies = [ - "phf_generator 0.8.0", - "phf_shared 0.8.0", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -+ "proc-macro2", -+ "quote", - ] - - [[package]] -@@ -2808,27 +2967,16 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606 - - [[package]] - name = "syn" --version = "0.15.44" -+version = "1.0.86" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -+checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" - dependencies = [ -- "proc-macro2 0.4.30", -- "quote 0.6.13", -- "unicode-xid 0.1.0", -+ "proc-macro2", -+ "quote", -+ "unicode-xid", - ] - - [[package]] --name = "syn" --version = "1.0.84" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "ecb2e6da8ee5eb9a61068762a32fa9619cc591ceb055b3687f4cd4051ec2e06b" --dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "unicode-xid 0.2.2", --] -- --[[package]] - name = "syslog" - version = "4.0.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2836,19 +2984,19 @@ checksum = "a0641142b4081d3d44beffa4eefd7346a228cdf91e - dependencies = [ - "error-chain", - "libc", -- "log 0.4.14", -+ "log", - "time 0.1.44", - ] - - [[package]] - name = "tempfile" --version = "3.2.0" -+version = "3.3.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" -+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" - dependencies = [ - "cfg-if 1.0.0", -+ "fastrand", - "libc", -- "rand 0.8.4", - "redox_syscall", - "remove_dir_all", - "winapi 0.3.9", -@@ -2880,12 +3028,21 @@ version = "1.0.30" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -+name = "thread_local" -+version = "1.1.4" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -+dependencies = [ -+ "once_cell", -+] -+ -+[[package]] - name = "threadpool" - version = "1.8.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2915,12 +3072,24 @@ dependencies = [ - "libc", - "standback", - "stdweb", -- "time-macros", -- "version_check 0.9.3", -+ "time-macros 0.1.1", -+ "version_check", - "winapi 0.3.9", - ] - - [[package]] -+name = "time" -+version = "0.3.7" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "004cbc98f30fa233c61a38bc77e96a9106e65c88f2d3bef182ae952027e5753d" -+dependencies = [ -+ "itoa 1.0.1", -+ "libc", -+ "num_threads", -+ "time-macros 0.2.3", -+] -+ -+[[package]] - name = "time-macros" - version = "0.1.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2931,16 +3100,22 @@ dependencies = [ - ] - - [[package]] -+name = "time-macros" -+version = "0.2.3" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "25eb0ca3468fc0acc11828786797f6ef9aa1555e4a211a60d64cc8e4d1be47d6" -+ -+[[package]] - name = "time-macros-impl" - version = "0.1.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" - dependencies = [ - "proc-macro-hack", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -+ "proc-macro2", -+ "quote", - "standback", -- "syn 1.0.84", -+ "syn", - ] - - [[package]] -@@ -2960,20 +3135,35 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522c - - [[package]] - name = "tokio" --version = "1.15.0" -+version = "1.16.1" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "fbbf1c778ec206785635ce8ad57fe52b3009ae9e0c9f574a728f3049d3e55838" -+checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" - dependencies = [ - "bytes 1.1.0", - "libc", - "memchr", - "mio 0.7.14", - "num_cpus", -+ "once_cell", -+ "parking_lot 0.11.2", - "pin-project-lite", -+ "signal-hook-registry", -+ "tokio-macros", - "winapi 0.3.9", - ] - - [[package]] -+name = "tokio-macros" -+version = "1.7.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" -+dependencies = [ -+ "proc-macro2", -+ "quote", -+ "syn", -+] -+ -+[[package]] - name = "tokio-native-tls" - version = "0.3.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2984,6 +3174,17 @@ dependencies = [ - ] - - [[package]] -+name = "tokio-rustls" -+version = "0.22.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -+dependencies = [ -+ "rustls", -+ "tokio", -+ "webpki", -+] -+ -+[[package]] - name = "tokio-socks" - version = "0.5.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -2996,6 +3197,17 @@ dependencies = [ - ] - - [[package]] -+name = "tokio-stream" -+version = "0.1.8" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" -+dependencies = [ -+ "futures-core", -+ "pin-project-lite", -+ "tokio", -+] -+ -+[[package]] - name = "tokio-util" - version = "0.6.9" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3004,16 +3216,16 @@ dependencies = [ - "bytes 1.1.0", - "futures-core", - "futures-sink", -- "log 0.4.14", -+ "log", - "pin-project-lite", - "tokio", - ] - - [[package]] - name = "toml" --version = "0.4.10" -+version = "0.5.8" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f" -+checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" - dependencies = [ - "serde", - ] -@@ -3043,7 +3255,7 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" - dependencies = [ - "cfg-if 1.0.0", -- "log 0.4.14", -+ "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -@@ -3055,9 +3267,9 @@ version = "0.1.18" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - ] - - [[package]] -@@ -3070,12 +3282,35 @@ dependencies = [ - ] - - [[package]] --name = "traitobject" --version = "0.1.0" -+name = "tracing-log" -+version = "0.1.2" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" -+checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" -+dependencies = [ -+ "lazy_static", -+ "log", -+ "tracing-core", -+] - - [[package]] -+name = "tracing-subscriber" -+version = "0.3.7" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "5312f325fe3588e277415f5a6cca1f4ccad0f248c4cd5a4bd33032d7286abc22" -+dependencies = [ -+ "ansi_term", -+ "lazy_static", -+ "matchers", -+ "regex", -+ "sharded-slab", -+ "smallvec 1.8.0", -+ "thread_local", -+ "tracing", -+ "tracing-core", -+ "tracing-log", -+] -+ -+[[package]] - name = "trust-dns-proto" - version = "0.20.3" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3091,9 +3326,9 @@ dependencies = [ - "idna 0.2.3", - "ipnet", - "lazy_static", -- "log 0.4.14", -+ "log", - "rand 0.8.4", -- "smallvec 1.7.0", -+ "smallvec 1.8.0", - "thiserror", - "tinyvec", - "tokio", -@@ -3110,11 +3345,11 @@ dependencies = [ - "futures-util", - "ipconfig", - "lazy_static", -- "log 0.4.14", -+ "log", - "lru-cache", - "parking_lot 0.11.2", - "resolv-conf", -- "smallvec 1.7.0", -+ "smallvec 1.8.0", - "thiserror", - "tokio", - "trust-dns-proto", -@@ -3127,21 +3362,6 @@ source = "registry+https://github.com/rust-lang/crates - checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" - - [[package]] --name = "twoway" --version = "0.1.8" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" --dependencies = [ -- "memchr", --] -- --[[package]] --name = "typeable" --version = "0.1.2" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887" -- --[[package]] - name = "typenum" - version = "1.15.0" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3165,6 +3385,15 @@ dependencies = [ - ] - - [[package]] -+name = "ubyte" -+version = "0.10.1" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "42756bb9e708855de2f8a98195643dff31a97f0485d90d8467b39dc24be9e8fe" -+dependencies = [ -+ "serde", -+] -+ -+[[package]] - name = "ucd-trie" - version = "0.1.3" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3176,28 +3405,11 @@ version = "0.9.6" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "5baeed7327e25054889b9bd4f975f32e5f4c5d434042d59ab6cd4142c0a76ed0" - dependencies = [ -- "version_check 0.9.3", -+ "serde", -+ "version_check", - ] - - [[package]] --name = "unicase" --version = "1.4.2" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" --dependencies = [ -- "version_check 0.1.5", --] -- --[[package]] --name = "unicase" --version = "2.6.0" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" --dependencies = [ -- "version_check 0.9.3", --] -- --[[package]] - name = "unicode-bidi" - version = "0.3.7" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3220,12 +3432,6 @@ checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707 - - [[package]] - name = "unicode-xid" --version = "0.1.0" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -- --[[package]] --name = "unicode-xid" - version = "0.2.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" -@@ -3272,7 +3478,7 @@ version = "0.8.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" - dependencies = [ -- "getrandom 0.2.3", -+ "getrandom 0.2.4", - ] - - [[package]] -@@ -3286,12 +3492,14 @@ dependencies = [ - "chrono-tz", - "cookie 0.15.1", - "cookie_store", -+ "ctrlc", - "data-encoding", - "data-url", - "diesel", - "diesel_migrations", - "dotenv", - "fern", -+ "futures", - "governor", - "handlebars", - "html5ever", -@@ -3300,9 +3508,8 @@ dependencies = [ - "jsonwebtoken", - "lettre", - "libsqlite3-sys", -- "log 0.4.14", -+ "log", - "markup5ever_rcdom", -- "multipart", - "num-derive", - "num-traits", - "once_cell", -@@ -3317,11 +3524,11 @@ dependencies = [ - "ring", - "rmpv", - "rocket", -- "rocket_contrib", - "serde", - "serde_json", - "syslog", - "time 0.2.27", -+ "tokio", - "totp-lite", - "tracing", - "u2f", -@@ -3339,17 +3546,11 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6ee - - [[package]] - name = "version_check" --version = "0.1.5" -+version = "0.9.4" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" -+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - - [[package]] --name = "version_check" --version = "0.9.3" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -- --[[package]] - name = "walkdir" - version = "2.3.2" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3366,7 +3567,7 @@ version = "0.3.0" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" - dependencies = [ -- "log 0.4.14", -+ "log", - "try-lock", - ] - -@@ -3384,9 +3585,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481e - - [[package]] - name = "wasm-bindgen" --version = "0.2.78" -+version = "0.2.79" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce" -+checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" - dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -@@ -3394,24 +3595,24 @@ dependencies = [ - - [[package]] - name = "wasm-bindgen-backend" --version = "0.2.78" -+version = "0.2.79" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b" -+checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" - dependencies = [ - "bumpalo", - "lazy_static", -- "log 0.4.14", -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "log", -+ "proc-macro2", -+ "quote", -+ "syn", - "wasm-bindgen-shared", - ] - - [[package]] - name = "wasm-bindgen-futures" --version = "0.4.28" -+version = "0.4.29" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "8e8d7523cb1f2a4c96c1317ca690031b714a51cc14e05f712446691f413f5d39" -+checksum = "2eb6ec270a31b1d3c7e266b999739109abce8b6c87e4b31fcfcd788b65267395" - dependencies = [ - "cfg-if 1.0.0", - "js-sys", -@@ -3421,38 +3622,38 @@ dependencies = [ - - [[package]] - name = "wasm-bindgen-macro" --version = "0.2.78" -+version = "0.2.79" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9" -+checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" - dependencies = [ -- "quote 1.0.10", -+ "quote", - "wasm-bindgen-macro-support", - ] - - [[package]] - name = "wasm-bindgen-macro-support" --version = "0.2.78" -+version = "0.2.79" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab" -+checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" - dependencies = [ -- "proc-macro2 1.0.34", -- "quote 1.0.10", -- "syn 1.0.84", -+ "proc-macro2", -+ "quote", -+ "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", - ] - - [[package]] - name = "wasm-bindgen-shared" --version = "0.2.78" -+version = "0.2.79" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc" -+checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" - - [[package]] - name = "web-sys" --version = "0.3.55" -+version = "0.3.56" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb" -+checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" - dependencies = [ - "js-sys", - "wasm-bindgen", -@@ -3460,16 +3661,15 @@ dependencies = [ - - [[package]] - name = "webauthn-rs" --version = "0.3.1" -+version = "0.3.2" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "261310333d5941ec47038eed295ee0ed6f5cee36b7575dc6c4b63ee8e7fe590c" -+checksum = "90b266eccb4b32595876f5c73ea443b0516da0b1df72ca07bc08ed9ba7f96ec1" - dependencies = [ - "base64 0.13.0", -- "nom 4.1.1", -+ "nom 7.1.0", - "openssl", - "rand 0.8.4", - "serde", -- "serde_bytes", - "serde_cbor", - "serde_derive", - "serde_json", -@@ -3489,15 +3689,6 @@ dependencies = [ - ] - - [[package]] --name = "webpki-roots" --version = "0.19.0" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739" --dependencies = [ -- "webpki", --] -- --[[package]] - name = "widestring" - version = "0.4.3" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -3580,7 +3771,7 @@ version = "0.16.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "9234163818fd8e2418fcde330655e757900d4236acd8cc70fef345ef91f6d865" - dependencies = [ -- "log 0.4.14", -+ "log", - "mac", - "markup5ever", - "time 0.1.44", diff --git a/security/vaultwarden/patches/patch-Cargo_toml b/security/vaultwarden/patches/patch-Cargo_toml deleted file mode 100644 index 027d99cc0b2..00000000000 --- a/security/vaultwarden/patches/patch-Cargo_toml +++ /dev/null @@ -1,103 +0,0 @@ -Index: Cargo.toml ---- Cargo.toml.orig -+++ Cargo.toml -@@ -3,7 +3,7 @@ name = "vaultwarden" - version = "1.0.0" - authors = ["Daniel García "] - edition = "2021" --rust-version = "1.60" -+rust-version = "1.56" - resolver = "2" - - repository = "https://github.com/dani-garcia/vaultwarden" -@@ -13,6 +13,7 @@ publish = false - build = "build.rs" - - [features] -+# default = ["sqlite"] - # Empty to keep compatibility, prefer to set USE_SYSLOG=true - enable_syslog = [] - mysql = ["diesel/mysql", "diesel_migrations/mysql"] -@@ -29,22 +30,22 @@ unstable = [] - syslog = "4.0.1" - - [dependencies] --# Web framework for nightly with a focus on ease-of-use, expressibility, and speed. --rocket = { version = "=0.5.0-dev", features = ["tls"], default-features = false } --rocket_contrib = "=0.5.0-dev" -+# Web framework -+rocket = { version = "0.5.0-rc.1", features = ["tls", "json"], default-features = false } - --# HTTP client --reqwest = { version = "0.11.8", features = ["blocking", "json", "gzip", "brotli", "socks", "cookies", "trust-dns"] } -+# Async futures -+futures = "0.3.19" -+tokio = { version = "1.16.1", features = ["rt-multi-thread", "fs", "io-util", "parking_lot"] } -+ -+ # HTTP client -+reqwest = { version = "0.11.9", features = ["stream", "json", "gzip", "brotli", "socks", "cookies", "trust-dns"] } -+bytes = "1.1.0" - - # Used for custom short lived cookie jar - cookie = "0.15.1" - cookie_store = "0.15.1" --bytes = "1.1.0" - url = "2.2.2" - --# multipart/form-data support --multipart = { version = "0.18.0", features = ["server"], default-features = false } -- - # WebSockets library - ws = { version = "0.11.1", package = "parity-ws" } - -@@ -55,8 +56,8 @@ rmpv = "1.0.0" - chashmap = "2.2.2" - - # A generic serialization/deserialization framework --serde = { version = "1.0.132", features = ["derive"] } --serde_json = "1.0.73" -+serde = { version = "1.0.136", features = ["derive"] } -+serde_json = "1.0.78" - - # Logging - log = "0.4.14" -@@ -95,7 +96,7 @@ jsonwebtoken = "7.2.0" - - # U2F library - u2f = "0.2.0" --webauthn-rs = "0.3.1" -+webauthn-rs = "0.3.2" - - # Yubico Library - yubico = { version = "0.10.0", features = ["online-tokio"], default-features = false } -@@ -115,7 +116,7 @@ tracing = { version = "0.1.29", features = ["log"] } # - lettre = { version = "0.10.0-rc.4", features = ["smtp-transport", "builder", "serde", "native-tls", "hostname", "tracing"], default-features = false } - - # Template library --handlebars = { version = "4.1.6", features = ["dir_source"] } -+handlebars = { version = "4.2.1", features = ["dir_source"] } - - # For favicon extraction from main website - html5ever = "0.25.1" -@@ -135,16 +136,16 @@ idna = "0.2.3" - pico-args = "0.4.2" - - # Logging panics to logfile instead stderr only --backtrace = "0.3.63" -+backtrace = "0.3.64" - - # Macro ident concatenation - paste = "1.0.6" --governor = "0.3.2" -+governor = "0.4.1" - -+ctrlc = { version = "3.2.1", features = ["termination"] } -+ - [patch.crates-io] --# Use newest ring --rocket = { git = 'https://github.com/SergioBenitez/Rocket', rev = '263e39b5b429de1913ce7e3036575a7b4d88b6d7' } --rocket_contrib = { git = 'https://github.com/SergioBenitez/Rocket', rev = '263e39b5b429de1913ce7e3036575a7b4d88b6d7' } -+rocket = { git = 'https://github.com/SergioBenitez/Rocket', rev = '8cae077ba1d54b92cdef3e171a730b819d5eeb8e' } - - # The maintainer of the `job_scheduler` crate doesn't seem to have responded - # to any issues or PRs for almost a year (as of April 2021). This hopefully diff --git a/security/vaultwarden/patches/patch-Rocket_toml b/security/vaultwarden/patches/patch-Rocket_toml deleted file mode 100644 index 2faae10d022..00000000000 --- a/security/vaultwarden/patches/patch-Rocket_toml +++ /dev/null @@ -1,6 +0,0 @@ -Index: Rocket.toml ---- Rocket.toml.orig -+++ Rocket.toml -@@ -1,2 +0,0 @@ --[global.limits] --json = 10485760 # 10 MiB diff --git a/security/vaultwarden/patches/patch-_env_template b/security/vaultwarden/patches/patch-_env_template deleted file mode 100644 index 66a54f30eec..00000000000 --- a/security/vaultwarden/patches/patch-_env_template +++ /dev/null @@ -1,21 +0,0 @@ -Index: .env.template ---- .env.template.orig -+++ .env.template -@@ -53,7 +53,7 @@ - # WEBSOCKET_ENABLED=false - - ## Controls the WebSocket server address and port --# WEBSOCKET_ADDRESS=0.0.0.0 -+WEBSOCKET_ADDRESS=127.0.0.1 - # WEBSOCKET_PORT=3012 - - ## Controls whether users are allowed to create Bitwarden Sends. -@@ -320,7 +320,7 @@ - - ## Rocket specific settings - ## See https://rocket.rs/v0.4/guide/configuration/ for more details. --# ROCKET_ADDRESS=0.0.0.0 -+ROCKET_ADDRESS=127.0.0.1 - # ROCKET_PORT=80 # Defaults to 80 in the Docker images, or 8000 otherwise. - # ROCKET_WORKERS=10 - # ROCKET_TLS={certs="/path/to/certs.pem",key="/path/to/key.pem"} diff --git a/security/vaultwarden/patches/patch-rust-toolchain b/security/vaultwarden/patches/patch-rust-toolchain deleted file mode 100644 index c337d84c1ac..00000000000 --- a/security/vaultwarden/patches/patch-rust-toolchain +++ /dev/null @@ -1,6 +0,0 @@ -Index: rust-toolchain ---- rust-toolchain.orig -+++ rust-toolchain -@@ -1 +1 @@ --nightly-2022-01-23 -+stable diff --git a/security/vaultwarden/patches/patch-src_api_admin_rs b/security/vaultwarden/patches/patch-src_api_admin_rs deleted file mode 100644 index 97b12d13157..00000000000 --- a/security/vaultwarden/patches/patch-src_api_admin_rs +++ /dev/null @@ -1,200 +0,0 @@ -Index: src/api/admin.rs ---- src/api/admin.rs.orig -+++ src/api/admin.rs -@@ -3,13 +3,14 @@ use serde::de::DeserializeOwned; - use serde_json::Value; - use std::env; - -+use rocket::serde::json::Json; - use rocket::{ -- http::{Cookie, Cookies, SameSite, Status}, -- request::{self, FlashMessage, Form, FromRequest, Outcome, Request}, -- response::{content::Html, Flash, Redirect}, -+ form::Form, -+ http::{Cookie, CookieJar, SameSite, Status}, -+ request::{self, FlashMessage, FromRequest, Outcome, Request}, -+ response::{content::RawHtml as Html, Flash, Redirect}, - Route, - }; --use rocket_contrib::json::Json; - - use crate::{ - api::{ApiResult, EmptyResult, JsonResult, NumberOrString}, -@@ -85,10 +86,11 @@ fn admin_path() -> String { - - struct Referer(Option); - --impl<'a, 'r> FromRequest<'a, 'r> for Referer { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for Referer { - type Error = (); - -- fn from_request(request: &'a Request<'r>) -> request::Outcome { -+ async fn from_request(request: &'r Request<'_>) -> request::Outcome { - Outcome::Success(Referer(request.headers().get_one("Referer").map(str::to_string))) - } - } -@@ -96,10 +98,11 @@ impl<'a, 'r> FromRequest<'a, 'r> for Referer { - #[derive(Debug)] - struct IpHeader(Option); - --impl<'a, 'r> FromRequest<'a, 'r> for IpHeader { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for IpHeader { - type Error = (); - -- fn from_request(req: &'a Request<'r>) -> Outcome { -+ async fn from_request(req: &'r Request<'_>) -> Outcome { - if req.headers().get_one(&CONFIG.ip_header()).is_some() { - Outcome::Success(IpHeader(Some(CONFIG.ip_header()))) - } else if req.headers().get_one("X-Client-IP").is_some() { -@@ -138,7 +141,7 @@ fn admin_url(referer: Referer) -> String { - #[get("/", rank = 2)] - fn admin_login(flash: Option) -> ApiResult> { - // If there is an error, show it -- let msg = flash.map(|msg| format!("{}: {}", msg.name(), msg.msg())); -+ let msg = flash.map(|msg| format!("{}: {}", msg.kind(), msg.message())); - let json = json!({ - "page_content": "admin/login", - "version": VERSION, -@@ -159,7 +162,7 @@ struct LoginForm { - #[post("/", data = "")] - fn post_admin_login( - data: Form, -- mut cookies: Cookies, -+ cookies: &CookieJar, - ip: ClientIp, - referer: Referer, - ) -> Result> { -@@ -180,7 +183,7 @@ fn post_admin_login( - - let cookie = Cookie::build(COOKIE_NAME, jwt) - .path(admin_path()) -- .max_age(time::Duration::minutes(20)) -+ .max_age(rocket::time::Duration::minutes(20)) - .same_site(SameSite::Strict) - .http_only(true) - .finish(); -@@ -297,7 +300,7 @@ fn test_smtp(data: Json, _token: AdminToke - } - - #[get("/logout")] --fn logout(mut cookies: Cookies, referer: Referer) -> Redirect { -+fn logout(cookies: &CookieJar, referer: Referer) -> Redirect { - cookies.remove(Cookie::named(COOKIE_NAME)); - Redirect::to(admin_url(referer)) - } -@@ -462,23 +465,23 @@ struct GitCommit { - sha: String, - } - --fn get_github_api(url: &str) -> Result { -+async fn get_github_api(url: &str) -> Result { - let github_api = get_reqwest_client(); - -- Ok(github_api.get(url).send()?.error_for_status()?.json::()?) -+ Ok(github_api.get(url).send().await?.error_for_status()?.json::().await?) - } - --fn has_http_access() -> bool { -+async fn has_http_access() -> bool { - let http_access = get_reqwest_client(); - -- match http_access.head("https://github.com/dani-garcia/vaultwarden").send() { -+ match http_access.head("https://github.com/dani-garcia/vaultwarden").send().await { - Ok(r) => r.status().is_success(), - _ => false, - } - } - - #[get("/diagnostics")] --fn diagnostics(_token: AdminToken, ip_header: IpHeader, conn: DbConn) -> ApiResult> { -+async fn diagnostics(_token: AdminToken, ip_header: IpHeader, conn: DbConn) -> ApiResult> { - use crate::util::read_file_string; - use chrono::prelude::*; - use std::net::ToSocketAddrs; -@@ -497,7 +500,7 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader - - // Execute some environment checks - let running_within_docker = is_running_in_docker(); -- let has_http_access = has_http_access(); -+ let has_http_access = has_http_access().await; - let uses_proxy = env::var_os("HTTP_PROXY").is_some() - || env::var_os("http_proxy").is_some() - || env::var_os("HTTPS_PROXY").is_some() -@@ -513,11 +516,14 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader - // TODO: Maybe we need to cache this using a LazyStatic or something. Github only allows 60 requests per hour, and we use 3 here already. - let (latest_release, latest_commit, latest_web_build) = if has_http_access { - ( -- match get_github_api::("https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest") { -+ match get_github_api::("https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest") -+ .await -+ { - Ok(r) => r.tag_name, - _ => "-".to_string(), - }, -- match get_github_api::("https://api.github.com/repos/dani-garcia/vaultwarden/commits/main") { -+ match get_github_api::("https://api.github.com/repos/dani-garcia/vaultwarden/commits/main").await -+ { - Ok(mut c) => { - c.sha.truncate(8); - c.sha -@@ -531,7 +537,9 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader - } else { - match get_github_api::( - "https://api.github.com/repos/dani-garcia/bw_web_builds/releases/latest", -- ) { -+ ) -+ .await -+ { - Ok(r) => r.tag_name.trim_start_matches('v').to_string(), - _ => "-".to_string(), - } -@@ -562,7 +570,7 @@ fn diagnostics(_token: AdminToken, ip_header: IpHeader - "ip_header_config": &CONFIG.ip_header(), - "uses_proxy": uses_proxy, - "db_type": *DB_TYPE, -- "db_version": get_sql_server_version(&conn), -+ "db_version": get_sql_server_version(&conn).await, - "admin_url": format!("{}/diagnostics", admin_url(Referer(None))), - "overrides": &CONFIG.get_overrides().join(", "), - "server_time_local": Local::now().format("%Y-%m-%d %H:%M:%S %Z").to_string(), -@@ -591,9 +599,9 @@ fn delete_config(_token: AdminToken) -> EmptyResult { - } - - #[post("/config/backup_db")] --fn backup_db(_token: AdminToken, conn: DbConn) -> EmptyResult { -+async fn backup_db(_token: AdminToken, conn: DbConn) -> EmptyResult { - if *CAN_BACKUP { -- backup_database(&conn) -+ backup_database(&conn).await - } else { - err!("Can't back up current DB (Only SQLite supports this feature)"); - } -@@ -601,21 +609,22 @@ fn backup_db(_token: AdminToken, conn: DbConn) -> Empt - - pub struct AdminToken {} - --impl<'a, 'r> FromRequest<'a, 'r> for AdminToken { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for AdminToken { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> request::Outcome { -+ async fn from_request(request: &'r Request<'_>) -> request::Outcome { - if CONFIG.disable_admin_token() { - Outcome::Success(AdminToken {}) - } else { -- let mut cookies = request.cookies(); -+ let cookies = request.cookies(); - - let access_token = match cookies.get(COOKIE_NAME) { - Some(cookie) => cookie.value(), - None => return Outcome::Forward(()), // If there is no cookie, redirect to login - }; - -- let ip = match request.guard::() { -+ let ip = match ClientIp::from_request(request).await { - Outcome::Success(ip) => ip.ip, - _ => err_handler!("Error getting Client IP"), - }; diff --git a/security/vaultwarden/patches/patch-src_api_core_accounts_rs b/security/vaultwarden/patches/patch-src_api_core_accounts_rs deleted file mode 100644 index 76d08c119ea..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_accounts_rs +++ /dev/null @@ -1,10 +0,0 @@ -Index: src/api/core/accounts.rs ---- src/api/core/accounts.rs.orig -+++ src/api/core/accounts.rs -@@ -1,5 +1,5 @@ - use chrono::Utc; --use rocket_contrib::json::Json; -+use rocket::serde::json::Json; - use serde_json::Value; - - use crate::{ diff --git a/security/vaultwarden/patches/patch-src_api_core_ciphers_rs b/security/vaultwarden/patches/patch-src_api_core_ciphers_rs deleted file mode 100644 index 5392e159aa7..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_ciphers_rs +++ /dev/null @@ -1,394 +0,0 @@ -Index: src/api/core/ciphers.rs ---- src/api/core/ciphers.rs.orig -+++ src/api/core/ciphers.rs -@@ -1,13 +1,14 @@ - use std::collections::{HashMap, HashSet}; --use std::path::{Path, PathBuf}; - - use chrono::{NaiveDateTime, Utc}; --use rocket::{http::ContentType, request::Form, Data, Route}; --use rocket_contrib::json::Json; -+use rocket::fs::TempFile; -+use rocket::serde::json::Json; -+use rocket::{ -+ form::{Form, FromForm}, -+ Route, -+}; - use serde_json::Value; - --use multipart::server::{save::SavedData, Multipart, SaveResult}; -- - use crate::{ - api::{self, EmptyResult, JsonResult, JsonUpcase, Notify, PasswordData, UpdateType}, - auth::Headers, -@@ -79,9 +80,9 @@ pub fn routes() -> Vec { - ] - } - --pub fn purge_trashed_ciphers(pool: DbPool) { -+pub async fn purge_trashed_ciphers(pool: DbPool) { - debug!("Purging trashed ciphers"); -- if let Ok(conn) = pool.get() { -+ if let Ok(conn) = pool.get().await { - Cipher::purge_trash(&conn); - } else { - error!("Failed to get DB connection while purging trashed ciphers") -@@ -90,12 +91,12 @@ pub fn purge_trashed_ciphers(pool: DbPool) { - - #[derive(FromForm, Default)] - struct SyncData { -- #[form(field = "excludeDomains")] -+ #[field(name = "excludeDomains")] - exclude_domains: bool, // Default: 'false' - } - - #[get("/sync?")] --fn sync(data: Form, headers: Headers, conn: DbConn) -> Json { -+fn sync(data: SyncData, headers: Headers, conn: DbConn) -> Json { - let user_json = headers.user.to_json(&conn); - - let folders = Folder::find_by_user(&headers.user.uuid, &conn); -@@ -828,6 +829,12 @@ fn post_attachment_v2( - }))) - } - -+#[derive(FromForm)] -+struct UploadData<'f> { -+ key: Option, -+ data: TempFile<'f>, -+} -+ - /// Saves the data content of an attachment to a file. This is common code - /// shared between the v2 and legacy attachment APIs. - /// -@@ -836,22 +843,21 @@ fn post_attachment_v2( - /// - /// When used with the v2 API, post_attachment_v2() has already created the - /// database record, which is passed in as `attachment`. --fn save_attachment( -+async fn save_attachment( - mut attachment: Option, - cipher_uuid: String, -- data: Data, -- content_type: &ContentType, -+ data: Form>, - headers: &Headers, -- conn: &DbConn, -- nt: Notify, --) -> Result { -- let cipher = match Cipher::find_by_uuid(&cipher_uuid, conn) { -+ conn: DbConn, -+ nt: Notify<'_>, -+) -> Result<(Cipher, DbConn), crate::error::Error> { -+ let cipher = match Cipher::find_by_uuid(&cipher_uuid, &conn) { - Some(cipher) => cipher, -- None => err_discard!("Cipher doesn't exist", data), -+ None => err!("Cipher doesn't exist"), - }; - -- if !cipher.is_write_accessible_to_user(&headers.user.uuid, conn) { -- err_discard!("Cipher is not write accessible", data) -+ if !cipher.is_write_accessible_to_user(&headers.user.uuid, &conn) { -+ err!("Cipher is not write accessible") - } - - // In the v2 API, the attachment record has already been created, -@@ -863,11 +869,11 @@ fn save_attachment( - - let size_limit = if let Some(ref user_uuid) = cipher.user_uuid { - match CONFIG.user_attachment_limit() { -- Some(0) => err_discard!("Attachments are disabled", data), -+ Some(0) => err!("Attachments are disabled"), - Some(limit_kb) => { -- let left = (limit_kb * 1024) - Attachment::size_by_user(user_uuid, conn) + size_adjust; -+ let left = (limit_kb * 1024) - Attachment::size_by_user(user_uuid, &conn) + size_adjust; - if left <= 0 { -- err_discard!("Attachment storage limit reached! Delete some attachments to free up space", data) -+ err!("Attachment storage limit reached! Delete some attachments to free up space") - } - Some(left as u64) - } -@@ -875,130 +881,78 @@ fn save_attachment( - } - } else if let Some(ref org_uuid) = cipher.organization_uuid { - match CONFIG.org_attachment_limit() { -- Some(0) => err_discard!("Attachments are disabled", data), -+ Some(0) => err!("Attachments are disabled"), - Some(limit_kb) => { -- let left = (limit_kb * 1024) - Attachment::size_by_org(org_uuid, conn) + size_adjust; -+ let left = (limit_kb * 1024) - Attachment::size_by_org(org_uuid, &conn) + size_adjust; - if left <= 0 { -- err_discard!("Attachment storage limit reached! Delete some attachments to free up space", data) -+ err!("Attachment storage limit reached! Delete some attachments to free up space") - } - Some(left as u64) - } - None => None, - } - } else { -- err_discard!("Cipher is neither owned by a user nor an organization", data); -+ err!("Cipher is neither owned by a user nor an organization"); - }; - -- let mut params = content_type.params(); -- let boundary_pair = params.next().expect("No boundary provided"); -- let boundary = boundary_pair.1; -+ let mut data = data.into_inner(); - -- let base_path = Path::new(&CONFIG.attachments_folder()).join(&cipher_uuid); -- let mut path = PathBuf::new(); -+ if let Some(size_limit) = size_limit { -+ if data.data.len() > size_limit { -+ err!("Attachment storage limit exceeded with this file"); -+ } -+ } - -- let mut attachment_key = None; -- let mut error = None; -+ let file_id = match &attachment { -+ Some(attachment) => attachment.id.clone(), // v2 API -+ None => crypto::generate_attachment_id(), // Legacy API -+ }; - -- Multipart::with_body(data.open(), boundary) -- .foreach_entry(|mut field| { -- match &*field.headers.name { -- "key" => { -- use std::io::Read; -- let mut key_buffer = String::new(); -- if field.data.read_to_string(&mut key_buffer).is_ok() { -- attachment_key = Some(key_buffer); -- } -- } -- "data" => { -- // In the legacy API, this is the encrypted filename -- // provided by the client, stored to the database as-is. -- // In the v2 API, this value doesn't matter, as it was -- // already provided and stored via an earlier API call. -- let encrypted_filename = field.headers.filename; -+ let folder_path = tokio::fs::canonicalize(&CONFIG.attachments_folder()).await?.join(&cipher_uuid); -+ let file_path = folder_path.join(&file_id); -+ tokio::fs::create_dir_all(&folder_path).await?; - -- // This random ID is used as the name of the file on disk. -- // In the legacy API, we need to generate this value here. -- // In the v2 API, we use the value from post_attachment_v2(). -- let file_id = match &attachment { -- Some(attachment) => attachment.id.clone(), // v2 API -- None => crypto::generate_attachment_id(), // Legacy API -- }; -- path = base_path.join(&file_id); -+ let size = data.data.len() as i32; -+ if let Some(attachment) = &mut attachment { -+ // v2 API - -- let size = -- match field.data.save().memory_threshold(0).size_limit(size_limit).with_path(path.clone()) { -- SaveResult::Full(SavedData::File(_, size)) => size as i32, -- SaveResult::Full(other) => { -- error = Some(format!("Attachment is not a file: {:?}", other)); -- return; -- } -- SaveResult::Partial(_, reason) => { -- error = Some(format!("Attachment storage limit exceeded with this file: {:?}", reason)); -- return; -- } -- SaveResult::Error(e) => { -- error = Some(format!("Error: {:?}", e)); -- return; -- } -- }; -+ // Check the actual size against the size initially provided by -+ // the client. Upstream allows +/- 1 MiB deviation from this -+ // size, but it's not clear when or why this is needed. -+ const LEEWAY: i32 = 1024 * 1024; // 1 MiB -+ let min_size = attachment.file_size - LEEWAY; -+ let max_size = attachment.file_size + LEEWAY; - -- if let Some(attachment) = &mut attachment { -- // v2 API -- -- // Check the actual size against the size initially provided by -- // the client. Upstream allows +/- 1 MiB deviation from this -- // size, but it's not clear when or why this is needed. -- const LEEWAY: i32 = 1024 * 1024; // 1 MiB -- let min_size = attachment.file_size - LEEWAY; -- let max_size = attachment.file_size + LEEWAY; -- -- if min_size <= size && size <= max_size { -- if size != attachment.file_size { -- // Update the attachment with the actual file size. -- attachment.file_size = size; -- attachment.save(conn).expect("Error updating attachment"); -- } -- } else { -- attachment.delete(conn).ok(); -- -- let err_msg = "Attachment size mismatch".to_string(); -- error!("{} (expected within [{}, {}], got {})", err_msg, min_size, max_size, size); -- error = Some(err_msg); -- } -- } else { -- // Legacy API -- -- if encrypted_filename.is_none() { -- error = Some("No filename provided".to_string()); -- return; -- } -- if attachment_key.is_none() { -- error = Some("No attachment key provided".to_string()); -- return; -- } -- let attachment = Attachment::new( -- file_id, -- cipher_uuid.clone(), -- encrypted_filename.unwrap(), -- size, -- attachment_key.clone(), -- ); -- attachment.save(conn).expect("Error saving attachment"); -- } -- } -- _ => error!("Invalid multipart name"), -+ if min_size <= size && size <= max_size { -+ if size != attachment.file_size { -+ // Update the attachment with the actual file size. -+ attachment.file_size = size; -+ attachment.save(&conn).expect("Error updating attachment"); - } -- }) -- .expect("Error processing multipart data"); -+ } else { -+ attachment.delete(&conn).ok(); - -- if let Some(ref e) = error { -- std::fs::remove_file(path).ok(); -- err!(e); -+ err!(format!("Attachment size mismatch (expected within [{}, {}], got {})", min_size, max_size, size)); -+ } -+ } else { -+ // Legacy API -+ let encrypted_filename = data.data.raw_name().map(|s| s.dangerous_unsafe_unsanitized_raw().to_string()); -+ -+ if encrypted_filename.is_none() { -+ err!("No filename provided") -+ } -+ if data.key.is_none() { -+ err!("No attachment key provided") -+ } -+ let attachment = Attachment::new(file_id, cipher_uuid.clone(), encrypted_filename.unwrap(), size, data.key); -+ attachment.save(&conn).expect("Error saving attachment"); - } - -- nt.send_cipher_update(UpdateType::CipherUpdate, &cipher, &cipher.update_users_revision(conn)); -+ data.data.persist_to(file_path).await?; - -- Ok(cipher) -+ nt.send_cipher_update(UpdateType::CipherUpdate, &cipher, &cipher.update_users_revision(&conn)); -+ -+ Ok((cipher, conn)) - } - - /// v2 API for uploading the actual data content of an attachment. -@@ -1006,14 +960,13 @@ fn save_attachment( - /// /ciphers//attachment/v2 route, which would otherwise conflict - /// with this one. - #[post("/ciphers//attachment/", format = "multipart/form-data", data = "", rank = 1)] --fn post_attachment_v2_data( -+async fn post_attachment_v2_data( - uuid: String, - attachment_id: String, -- data: Data, -- content_type: &ContentType, -+ data: Form>, - headers: Headers, - conn: DbConn, -- nt: Notify, -+ nt: Notify<'_>, - ) -> EmptyResult { - let attachment = match Attachment::find_by_id(&attachment_id, &conn) { - Some(attachment) if uuid == attachment.cipher_uuid => Some(attachment), -@@ -1021,54 +974,51 @@ fn post_attachment_v2_data( - None => err!("Attachment doesn't exist"), - }; - -- save_attachment(attachment, uuid, data, content_type, &headers, &conn, nt)?; -+ save_attachment(attachment, uuid, data, &headers, conn, nt).await?; - - Ok(()) - } - - /// Legacy API for creating an attachment associated with a cipher. - #[post("/ciphers//attachment", format = "multipart/form-data", data = "")] --fn post_attachment( -+async fn post_attachment( - uuid: String, -- data: Data, -- content_type: &ContentType, -+ data: Form>, - headers: Headers, - conn: DbConn, -- nt: Notify, -+ nt: Notify<'_>, - ) -> JsonResult { - // Setting this as None signifies to save_attachment() that it should create - // the attachment database record as well as saving the data to disk. - let attachment = None; - -- let cipher = save_attachment(attachment, uuid, data, content_type, &headers, &conn, nt)?; -+ let (cipher, conn) = save_attachment(attachment, uuid, data, &headers, conn, nt).await?; - - Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, &conn))) - } - - #[post("/ciphers//attachment-admin", format = "multipart/form-data", data = "")] --fn post_attachment_admin( -+async fn post_attachment_admin( - uuid: String, -- data: Data, -- content_type: &ContentType, -+ data: Form>, - headers: Headers, - conn: DbConn, -- nt: Notify, -+ nt: Notify<'_>, - ) -> JsonResult { -- post_attachment(uuid, data, content_type, headers, conn, nt) -+ post_attachment(uuid, data, headers, conn, nt).await - } - - #[post("/ciphers//attachment//share", format = "multipart/form-data", data = "")] --fn post_attachment_share( -+async fn post_attachment_share( - uuid: String, - attachment_id: String, -- data: Data, -- content_type: &ContentType, -+ data: Form>, - headers: Headers, - conn: DbConn, -- nt: Notify, -+ nt: Notify<'_>, - ) -> JsonResult { - _delete_cipher_attachment_by_id(&uuid, &attachment_id, &headers, &conn, &nt)?; -- post_attachment(uuid, data, content_type, headers, conn, nt) -+ post_attachment(uuid, data, headers, conn, nt).await - } - - #[post("/ciphers//attachment//delete-admin")] -@@ -1248,13 +1198,13 @@ fn move_cipher_selected_put( - - #[derive(FromForm)] - struct OrganizationId { -- #[form(field = "organizationId")] -+ #[field(name = "organizationId")] - org_id: String, - } - - #[post("/ciphers/purge?", data = "")] - fn delete_all( -- organization: Option>, -+ organization: Option, - data: JsonUpcase, - headers: Headers, - conn: DbConn, diff --git a/security/vaultwarden/patches/patch-src_api_core_emergency_access_rs b/security/vaultwarden/patches/patch-src_api_core_emergency_access_rs deleted file mode 100644 index 5168709f535..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_emergency_access_rs +++ /dev/null @@ -1,43 +0,0 @@ -Index: src/api/core/emergency_access.rs ---- src/api/core/emergency_access.rs.orig -+++ src/api/core/emergency_access.rs -@@ -1,6 +1,6 @@ - use chrono::{Duration, Utc}; -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value; - use std::borrow::Borrow; - -@@ -709,13 +709,13 @@ fn check_emergency_access_allowed() -> EmptyResult { - Ok(()) - } - --pub fn emergency_request_timeout_job(pool: DbPool) { -+pub async fn emergency_request_timeout_job(pool: DbPool) { - debug!("Start emergency_request_timeout_job"); - if !CONFIG.emergency_access_allowed() { - return; - } - -- if let Ok(conn) = pool.get() { -+ if let Ok(conn) = pool.get().await { - let emergency_access_list = EmergencyAccess::find_all_recoveries(&conn); - - if emergency_access_list.is_empty() { -@@ -756,13 +756,13 @@ pub fn emergency_request_timeout_job(pool: DbPool) { - } - } - --pub fn emergency_notification_reminder_job(pool: DbPool) { -+pub async fn emergency_notification_reminder_job(pool: DbPool) { - debug!("Start emergency_notification_reminder_job"); - if !CONFIG.emergency_access_allowed() { - return; - } - -- if let Ok(conn) = pool.get() { -+ if let Ok(conn) = pool.get().await { - let emergency_access_list = EmergencyAccess::find_all_recoveries(&conn); - - if emergency_access_list.is_empty() { diff --git a/security/vaultwarden/patches/patch-src_api_core_folders_rs b/security/vaultwarden/patches/patch-src_api_core_folders_rs deleted file mode 100644 index 967494e6b29..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_folders_rs +++ /dev/null @@ -1,9 +0,0 @@ -Index: src/api/core/folders.rs ---- src/api/core/folders.rs.orig -+++ src/api/core/folders.rs -@@ -1,4 +1,4 @@ --use rocket_contrib::json::Json; -+use rocket::serde::json::Json; - use serde_json::Value; - - use crate::{ diff --git a/security/vaultwarden/patches/patch-src_api_core_mod_rs b/security/vaultwarden/patches/patch-src_api_core_mod_rs deleted file mode 100644 index f233259352c..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_mod_rs +++ /dev/null @@ -1,39 +0,0 @@ -Index: src/api/core/mod.rs ---- src/api/core/mod.rs.orig -+++ src/api/core/mod.rs -@@ -31,8 +31,8 @@ pub fn routes() -> Vec { - // - // Move this somewhere else - // -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value; - - use crate::{ -@@ -144,7 +144,7 @@ fn put_eq_domains(data: JsonUpcase, h - } - - #[get("/hibp/breach?")] --fn hibp_breach(username: String) -> JsonResult { -+async fn hibp_breach(username: String) -> JsonResult { - let url = format!( - "https://haveibeenpwned.com/api/v3/breachedaccount/{}?truncateResponse=false&includeUnverified=false", - username -@@ -153,14 +153,14 @@ fn hibp_breach(username: String) -> JsonResult { - if let Some(api_key) = crate::CONFIG.hibp_api_key() { - let hibp_client = get_reqwest_client(); - -- let res = hibp_client.get(&url).header("hibp-api-key", api_key).send()?; -+ let res = hibp_client.get(&url).header("hibp-api-key", api_key).send().await?; - - // If we get a 404, return a 404, it means no breached accounts - if res.status() == 404 { - return Err(Error::empty().with_code(404)); - } - -- let value: Value = res.error_for_status()?.json()?; -+ let value: Value = res.error_for_status()?.json().await?; - Ok(Json(value)) - } else { - Ok(Json(json!([{ diff --git a/security/vaultwarden/patches/patch-src_api_core_organizations_rs b/security/vaultwarden/patches/patch-src_api_core_organizations_rs deleted file mode 100644 index 429c1c57909..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_organizations_rs +++ /dev/null @@ -1,44 +0,0 @@ -Index: src/api/core/organizations.rs ---- src/api/core/organizations.rs.orig -+++ src/api/core/organizations.rs -@@ -1,6 +1,6 @@ - use num_traits::FromPrimitive; --use rocket::{request::Form, Route}; --use rocket_contrib::json::Json; -+use rocket::serde::json::Json; -+use rocket::Route; - use serde_json::Value; - - use crate::{ -@@ -469,12 +469,12 @@ fn put_collection_users( - - #[derive(FromForm)] - struct OrgIdData { -- #[form(field = "organizationId")] -+ #[field(name = "organizationId")] - organization_id: String, - } - - #[get("/ciphers/organization-details?")] --fn get_org_details(data: Form, headers: Headers, conn: DbConn) -> Json { -+fn get_org_details(data: OrgIdData, headers: Headers, conn: DbConn) -> Json { - let ciphers = Cipher::find_by_org(&data.organization_id, &conn); - let ciphers_json: Vec = - ciphers.iter().map(|c| c.to_json(&headers.host, &headers.user.uuid, &conn)).collect(); -@@ -1097,14 +1097,14 @@ struct RelationsData { - - #[post("/ciphers/import-organization?", data = "")] - fn post_org_import( -- query: Form, -+ query: OrgIdData, - data: JsonUpcase, - headers: AdminHeaders, - conn: DbConn, - nt: Notify, - ) -> EmptyResult { - let data: ImportData = data.into_inner().data; -- let org_id = query.into_inner().organization_id; -+ let org_id = query.organization_id; - - // Read and create the collections - let collections: Vec<_> = data diff --git a/security/vaultwarden/patches/patch-src_api_core_sends_rs b/security/vaultwarden/patches/patch-src_api_core_sends_rs deleted file mode 100644 index 2de4f80c0f0..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_sends_rs +++ /dev/null @@ -1,140 +0,0 @@ -Index: src/api/core/sends.rs ---- src/api/core/sends.rs.orig -+++ src/api/core/sends.rs -@@ -1,9 +1,10 @@ --use std::{io::Read, path::Path}; -+use std::path::Path; - - use chrono::{DateTime, Duration, Utc}; --use multipart::server::{save::SavedData, Multipart, SaveResult}; --use rocket::{http::ContentType, response::NamedFile, Data}; --use rocket_contrib::json::Json; -+use rocket::form::Form; -+use rocket::fs::NamedFile; -+use rocket::fs::TempFile; -+use rocket::serde::json::Json; - use serde_json::Value; - - use crate::{ -@@ -31,9 +32,9 @@ pub fn routes() -> Vec { - ] - } - --pub fn purge_sends(pool: DbPool) { -+pub async fn purge_sends(pool: DbPool) { - debug!("Purging sends"); -- if let Ok(conn) = pool.get() { -+ if let Ok(conn) = pool.get().await { - Send::purge(&conn); - } else { - error!("Failed to get DB connection while purging sends") -@@ -177,26 +178,24 @@ fn post_send(data: JsonUpcase, headers: Head - Ok(Json(send.to_json())) - } - -+#[derive(FromForm)] -+struct UploadData<'f> { -+ model: Json>, -+ data: TempFile<'f>, -+} -+ - #[post("/sends/file", format = "multipart/form-data", data = "")] --fn post_send_file(data: Data, content_type: &ContentType, headers: Headers, conn: DbConn, nt: Notify) -> JsonResult { -+async fn post_send_file(data: Form>, headers: Headers, conn: DbConn, nt: Notify<'_>) -> JsonResult { - enforce_disable_send_policy(&headers, &conn)?; - -- let boundary = content_type.params().next().expect("No boundary provided").1; -+ let UploadData { -+ model, -+ mut data, -+ } = data.into_inner(); -+ let model = model.into_inner().data; - -- let mut mpart = Multipart::with_body(data.open(), boundary); -+ enforce_disable_hide_email_policy(&model, &headers, &conn)?; - -- // First entry is the SendData JSON -- let mut model_entry = match mpart.read_entry()? { -- Some(e) if &*e.headers.name == "model" => e, -- Some(_) => err!("Invalid entry name"), -- None => err!("No model entry present"), -- }; -- -- let mut buf = String::new(); -- model_entry.data.read_to_string(&mut buf)?; -- let data = serde_json::from_str::>(&buf)?; -- enforce_disable_hide_email_policy(&data.data, &headers, &conn)?; -- - // Get the file length and add an extra 5% to avoid issues - const SIZE_525_MB: u64 = 550_502_400; - -@@ -212,45 +211,27 @@ fn post_send_file(data: Data, content_type: &ContentTy - None => SIZE_525_MB, - }; - -- // Create the Send -- let mut send = create_send(data.data, headers.user.uuid)?; -- let file_id = crate::crypto::generate_send_id(); -- -+ let mut send = create_send(model, headers.user.uuid)?; - if send.atype != SendType::File as i32 { - err!("Send content is not a file"); - } - -- let file_path = Path::new(&CONFIG.sends_folder()).join(&send.uuid).join(&file_id); -+ let size = data.len(); -+ if size > size_limit { -+ err!("Attachment storage limit exceeded with this file"); -+ } - -- // Read the data entry and save the file -- let mut data_entry = match mpart.read_entry()? { -- Some(e) if &*e.headers.name == "data" => e, -- Some(_) => err!("Invalid entry name"), -- None => err!("No model entry present"), -- }; -+ let file_id = crate::crypto::generate_send_id(); -+ let folder_path = tokio::fs::canonicalize(&CONFIG.sends_folder()).await?.join(&send.uuid); -+ let file_path = folder_path.join(&file_id); -+ tokio::fs::create_dir_all(&folder_path).await?; -+ data.persist_to(&file_path).await?; - -- let size = match data_entry.data.save().memory_threshold(0).size_limit(size_limit).with_path(&file_path) { -- SaveResult::Full(SavedData::File(_, size)) => size as i32, -- SaveResult::Full(other) => { -- std::fs::remove_file(&file_path).ok(); -- err!(format!("Attachment is not a file: {:?}", other)); -- } -- SaveResult::Partial(_, reason) => { -- std::fs::remove_file(&file_path).ok(); -- err!(format!("Attachment storage limit exceeded with this file: {:?}", reason)); -- } -- SaveResult::Error(e) => { -- std::fs::remove_file(&file_path).ok(); -- err!(format!("Error: {:?}", e)); -- } -- }; -- -- // Set ID and sizes - let mut data_value: Value = serde_json::from_str(&send.data)?; - if let Some(o) = data_value.as_object_mut() { - o.insert(String::from("Id"), Value::String(file_id)); - o.insert(String::from("Size"), Value::Number(size.into())); -- o.insert(String::from("SizeName"), Value::String(crate::util::get_display_size(size))); -+ o.insert(String::from("SizeName"), Value::String(crate::util::get_display_size(size as i32))); - } - send.data = serde_json::to_string(&data_value)?; - -@@ -367,10 +348,10 @@ fn post_access_file( - } - - #[get("/sends//?")] --fn download_send(send_id: SafeString, file_id: SafeString, t: String) -> Option { -+async fn download_send(send_id: SafeString, file_id: SafeString, t: String) -> Option { - if let Ok(claims) = crate::auth::decode_send(&t) { - if claims.sub == format!("{}/{}", send_id, file_id) { -- return NamedFile::open(Path::new(&CONFIG.sends_folder()).join(send_id).join(file_id)).ok(); -+ return NamedFile::open(Path::new(&CONFIG.sends_folder()).join(send_id).join(file_id)).await.ok(); - } - } - None diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_authenticator_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_authenticator_rs deleted file mode 100644 index 4ff4a35e202..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_authenticator_rs +++ /dev/null @@ -1,11 +0,0 @@ -Index: src/api/core/two_factor/authenticator.rs ---- src/api/core/two_factor/authenticator.rs.orig -+++ src/api/core/two_factor/authenticator.rs -@@ -1,6 +1,6 @@ - use data_encoding::BASE32; -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - - use crate::{ - api::{ diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_duo_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_duo_rs deleted file mode 100644 index 0b908e86790..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_duo_rs +++ /dev/null @@ -1,55 +0,0 @@ -Index: src/api/core/two_factor/duo.rs ---- src/api/core/two_factor/duo.rs.orig -+++ src/api/core/two_factor/duo.rs -@@ -1,7 +1,7 @@ - use chrono::Utc; - use data_encoding::BASE64; -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - - use crate::{ - api::{core::two_factor::_generate_recover_code, ApiResult, EmptyResult, JsonResult, JsonUpcase, PasswordData}, -@@ -152,7 +152,7 @@ fn check_duo_fields_custom(data: &EnableDuoData) -> bo - } - - #[post("/two-factor/duo", data = "")] --fn activate_duo(data: JsonUpcase, headers: Headers, conn: DbConn) -> JsonResult { -+async fn activate_duo(data: JsonUpcase, headers: Headers, conn: DbConn) -> JsonResult { - let data: EnableDuoData = data.into_inner().data; - let mut user = headers.user; - -@@ -163,7 +163,7 @@ fn activate_duo(data: JsonUpcase, heade - let (data, data_str) = if check_duo_fields_custom(&data) { - let data_req: DuoData = data.into(); - let data_str = serde_json::to_string(&data_req)?; -- duo_api_request("GET", "/auth/v2/check", "", &data_req).map_res("Failed to validate Duo credentials")?; -+ duo_api_request("GET", "/auth/v2/check", "", &data_req).await.map_res("Failed to validate Duo credentials")?; - (data_req.obscure(), data_str) - } else { - (DuoData::secret(), String::new()) -@@ -185,11 +185,11 @@ fn activate_duo(data: JsonUpcase, heade - } - - #[put("/two-factor/duo", data = "")] --fn activate_duo_put(data: JsonUpcase, headers: Headers, conn: DbConn) -> JsonResult { -- activate_duo(data, headers, conn) -+async fn activate_duo_put(data: JsonUpcase, headers: Headers, conn: DbConn) -> JsonResult { -+ activate_duo(data, headers, conn).await - } - --fn duo_api_request(method: &str, path: &str, params: &str, data: &DuoData) -> EmptyResult { -+async fn duo_api_request(method: &str, path: &str, params: &str, data: &DuoData) -> EmptyResult { - use reqwest::{header, Method}; - use std::str::FromStr; - -@@ -209,7 +209,8 @@ fn duo_api_request(method: &str, path: &str, params: & - .basic_auth(username, Some(password)) - .header(header::USER_AGENT, "vaultwarden:Duo/1.0 (Rust)") - .header(header::DATE, date) -- .send()? -+ .send() -+ .await? - .error_for_status()?; - - Ok(()) diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_email_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_email_rs deleted file mode 100644 index a9306f89572..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_email_rs +++ /dev/null @@ -1,11 +0,0 @@ -Index: src/api/core/two_factor/email.rs ---- src/api/core/two_factor/email.rs.orig -+++ src/api/core/two_factor/email.rs -@@ -1,6 +1,6 @@ - use chrono::{Duration, NaiveDateTime, Utc}; -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - - use crate::{ - api::{core::two_factor::_generate_recover_code, EmptyResult, JsonResult, JsonUpcase, PasswordData}, diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_mod_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_mod_rs deleted file mode 100644 index b57e507cafb..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_mod_rs +++ /dev/null @@ -1,29 +0,0 @@ -Index: src/api/core/two_factor/mod.rs ---- src/api/core/two_factor/mod.rs.orig -+++ src/api/core/two_factor/mod.rs -@@ -1,7 +1,7 @@ - use chrono::{Duration, Utc}; - use data_encoding::BASE32; -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value; - - use crate::{ -@@ -158,14 +158,14 @@ fn disable_twofactor_put(data: JsonUpcase conn, - _ => { - error!("Failed to get DB connection in send_incomplete_2fa_notifications()"); diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_u2f_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_u2f_rs deleted file mode 100644 index e39b427f20c..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_u2f_rs +++ /dev/null @@ -1,11 +0,0 @@ -Index: src/api/core/two_factor/u2f.rs ---- src/api/core/two_factor/u2f.rs.orig -+++ src/api/core/two_factor/u2f.rs -@@ -1,6 +1,6 @@ - use once_cell::sync::Lazy; -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value; - use u2f::{ - messages::{RegisterResponse, SignResponse, U2fSignRequest}, diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_webauthn_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_webauthn_rs deleted file mode 100644 index 657d419b391..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_webauthn_rs +++ /dev/null @@ -1,10 +0,0 @@ -Index: src/api/core/two_factor/webauthn.rs ---- src/api/core/two_factor/webauthn.rs.orig -+++ src/api/core/two_factor/webauthn.rs -@@ -1,5 +1,5 @@ -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value; - use url::Url; - use webauthn_rs::{base64_data::Base64UrlSafeData, proto::*, AuthenticationState, RegistrationState, Webauthn}; diff --git a/security/vaultwarden/patches/patch-src_api_core_two_factor_yubikey_rs b/security/vaultwarden/patches/patch-src_api_core_two_factor_yubikey_rs deleted file mode 100644 index 86e3975f9d7..00000000000 --- a/security/vaultwarden/patches/patch-src_api_core_two_factor_yubikey_rs +++ /dev/null @@ -1,10 +0,0 @@ -Index: src/api/core/two_factor/yubikey.rs ---- src/api/core/two_factor/yubikey.rs.orig -+++ src/api/core/two_factor/yubikey.rs -@@ -1,5 +1,5 @@ -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value; - use yubico::{config::Config, verify}; - diff --git a/security/vaultwarden/patches/patch-src_api_icons_rs b/security/vaultwarden/patches/patch-src_api_icons_rs deleted file mode 100644 index 07ac109d6c2..00000000000 --- a/security/vaultwarden/patches/patch-src_api_icons_rs +++ /dev/null @@ -1,325 +0,0 @@ -Index: src/api/icons.rs ---- src/api/icons.rs.orig -+++ src/api/icons.rs -@@ -1,19 +1,19 @@ - use std::{ - collections::HashMap, -- fs::{create_dir_all, remove_file, symlink_metadata, File}, -- io::prelude::*, - net::{IpAddr, ToSocketAddrs}, - sync::{Arc, RwLock}, - time::{Duration, SystemTime}, - }; - -+use bytes::{Buf, Bytes, BytesMut}; -+use futures::{stream::StreamExt, TryFutureExt}; - use once_cell::sync::Lazy; - use regex::Regex; --use reqwest::{blocking::Client, blocking::Response, header}; --use rocket::{ -- http::ContentType, -- response::{Content, Redirect}, -- Route, -+use reqwest::{header, Client, Response}; -+use rocket::{http::ContentType, response::Redirect, Route}; -+use tokio::{ -+ fs::{create_dir_all, remove_file, symlink_metadata, File}, -+ io::{AsyncReadExt, AsyncWriteExt}, - }; - - use crate::{ -@@ -104,27 +104,23 @@ fn icon_google(domain: String) -> Option { - } - - #[get("//icon.png")] --fn icon_internal(domain: String) -> Cached>> { -+async fn icon_internal(domain: String) -> Cached<(ContentType, Vec)> { - const FALLBACK_ICON: &[u8] = include_bytes!("../static/images/fallback-icon.png"); - - if !is_valid_domain(&domain) { - warn!("Invalid domain: {}", domain); - return Cached::ttl( -- Content(ContentType::new("image", "png"), FALLBACK_ICON.to_vec()), -+ (ContentType::new("image", "png"), FALLBACK_ICON.to_vec()), - CONFIG.icon_cache_negttl(), - true, - ); - } - -- match get_icon(&domain) { -+ match get_icon(&domain).await { - Some((icon, icon_type)) => { -- Cached::ttl(Content(ContentType::new("image", icon_type), icon), CONFIG.icon_cache_ttl(), true) -+ Cached::ttl((ContentType::new("image", icon_type), icon), CONFIG.icon_cache_ttl(), true) - } -- _ => Cached::ttl( -- Content(ContentType::new("image", "png"), FALLBACK_ICON.to_vec()), -- CONFIG.icon_cache_negttl(), -- true, -- ), -+ _ => Cached::ttl((ContentType::new("image", "png"), FALLBACK_ICON.to_vec()), CONFIG.icon_cache_negttl(), true), - } - } - -@@ -317,15 +313,15 @@ fn is_domain_blacklisted(domain: &str) -> bool { - is_blacklisted - } - --fn get_icon(domain: &str) -> Option<(Vec, String)> { -+async fn get_icon(domain: &str) -> Option<(Vec, String)> { - let path = format!("{}/{}.png", CONFIG.icon_cache_folder(), domain); - - // Check for expiration of negatively cached copy -- if icon_is_negcached(&path) { -+ if icon_is_negcached(&path).await { - return None; - } - -- if let Some(icon) = get_cached_icon(&path) { -+ if let Some(icon) = get_cached_icon(&path).await { - let icon_type = match get_icon_type(&icon) { - Some(x) => x, - _ => "x-icon", -@@ -338,31 +334,31 @@ fn get_icon(domain: &str) -> Option<(Vec, String)> - } - - // Get the icon, or None in case of error -- match download_icon(domain) { -+ match download_icon(domain).await { - Ok((icon, icon_type)) => { -- save_icon(&path, &icon); -- Some((icon, icon_type.unwrap_or("x-icon").to_string())) -+ save_icon(&path, &icon).await; -+ Some((icon.to_vec(), icon_type.unwrap_or("x-icon").to_string())) - } - Err(e) => { - warn!("Unable to download icon: {:?}", e); - let miss_indicator = path + ".miss"; -- save_icon(&miss_indicator, &[]); -+ save_icon(&miss_indicator, &[]).await; - None - } - } - } - --fn get_cached_icon(path: &str) -> Option> { -+async fn get_cached_icon(path: &str) -> Option> { - // Check for expiration of successfully cached copy -- if icon_is_expired(path) { -+ if icon_is_expired(path).await { - return None; - } - - // Try to read the cached icon, and return it if it exists -- if let Ok(mut f) = File::open(path) { -+ if let Ok(mut f) = File::open(path).await { - let mut buffer = Vec::new(); - -- if f.read_to_end(&mut buffer).is_ok() { -+ if f.read_to_end(&mut buffer).await.is_ok() { - return Some(buffer); - } - } -@@ -370,22 +366,22 @@ fn get_cached_icon(path: &str) -> Option> { - None - } - --fn file_is_expired(path: &str, ttl: u64) -> Result { -- let meta = symlink_metadata(path)?; -+async fn file_is_expired(path: &str, ttl: u64) -> Result { -+ let meta = symlink_metadata(path).await?; - let modified = meta.modified()?; - let age = SystemTime::now().duration_since(modified)?; - - Ok(ttl > 0 && ttl <= age.as_secs()) - } - --fn icon_is_negcached(path: &str) -> bool { -+async fn icon_is_negcached(path: &str) -> bool { - let miss_indicator = path.to_owned() + ".miss"; -- let expired = file_is_expired(&miss_indicator, CONFIG.icon_cache_negttl()); -+ let expired = file_is_expired(&miss_indicator, CONFIG.icon_cache_negttl()).await; - - match expired { - // No longer negatively cached, drop the marker - Ok(true) => { -- if let Err(e) = remove_file(&miss_indicator) { -+ if let Err(e) = remove_file(&miss_indicator).await { - error!("Could not remove negative cache indicator for icon {:?}: {:?}", path, e); - } - false -@@ -397,8 +393,8 @@ fn icon_is_negcached(path: &str) -> bool { - } - } - --fn icon_is_expired(path: &str) -> bool { -- let expired = file_is_expired(path, CONFIG.icon_cache_ttl()); -+async fn icon_is_expired(path: &str) -> bool { -+ let expired = file_is_expired(path, CONFIG.icon_cache_ttl()).await; - expired.unwrap_or(true) - } - -@@ -521,13 +517,13 @@ struct IconUrlResult { - /// let icon_result = get_icon_url("github.com")?; - /// let icon_result = get_icon_url("vaultwarden.discourse.group")?; - /// ``` --fn get_icon_url(domain: &str) -> Result { -+async fn get_icon_url(domain: &str) -> Result { - // Default URL with secure and insecure schemes - let ssldomain = format!("https://{}", domain); - let httpdomain = format!("http://{}", domain); - - // First check the domain as given during the request for both HTTPS and HTTP. -- let resp = match get_page(&ssldomain).or_else(|_| get_page(&httpdomain)) { -+ let resp = match get_page(&ssldomain).or_else(|_| get_page(&httpdomain)).await { - Ok(c) => Ok(c), - Err(e) => { - let mut sub_resp = Err(e); -@@ -546,7 +542,7 @@ fn get_icon_url(domain: &str) -> Result Result Result Result Result { -- get_page_with_referer(url, "") -+async fn get_page(url: &str) -> Result { -+ get_page_with_referer(url, "").await - } - --fn get_page_with_referer(url: &str, referer: &str) -> Result { -+async fn get_page_with_referer(url: &str, referer: &str) -> Result { - if is_domain_blacklisted(url::Url::parse(url).unwrap().host_str().unwrap_or_default()) { - warn!("Favicon '{}' resolves to a blacklisted domain or IP!", url); - } -@@ -621,7 +617,7 @@ fn get_page_with_referer(url: &str, referer: &str) -> - client = client.header("Referer", referer) - } - -- match client.send() { -+ match client.send().await { - Ok(c) => c.error_for_status().map_err(Into::into), - Err(e) => err_silent!(format!("{}", e)), - } -@@ -706,14 +702,14 @@ fn parse_sizes(sizes: Option<&str>) -> (u16, u16) { - (width, height) - } - --fn download_icon(domain: &str) -> Result<(Vec, Option<&str>), Error> { -+async fn download_icon(domain: &str) -> Result<(Bytes, Option<&str>), Error> { - if is_domain_blacklisted(domain) { - err_silent!("Domain is blacklisted", domain) - } - -- let icon_result = get_icon_url(domain)?; -+ let icon_result = get_icon_url(domain).await?; - -- let mut buffer = Vec::new(); -+ let mut buffer = Bytes::new(); - let mut icon_type: Option<&str> = None; - - use data_url::DataUrl; -@@ -722,8 +718,12 @@ fn download_icon(domain: &str) -> Result<(Vec, Opt - if icon.href.starts_with("data:image") { - let datauri = DataUrl::process(&icon.href).unwrap(); - // Check if we are able to decode the data uri -- match datauri.decode_to_vec() { -- Ok((body, _fragment)) => { -+ let mut body = BytesMut::new(); -+ match datauri.decode::<_, ()>(|bytes| { -+ body.extend_from_slice(bytes); -+ Ok(()) -+ }) { -+ Ok(_) => { - // Also check if the size is atleast 67 bytes, which seems to be the smallest png i could create - if body.len() >= 67 { - // Check if the icon type is allowed, else try an icon from the list. -@@ -733,17 +733,17 @@ fn download_icon(domain: &str) -> Result<(Vec, Opt - continue; - } - info!("Extracted icon from data:image uri for {}", domain); -- buffer = body; -+ buffer = body.freeze(); - break; - } - } - _ => debug!("Extracted icon from data:image uri is invalid"), - }; - } else { -- match get_page_with_referer(&icon.href, &icon_result.referer) { -- Ok(mut res) => { -- res.copy_to(&mut buffer)?; -- // Check if the icon type is allowed, else try an icon from the list. -+ match get_page_with_referer(&icon.href, &icon_result.referer).await { -+ Ok(res) => { -+ buffer = stream_to_bytes_limit(res, 512 * 1024).await?; // 512 KB for each icon max -+ // Check if the icon type is allowed, else try an icon from the list. - icon_type = get_icon_type(&buffer); - if icon_type.is_none() { - buffer.clear(); -@@ -765,13 +765,13 @@ fn download_icon(domain: &str) -> Result<(Vec, Opt - Ok((buffer, icon_type)) - } - --fn save_icon(path: &str, icon: &[u8]) { -- match File::create(path) { -+async fn save_icon(path: &str, icon: &[u8]) { -+ match File::create(path).await { - Ok(mut f) => { -- f.write_all(icon).expect("Error writing icon file"); -+ f.write_all(icon).await.expect("Error writing icon file"); - } - Err(ref e) if e.kind() == std::io::ErrorKind::NotFound => { -- create_dir_all(&CONFIG.icon_cache_folder()).expect("Error creating icon cache folder"); -+ create_dir_all(&CONFIG.icon_cache_folder()).await.expect("Error creating icon cache folder"); - } - Err(e) => { - warn!("Unable to save icon: {:?}", e); -@@ -820,8 +820,6 @@ impl reqwest::cookie::CookieStore for Jar { - } - - fn cookies(&self, url: &url::Url) -> Option { -- use bytes::Bytes; -- - let cookie_store = self.0.read().unwrap(); - let s = cookie_store - .get_request_values(url) -@@ -835,4 +833,13 @@ impl reqwest::cookie::CookieStore for Jar { - - header::HeaderValue::from_maybe_shared(Bytes::from(s)).ok() - } -+} -+ -+async fn stream_to_bytes_limit(res: Response, max_size: usize) -> Result { -+ let mut stream = res.bytes_stream().take(max_size); -+ let mut buf = BytesMut::new(); -+ while let Some(chunk) = stream.next().await { -+ buf.extend(chunk?); -+ } -+ Ok(buf.freeze()) - } diff --git a/security/vaultwarden/patches/patch-src_api_identity_rs b/security/vaultwarden/patches/patch-src_api_identity_rs deleted file mode 100644 index 09558be3bde..00000000000 --- a/security/vaultwarden/patches/patch-src_api_identity_rs +++ /dev/null @@ -1,110 +0,0 @@ -Index: src/api/identity.rs ---- src/api/identity.rs.orig -+++ src/api/identity.rs -@@ -1,10 +1,10 @@ - use chrono::Utc; - use num_traits::FromPrimitive; -+use rocket::serde::json::Json; - use rocket::{ -- request::{Form, FormItems, FromForm}, -+ form::{Form, FromForm}, - Route, - }; --use rocket_contrib::json::Json; - use serde_json::Value; - - use crate::{ -@@ -455,64 +455,55 @@ fn _json_err_twofactor(providers: &[i32], user_uuid: & - - // https://github.com/bitwarden/jslib/blob/master/common/src/models/request/tokenRequest.ts - // https://github.com/bitwarden/mobile/blob/master/src/Core/Models/Request/TokenRequest.cs --#[derive(Debug, Clone, Default)] -+#[derive(Debug, Clone, Default, FromForm)] - #[allow(non_snake_case)] - struct ConnectData { -- // refresh_token, password, client_credentials (API key) -- grant_type: String, -+ #[field(name = uncased("grant_type"))] -+ #[field(name = uncased("granttype"))] -+ grant_type: String, // refresh_token, password, client_credentials (API key) - - // Needed for grant_type="refresh_token" -+ #[field(name = uncased("refresh_token"))] -+ #[field(name = uncased("refreshtoken"))] - refresh_token: Option, - - // Needed for grant_type = "password" | "client_credentials" -- client_id: Option, // web, cli, desktop, browser, mobile -- client_secret: Option, // API key login (cli only) -+ #[field(name = uncased("client_id"))] -+ #[field(name = uncased("clientid"))] -+ client_id: Option, // web, cli, desktop, browser, mobile -+ #[field(name = uncased("client_secret"))] -+ #[field(name = uncased("clientsecret"))] -+ client_secret: Option, -+ #[field(name = uncased("password"))] - password: Option, -+ #[field(name = uncased("scope"))] - scope: Option, -+ #[field(name = uncased("username"))] - username: Option, - -+ #[field(name = uncased("device_identifier"))] -+ #[field(name = uncased("deviceidentifier"))] - device_identifier: Option, -+ #[field(name = uncased("device_name"))] -+ #[field(name = uncased("devicename"))] - device_name: Option, -+ #[field(name = uncased("device_type"))] -+ #[field(name = uncased("devicetype"))] - device_type: Option, -+ #[field(name = uncased("device_push_token"))] -+ #[field(name = uncased("devicepushtoken"))] - device_push_token: Option, // Unused; mobile device push not yet supported. - - // Needed for two-factor auth -+ #[field(name = uncased("two_factor_provider"))] -+ #[field(name = uncased("twofactorprovider"))] - two_factor_provider: Option, -+ #[field(name = uncased("two_factor_token"))] -+ #[field(name = uncased("twofactortoken"))] - two_factor_token: Option, -+ #[field(name = uncased("two_factor_remember"))] -+ #[field(name = uncased("twofactorremember"))] - two_factor_remember: Option, --} -- --impl<'f> FromForm<'f> for ConnectData { -- type Error = String; -- -- fn from_form(items: &mut FormItems<'f>, _strict: bool) -> Result { -- let mut form = Self::default(); -- for item in items { -- let (key, value) = item.key_value_decoded(); -- let mut normalized_key = key.to_lowercase(); -- normalized_key.retain(|c| c != '_'); // Remove '_' -- -- match normalized_key.as_ref() { -- "granttype" => form.grant_type = value, -- "refreshtoken" => form.refresh_token = Some(value), -- "clientid" => form.client_id = Some(value), -- "clientsecret" => form.client_secret = Some(value), -- "password" => form.password = Some(value), -- "scope" => form.scope = Some(value), -- "username" => form.username = Some(value), -- "deviceidentifier" => form.device_identifier = Some(value), -- "devicename" => form.device_name = Some(value), -- "devicetype" => form.device_type = Some(value), -- "devicepushtoken" => form.device_push_token = Some(value), -- "twofactorprovider" => form.two_factor_provider = value.parse().ok(), -- "twofactortoken" => form.two_factor_token = Some(value), -- "twofactorremember" => form.two_factor_remember = value.parse().ok(), -- key => warn!("Detected unexpected parameter during login: {}", key), -- } -- } -- -- Ok(form) -- } - } - - fn _check_is_some(value: &Option, msg: &str) -> EmptyResult { diff --git a/security/vaultwarden/patches/patch-src_api_mod_rs b/security/vaultwarden/patches/patch-src_api_mod_rs deleted file mode 100644 index 6b14be31d51..00000000000 --- a/security/vaultwarden/patches/patch-src_api_mod_rs +++ /dev/null @@ -1,12 +0,0 @@ -Index: src/api/mod.rs ---- src/api/mod.rs.orig -+++ src/api/mod.rs -@@ -5,7 +5,7 @@ mod identity; - mod notifications; - mod web; - --use rocket_contrib::json::Json; -+use rocket::serde::json::Json; - use serde_json::Value; - - pub use crate::api::{ diff --git a/security/vaultwarden/patches/patch-src_api_notifications_rs b/security/vaultwarden/patches/patch-src_api_notifications_rs deleted file mode 100644 index 2cf1f28a35f..00000000000 --- a/security/vaultwarden/patches/patch-src_api_notifications_rs +++ /dev/null @@ -1,39 +0,0 @@ -Index: src/api/notifications.rs ---- src/api/notifications.rs.orig -+++ src/api/notifications.rs -@@ -1,7 +1,7 @@ - use std::sync::atomic::{AtomicBool, Ordering}; - -+use rocket::serde::json::Json; - use rocket::Route; --use rocket_contrib::json::Json; - use serde_json::Value as JsonValue; - - use crate::{api::EmptyResult, auth::Headers, Error, CONFIG}; -@@ -417,7 +417,7 @@ pub enum UpdateType { - } - - use rocket::State; --pub type Notify<'a> = State<'a, WebSocketUsers>; -+pub type Notify<'a> = &'a State; - - pub fn start_notification_server() -> WebSocketUsers { - let factory = WsFactory::init(); -@@ -430,12 +430,11 @@ pub fn start_notification_server() -> WebSocketUsers { - settings.queue_size = 2; - settings.panic_on_internal = false; - -- ws::Builder::new() -- .with_settings(settings) -- .build(factory) -- .unwrap() -- .listen((CONFIG.websocket_address().as_str(), CONFIG.websocket_port())) -- .unwrap(); -+ let ws = ws::Builder::new().with_settings(settings).build(factory).unwrap(); -+ CONFIG.set_ws_shutdown_handle(ws.broadcaster()); -+ ws.listen((CONFIG.websocket_address().as_str(), CONFIG.websocket_port())).unwrap(); -+ -+ warn!("WS Server stopped!"); - }); - } - diff --git a/security/vaultwarden/patches/patch-src_api_web_rs b/security/vaultwarden/patches/patch-src_api_web_rs deleted file mode 100644 index 0d18dfbf00b..00000000000 --- a/security/vaultwarden/patches/patch-src_api_web_rs +++ /dev/null @@ -1,90 +0,0 @@ -Index: src/api/web.rs ---- src/api/web.rs.orig -+++ src/api/web.rs -@@ -1,7 +1,7 @@ - use std::path::{Path, PathBuf}; - --use rocket::{http::ContentType, response::content::Content, response::NamedFile, Route}; --use rocket_contrib::json::Json; -+use rocket::serde::json::Json; -+use rocket::{fs::NamedFile, http::ContentType, Route}; - use serde_json::Value; - - use crate::{ -@@ -21,16 +21,16 @@ pub fn routes() -> Vec { - } - - #[get("/")] --fn web_index() -> Cached> { -- Cached::short(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join("index.html")).ok(), false) -+async fn web_index() -> Cached> { -+ Cached::short(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join("index.html")).await.ok(), false) - } - - #[get("/app-id.json")] --fn app_id() -> Cached>> { -+fn app_id() -> Cached<(ContentType, Json)> { - let content_type = ContentType::new("application", "fido.trusted-apps+json"); - - Cached::long( -- Content( -+ ( - content_type, - Json(json!({ - "trustedFacets": [ -@@ -58,13 +58,13 @@ fn app_id() -> Cached>> { - } - - #[get("/", rank = 10)] // Only match this if the other routes don't match --fn web_files(p: PathBuf) -> Cached> { -- Cached::long(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join(p)).ok(), true) -+async fn web_files(p: PathBuf) -> Cached> { -+ Cached::long(NamedFile::open(Path::new(&CONFIG.web_vault_folder()).join(p)).await.ok(), true) - } - - #[get("/attachments//")] --fn attachments(uuid: SafeString, file_id: SafeString) -> Option { -- NamedFile::open(Path::new(&CONFIG.attachments_folder()).join(uuid).join(file_id)).ok() -+async fn attachments(uuid: SafeString, file_id: SafeString) -> Option { -+ NamedFile::open(Path::new(&CONFIG.attachments_folder()).join(uuid).join(file_id)).await.ok() - } - - // We use DbConn here to let the alive healthcheck also verify the database connection. -@@ -78,25 +78,20 @@ fn alive(_conn: DbConn) -> Json { - } - - #[get("/vw_static/")] --fn static_files(filename: String) -> Result, Error> { -+fn static_files(filename: String) -> Result<(ContentType, &'static [u8]), Error> { - match filename.as_ref() { -- "mail-github.png" => Ok(Content(ContentType::PNG, include_bytes!("../static/images/mail-github.png"))), -- "logo-gray.png" => Ok(Content(ContentType::PNG, include_bytes!("../static/images/logo-gray.png"))), -- "error-x.svg" => Ok(Content(ContentType::SVG, include_bytes!("../static/images/error-x.svg"))), -- "hibp.png" => Ok(Content(ContentType::PNG, include_bytes!("../static/images/hibp.png"))), -- "vaultwarden-icon.png" => { -- Ok(Content(ContentType::PNG, include_bytes!("../static/images/vaultwarden-icon.png"))) -- } -- -- "bootstrap.css" => Ok(Content(ContentType::CSS, include_bytes!("../static/scripts/bootstrap.css"))), -- "bootstrap-native.js" => { -- Ok(Content(ContentType::JavaScript, include_bytes!("../static/scripts/bootstrap-native.js"))) -- } -- "identicon.js" => Ok(Content(ContentType::JavaScript, include_bytes!("../static/scripts/identicon.js"))), -- "datatables.js" => Ok(Content(ContentType::JavaScript, include_bytes!("../static/scripts/datatables.js"))), -- "datatables.css" => Ok(Content(ContentType::CSS, include_bytes!("../static/scripts/datatables.css"))), -+ "mail-github.png" => Ok((ContentType::PNG, include_bytes!("../static/images/mail-github.png"))), -+ "logo-gray.png" => Ok((ContentType::PNG, include_bytes!("../static/images/logo-gray.png"))), -+ "error-x.svg" => Ok((ContentType::SVG, include_bytes!("../static/images/error-x.svg"))), -+ "hibp.png" => Ok((ContentType::PNG, include_bytes!("../static/images/hibp.png"))), -+ "vaultwarden-icon.png" => Ok((ContentType::PNG, include_bytes!("../static/images/vaultwarden-icon.png"))), -+ "bootstrap.css" => Ok((ContentType::CSS, include_bytes!("../static/scripts/bootstrap.css"))), -+ "bootstrap-native.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/bootstrap-native.js"))), -+ "identicon.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/identicon.js"))), -+ "datatables.js" => Ok((ContentType::JavaScript, include_bytes!("../static/scripts/datatables.js"))), -+ "datatables.css" => Ok((ContentType::CSS, include_bytes!("../static/scripts/datatables.css"))), - "jquery-3.6.0.slim.js" => { -- Ok(Content(ContentType::JavaScript, include_bytes!("../static/scripts/jquery-3.6.0.slim.js"))) -+ Ok((ContentType::JavaScript, include_bytes!("../static/scripts/jquery-3.6.0.slim.js"))) - } - _ => err!(format!("Static file not found: {}", filename)), - } diff --git a/security/vaultwarden/patches/patch-src_auth_rs b/security/vaultwarden/patches/patch-src_auth_rs deleted file mode 100644 index c1e0e9f1e8e..00000000000 --- a/security/vaultwarden/patches/patch-src_auth_rs +++ /dev/null @@ -1,392 +0,0 @@ -Index: src/auth.rs ---- src/auth.rs.orig -+++ src/auth.rs -@@ -257,7 +257,10 @@ pub fn generate_send_claims(send_id: &str, file_id: &s - // - // Bearer token authentication - // --use rocket::request::{FromRequest, Outcome, Request}; -+use rocket::{ -+ outcome::try_outcome, -+ request::{FromRequest, Outcome, Request}, -+}; - - use crate::db::{ - models::{CollectionUser, Device, User, UserOrgStatus, UserOrgType, UserOrganization, UserStampException}, -@@ -268,10 +271,11 @@ pub struct Host { - pub host: String, - } - --impl<'a, 'r> FromRequest<'a, 'r> for Host { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for Host { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -+ async fn from_request(request: &'r Request<'_>) -> Outcome { - let headers = request.headers(); - - // Get host -@@ -314,17 +318,14 @@ pub struct Headers { - pub user: User, - } - --impl<'a, 'r> FromRequest<'a, 'r> for Headers { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for Headers { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -+ async fn from_request(request: &'r Request<'_>) -> Outcome { - let headers = request.headers(); - -- let host = match Host::from_request(request) { -- Outcome::Forward(_) => return Outcome::Forward(()), -- Outcome::Failure(f) => return Outcome::Failure(f), -- Outcome::Success(host) => host.host, -- }; -+ let host = try_outcome!(Host::from_request(request).await).host; - - // Get access_token - let access_token: &str = match headers.get_one("Authorization") { -@@ -344,7 +345,7 @@ impl<'a, 'r> FromRequest<'a, 'r> for Headers { - let device_uuid = claims.device; - let user_uuid = claims.sub; - -- let conn = match request.guard::() { -+ let conn = match DbConn::from_request(request).await { - Outcome::Success(conn) => conn, - _ => err_handler!("Error getting DB"), - }; -@@ -363,7 +364,7 @@ impl<'a, 'r> FromRequest<'a, 'r> for Headers { - if let Some(stamp_exception) = - user.stamp_exception.as_deref().and_then(|s| serde_json::from_str::(s).ok()) - { -- let current_route = match request.route().and_then(|r| r.name) { -+ let current_route = match request.route().and_then(|r| r.name.as_deref()) { - Some(name) => name, - _ => err_handler!("Error getting current route for stamp exception"), - }; -@@ -411,13 +412,13 @@ pub struct OrgHeaders { - // but there are cases where it is a query value. - // First check the path, if this is not a valid uuid, try the query values. - fn get_org_id(request: &Request) -> Option { -- if let Some(Ok(org_id)) = request.get_param::(1) { -+ if let Some(Ok(org_id)) = request.param::(1) { - if uuid::Uuid::parse_str(&org_id).is_ok() { - return Some(org_id); - } - } - -- if let Some(Ok(org_id)) = request.get_query_value::("organizationId") { -+ if let Some(Ok(org_id)) = request.query_value::("organizationId") { - if uuid::Uuid::parse_str(&org_id).is_ok() { - return Some(org_id); - } -@@ -426,52 +427,48 @@ fn get_org_id(request: &Request) -> Option { - None - } - --impl<'a, 'r> FromRequest<'a, 'r> for OrgHeaders { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for OrgHeaders { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -- match request.guard::() { -- Outcome::Forward(_) => Outcome::Forward(()), -- Outcome::Failure(f) => Outcome::Failure(f), -- Outcome::Success(headers) => { -- match get_org_id(request) { -- Some(org_id) => { -- let conn = match request.guard::() { -- Outcome::Success(conn) => conn, -- _ => err_handler!("Error getting DB"), -- }; -+ async fn from_request(request: &'r Request<'_>) -> Outcome { -+ let headers = try_outcome!(Headers::from_request(request).await); -+ match get_org_id(request) { -+ Some(org_id) => { -+ let conn = match DbConn::from_request(request).await { -+ Outcome::Success(conn) => conn, -+ _ => err_handler!("Error getting DB"), -+ }; - -- let user = headers.user; -- let org_user = match UserOrganization::find_by_user_and_org(&user.uuid, &org_id, &conn) { -- Some(user) => { -- if user.status == UserOrgStatus::Confirmed as i32 { -- user -- } else { -- err_handler!("The current user isn't confirmed member of the organization") -- } -- } -- None => err_handler!("The current user isn't member of the organization"), -- }; -- -- Outcome::Success(Self { -- host: headers.host, -- device: headers.device, -- user, -- org_user_type: { -- if let Some(org_usr_type) = UserOrgType::from_i32(org_user.atype) { -- org_usr_type -- } else { -- // This should only happen if the DB is corrupted -- err_handler!("Unknown user type in the database") -- } -- }, -- org_user, -- org_id, -- }) -+ let user = headers.user; -+ let org_user = match UserOrganization::find_by_user_and_org(&user.uuid, &org_id, &conn) { -+ Some(user) => { -+ if user.status == UserOrgStatus::Confirmed as i32 { -+ user -+ } else { -+ err_handler!("The current user isn't confirmed member of the organization") -+ } - } -- _ => err_handler!("Error getting the organization id"), -- } -+ None => err_handler!("The current user isn't member of the organization"), -+ }; -+ -+ Outcome::Success(Self { -+ host: headers.host, -+ device: headers.device, -+ user, -+ org_user_type: { -+ if let Some(org_usr_type) = UserOrgType::from_i32(org_user.atype) { -+ org_usr_type -+ } else { -+ // This should only happen if the DB is corrupted -+ err_handler!("Unknown user type in the database") -+ } -+ }, -+ org_user, -+ org_id, -+ }) - } -+ _ => err_handler!("Error getting the organization id"), - } - } - } -@@ -483,25 +480,21 @@ pub struct AdminHeaders { - pub org_user_type: UserOrgType, - } - --impl<'a, 'r> FromRequest<'a, 'r> for AdminHeaders { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for AdminHeaders { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -- match request.guard::() { -- Outcome::Forward(_) => Outcome::Forward(()), -- Outcome::Failure(f) => Outcome::Failure(f), -- Outcome::Success(headers) => { -- if headers.org_user_type >= UserOrgType::Admin { -- Outcome::Success(Self { -- host: headers.host, -- device: headers.device, -- user: headers.user, -- org_user_type: headers.org_user_type, -- }) -- } else { -- err_handler!("You need to be Admin or Owner to call this endpoint") -- } -- } -+ async fn from_request(request: &'r Request<'_>) -> Outcome { -+ let headers = try_outcome!(OrgHeaders::from_request(request).await); -+ if headers.org_user_type >= UserOrgType::Admin { -+ Outcome::Success(Self { -+ host: headers.host, -+ device: headers.device, -+ user: headers.user, -+ org_user_type: headers.org_user_type, -+ }) -+ } else { -+ err_handler!("You need to be Admin or Owner to call this endpoint") - } - } - } -@@ -520,13 +513,13 @@ impl From for Headers { - // but there could be cases where it is a query value. - // First check the path, if this is not a valid uuid, try the query values. - fn get_col_id(request: &Request) -> Option { -- if let Some(Ok(col_id)) = request.get_param::(3) { -+ if let Some(Ok(col_id)) = request.param::(3) { - if uuid::Uuid::parse_str(&col_id).is_ok() { - return Some(col_id); - } - } - -- if let Some(Ok(col_id)) = request.get_query_value::("collectionId") { -+ if let Some(Ok(col_id)) = request.query_value::("collectionId") { - if uuid::Uuid::parse_str(&col_id).is_ok() { - return Some(col_id); - } -@@ -545,46 +538,38 @@ pub struct ManagerHeaders { - pub org_user_type: UserOrgType, - } - --impl<'a, 'r> FromRequest<'a, 'r> for ManagerHeaders { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for ManagerHeaders { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -- match request.guard::() { -- Outcome::Forward(_) => Outcome::Forward(()), -- Outcome::Failure(f) => Outcome::Failure(f), -- Outcome::Success(headers) => { -- if headers.org_user_type >= UserOrgType::Manager { -- match get_col_id(request) { -- Some(col_id) => { -- let conn = match request.guard::() { -- Outcome::Success(conn) => conn, -- _ => err_handler!("Error getting DB"), -- }; -+ async fn from_request(request: &'r Request<'_>) -> Outcome { -+ let headers = try_outcome!(OrgHeaders::from_request(request).await); -+ if headers.org_user_type >= UserOrgType::Manager { -+ match get_col_id(request) { -+ Some(col_id) => { -+ let conn = match DbConn::from_request(request).await { -+ Outcome::Success(conn) => conn, -+ _ => err_handler!("Error getting DB"), -+ }; - -- if !headers.org_user.has_full_access() { -- match CollectionUser::find_by_collection_and_user( -- &col_id, -- &headers.org_user.user_uuid, -- &conn, -- ) { -- Some(_) => (), -- None => err_handler!("The current user isn't a manager for this collection"), -- } -- } -+ if !headers.org_user.has_full_access() { -+ match CollectionUser::find_by_collection_and_user(&col_id, &headers.org_user.user_uuid, &conn) { -+ Some(_) => (), -+ None => err_handler!("The current user isn't a manager for this collection"), - } -- _ => err_handler!("Error getting the collection id"), - } -- -- Outcome::Success(Self { -- host: headers.host, -- device: headers.device, -- user: headers.user, -- org_user_type: headers.org_user_type, -- }) -- } else { -- err_handler!("You need to be a Manager, Admin or Owner to call this endpoint") - } -+ _ => err_handler!("Error getting the collection id"), - } -+ -+ Outcome::Success(Self { -+ host: headers.host, -+ device: headers.device, -+ user: headers.user, -+ org_user_type: headers.org_user_type, -+ }) -+ } else { -+ err_handler!("You need to be a Manager, Admin or Owner to call this endpoint") - } - } - } -@@ -608,25 +593,21 @@ pub struct ManagerHeadersLoose { - pub org_user_type: UserOrgType, - } - --impl<'a, 'r> FromRequest<'a, 'r> for ManagerHeadersLoose { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for ManagerHeadersLoose { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -- match request.guard::() { -- Outcome::Forward(_) => Outcome::Forward(()), -- Outcome::Failure(f) => Outcome::Failure(f), -- Outcome::Success(headers) => { -- if headers.org_user_type >= UserOrgType::Manager { -- Outcome::Success(Self { -- host: headers.host, -- device: headers.device, -- user: headers.user, -- org_user_type: headers.org_user_type, -- }) -- } else { -- err_handler!("You need to be a Manager, Admin or Owner to call this endpoint") -- } -- } -+ async fn from_request(request: &'r Request<'_>) -> Outcome { -+ let headers = try_outcome!(OrgHeaders::from_request(request).await); -+ if headers.org_user_type >= UserOrgType::Manager { -+ Outcome::Success(Self { -+ host: headers.host, -+ device: headers.device, -+ user: headers.user, -+ org_user_type: headers.org_user_type, -+ }) -+ } else { -+ err_handler!("You need to be a Manager, Admin or Owner to call this endpoint") - } - } - } -@@ -647,24 +628,20 @@ pub struct OwnerHeaders { - pub user: User, - } - --impl<'a, 'r> FromRequest<'a, 'r> for OwnerHeaders { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for OwnerHeaders { - type Error = &'static str; - -- fn from_request(request: &'a Request<'r>) -> Outcome { -- match request.guard::() { -- Outcome::Forward(_) => Outcome::Forward(()), -- Outcome::Failure(f) => Outcome::Failure(f), -- Outcome::Success(headers) => { -- if headers.org_user_type == UserOrgType::Owner { -- Outcome::Success(Self { -- host: headers.host, -- device: headers.device, -- user: headers.user, -- }) -- } else { -- err_handler!("You need to be Owner to call this endpoint") -- } -- } -+ async fn from_request(request: &'r Request<'_>) -> Outcome { -+ let headers = try_outcome!(OrgHeaders::from_request(request).await); -+ if headers.org_user_type == UserOrgType::Owner { -+ Outcome::Success(Self { -+ host: headers.host, -+ device: headers.device, -+ user: headers.user, -+ }) -+ } else { -+ err_handler!("You need to be Owner to call this endpoint") - } - } - } -@@ -678,10 +655,11 @@ pub struct ClientIp { - pub ip: IpAddr, - } - --impl<'a, 'r> FromRequest<'a, 'r> for ClientIp { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for ClientIp { - type Error = (); - -- fn from_request(req: &'a Request<'r>) -> Outcome { -+ async fn from_request(req: &'r Request<'_>) -> Outcome { - let ip = if CONFIG._ip_header_enabled() { - req.headers().get_one(&CONFIG.ip_header()).and_then(|ip| { - match ip.find(',') { diff --git a/security/vaultwarden/patches/patch-src_config_rs b/security/vaultwarden/patches/patch-src_config_rs deleted file mode 100644 index 4d672480a72..00000000000 --- a/security/vaultwarden/patches/patch-src_config_rs +++ /dev/null @@ -1,69 +0,0 @@ -Index: src/config.rs ---- src/config.rs.orig -+++ src/config.rs -@@ -36,6 +36,9 @@ macro_rules! make_config { - pub struct Config { inner: RwLock } - - struct Inner { -+ rocket_shutdown_handle: Option, -+ ws_shutdown_handle: Option, -+ - templates: Handlebars<'static>, - config: ConfigItems, - -@@ -332,6 +335,8 @@ make_config! { - attachments_folder: String, false, auto, |c| format!("{}/{}", c.data_folder, "attachments"); - /// Sends folder - sends_folder: String, false, auto, |c| format!("{}/{}", c.data_folder, "sends"); -+ /// Temp folder |> Used for storing temporary file uploads -+ tmp_folder: String, false, auto, |c| format!("{}/{}", c.data_folder, "tmp"); - /// Templates folder - templates_folder: String, false, auto, |c| format!("{}/{}", c.data_folder, "templates"); - /// Session JWT key -@@ -509,6 +514,9 @@ make_config! { - /// Max database connection retries |> Number of times to retry the database connection during startup, with 1 second between each retry, set to 0 to retry indefinitely - db_connection_retries: u32, false, def, 15; - -+ /// Timeout when aquiring database connection -+ database_timeout: u64, false, def, 30; -+ - /// Database connection pool size - database_max_conns: u32, false, def, 10; - -@@ -743,6 +751,8 @@ impl Config { - - Ok(Config { - inner: RwLock::new(Inner { -+ rocket_shutdown_handle: None, -+ ws_shutdown_handle: None, - templates: load_templates(&config.templates_folder), - config, - _env, -@@ -905,6 +915,27 @@ impl Config { - } else { - let hb = &CONFIG.inner.read().unwrap().templates; - hb.render(name, data).map_err(Into::into) -+ } -+ } -+ -+ pub fn set_rocket_shutdown_handle(&self, handle: rocket::Shutdown) { -+ self.inner.write().unwrap().rocket_shutdown_handle = Some(handle); -+ } -+ -+ pub fn set_ws_shutdown_handle(&self, handle: ws::Sender) { -+ self.inner.write().unwrap().ws_shutdown_handle = Some(handle); -+ } -+ -+ pub fn shutdown(&self) { -+ if let Ok(c) = self.inner.read() { -+ if let Some(handle) = c.ws_shutdown_handle.clone() { -+ handle.shutdown().ok(); -+ } -+ // Wait a bit before stopping the web server -+ std::thread::sleep(std::time::Duration::from_secs(1)); -+ if let Some(handle) = c.rocket_shutdown_handle.clone() { -+ handle.notify(); -+ } - } - } - } diff --git a/security/vaultwarden/patches/patch-src_db_mod_rs b/security/vaultwarden/patches/patch-src_db_mod_rs deleted file mode 100644 index 341fd753659..00000000000 --- a/security/vaultwarden/patches/patch-src_db_mod_rs +++ /dev/null @@ -1,318 +0,0 @@ -Index: src/db/mod.rs ---- src/db/mod.rs.orig -+++ src/db/mod.rs -@@ -1,10 +1,18 @@ -+use std::{sync::Arc, time::Duration}; -+ - use diesel::r2d2::{ConnectionManager, Pool, PooledConnection}; - use rocket::{ - http::Status, -+ outcome::IntoOutcome, - request::{FromRequest, Outcome}, -- Request, State, -+ Request, - }; - -+use tokio::{ -+ sync::{Mutex, OwnedSemaphorePermit, Semaphore}, -+ time::timeout, -+}; -+ - use crate::{ - error::{Error, MapResult}, - CONFIG, -@@ -22,6 +30,23 @@ pub mod __mysql_schema; - #[path = "schemas/postgresql/schema.rs"] - pub mod __postgresql_schema; - -+// There changes are based on Rocket 0.5-rc wrapper of Diesel: https://github.com/SergioBenitez/Rocket/blob/v0.5-rc/contrib/sync_db_pools -+ -+// A wrapper around spawn_blocking that propagates panics to the calling code. -+pub async fn run_blocking(job: F) -> R -+where -+ F: FnOnce() -> R + Send + 'static, -+ R: Send + 'static, -+{ -+ match tokio::task::spawn_blocking(job).await { -+ Ok(ret) => ret, -+ Err(e) => match e.try_into_panic() { -+ Ok(panic) => std::panic::resume_unwind(panic), -+ Err(_) => unreachable!("spawn_blocking tasks are never cancelled"), -+ }, -+ } -+} -+ - // This is used to generate the main DbConn and DbPool enums, which contain one variant for each database supported - macro_rules! generate_connections { - ( $( $name:ident: $ty:ty ),+ ) => { -@@ -29,13 +54,54 @@ macro_rules! generate_connections { - #[derive(Eq, PartialEq)] - pub enum DbConnType { $( $name, )+ } - -+ pub struct DbConn { -+ conn: Arc>>, -+ permit: Option, -+ } -+ - #[allow(non_camel_case_types)] -- pub enum DbConn { $( #[cfg($name)] $name(PooledConnection>), )+ } -+ pub enum DbConnInner { $( #[cfg($name)] $name(PooledConnection>), )+ } - -+ -+ #[derive(Clone)] -+ pub struct DbPool { -+ // This is an 'Option' so that we can drop the pool in a 'spawn_blocking'. -+ pool: Option, -+ semaphore: Arc -+ } -+ - #[allow(non_camel_case_types)] - #[derive(Clone)] -- pub enum DbPool { $( #[cfg($name)] $name(Pool>), )+ } -+ pub enum DbPoolInner { $( #[cfg($name)] $name(Pool>), )+ } - -+ impl Drop for DbConn { -+ fn drop(&mut self) { -+ let conn = self.conn.clone(); -+ let permit = self.permit.take(); -+ -+ // Since connection can't be on the stack in an async fn during an -+ // await, we have to spawn a new blocking-safe thread... -+ tokio::task::spawn_blocking(move || { -+ // And then re-enter the runtime to wait on the async mutex, but in a blocking fashion. -+ let mut conn = tokio::runtime::Handle::current().block_on(conn.lock_owned()); -+ -+ if let Some(conn) = conn.take() { -+ drop(conn); -+ } -+ -+ // Drop permit after the connection is dropped -+ drop(permit); -+ }); -+ } -+ } -+ -+ impl Drop for DbPool { -+ fn drop(&mut self) { -+ let pool = self.pool.take(); -+ tokio::task::spawn_blocking(move || drop(pool)); -+ } -+ } -+ - impl DbPool { - // For the given database URL, guess it's type, run migrations create pool and return it - pub fn from_config() -> Result { -@@ -50,9 +116,13 @@ macro_rules! generate_connections { - let manager = ConnectionManager::new(&url); - let pool = Pool::builder() - .max_size(CONFIG.database_max_conns()) -+ .connection_timeout(Duration::from_secs(CONFIG.database_timeout())) - .build(manager) - .map_res("Failed to create pool")?; -- return Ok(Self::$name(pool)); -+ return Ok(DbPool { -+ pool: Some(DbPoolInner::$name(pool)), -+ semaphore: Arc::new(Semaphore::new(CONFIG.database_max_conns() as usize)), -+ }); - } - #[cfg(not($name))] - #[allow(unreachable_code)] -@@ -61,10 +131,26 @@ macro_rules! generate_connections { - )+ } - } - // Get a connection from the pool -- pub fn get(&self) -> Result { -- match self { $( -+ pub async fn get(&self) -> Result { -+ let duration = Duration::from_secs(CONFIG.database_timeout()); -+ let permit = match timeout(duration, self.semaphore.clone().acquire_owned()).await { -+ Ok(p) => p.expect("Semaphore should be open"), -+ Err(_) => { -+ err!("Timeout waiting for database connection"); -+ } -+ }; -+ -+ match self.pool.as_ref().expect("DbPool.pool should always be Some()") { $( - #[cfg($name)] -- Self::$name(p) => Ok(DbConn::$name(p.get().map_res("Error retrieving connection from pool")?)), -+ DbPoolInner::$name(p) => { -+ let pool = p.clone(); -+ let c = run_blocking(move || pool.get_timeout(duration)).await.map_res("Error retrieving connection from pool")?; -+ -+ return Ok(DbConn { -+ conn: Arc::new(Mutex::new(Some(DbConnInner::$name(c)))), -+ permit: Some(permit) -+ }); -+ }, - )+ } - } - } -@@ -113,42 +199,95 @@ macro_rules! db_run { - db_run! { $conn: sqlite, mysql, postgresql $body } - }; - -- // Different code for each db -- ( $conn:ident: $( $($db:ident),+ $body:block )+ ) => {{ -- #[allow(unused)] use diesel::prelude::*; -- match $conn { -- $($( -- #[cfg($db)] -- crate::db::DbConn::$db(ref $conn) => { -- paste::paste! { -- #[allow(unused)] use crate::db::[<__ $db _schema>]::{self as schema, *}; -- #[allow(unused)] use [<__ $db _model>]::*; -- #[allow(unused)] use crate::db::FromDb; -- } -- $body -- }, -- )+)+ -- }} -- }; -- -- // Same for all dbs - ( @raw $conn:ident: $body:block ) => { - db_run! { @raw $conn: sqlite, mysql, postgresql $body } - }; - - // Different code for each db -- ( @raw $conn:ident: $( $($db:ident),+ $body:block )+ ) => { -+ ( $conn:ident: $( $($db:ident),+ $body:block )+ ) => {{ - #[allow(unused)] use diesel::prelude::*; -- #[allow(unused_variables)] -- match $conn { -- $($( -- #[cfg($db)] -- crate::db::DbConn::$db(ref $conn) => { -- $body -- }, -- )+)+ -- } -- }; -+ -+ // It is important that this inner Arc> (or the OwnedMutexGuard -+ // derived from it) never be a variable on the stack at an await point, -+ // where Drop might be called at any time. This causes (synchronous) -+ // Drop to be called from asynchronous code, which some database -+ // wrappers do not or can not handle. -+ let conn = $conn.conn.clone(); -+ -+ // Since connection can't be on the stack in an async fn during an -+ // await, we have to spawn a new blocking-safe thread... -+ /* -+ run_blocking(move || { -+ // And then re-enter the runtime to wait on the async mutex, but in -+ // a blocking fashion. -+ let mut conn = tokio::runtime::Handle::current().block_on(conn.lock_owned()); -+ let conn = conn.as_mut().expect("internal invariant broken: self.connection is Some"); -+ */ -+ let mut __conn_mutex = conn.try_lock_owned().unwrap(); -+ let conn = __conn_mutex.as_mut().unwrap(); -+ match conn { -+ $($( -+ #[cfg($db)] -+ crate::db::DbConnInner::$db($conn) => { -+ paste::paste! { -+ #[allow(unused)] use crate::db::[<__ $db _schema>]::{self as schema, *}; -+ #[allow(unused)] use [<__ $db _model>]::*; -+ #[allow(unused)] use crate::db::FromDb; -+ } -+ -+ /* -+ // Since connection can't be on the stack in an async fn during an -+ // await, we have to spawn a new blocking-safe thread... -+ run_blocking(move || { -+ // And then re-enter the runtime to wait on the async mutex, but in -+ // a blocking fashion. -+ let mut conn = tokio::runtime::Handle::current().block_on(async { -+ conn.lock_owned().await -+ }); -+ -+ let conn = conn.as_mut().expect("internal invariant broken: self.connection is Some"); -+ f(conn) -+ }).await;*/ -+ -+ $body -+ }, -+ )+)+ -+ } -+ // }).await -+ }}; -+ -+ ( @raw $conn:ident: $( $($db:ident),+ $body:block )+ ) => {{ -+ #[allow(unused)] use diesel::prelude::*; -+ -+ // It is important that this inner Arc> (or the OwnedMutexGuard -+ // derived from it) never be a variable on the stack at an await point, -+ // where Drop might be called at any time. This causes (synchronous) -+ // Drop to be called from asynchronous code, which some database -+ // wrappers do not or can not handle. -+ let conn = $conn.conn.clone(); -+ -+ // Since connection can't be on the stack in an async fn during an -+ // await, we have to spawn a new blocking-safe thread... -+ run_blocking(move || { -+ // And then re-enter the runtime to wait on the async mutex, but in -+ // a blocking fashion. -+ let mut conn = tokio::runtime::Handle::current().block_on(conn.lock_owned()); -+ match conn.as_mut().expect("internal invariant broken: self.connection is Some") { -+ $($( -+ #[cfg($db)] -+ crate::db::DbConnInner::$db($conn) => { -+ paste::paste! { -+ #[allow(unused)] use crate::db::[<__ $db _schema>]::{self as schema, *}; -+ // @RAW: #[allow(unused)] use [<__ $db _model>]::*; -+ #[allow(unused)] use crate::db::FromDb; -+ } -+ -+ $body -+ }, -+ )+)+ -+ } -+ }).await -+ }}; - } - - pub trait FromDb { -@@ -227,9 +366,10 @@ pub mod models; - - /// Creates a back-up of the sqlite database - /// MySQL/MariaDB and PostgreSQL are not supported. --pub fn backup_database(conn: &DbConn) -> Result<(), Error> { -+pub async fn backup_database(conn: &DbConn) -> Result<(), Error> { - db_run! {@raw conn: - postgresql, mysql { -+ let _ = conn; - err!("PostgreSQL and MySQL/MariaDB do not support this backup feature"); - } - sqlite { -@@ -244,7 +384,7 @@ pub fn backup_database(conn: &DbConn) -> Result<(), Er - } - - /// Get the SQL Server version --pub fn get_sql_server_version(conn: &DbConn) -> String { -+pub async fn get_sql_server_version(conn: &DbConn) -> String { - db_run! {@raw conn: - postgresql, mysql { - no_arg_sql_function!(version, diesel::sql_types::Text); -@@ -260,15 +400,14 @@ pub fn get_sql_server_version(conn: &DbConn) -> String - /// Attempts to retrieve a single connection from the managed database pool. If - /// no pool is currently managed, fails with an `InternalServerError` status. If - /// no connections are available, fails with a `ServiceUnavailable` status. --impl<'a, 'r> FromRequest<'a, 'r> for DbConn { -+#[rocket::async_trait] -+impl<'r> FromRequest<'r> for DbConn { - type Error = (); - -- fn from_request(request: &'a Request<'r>) -> Outcome { -- // https://github.com/SergioBenitez/Rocket/commit/e3c1a4ad3ab9b840482ec6de4200d30df43e357c -- let pool = try_outcome!(request.guard::>()); -- match pool.get() { -- Ok(conn) => Outcome::Success(conn), -- Err(_) => Outcome::Failure((Status::ServiceUnavailable, ())), -+ async fn from_request(request: &'r Request<'_>) -> Outcome { -+ match request.rocket().state::() { -+ Some(p) => p.get().await.map_err(|_| ()).into_outcome(Status::ServiceUnavailable), -+ None => Outcome::Failure((Status::InternalServerError, ())), - } - } - } diff --git a/security/vaultwarden/patches/patch-src_error_rs b/security/vaultwarden/patches/patch-src_error_rs deleted file mode 100644 index ac5cf30a6a9..00000000000 --- a/security/vaultwarden/patches/patch-src_error_rs +++ /dev/null @@ -1,41 +0,0 @@ -Index: src/error.rs ---- src/error.rs.orig -+++ src/error.rs -@@ -45,6 +45,7 @@ use lettre::transport::smtp::Error as SmtpErr; - use openssl::error::ErrorStack as SSLErr; - use regex::Error as RegexErr; - use reqwest::Error as ReqErr; -+use rocket::error::Error as RocketErr; - use serde_json::{Error as SerdeErr, Value}; - use std::io::Error as IoErr; - use std::time::SystemTimeError as TimeErr; -@@ -84,6 +85,7 @@ make_error! { - Address(AddrErr): _has_source, _api_error, - Smtp(SmtpErr): _has_source, _api_error, - OpenSSL(SSLErr): _has_source, _api_error, -+ Rocket(RocketErr): _has_source, _api_error, - - DieselCon(DieselConErr): _has_source, _api_error, - DieselMig(DieselMigErr): _has_source, _api_error, -@@ -193,8 +195,8 @@ use rocket::http::{ContentType, Status}; - use rocket::request::Request; - use rocket::response::{self, Responder, Response}; - --impl<'r> Responder<'r> for Error { -- fn respond_to(self, _: &Request) -> response::Result<'r> { -+impl<'r> Responder<'r, 'static> for Error { -+ fn respond_to(self, _: &Request) -> response::Result<'static> { - match self.error { - ErrorKind::Empty(_) => {} // Don't print the error in this situation - ErrorKind::Simple(_) => {} // Don't print the error in this situation -@@ -202,8 +204,8 @@ impl<'r> Responder<'r> for Error { - }; - - let code = Status::from_code(self.error_code).unwrap_or(Status::BadRequest); -- -- Response::build().status(code).header(ContentType::JSON).sized_body(Cursor::new(format!("{}", self))).ok() -+ let body = self.to_string(); -+ Response::build().status(code).header(ContentType::JSON).sized_body(Some(body.len()), Cursor::new(body)).ok() - } - } - diff --git a/security/vaultwarden/patches/patch-src_main_rs b/security/vaultwarden/patches/patch-src_main_rs deleted file mode 100644 index 89c72e182a0..00000000000 --- a/security/vaultwarden/patches/patch-src_main_rs +++ /dev/null @@ -1,199 +0,0 @@ -Index: src/main.rs ---- src/main.rs.orig -+++ src/main.rs -@@ -20,8 +20,15 @@ extern crate diesel; - #[macro_use] - extern crate diesel_migrations; - --use job_scheduler::{Job, JobScheduler}; --use std::{fs::create_dir_all, panic, path::Path, process::exit, str::FromStr, thread, time::Duration}; -+use std::{ -+ fs::{canonicalize, create_dir_all}, -+ panic, -+ path::Path, -+ process::exit, -+ str::FromStr, -+ thread, -+ time::Duration, -+}; - - #[macro_use] - mod error; -@@ -37,9 +44,11 @@ mod util; - - pub use config::CONFIG; - pub use error::{Error, MapResult}; -+use rocket::data::{Limits, ToByteUnit}; - pub use util::is_running_in_docker; - --fn main() { -+#[rocket::main] -+async fn main() -> Result<(), Error> { - parse_args(); - launch_info(); - -@@ -56,13 +65,16 @@ fn main() { - }); - check_web_vault(); - -- create_icon_cache_folder(); -+ create_dir(&CONFIG.icon_cache_folder(), "icon cache"); -+ create_dir(&CONFIG.tmp_folder(), "tmp folder"); -+ create_dir(&CONFIG.sends_folder(), "sends folder"); -+ create_dir(&CONFIG.attachments_folder(), "attachments folder"); - - let pool = create_db_pool(); -- schedule_jobs(pool.clone()); -- crate::db::models::TwoFactor::migrate_u2f_to_webauthn(&pool.get().unwrap()).unwrap(); -+ schedule_jobs(pool.clone()).await; -+ crate::db::models::TwoFactor::migrate_u2f_to_webauthn(&pool.get().await.unwrap()).unwrap(); - -- launch_rocket(pool, extra_debug); // Blocks until program termination. -+ launch_rocket(pool, extra_debug).await // Blocks until program termination. - } - - const HELP: &str = "\ -@@ -127,10 +139,12 @@ fn init_logging(level: log::LevelFilter) -> Result<(), - .level_for("hyper::server", log::LevelFilter::Warn) - // Silence rocket logs - .level_for("_", log::LevelFilter::Off) -- .level_for("launch", log::LevelFilter::Off) -- .level_for("launch_", log::LevelFilter::Off) -- .level_for("rocket::rocket", log::LevelFilter::Off) -- .level_for("rocket::fairing", log::LevelFilter::Off) -+ .level_for("rocket::launch", log::LevelFilter::Error) -+ .level_for("rocket::launch_", log::LevelFilter::Error) -+ .level_for("rocket::rocket", log::LevelFilter::Warn) -+ .level_for("rocket::server", log::LevelFilter::Warn) -+ .level_for("rocket::fairing::fairings", log::LevelFilter::Warn) -+ .level_for("rocket::shield::shield", log::LevelFilter::Warn) - // Never show html5ever and hyper::proto logs, too noisy - .level_for("html5ever", log::LevelFilter::Off) - .level_for("hyper::proto", log::LevelFilter::Off) -@@ -243,10 +257,6 @@ fn create_dir(path: &str, description: &str) { - create_dir_all(path).expect(&err_msg); - } - --fn create_icon_cache_folder() { -- create_dir(&CONFIG.icon_cache_folder(), "icon cache"); --} -- - fn check_data_folder() { - let data_folder = &CONFIG.data_folder(); - let path = Path::new(data_folder); -@@ -314,51 +324,73 @@ fn create_db_pool() -> db::DbPool { - } - } - --fn launch_rocket(pool: db::DbPool, extra_debug: bool) { -+async fn launch_rocket(pool: db::DbPool, extra_debug: bool) -> Result<(), Error> { - let basepath = &CONFIG.domain_path(); - -+ let mut config = rocket::Config::from(rocket::Config::figment()); -+ config.address = std::net::IpAddr::V4(std::net::Ipv4Addr::UNSPECIFIED); // TODO: Allow this to be changed, keep ROCKET_ADDRESS for compat -+ config.temp_dir = canonicalize(CONFIG.tmp_folder()).unwrap().into(); -+ config.limits = Limits::new() // -+ .limit("json", 10.megabytes()) -+ .limit("data-form", 150.megabytes()) -+ .limit("file", 150.megabytes()); -+ - // If adding more paths here, consider also adding them to - // crate::utils::LOGGED_ROUTES to make sure they appear in the log -- let result = rocket::ignite() -- .mount(&[basepath, "/"].concat(), api::web_routes()) -- .mount(&[basepath, "/api"].concat(), api::core_routes()) -- .mount(&[basepath, "/admin"].concat(), api::admin_routes()) -- .mount(&[basepath, "/identity"].concat(), api::identity_routes()) -- .mount(&[basepath, "/icons"].concat(), api::icons_routes()) -- .mount(&[basepath, "/notifications"].concat(), api::notifications_routes()) -+ let instance = rocket::custom(config) -+ .mount([basepath, "/"].concat(), api::web_routes()) -+ .mount([basepath, "/api"].concat(), api::core_routes()) -+ .mount([basepath, "/admin"].concat(), api::admin_routes()) -+ .mount([basepath, "/identity"].concat(), api::identity_routes()) -+ .mount([basepath, "/icons"].concat(), api::icons_routes()) -+ .mount([basepath, "/notifications"].concat(), api::notifications_routes()) - .manage(pool) - .manage(api::start_notification_server()) - .attach(util::AppHeaders()) - .attach(util::Cors()) - .attach(util::BetterLogging(extra_debug)) -- .launch(); -+ .ignite() -+ .await?; - -- // Launch and print error if there is one -- // The launch will restore the original logging level -- error!("Launch error {:#?}", result); -+ CONFIG.set_rocket_shutdown_handle(instance.shutdown()); -+ ctrlc::set_handler(move || { -+ info!("Exiting vaultwarden!"); -+ CONFIG.shutdown(); -+ }) -+ .expect("Error setting Ctrl-C handler"); -+ -+ instance.launch().await?; -+ -+ info!("Vaultwarden process exited!"); -+ Ok(()) - } - --fn schedule_jobs(pool: db::DbPool) { -+async fn schedule_jobs(pool: db::DbPool) { - if CONFIG.job_poll_interval_ms() == 0 { - info!("Job scheduler disabled."); - return; - } -+ -+ let runtime = tokio::runtime::Handle::current(); -+ - thread::Builder::new() - .name("job-scheduler".to_string()) - .spawn(move || { -+ use job_scheduler::{Job, JobScheduler}; -+ - let mut sched = JobScheduler::new(); - - // Purge sends that are past their deletion date. - if !CONFIG.send_purge_schedule().is_empty() { - sched.add(Job::new(CONFIG.send_purge_schedule().parse().unwrap(), || { -- api::purge_sends(pool.clone()); -+ runtime.spawn(api::purge_sends(pool.clone())); - })); - } - - // Purge trashed items that are old enough to be auto-deleted. - if !CONFIG.trash_purge_schedule().is_empty() { - sched.add(Job::new(CONFIG.trash_purge_schedule().parse().unwrap(), || { -- api::purge_trashed_ciphers(pool.clone()); -+ runtime.spawn(api::purge_trashed_ciphers(pool.clone())); - })); - } - -@@ -366,7 +398,7 @@ fn schedule_jobs(pool: db::DbPool) { - // indicates that a user's master password has been compromised. - if !CONFIG.incomplete_2fa_schedule().is_empty() { - sched.add(Job::new(CONFIG.incomplete_2fa_schedule().parse().unwrap(), || { -- api::send_incomplete_2fa_notifications(pool.clone()); -+ runtime.spawn(api::send_incomplete_2fa_notifications(pool.clone())); - })); - } - -@@ -375,7 +407,7 @@ fn schedule_jobs(pool: db::DbPool) { - // sending reminders for requests that are about to be granted anyway. - if !CONFIG.emergency_request_timeout_schedule().is_empty() { - sched.add(Job::new(CONFIG.emergency_request_timeout_schedule().parse().unwrap(), || { -- api::emergency_request_timeout_job(pool.clone()); -+ runtime.spawn(api::emergency_request_timeout_job(pool.clone())); - })); - } - -@@ -383,7 +415,7 @@ fn schedule_jobs(pool: db::DbPool) { - // emergency access requests. - if !CONFIG.emergency_notification_reminder_schedule().is_empty() { - sched.add(Job::new(CONFIG.emergency_notification_reminder_schedule().parse().unwrap(), || { -- api::emergency_notification_reminder_job(pool.clone()); -+ runtime.spawn(api::emergency_notification_reminder_job(pool.clone())); - })); - } - diff --git a/security/vaultwarden/patches/patch-src_util_rs b/security/vaultwarden/patches/patch-src_util_rs deleted file mode 100644 index e8042b732e2..00000000000 --- a/security/vaultwarden/patches/patch-src_util_rs +++ /dev/null @@ -1,185 +0,0 @@ -Index: src/util.rs ---- src/util.rs.orig -+++ src/util.rs -@@ -5,10 +5,10 @@ use std::io::Cursor; - - use rocket::{ - fairing::{Fairing, Info, Kind}, -- http::{ContentType, Header, HeaderMap, Method, RawStr, Status}, -+ http::{ContentType, Header, HeaderMap, Method, Status}, - request::FromParam, - response::{self, Responder}, -- Data, Request, Response, Rocket, -+ Data, Orbit, Request, Response, Rocket, - }; - - use std::thread::sleep; -@@ -18,6 +18,7 @@ use crate::CONFIG; - - pub struct AppHeaders(); - -+#[rocket::async_trait] - impl Fairing for AppHeaders { - fn info(&self) -> Info { - Info { -@@ -26,7 +27,7 @@ impl Fairing for AppHeaders { - } - } - -- fn on_response(&self, _req: &Request, res: &mut Response) { -+ async fn on_response<'r>(&self, _req: &'r Request<'_>, res: &mut Response<'r>) { - res.set_raw_header("Permissions-Policy", "accelerometer=(), ambient-light-sensor=(), autoplay=(), camera=(), encrypted-media=(), fullscreen=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), sync-xhr=(self \"https://haveibeenpwned.com\" \"https://2fa.directory\"), usb=(), vr=()"); - res.set_raw_header("Referrer-Policy", "same-origin"); - res.set_raw_header("X-Frame-Options", "SAMEORIGIN"); -@@ -72,6 +73,7 @@ impl Cors { - } - } - -+#[rocket::async_trait] - impl Fairing for Cors { - fn info(&self) -> Info { - Info { -@@ -80,7 +82,7 @@ impl Fairing for Cors { - } - } - -- fn on_response(&self, request: &Request, response: &mut Response) { -+ async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut Response<'r>) { - let req_headers = request.headers(); - - if let Some(origin) = Cors::get_allowed_origin(req_headers) { -@@ -97,7 +99,7 @@ impl Fairing for Cors { - response.set_header(Header::new("Access-Control-Allow-Credentials", "true")); - response.set_status(Status::Ok); - response.set_header(ContentType::Plain); -- response.set_sized_body(Cursor::new("")); -+ response.set_sized_body(Some(0), Cursor::new("")); - } - } - } -@@ -134,25 +136,21 @@ impl Cached { - } - } - --impl<'r, R: Responder<'r>> Responder<'r> for Cached { -- fn respond_to(self, req: &Request) -> response::Result<'r> { -+impl<'r, R: 'r + Responder<'r, 'static> + Send> Responder<'r, 'static> for Cached { -+ fn respond_to(self, request: &'r Request<'_>) -> response::Result<'static> { -+ let mut res = self.response.respond_to(request)?; -+ - let cache_control_header = if self.is_immutable { - format!("public, immutable, max-age={}", self.ttl) - } else { - format!("public, max-age={}", self.ttl) - }; -+ res.set_raw_header("Cache-Control", cache_control_header); - - let time_now = chrono::Local::now(); -- -- match self.response.respond_to(req) { -- Ok(mut res) => { -- res.set_raw_header("Cache-Control", cache_control_header); -- let expiry_time = time_now + chrono::Duration::seconds(self.ttl.try_into().unwrap()); -- res.set_raw_header("Expires", format_datetime_http(&expiry_time)); -- Ok(res) -- } -- e @ Err(_) => e, -- } -+ let expiry_time = time_now + chrono::Duration::seconds(self.ttl.try_into().unwrap()); -+ res.set_raw_header("Expires", format_datetime_http(&expiry_time)); -+ Ok(res) - } - } - -@@ -175,11 +173,9 @@ impl<'r> FromParam<'r> for SafeString { - type Error = (); - - #[inline(always)] -- fn from_param(param: &'r RawStr) -> Result { -- let s = param.percent_decode().map(|cow| cow.into_owned()).map_err(|_| ())?; -- -- if s.chars().all(|c| matches!(c, 'a'..='z' | 'A'..='Z' |'0'..='9' | '-')) { -- Ok(SafeString(s)) -+ fn from_param(param: &'r str) -> Result { -+ if param.chars().all(|c| matches!(c, 'a'..='z' | 'A'..='Z' |'0'..='9' | '-')) { -+ Ok(SafeString(param.to_string())) - } else { - Err(()) - } -@@ -193,15 +189,16 @@ const LOGGED_ROUTES: [&str; 6] = - - // Boolean is extra debug, when true, we ignore the whitelist above and also print the mounts - pub struct BetterLogging(pub bool); -+#[rocket::async_trait] - impl Fairing for BetterLogging { - fn info(&self) -> Info { - Info { - name: "Better Logging", -- kind: Kind::Launch | Kind::Request | Kind::Response, -+ kind: Kind::Liftoff | Kind::Request | Kind::Response, - } - } - -- fn on_launch(&self, rocket: &Rocket) { -+ async fn on_liftoff(&self, rocket: &Rocket) { - if self.0 { - info!(target: "routes", "Routes loaded:"); - let mut routes: Vec<_> = rocket.routes().collect(); -@@ -225,34 +222,36 @@ impl Fairing for BetterLogging { - info!(target: "start", "Rocket has launched from {}", addr); - } - -- fn on_request(&self, request: &mut Request<'_>, _data: &Data) { -+ async fn on_request(&self, request: &mut Request<'_>, _data: &mut Data<'_>) { - let method = request.method(); - if !self.0 && method == Method::Options { - return; - } - let uri = request.uri(); - let uri_path = uri.path(); -- let uri_subpath = uri_path.strip_prefix(&CONFIG.domain_path()).unwrap_or(uri_path); -+ let uri_path_str = uri_path.url_decode_lossy(); -+ let uri_subpath = uri_path_str.strip_prefix(&CONFIG.domain_path()).unwrap_or(&uri_path_str); - if self.0 || LOGGED_ROUTES.iter().any(|r| uri_subpath.starts_with(r)) { - match uri.query() { -- Some(q) => info!(target: "request", "{} {}?{}", method, uri_path, &q[..q.len().min(30)]), -- None => info!(target: "request", "{} {}", method, uri_path), -+ Some(q) => info!(target: "request", "{} {}?{}", method, uri_path_str, &q[..q.len().min(30)]), -+ None => info!(target: "request", "{} {}", method, uri_path_str), - }; - } - } - -- fn on_response(&self, request: &Request, response: &mut Response) { -+ async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut Response<'r>) { - if !self.0 && request.method() == Method::Options { - return; - } - let uri_path = request.uri().path(); -- let uri_subpath = uri_path.strip_prefix(&CONFIG.domain_path()).unwrap_or(uri_path); -+ let uri_path_str = uri_path.url_decode_lossy(); -+ let uri_subpath = uri_path_str.strip_prefix(&CONFIG.domain_path()).unwrap_or(&uri_path_str); - if self.0 || LOGGED_ROUTES.iter().any(|r| uri_subpath.starts_with(r)) { - let status = response.status(); -- if let Some(route) = request.route() { -- info!(target: "response", "{} => {} {}", route, status.code, status.reason) -+ if let Some(ref route) = request.route() { -+ info!(target: "response", "{} => {}", route, status) - } else { -- info!(target: "response", "{} {}", status.code, status.reason) -+ info!(target: "response", "{}", status) - } - } - } -@@ -614,10 +613,7 @@ where - } - } - --use reqwest::{ -- blocking::{Client, ClientBuilder}, -- header, --}; -+use reqwest::{header, Client, ClientBuilder}; - - pub fn get_reqwest_client() -> Client { - get_reqwest_client_builder().build().expect("Failed to build client")