Change populate_new_relays() to avoid inserting bad URLs into relays table

This commit is contained in:
Mike Dilger 2022-12-29 13:06:50 +13:00
parent 45c6fe3915
commit ba9a47846e

View File

@ -183,7 +183,7 @@ impl DbRelay {
} }
pub async fn populate_new_relays() -> Result<(), Error> { pub async fn populate_new_relays() -> Result<(), Error> {
// Get from person_relay list // Get relays from person_relay list
let sql = let sql =
"INSERT OR IGNORE INTO relay (url, rank) SELECT DISTINCT relay, 3 FROM person_relay"; "INSERT OR IGNORE INTO relay (url, rank) SELECT DISTINCT relay, 3 FROM person_relay";
@ -195,14 +195,39 @@ impl DbRelay {
}) })
.await??; .await??;
// Get from 'e' and 'p' tags // Select relays from 'e' and 'p' event tags
let sql = let sql = "SELECT DISTINCT field1 FROM event_tag where (label='e' OR label='p')";
"INSERT OR IGNORE INTO RELAY (url, rank) SELECT DISTINCT field1, 3 FROM event_tag where (label='e' OR label='p') and field1 like 'ws%://%'"; let maybe_urls: Vec<String> = spawn_blocking(move || {
spawn_blocking(move || {
let maybe_db = GLOBALS.db.blocking_lock(); let maybe_db = GLOBALS.db.blocking_lock();
let db = maybe_db.as_ref().unwrap(); let db = maybe_db.as_ref().unwrap();
db.execute(sql, [])?; let mut stmt = db.prepare(sql)?;
let mut rows = stmt.query([])?;
let mut maybe_urls: Vec<String> = Vec::new();
while let Some(row) = rows.next()? {
let maybe_string: Option<String> = row.get(0)?;
if let Some(string) = maybe_string {
maybe_urls.push(string);
}
}
Ok::<Vec<String>, Error>(maybe_urls)
})
.await??;
// Convert into Urls
let urls: Vec<Url> = maybe_urls
.iter()
.map(|s| Url::new(s))
.filter(|r| r.is_valid())
.collect();
// FIXME this is a lot of separate sql calls
spawn_blocking(move || {
let sql = "INSERT OR IGNORE INTO RELAY (url, rank) VALUES (?, 3)";
for url in urls {
let maybe_db = GLOBALS.db.blocking_lock();
let db = maybe_db.as_ref().unwrap();
db.execute(sql, [&url.inner()])?;
}
Ok::<(), Error>(()) Ok::<(), Error>(())
}) })
.await??; .await??;