Censor user should try to migrate

This commit is contained in:
Vecna 2024-06-18 16:18:11 -04:00
parent 25d1fb96a6
commit e19204fc16
1 changed files with 59 additions and 13 deletions

View File

@ -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;
}
}