aboutsummaryrefslogtreecommitdiff
path: root/src/handlers/x500_mapper.rs
diff options
context:
space:
mode:
authorNathan Ringo <nathan@remexre.com>2024-01-16 02:38:56 -0600
committerNathan Ringo <nathan@remexre.com>2024-01-16 02:38:56 -0600
commit387087b3b2359ad7f434a16f5682ef781539e786 (patch)
treec3dd3f6df68a6bc53814b6de2b65f4d04d3b28e2 /src/handlers/x500_mapper.rs
parent1ef9e40795384b1fd9b5bcb0798f7f210068dd1f (diff)
Finishes off plain recording of X.500s.
Diffstat (limited to 'src/handlers/x500_mapper.rs')
-rw-r--r--src/handlers/x500_mapper.rs47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/handlers/x500_mapper.rs b/src/handlers/x500_mapper.rs
index debb7f1..31b888f 100644
--- a/src/handlers/x500_mapper.rs
+++ b/src/handlers/x500_mapper.rs
@@ -1,4 +1,4 @@
-use anyhow::Result;
+use anyhow::{Context as _, Result};
use futures::{
future::{self, Either},
stream, FutureExt, Stream, StreamExt, TryStreamExt,
@@ -35,7 +35,7 @@ impl X500Mapper {
match result {
Ok((have, total)) => log::info!("Now have users for {} / {} known X.500s", have, total),
- Err(err) => log::error!("Failed to get stats about X.500s: {}", err),
+ Err(err) => log::error!("Failed to get stats about X.500s: {:?}", err),
}
}
@@ -57,7 +57,7 @@ impl X500Mapper {
// Handle each one.
stream::iter(parsed_members)
- .for_each(|(member, x500)| self.notice_x500(member.user.id, x500))
+ .for_each(|(member, x500)| self.record_x500(member.user.id, x500))
.await;
// Print some stats, everybody likes stats!
@@ -78,8 +78,41 @@ impl X500Mapper {
}
}
- async fn notice_x500(&self, uid: UserId, x500: String) {
- dbg!((uid, x500));
+ async fn record_x500(&self, uid: UserId, x500: String) {
+ let x500 = &x500;
+ let future = async move {
+ let uid = i64::from(uid);
+
+ sqlx::query!(
+ "INSERT OR IGNORE INTO all_seen_uids_to_x500s (uid, x500) VALUES (?, ?)",
+ uid,
+ x500
+ )
+ .execute(&self.0)
+ .await
+ .context("failed to insert into all_seen_uids_to_x500s")?;
+
+ sqlx::query!(
+ "INSERT OR IGNORE INTO uids_to_x500s_clean (uid, x500) VALUES (?, ?)",
+ uid,
+ x500
+ )
+ .execute(&self.0)
+ .await
+ .context("failed to insert into uids_to_x500s_clean")?;
+
+ Ok::<_, anyhow::Error>(())
+ };
+
+ match future.await {
+ Ok(()) => (),
+ Err(err) => log::error!(
+ "failed to record that the user with UID {} had the X.500 {}: {:?}",
+ uid,
+ x500,
+ err
+ ),
+ }
}
}
@@ -98,7 +131,7 @@ impl EventHandler for X500Mapper {
) {
if let Some(member) = new {
if let Some(x500) = parse_out_x500(member.display_name()) {
- self.notice_x500(member.user.id, x500.to_string()).await;
+ self.record_x500(member.user.id, x500.to_string()).await;
self.log_stats().await;
}
}
@@ -131,7 +164,7 @@ async fn get_all_members(http: &Http) -> Vec<Member> {
.await;
if let Some(err) = errs.first() {
log::error!(
- "failed to get a list of all members: {}; proceeding with {}",
+ "failed to get a list of all members: {:?}; proceeding with {}",
err,
members.len()
);