From 26a6261312edbc55900d4240ef0dd4c7997cdbc3 Mon Sep 17 00:00:00 2001 From: Mike Dilger Date: Mon, 26 Dec 2022 18:39:12 +1300 Subject: [PATCH] Even more Url validation --- src/db/relay.rs | 10 +++++++--- src/globals.rs | 3 ++- src/overlord/minion/mod.rs | 4 +++- src/process.rs | 4 ++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/db/relay.rs b/src/db/relay.rs index 4fa49825..7ee34a0c 100644 --- a/src/db/relay.rs +++ b/src/db/relay.rs @@ -13,13 +13,15 @@ pub struct DbRelay { } impl DbRelay { - pub fn new(url: String) -> DbRelay { - DbRelay { + pub fn new(url: String) -> Result { + let _ = Url::new_validated(&url)?; + + Ok(DbRelay { url, success_count: 0, failure_count: 0, rank: Some(3), - } + }) } pub async fn fetch(criteria: Option<&str>) -> Result, Error> { @@ -65,6 +67,8 @@ impl DbRelay { } pub async fn insert(relay: DbRelay) -> Result<(), Error> { + let _ = Url::new_validated(&relay.url)?; + let sql = "INSERT OR IGNORE INTO relay (url, success_count, failure_count, rank) \ VALUES (?1, ?2, ?3, ?4)"; diff --git a/src/globals.rs b/src/globals.rs index e09761ea..f6c97a8f 100644 --- a/src/globals.rs +++ b/src/globals.rs @@ -333,7 +333,8 @@ pub async fn follow_key_and_relay(pubkey: String, relay: String) -> Result Result { + let _ = Url::new_validated(&url)?; + let to_overlord = GLOBALS.to_overlord.clone(); let from_overlord = GLOBALS.to_minions.subscribe(); let dbrelay = match DbRelay::fetch_one(&url).await? { Some(dbrelay) => dbrelay, None => { - let dbrelay = DbRelay::new(url.0.clone()); + let dbrelay = DbRelay::new(url.0.clone())?; DbRelay::insert(dbrelay.clone()).await?; dbrelay } diff --git a/src/process.rs b/src/process.rs index 97657f11..b87bfc66 100644 --- a/src/process.rs +++ b/src/process.rs @@ -82,7 +82,7 @@ pub async fn process_new_event( } => { if let Ok(url) = Url::new_validated(should_be_url) { // Insert (or ignore) into relays table - let dbrelay = DbRelay::new(url.0.clone()); + let dbrelay = DbRelay::new(url.0.clone())?; DbRelay::insert(dbrelay).await?; } } @@ -93,7 +93,7 @@ pub async fn process_new_event( } => { if let Ok(url) = Url::new_validated(should_be_url) { // Insert (or ignore) into relays table - let dbrelay = DbRelay::new(url.0.clone()); + let dbrelay = DbRelay::new(url.0.clone())?; DbRelay::insert(dbrelay).await?; // upsert person_relay.last_suggested_bytag