From a5069df94f80be97245aa0ab376018b7fe807697 Mon Sep 17 00:00:00 2001 From: Nicolas80 <nicolas.pmail@protonmail.com> Date: Mon, 6 Jan 2025 14:44:46 +0100 Subject: [PATCH] Made an extra check of derivation path to make sure it's not linking to the same SS58 Address as "root" suri when doing `vault import|migrate` --- src/commands/vault.rs | 57 ++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/src/commands/vault.rs b/src/commands/vault.rs index 3a8b4f0..87db113 100644 --- a/src/commands/vault.rs +++ b/src/commands/vault.rs @@ -768,33 +768,46 @@ where let encrypted_suri = encrypt(root_secret_suri.as_bytes(), password.to_string()).map_err(|e| anyhow!(e))?; - let _root_account = vault_account::create_vault_account( - db, - &root_address, - map_secret_format_to_crypto_type(secret_format), - encrypted_suri, - ) - .await?; + let crypto_type = map_secret_format_to_crypto_type(secret_format); + + let _root_account = + vault_account::create_vault_account(db, &root_address, crypto_type, encrypted_suri).await?; let derivation = if let Some(derivation_path) = derivation_path_opt { - // Root derivation - let _root_derivation = - vault_derivation::create_root_vault_derivation(db, &root_address, None).await?; - - // Compute derivation ! - let derivation = vault_derivation::ActiveModel { - address: Set(derivation_address.unwrap().clone()), - name: Set(name.cloned()), - path: Set(Some(derivation_path)), - root_address: Set(root_address.clone()), - }; - let derivation = derivation.insert(db).await?; - println!("Created derivation {}", derivation); - derivation + let derivation_address = derivation_address.unwrap(); + + // Extra check of derivation path to make sure it's not linking to the same SS58 Address as root + if root_address == derivation_address { + println!("Derivation path provided:'{derivation_path}' linked to the same SS58 Address than the base suri without derivation"); + + let root_derivation = + vault_derivation::create_root_vault_derivation(db, &root_address, name).await?; + + println!("For that reason only the base suri was imported"); + println!("Created: {}", root_derivation); + + root_derivation + } else { + let _root_derivation = + vault_derivation::create_root_vault_derivation(db, &root_address, None).await?; + + // Compute derivation ! + let derivation = vault_derivation::ActiveModel { + address: Set(derivation_address.clone()), + name: Set(name.cloned()), + path: Set(Some(derivation_path)), + root_address: Set(root_address.clone()), + }; + + let derivation = derivation.insert(db).await?; + + println!("Created: {}", derivation); + derivation + } } else { let derivation = vault_derivation::create_root_vault_derivation(db, &root_address, name).await?; - println!("Created derivation {}", derivation); + println!("Created: {}", derivation); derivation }; -- GitLab