Begin work on cleaning up old nonces

This commit is contained in:
Vecna 2024-04-12 12:50:40 -04:00
parent 158512f427
commit 5c6a076289
1 changed files with 35 additions and 21 deletions

View File

@ -321,30 +321,44 @@ pub async fn update_extra_infos(
/// We store to-be-processed negative reports as a vector. Add this NR /// We store to-be-processed negative reports as a vector. Add this NR
/// to that vector (or create a new vector if necessary) /// to that vector (or create a new vector if necessary)
pub fn save_negative_report_to_process(db: &Db, nr: NegativeReport) { pub fn save_negative_report_to_process(db: &Db, nr: NegativeReport) {
let mut reports = match db.get("nrs-to-process").unwrap() { // TODO: Purge these database entries sometimes
let mut nonces = match db.get(format!("nonces_{}", &nr.date)).unwrap() {
Some(v) => bincode::deserialize(&v).unwrap(), Some(v) => bincode::deserialize(&v).unwrap(),
None => BTreeMap::<String, Vec<SerializableNegativeReport>>::new(), None => HashSet::<[u8; 32]>::new(),
}; };
// Store to-be-processed reports with key [fingerprint]_[country]_[date]
let map_key = format!( // Just ignore the report if we've seen the nonce before
"{}_{}_{}", if nonces.insert(nr.nonce) {
array_bytes::bytes2hex("", &nr.fingerprint), db.insert(
&nr.country, format!("nonces_{}", &nr.date),
&nr.date, bincode::serialize(&nonces).unwrap(),
); )
if reports.contains_key(&map_key) {
reports
.get_mut(&map_key)
.unwrap()
.push(nr.to_serializable_report());
} else {
let mut nrs = Vec::<SerializableNegativeReport>::new();
nrs.push(nr.to_serializable_report());
reports.insert(map_key, nrs);
}
// Commit changes to database
db.insert("nrs-to-process", bincode::serialize(&reports).unwrap())
.unwrap(); .unwrap();
let mut reports = match db.get("nrs-to-process").unwrap() {
Some(v) => bincode::deserialize(&v).unwrap(),
None => BTreeMap::<String, Vec<SerializableNegativeReport>>::new(),
};
// Store to-be-processed reports with key [fingerprint]_[country]_[date]
let map_key = format!(
"{}_{}_{}",
array_bytes::bytes2hex("", &nr.fingerprint),
&nr.country,
&nr.date,
);
if reports.contains_key(&map_key) {
reports
.get_mut(&map_key)
.unwrap()
.push(nr.to_serializable_report());
} else {
let mut nrs = Vec::<SerializableNegativeReport>::new();
nrs.push(nr.to_serializable_report());
reports.insert(map_key, nrs);
}
// Commit changes to database
db.insert("nrs-to-process", bincode::serialize(&reports).unwrap())
.unwrap();
}
} }
/// Sends a collection of negative reports to the Lox Authority and returns the /// Sends a collection of negative reports to the Lox Authority and returns the