|
@@ -743,20 +743,66 @@ impl User {
|
|
|
}
|
|
|
} else {
|
|
|
// LA has identified this bucket as blocked. This change
|
|
|
- // will not be reverted, so replace the primary credential
|
|
|
- // with a new level 0 credential and work on gaining trust
|
|
|
- // for that one.
|
|
|
- let res = Self::get_new_credential(&config).await;
|
|
|
- if res.is_ok() {
|
|
|
- let (new_cred, bl) = res.unwrap();
|
|
|
- let fingerprint = bl.get_hashed_fingerprint();
|
|
|
- if !bridges.contains_key(&fingerprint) {
|
|
|
- let bridge = Bridge::from_bridge_line(&bl);
|
|
|
- bridges.insert(fingerprint, bridge);
|
|
|
+ // will not be reverted, so either migrate or replace the
|
|
|
+ // primary credential with a new level 0 credential and work
|
|
|
+ // on gaining trust for that one.
|
|
|
+
|
|
|
+ // Migrate if able
|
|
|
+ if level >= MIN_TRUST_LEVEL {
|
|
|
+ if let Ok(migcred) = check_blockage(
|
|
|
+ &config.la_net,
|
|
|
+ &self.primary_cred,
|
|
|
+ get_lox_pub(&config.la_pubkeys),
|
|
|
+ )
|
|
|
+ .await
|
|
|
+ {
|
|
|
+ if let Ok(cred) = blockage_migration(
|
|
|
+ &config.la_net,
|
|
|
+ &self.primary_cred,
|
|
|
+ &migcred,
|
|
|
+ get_lox_pub(&config.la_pubkeys),
|
|
|
+ get_migration_pub(&config.la_pubkeys),
|
|
|
+ )
|
|
|
+ .await
|
|
|
+ {
|
|
|
+ self.primary_cred = cred;
|
|
|
+
|
|
|
+ // You can't migrate to level 3 or 4, so the
|
|
|
+ // censor doesn't want this new credential
|
|
|
+
|
|
|
+ // Download bucket to see if bridge is still
|
|
|
+ // reachable and if we have any new bridges
|
|
|
+ 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 bridgeline in bucket {
|
|
|
+ if bridgeline != BridgeLine::default() {
|
|
|
+ if !bridges.contains_key(&bridgeline.get_hashed_fingerprint()) {
|
|
|
+ let bridge = Bridge::from_bridge_line(&bridgeline);
|
|
|
+ bridges.insert(bridgeline.get_hashed_fingerprint(), bridge);
|
|
|
+ }
|
|
|
+ censor.learn_bridge(&bridgeline.get_hashed_fingerprint());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // If unable to migrate, try to get a new open-entry
|
|
|
+ // credential and start over
|
|
|
+ let res = Self::get_new_credential(&config).await;
|
|
|
+ if res.is_ok() {
|
|
|
+ let (new_cred, bl) = res.unwrap();
|
|
|
+ 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);
|
|
|
+ // Censor doesn't want new_cred yet
|
|
|
+ self.primary_cred = new_cred;
|
|
|
}
|
|
|
- censor.learn_bridge(&fingerprint);
|
|
|
- // Censor doesn't want new_cred yet
|
|
|
- self.primary_cred = new_cred;
|
|
|
}
|
|
|
}
|
|
|
|