mirror of
				https://github.com/scottlamb/moonfire-nvr.git
				synced 2025-10-29 15:55:01 -04:00 
			
		
		
		
	upgrade to Rust 1.70, use std::sync::OnceLock
				
					
				
			The most notable part of this is that `db::auth` no longer holds a lock during password hashing operations. That was probably never a great idea...
This commit is contained in:
		
							parent
							
								
									ebcdd76084
								
							
						
					
					
						commit
						028243532a
					
				
							
								
								
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -11,7 +11,7 @@ jobs: | |||||||
|     name: Rust ${{ matrix.rust }} |     name: Rust ${{ matrix.rust }} | ||||||
|     strategy: |     strategy: | ||||||
|       matrix: |       matrix: | ||||||
|         rust: [ "stable", "1.65", "nightly" ] |         rust: [ "stable", "1.70", "nightly" ] | ||||||
|         include: |         include: | ||||||
|           - rust: nightly |           - rust: nightly | ||||||
|             extra_args: "--features nightly --benches" |             extra_args: "--features nightly --benches" | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ even on minor releases, e.g. `0.7.5` -> `0.7.6`. | |||||||
| ## unreleased | ## unreleased | ||||||
| 
 | 
 | ||||||
| *   new log formats using `tracing`. This will allow richer context information. | *   new log formats using `tracing`. This will allow richer context information. | ||||||
| *   bump minimum Rust version to 1.65. | *   bump minimum Rust version to 1.70. | ||||||
| *   expect camelCase in `moonfire-nvr.toml` file, for consistency with the JSON | *   expect camelCase in `moonfire-nvr.toml` file, for consistency with the JSON | ||||||
|     API. You'll need to adjust your config file when upgrading. |     API. You'll need to adjust your config file when upgrading. | ||||||
| *   use Retina 0.4.5. | *   use Retina 0.4.5. | ||||||
|  | |||||||
							
								
								
									
										131
									
								
								server/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										131
									
								
								server/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @ -38,6 +38,12 @@ dependencies = [ | |||||||
|  "memchr", |  "memchr", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "android-tzdata" | ||||||
|  | version = "0.1.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "android_system_properties" | name = "android_system_properties" | ||||||
| version = "0.1.5" | version = "0.1.5" | ||||||
| @ -191,9 +197,9 @@ checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" | |||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cc" | name = "cc" | ||||||
| version = "1.0.78" | version = "1.0.79" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" | checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cfg-if" | name = "cfg-if" | ||||||
| @ -203,13 +209,13 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | |||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "chrono" | name = "chrono" | ||||||
| version = "0.4.23" | version = "0.4.26" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" | checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  |  "android-tzdata", | ||||||
|  "iana-time-zone", |  "iana-time-zone", | ||||||
|  "js-sys", |  "js-sys", | ||||||
|  "num-integer", |  | ||||||
|  "num-traits", |  "num-traits", | ||||||
|  "time 0.1.45", |  "time 0.1.45", | ||||||
|  "wasm-bindgen", |  "wasm-bindgen", | ||||||
| @ -226,16 +232,6 @@ dependencies = [ | |||||||
|  "inout", |  "inout", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] |  | ||||||
| name = "codespan-reporting" |  | ||||||
| version = "0.11.1" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" |  | ||||||
| dependencies = [ |  | ||||||
|  "termcolor", |  | ||||||
|  "unicode-width", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "constant_time_eq" | name = "constant_time_eq" | ||||||
| version = "0.2.4" | version = "0.2.4" | ||||||
| @ -250,9 +246,9 @@ checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" | |||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "core-foundation-sys" | name = "core-foundation-sys" | ||||||
| version = "0.8.3" | version = "0.8.4" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" | checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "cpufeatures" | name = "cpufeatures" | ||||||
| @ -352,50 +348,6 @@ dependencies = [ | |||||||
|  "xi-unicode", |  "xi-unicode", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] |  | ||||||
| name = "cxx" |  | ||||||
| version = "1.0.85" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "5add3fc1717409d029b20c5b6903fc0c0b02fa6741d820054f4a2efa5e5816fd" |  | ||||||
| dependencies = [ |  | ||||||
|  "cc", |  | ||||||
|  "cxxbridge-flags", |  | ||||||
|  "cxxbridge-macro", |  | ||||||
|  "link-cplusplus", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] |  | ||||||
| name = "cxx-build" |  | ||||||
| version = "1.0.85" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "b4c87959ba14bc6fbc61df77c3fcfe180fc32b93538c4f1031dd802ccb5f2ff0" |  | ||||||
| dependencies = [ |  | ||||||
|  "cc", |  | ||||||
|  "codespan-reporting", |  | ||||||
|  "once_cell", |  | ||||||
|  "proc-macro2", |  | ||||||
|  "quote", |  | ||||||
|  "scratch", |  | ||||||
|  "syn 1.0.107", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] |  | ||||||
| name = "cxxbridge-flags" |  | ||||||
| version = "1.0.85" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "69a3e162fde4e594ed2b07d0f83c6c67b745e7f28ce58c6df5e6b6bef99dfb59" |  | ||||||
| 
 |  | ||||||
| [[package]] |  | ||||||
| name = "cxxbridge-macro" |  | ||||||
| version = "1.0.85" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6" |  | ||||||
| dependencies = [ |  | ||||||
|  "proc-macro2", |  | ||||||
|  "quote", |  | ||||||
|  "syn 1.0.107", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "darling" | name = "darling" | ||||||
| version = "0.14.2" | version = "0.14.2" | ||||||
| @ -903,26 +855,25 @@ dependencies = [ | |||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "iana-time-zone" | name = "iana-time-zone" | ||||||
| version = "0.1.53" | version = "0.1.57" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" | checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "android_system_properties", |  "android_system_properties", | ||||||
|  "core-foundation-sys", |  "core-foundation-sys", | ||||||
|  "iana-time-zone-haiku", |  "iana-time-zone-haiku", | ||||||
|  "js-sys", |  "js-sys", | ||||||
|  "wasm-bindgen", |  "wasm-bindgen", | ||||||
|  "winapi", |  "windows", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "iana-time-zone-haiku" | name = "iana-time-zone-haiku" | ||||||
| version = "0.1.1" | version = "0.1.2" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  "cxx", |  "cc", | ||||||
|  "cxx-build", |  | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] | [[package]] | ||||||
| @ -1039,15 +990,6 @@ dependencies = [ | |||||||
|  "vcpkg", |  "vcpkg", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] |  | ||||||
| name = "link-cplusplus" |  | ||||||
| version = "1.0.8" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" |  | ||||||
| dependencies = [ |  | ||||||
|  "cc", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "linux-raw-sys" | name = "linux-raw-sys" | ||||||
| version = "0.4.3" | version = "0.4.3" | ||||||
| @ -1170,7 +1112,6 @@ dependencies = [ | |||||||
|  "nix", |  "nix", | ||||||
|  "num-rational", |  "num-rational", | ||||||
|  "odds", |  "odds", | ||||||
|  "once_cell", |  | ||||||
|  "pretty-hex", |  "pretty-hex", | ||||||
|  "protobuf", |  "protobuf", | ||||||
|  "protobuf-codegen", |  "protobuf-codegen", | ||||||
| @ -1217,7 +1158,6 @@ dependencies = [ | |||||||
|  "nix", |  "nix", | ||||||
|  "nom", |  "nom", | ||||||
|  "num-rational", |  "num-rational", | ||||||
|  "once_cell", |  | ||||||
|  "password-hash", |  "password-hash", | ||||||
|  "protobuf", |  "protobuf", | ||||||
|  "reffers", |  "reffers", | ||||||
| @ -1852,12 +1792,6 @@ dependencies = [ | |||||||
|  "cipher", |  "cipher", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] |  | ||||||
| name = "scratch" |  | ||||||
| version = "1.0.3" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" |  | ||||||
| 
 |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "scrypt" | name = "scrypt" | ||||||
| version = "0.10.0" | version = "0.10.0" | ||||||
| @ -2097,15 +2031,6 @@ dependencies = [ | |||||||
|  "winapi", |  "winapi", | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| [[package]] |  | ||||||
| name = "termcolor" |  | ||||||
| version = "1.1.3" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" |  | ||||||
| dependencies = [ |  | ||||||
|  "winapi-util", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "thiserror" | name = "thiserror" | ||||||
| version = "1.0.38" | version = "1.0.38" | ||||||
| @ -2646,21 +2571,21 @@ version = "0.4.0" | |||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | ||||||
| 
 | 
 | ||||||
| [[package]] |  | ||||||
| name = "winapi-util" |  | ||||||
| version = "0.1.5" |  | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" |  | ||||||
| checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" |  | ||||||
| dependencies = [ |  | ||||||
|  "winapi", |  | ||||||
| ] |  | ||||||
| 
 |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "winapi-x86_64-pc-windows-gnu" | name = "winapi-x86_64-pc-windows-gnu" | ||||||
| version = "0.4.0" | version = "0.4.0" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "windows" | ||||||
|  | version = "0.48.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" | ||||||
|  | dependencies = [ | ||||||
|  |  "windows-targets", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "windows-sys" | name = "windows-sys" | ||||||
| version = "0.42.0" | version = "0.42.0" | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ authors = ["Scott Lamb <slamb@slamb.org>"] | |||||||
| edition = "2021" | edition = "2021" | ||||||
| resolver = "2" | resolver = "2" | ||||||
| license-file = "../LICENSE.txt" | license-file = "../LICENSE.txt" | ||||||
| rust-version = "1.65" | rust-version = "1.70" | ||||||
| 
 | 
 | ||||||
| [features] | [features] | ||||||
| 
 | 
 | ||||||
| @ -27,6 +27,7 @@ blake3 = "1.0.0" | |||||||
| bpaf = { git = "https://github.com/pacak/bpaf.git", rev = "905ab7166dd59e89bebbd3364e14b203ee57dba4", features = ["autocomplete", "bright-color", "derive"]} | bpaf = { git = "https://github.com/pacak/bpaf.git", rev = "905ab7166dd59e89bebbd3364e14b203ee57dba4", features = ["autocomplete", "bright-color", "derive"]} | ||||||
| bytes = "1" | bytes = "1" | ||||||
| byteorder = "1.0" | byteorder = "1.0" | ||||||
|  | chrono = "0.4.23" | ||||||
| cursive = "0.20.0" | cursive = "0.20.0" | ||||||
| db = { package = "moonfire-db", path = "db" } | db = { package = "moonfire-db", path = "db" } | ||||||
| failure = "0.1.1" | failure = "0.1.1" | ||||||
| @ -58,15 +59,13 @@ tokio-stream = "0.1.5" | |||||||
| tokio-tungstenite = "0.18.0" | tokio-tungstenite = "0.18.0" | ||||||
| toml = "0.5" | toml = "0.5" | ||||||
| tracing = { version = "0.1", features = ["log"] } | tracing = { version = "0.1", features = ["log"] } | ||||||
| url = "2.1.1" |  | ||||||
| uuid = { version = "1.1.2", features = ["serde", "std", "v4"] } |  | ||||||
| once_cell = "1.17.0" |  | ||||||
| tracing-subscriber = { version = "0.3.16", features = ["env-filter", "json"] } | tracing-subscriber = { version = "0.3.16", features = ["env-filter", "json"] } | ||||||
| tracing-core = "0.1.30" | tracing-core = "0.1.30" | ||||||
| tracing-log = "0.1.3" |  | ||||||
| chrono = "0.4.23" |  | ||||||
| ulid = "1.0.0" |  | ||||||
| tracing-futures = { version = "0.2.5", features = ["futures-03", "std-future"] } | tracing-futures = { version = "0.2.5", features = ["futures-03", "std-future"] } | ||||||
|  | tracing-log = "0.1.3" | ||||||
|  | ulid = "1.0.0" | ||||||
|  | url = "2.1.1" | ||||||
|  | uuid = { version = "1.1.2", features = ["serde", "std", "v4"] } | ||||||
| 
 | 
 | ||||||
| [dev-dependencies] | [dev-dependencies] | ||||||
| mp4 = { git = "https://github.com/scottlamb/mp4-rust", branch = "moonfire" } | mp4 = { git = "https://github.com/scottlamb/mp4-rust", branch = "moonfire" } | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ authors = ["Scott Lamb <slamb@slamb.org>"] | |||||||
| readme = "../README.md" | readme = "../README.md" | ||||||
| edition = "2021" | edition = "2021" | ||||||
| license-file = "../../LICENSE.txt" | license-file = "../../LICENSE.txt" | ||||||
|  | rust-version = "1.70" | ||||||
| 
 | 
 | ||||||
| [features] | [features] | ||||||
| nightly = [] | nightly = [] | ||||||
| @ -24,6 +25,7 @@ fnv = "1.0" | |||||||
| futures = "0.3" | futures = "0.3" | ||||||
| h264-reader = "0.6.0" | h264-reader = "0.6.0" | ||||||
| hashlink = "0.8.1" | hashlink = "0.8.1" | ||||||
|  | itertools = "0.10.0" | ||||||
| libc = "0.2" | libc = "0.2" | ||||||
| nix = "0.26.1" | nix = "0.26.1" | ||||||
| num-rational = { version = "0.4.0", default-features = false, features = ["std"] } | num-rational = { version = "0.4.0", default-features = false, features = ["std"] } | ||||||
| @ -40,12 +42,10 @@ smallvec = "1.0" | |||||||
| tempfile = "3.2.0" | tempfile = "3.2.0" | ||||||
| time = "0.1" | time = "0.1" | ||||||
| tokio = { version = "1.24", features = ["macros", "rt-multi-thread", "sync"] } | tokio = { version = "1.24", features = ["macros", "rt-multi-thread", "sync"] } | ||||||
| url = { version = "2.1.1", features = ["serde"] } |  | ||||||
| uuid = { version = "1.1.2", features = ["serde", "std", "v4"] } |  | ||||||
| itertools = "0.10.0" |  | ||||||
| once_cell = "1.17.0" |  | ||||||
| tracing = "0.1.37" | tracing = "0.1.37" | ||||||
| ulid = "1.0.0" | ulid = "1.0.0" | ||||||
|  | url = { version = "2.1.1", features = ["serde"] } | ||||||
|  | uuid = { version = "1.1.2", features = ["serde", "std", "v4"] } | ||||||
| 
 | 
 | ||||||
| [build-dependencies] | [build-dependencies] | ||||||
| protobuf-codegen = "3.0" | protobuf-codegen = "3.0" | ||||||
|  | |||||||
| @ -17,17 +17,41 @@ use std::collections::BTreeMap; | |||||||
| use std::fmt; | use std::fmt; | ||||||
| use std::net::IpAddr; | use std::net::IpAddr; | ||||||
| use std::str::FromStr; | use std::str::FromStr; | ||||||
| use std::sync::Mutex; | use std::sync::OnceLock; | ||||||
| use tracing::info; | use tracing::info; | ||||||
| 
 | 
 | ||||||
| static PARAMS: once_cell::sync::Lazy<Mutex<scrypt::Params>> = | /// Wrapper around [`scrypt::Params`].
 | ||||||
|     once_cell::sync::Lazy::new(|| Mutex::new(scrypt::Params::recommended())); | ///
 | ||||||
|  | /// `scrypt::Params` does not implement `PartialEq`; so for the benefit of `set_test_config`
 | ||||||
|  | /// error handling, keep track of whether these params are the recommended
 | ||||||
|  | /// production ones or the cheap test ones.
 | ||||||
|  | struct Params { | ||||||
|  |     actual: scrypt::Params, | ||||||
|  |     is_test: bool, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PARAMS: OnceLock<Params> = OnceLock::new(); | ||||||
|  | 
 | ||||||
|  | fn params() -> &'static Params { | ||||||
|  |     PARAMS.get_or_init(|| Params { | ||||||
|  |         actual: scrypt::Params::recommended(), | ||||||
|  |         is_test: false, | ||||||
|  |     }) | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| /// For testing only: use fast but insecure hashes.
 | /// For testing only: use fast but insecure hashes.
 | ||||||
| /// Call via `testutil::init()`.
 | /// Call via `testutil::init()`.
 | ||||||
| pub(crate) fn set_test_config() { | pub(crate) fn set_test_config() { | ||||||
|     let params = scrypt::Params::new(8, 8, 1).unwrap(); |     let test_params = scrypt::Params::new(8, 8, 1).expect("test params should be valid"); | ||||||
|     *PARAMS.lock().unwrap() = params; |     if let Err(existing_params) = PARAMS.set(Params { | ||||||
|  |         actual: test_params, | ||||||
|  |         is_test: true, | ||||||
|  |     }) { | ||||||
|  |         assert!( | ||||||
|  |             existing_params.is_test, | ||||||
|  |             "set_test_config must be called before any use of the parameters" | ||||||
|  |         ); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Debug)] | #[derive(Debug)] | ||||||
| @ -126,9 +150,9 @@ impl UserChange { | |||||||
| 
 | 
 | ||||||
|     pub fn set_password(&mut self, pwd: String) { |     pub fn set_password(&mut self, pwd: String) { | ||||||
|         let salt = SaltString::generate(&mut scrypt::password_hash::rand_core::OsRng); |         let salt = SaltString::generate(&mut scrypt::password_hash::rand_core::OsRng); | ||||||
|         let params = *PARAMS.lock().unwrap(); |         let params = params(); | ||||||
|         let hash = scrypt::Scrypt |         let hash = scrypt::Scrypt | ||||||
|             .hash_password_customized(pwd.as_bytes(), None, None, params, &salt) |             .hash_password_customized(pwd.as_bytes(), None, None, params.actual, &salt) | ||||||
|             .unwrap(); |             .unwrap(); | ||||||
|         self.set_password_hash = Some(Some(hash.to_string())); |         self.set_password_hash = Some(Some(hash.to_string())); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -368,7 +368,7 @@ fn confirm_deletion(siv: &mut Cursive, db: &Arc<db::Database>, id: i32, to_delet | |||||||
|             for (&stream_id, stream) in l.streams_by_id() { |             for (&stream_id, stream) in l.streams_by_id() { | ||||||
|                 if stream.camera_id == id { |                 if stream.camera_id == id { | ||||||
|                     let Some(dir_id) = stream.sample_file_dir_id else { |                     let Some(dir_id) = stream.sample_file_dir_id else { | ||||||
|                         continue
 |                         continue; | ||||||
|                     }; |                     }; | ||||||
|                     let l = zero_limits |                     let l = zero_limits | ||||||
|                         .entry(dir_id) |                         .entry(dir_id) | ||||||
|  | |||||||
| @ -3028,8 +3028,7 @@ mod bench { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     static SERVER: once_cell::sync::Lazy<BenchServer> = |     static SERVER: std::sync::OnceLock<BenchServer> = std::sync::OnceLock::new(); | ||||||
|         once_cell::sync::Lazy::new(BenchServer::new); |  | ||||||
| 
 | 
 | ||||||
|     #[bench] |     #[bench] | ||||||
|     fn build_index(b: &mut test::Bencher) { |     fn build_index(b: &mut test::Bencher) { | ||||||
| @ -3063,7 +3062,7 @@ mod bench { | |||||||
|     #[bench] |     #[bench] | ||||||
|     fn serve_generated_bytes(b: &mut test::Bencher) { |     fn serve_generated_bytes(b: &mut test::Bencher) { | ||||||
|         testutil::init(); |         testutil::init(); | ||||||
|         let server = &*SERVER; |         let server = server.get_or_init(BenchServer::new); | ||||||
|         let p = server.generated_len; |         let p = server.generated_len; | ||||||
|         b.bytes = p; |         b.bytes = p; | ||||||
|         let client = reqwest::Client::new(); |         let client = reqwest::Client::new(); | ||||||
|  | |||||||
| @ -226,18 +226,24 @@ mod tests { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     #[rustfmt::skip] |     #[rustfmt::skip] | ||||||
|     static SLICES: once_cell::sync::Lazy<Slices<FakeSlice>> = once_cell::sync::Lazy::new(|| { |     static SLICES: std::sync::OnceLock<Slices<FakeSlice>> = std::sync::OnceLock::new(); | ||||||
|         let mut s = Slices::new(); | 
 | ||||||
|         s.append(FakeSlice { end: 5,                    name: "a" }).unwrap(); |     #[rustfmt::skip] | ||||||
|         s.append(FakeSlice { end: 5 + 13,               name: "b" }).unwrap(); |     fn slices() -> &'static Slices<FakeSlice> { | ||||||
|         s.append(FakeSlice { end: 5 + 13 + 7,           name: "c" }).unwrap(); |         SLICES.get_or_init(|| { | ||||||
|         s.append(FakeSlice { end: 5 + 13 + 7 + 17,      name: "d" }).unwrap(); |             let mut s = Slices::new(); | ||||||
|         s.append(FakeSlice { end: 5 + 13 + 7 + 17 + 19, name: "e" }).unwrap(); |             s.append(FakeSlice { end: 5,                    name: "a" }).unwrap(); | ||||||
|         s |             s.append(FakeSlice { end: 5 + 13,               name: "b" }).unwrap(); | ||||||
|     }); |             s.append(FakeSlice { end: 5 + 13 + 7,           name: "c" }).unwrap(); | ||||||
|  |             s.append(FakeSlice { end: 5 + 13 + 7 + 17,      name: "d" }).unwrap(); | ||||||
|  |             s.append(FakeSlice { end: 5 + 13 + 7 + 17 + 19, name: "e" }).unwrap(); | ||||||
|  |             s | ||||||
|  |         }) | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     async fn get_range(r: Range<u64>) -> Vec<FakeChunk> { |     async fn get_range(r: Range<u64>) -> Vec<FakeChunk> { | ||||||
|         Pin::from(SLICES.get_range(&&*SLICES, r)) |         let slices = slices(); | ||||||
|  |         Pin::from(slices.get_range(&slices, r)) | ||||||
|             .try_collect() |             .try_collect() | ||||||
|             .await |             .await | ||||||
|             .unwrap() |             .unwrap() | ||||||
| @ -246,7 +252,7 @@ mod tests { | |||||||
|     #[test] |     #[test] | ||||||
|     pub fn size() { |     pub fn size() { | ||||||
|         testutil::init(); |         testutil::init(); | ||||||
|         assert_eq!(5 + 13 + 7 + 17 + 19, SLICES.len()); |         assert_eq!(5 + 13 + 7 + 17 + 19, slices().len()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     #[tokio::test] |     #[tokio::test] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user