From 33070b62f1d99cd6b82bfb3c33d69c9b354dd980 Mon Sep 17 00:00:00 2001 From: Vecna Date: Fri, 5 Jul 2024 12:59:24 -0400 Subject: [PATCH] Allow users to migrate from level 0 to 1 --- src/user.rs | 106 ++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/src/user.rs b/src/user.rs index 652028b..85acc30 100644 --- a/src/user.rs +++ b/src/user.rs @@ -449,11 +449,11 @@ impl User { }; // Can we level up the main credential? - let can_level_up = reachcred.is_some() - && (level == 0 - && eligible_for_trust_promotion(&config.la_net, &self.primary_cred).await - || level > 0 - && eligible_for_level_up(&config.la_net, &self.primary_cred).await); + let can_level_up = level == 0 + && eligible_for_trust_promotion(&config.la_net, &self.primary_cred).await + || reachcred.is_some() + && level > 0 + && eligible_for_level_up(&config.la_net, &self.primary_cred).await; // Can we migrate the main credential? let can_migrate = reachcred.is_none() && level >= MIN_TRUST_LEVEL; @@ -608,8 +608,6 @@ impl User { // let's just allow it. if can_level_up { - // If we can level up/trust migrate, do so - // Trust migration from level 0 to level 1 let cred = if level == 0 { trust_migration( @@ -653,6 +651,7 @@ impl User { get_migration_pub(&config.la_pubkeys), ) .await?; + self.primary_cred = cred; self.secondary_cred = None; } else if second_level_up { @@ -672,6 +671,7 @@ impl User { get_migration_pub(&config.la_pubkeys), ) .await?; + self.primary_cred = cred; self.secondary_cred = None; } else if second_cred.is_some() { @@ -783,56 +783,56 @@ impl User { } // Censor user tries to level up their primary credential - if reachcred.is_some() { - if level == 0 && eligible_for_trust_promotion(&config.la_net, &self.primary_cred).await - || level > 0 && eligible_for_level_up(&config.la_net, &self.primary_cred).await - { - let new_cred = if level == 0 { - trust_migration( + if level == 0 && eligible_for_trust_promotion(&config.la_net, &self.primary_cred).await + || reachcred.is_some() + && level > 0 + && eligible_for_level_up(&config.la_net, &self.primary_cred).await + { + let new_cred = if level == 0 { + trust_migration( + &config.la_net, + &self.primary_cred, + &trust_promotion( &config.la_net, &self.primary_cred, - &trust_promotion( - &config.la_net, - &self.primary_cred, - get_lox_pub(&config.la_pubkeys), - ) - .await?, get_lox_pub(&config.la_pubkeys), - get_migration_pub(&config.la_pubkeys), ) - .await? - } else { - level_up( - &config.la_net, - &self.primary_cred, - &reachcred.unwrap(), - get_lox_pub(&config.la_pubkeys), - get_reachability_pub(&config.la_pubkeys), - ) - .await? - }; - self.primary_cred = new_cred; - let (bucket, _reachcred) = get_bucket(&config.la_net, &self.primary_cred).await?; - // Make sure each bridge is in global bridges set and - // known by censor - for bl in bucket { - let fingerprint = bl.get_hashed_fingerprint(); - if !bridges.contains_key(&fingerprint) { - let bridge = Bridge::from_bridge_line(&bl); - bridges.insert(fingerprint, bridge); - } - censor.learn_bridge(&fingerprint); - if level == 2 { - // level up to 3 - // Give censor an additional credential - censor.give_lox_cred(&fingerprint, &self.primary_cred, true); - } else if level > 2 { - // level up to 4 - // Replace censor's credential with newer one, - // but don't add to count of censor's - // credentials - censor.give_lox_cred(&fingerprint, &self.primary_cred, false); - } + .await?, + get_lox_pub(&config.la_pubkeys), + get_migration_pub(&config.la_pubkeys), + ) + .await? + } else { + level_up( + &config.la_net, + &self.primary_cred, + &reachcred.unwrap(), + get_lox_pub(&config.la_pubkeys), + get_reachability_pub(&config.la_pubkeys), + ) + .await? + }; + self.primary_cred = new_cred; + let (bucket, _reachcred) = get_bucket(&config.la_net, &self.primary_cred).await?; + // Make sure each bridge is in global bridges set and + // known by censor + for bl in bucket { + let fingerprint = bl.get_hashed_fingerprint(); + if !bridges.contains_key(&fingerprint) { + let bridge = Bridge::from_bridge_line(&bl); + bridges.insert(fingerprint, bridge); + } + censor.learn_bridge(&fingerprint); + if level == 2 { + // level up to 3 + // Give censor an additional credential + censor.give_lox_cred(&fingerprint, &self.primary_cred, true); + } else if level > 2 { + // level up to 4 + // Replace censor's credential with newer one, + // but don't add to count of censor's + // credentials + censor.give_lox_cred(&fingerprint, &self.primary_cred, false); } } } else {