Get bucket during trust promotion or level up
This commit is contained in:
parent
ae8ca89bc6
commit
5acbd6845c
|
@ -75,8 +75,7 @@ pub async fn eligible_for_trust_promotion(
|
||||||
None => return false,
|
None => return false,
|
||||||
};
|
};
|
||||||
get_cred_trust_level(cred) == 0
|
get_cred_trust_level(cred) == 0
|
||||||
&& level_since + lox_library::proto::trust_promotion::UNTRUSTED_INTERVAL
|
&& level_since + trust_promotion::UNTRUSTED_INTERVAL <= get_today(net).await
|
||||||
<= get_today(net).await
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function to check if credential is eligible for
|
// Helper function to check if credential is eligible for
|
||||||
|
@ -186,16 +185,11 @@ pub async fn level_up(
|
||||||
encbuckets: &HashMap<u32, EncryptedBucket>,
|
encbuckets: &HashMap<u32, EncryptedBucket>,
|
||||||
lox_pub: &IssuerPubKey,
|
lox_pub: &IssuerPubKey,
|
||||||
reachability_pub: &IssuerPubKey,
|
reachability_pub: &IssuerPubKey,
|
||||||
) -> lox_library::cred::Lox {
|
) -> (lox_library::cred::Lox, [BridgeLine; MAX_BRIDGES_PER_BUCKET]) {
|
||||||
// Read the bucket in the credential to get today's Bucket
|
// Read the bucket in the credential to get today's Bucket
|
||||||
// Reachability credential
|
// Reachability credential
|
||||||
let (id, key) = lox_library::bridge_table::from_scalar(lox_cred.bucket).unwrap();
|
let (id, key) = from_scalar(lox_cred.bucket).unwrap();
|
||||||
let bucket = lox_library::bridge_table::BridgeTable::decrypt_bucket(
|
let bucket = BridgeTable::decrypt_bucket(id, &key, &encbuckets.get(&id).unwrap()).unwrap();
|
||||||
id,
|
|
||||||
&key,
|
|
||||||
&encbuckets.get(&id).unwrap(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
let reachcred = bucket.1.unwrap();
|
let reachcred = bucket.1.unwrap();
|
||||||
|
|
||||||
// Use the Bucket Reachability credential to advance to the next
|
// Use the Bucket Reachability credential to advance to the next
|
||||||
|
@ -212,7 +206,12 @@ pub async fn level_up(
|
||||||
let encoded_resp = net.request("/levelup".to_string(), encoded_req).await;
|
let encoded_resp = net.request("/levelup".to_string(), encoded_req).await;
|
||||||
let decoded_resp: level_up::Response = serde_json::from_slice(&encoded_resp).unwrap();
|
let decoded_resp: level_up::Response = serde_json::from_slice(&encoded_resp).unwrap();
|
||||||
let cred = level_up::handle_response(state, decoded_resp, lox_pub).unwrap();
|
let cred = level_up::handle_response(state, decoded_resp, lox_pub).unwrap();
|
||||||
cred
|
|
||||||
|
// Get bucket
|
||||||
|
let (id, key) = from_scalar(lox_cred.bucket).unwrap();
|
||||||
|
let bucket = BridgeTable::decrypt_bucket(id, &key, &encbuckets.get(&id).unwrap()).unwrap();
|
||||||
|
|
||||||
|
(cred, bucket.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request an Invitation credential to give to a friend
|
// Request an Invitation credential to give to a friend
|
||||||
|
@ -227,13 +226,8 @@ pub async fn issue_invite(
|
||||||
// Read the bucket in the credential to get today's Bucket
|
// Read the bucket in the credential to get today's Bucket
|
||||||
// Reachability credential
|
// Reachability credential
|
||||||
|
|
||||||
let (id, key) = lox_library::bridge_table::from_scalar(lox_cred.bucket).unwrap();
|
let (id, key) = from_scalar(lox_cred.bucket).unwrap();
|
||||||
let bucket = lox_library::bridge_table::BridgeTable::decrypt_bucket(
|
let bucket = BridgeTable::decrypt_bucket(id, &key, &encbuckets.get(&id).unwrap()).unwrap();
|
||||||
id,
|
|
||||||
&key,
|
|
||||||
&encbuckets.get(&id).unwrap(),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
let reachcred = bucket.1.unwrap();
|
let reachcred = bucket.1.unwrap();
|
||||||
|
|
||||||
let (req, state) = issue_invite::request(
|
let (req, state) = issue_invite::request(
|
||||||
|
|
22
src/main.rs
22
src/main.rs
|
@ -52,7 +52,7 @@ async fn main() {
|
||||||
opts.optflag("I", "invite", "generate invitation for a friend");
|
opts.optflag("I", "invite", "generate invitation for a friend");
|
||||||
opts.optflag("L", "level-up", "increase trust level");
|
opts.optflag("L", "level-up", "increase trust level");
|
||||||
opts.optflag("N", "new-lox-cred", "get a new Lox Credential");
|
opts.optflag("N", "new-lox-cred", "get a new Lox Credential");
|
||||||
opts.optflag("R", "redeem", "redeem invitation");
|
opts.optopt("R", "redeem", "redeem invitation", "INVITE_FILE");
|
||||||
opts.optopt(
|
opts.optopt(
|
||||||
"",
|
"",
|
||||||
"server",
|
"server",
|
||||||
|
@ -145,11 +145,11 @@ async fn main() {
|
||||||
(cred, bucket)
|
(cred, bucket)
|
||||||
};
|
};
|
||||||
|
|
||||||
let lox_cred = if matches.opt_present("L") {
|
let (lox_cred, bucket) = if matches.opt_present("L") {
|
||||||
let old_level = get_cred_trust_level(&lox_cred);
|
let old_level = get_cred_trust_level(&lox_cred);
|
||||||
|
|
||||||
// If trust level is 0, do trust promotion, otherwise level up.
|
// If trust level is 0, do trust promotion, otherwise level up.
|
||||||
let cred = if old_level == 0 {
|
let (cred, bucket) = if old_level == 0 {
|
||||||
if eligible_for_trust_promotion(&net, &lox_cred).await {
|
if eligible_for_trust_promotion(&net, &lox_cred).await {
|
||||||
let migration_cred =
|
let migration_cred =
|
||||||
trust_promotion(&net, &lox_cred, get_lox_pub(&lox_auth_pubkeys)).await;
|
trust_promotion(&net, &lox_cred, get_lox_pub(&lox_auth_pubkeys)).await;
|
||||||
|
@ -161,14 +161,15 @@ async fn main() {
|
||||||
get_migration_pub(&lox_auth_pubkeys),
|
get_migration_pub(&lox_auth_pubkeys),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
cred
|
let bucket = get_bucket(&net, &cred).await;
|
||||||
|
(cred, bucket)
|
||||||
} else {
|
} else {
|
||||||
lox_cred
|
(lox_cred, bucket)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if eligible_for_level_up(&net, &lox_cred).await {
|
if eligible_for_level_up(&net, &lox_cred).await {
|
||||||
let encbuckets = get_reachability_credential(&net).await;
|
let encbuckets = get_reachability_credential(&net).await;
|
||||||
let cred = level_up(
|
let (cred, bucket) = level_up(
|
||||||
&net,
|
&net,
|
||||||
&lox_cred,
|
&lox_cred,
|
||||||
&encbuckets,
|
&encbuckets,
|
||||||
|
@ -176,21 +177,22 @@ async fn main() {
|
||||||
get_reachability_pub(&lox_auth_pubkeys),
|
get_reachability_pub(&lox_auth_pubkeys),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
cred
|
(cred, bucket)
|
||||||
} else {
|
} else {
|
||||||
lox_cred
|
(lox_cred, bucket)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
save_object(&cred, &lox_cred_filename);
|
save_object(&cred, &lox_cred_filename);
|
||||||
|
save_object(&bucket, &bucket_filename);
|
||||||
let new_level = get_cred_trust_level(&cred);
|
let new_level = get_cred_trust_level(&cred);
|
||||||
if new_level > old_level {
|
if new_level > old_level {
|
||||||
println!("Old level: {}\nNew level: {}", old_level, new_level);
|
println!("Old level: {}\nNew level: {}", old_level, new_level);
|
||||||
} else if new_level == old_level {
|
} else if new_level == old_level {
|
||||||
println!("Unable to level up. Current level: {}", new_level);
|
println!("Unable to level up. Current level: {}", new_level);
|
||||||
}
|
}
|
||||||
cred
|
(cred, bucket)
|
||||||
} else {
|
} else {
|
||||||
lox_cred
|
(lox_cred, bucket)
|
||||||
};
|
};
|
||||||
|
|
||||||
// Invite a friend
|
// Invite a friend
|
||||||
|
|
Loading…
Reference in New Issue