mirror of
https://github.com/rustdesk/hbb_common.git
synced 2026-05-25 17:19:15 +00:00
refact(password): set cfg, do not early return if the password is invalid
Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
@@ -1653,10 +1653,7 @@ impl Config {
|
|||||||
// TODO: `Config::set()` does not invalidate trusted devices when permanent password/salt changes.
|
// TODO: `Config::set()` does not invalidate trusted devices when permanent password/salt changes.
|
||||||
// This matches historical behavior, but may need revisiting in a separate PR.
|
// This matches historical behavior, but may need revisiting in a separate PR.
|
||||||
pub fn set(mut cfg: Config) -> bool {
|
pub fn set(mut cfg: Config) -> bool {
|
||||||
if let Err(err) = Self::migrate_permanent_password_to_encrypted_hashed_storage(&mut cfg) {
|
Self::prepare_config_for_store(&mut cfg);
|
||||||
log::error!("Refusing to set config with invalid permanent password storage: {err}");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
let mut lock = CONFIG.write().unwrap();
|
let mut lock = CONFIG.write().unwrap();
|
||||||
if *lock == cfg {
|
if *lock == cfg {
|
||||||
return false;
|
return false;
|
||||||
@@ -3483,6 +3480,25 @@ mod tests {
|
|||||||
assert_eq!(cfg.id, "123456789");
|
assert_eq!(cfg.id, "123456789");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_set_clears_invalid_permanent_password_and_keeps_unrelated_fields() {
|
||||||
|
let mut cfg = Config::default();
|
||||||
|
let invalid_payload =
|
||||||
|
crate::password_security::symmetric_crypt(b"not-a-hash", true).unwrap();
|
||||||
|
cfg.password = PERMANENT_PASSWORD_ENC_VERSION.to_owned()
|
||||||
|
+ &base64::encode(invalid_payload, base64::Variant::Original);
|
||||||
|
cfg.id = "123456789".to_owned();
|
||||||
|
|
||||||
|
with_config_and_hard_settings(Config::default(), HashMap::new(), || {
|
||||||
|
assert!(Config::set(cfg));
|
||||||
|
|
||||||
|
let updated = Config::get();
|
||||||
|
assert!(updated.password.is_empty());
|
||||||
|
assert!(updated.salt.is_empty());
|
||||||
|
assert_eq!(updated.id, "123456789");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_permanent_password_sync_treats_same_encrypted_hash_as_unchanged() {
|
fn test_permanent_password_sync_treats_same_encrypted_hash_as_unchanged() {
|
||||||
let mut cfg = Config::default();
|
let mut cfg = Config::default();
|
||||||
|
|||||||
Reference in New Issue
Block a user