mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-04-14 00:09:58 -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