prepare for admin routes: check against banned_hosts tree
This commit is contained in:
parent
e35ec83c0c
commit
4ec26a9c83
2 changed files with 21 additions and 1 deletions
|
|
@ -11,6 +11,7 @@ pub struct RelayServer {
|
||||||
pub db_history: sled::Tree,
|
pub db_history: sled::Tree,
|
||||||
pub db_users: sled::Tree,
|
pub db_users: sled::Tree,
|
||||||
pub db_index_cursors: sled::Tree,
|
pub db_index_cursors: sled::Tree,
|
||||||
|
pub db_banned_hosts: sled::Tree,
|
||||||
|
|
||||||
pub plc_resolver: Cow<'static, str>,
|
pub plc_resolver: Cow<'static, str>,
|
||||||
pub known_good_hosts: Mutex<BTreeSet<String>>,
|
pub known_good_hosts: Mutex<BTreeSet<String>>,
|
||||||
|
|
@ -44,7 +45,10 @@ impl RelayServer {
|
||||||
db_users: db.open_tree("users").expect("failed to open users tree"),
|
db_users: db.open_tree("users").expect("failed to open users tree"),
|
||||||
db_index_cursors: db
|
db_index_cursors: db
|
||||||
.open_tree("index_cursors")
|
.open_tree("index_cursors")
|
||||||
.expect("failed to ope index_cursors tree"),
|
.expect("failed to open index_cursors tree"),
|
||||||
|
db_banned_hosts: db
|
||||||
|
.open_tree("banned_hosts")
|
||||||
|
.expect("failed to open banned_hosts tree"),
|
||||||
db,
|
db,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -74,4 +78,13 @@ impl RelayServer {
|
||||||
self.db.insert("hosts", serialized_hosts)?;
|
self.db.insert("hosts", serialized_hosts)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_banned_host(&self, host: &str) -> Result<bool> {
|
||||||
|
if host.ends_with(".bsky.network") {
|
||||||
|
return Ok(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
let explicit_ban = self.db_banned_hosts.contains_key(host)?;
|
||||||
|
Ok(explicit_ban)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -457,6 +457,13 @@ async fn host_subscription(server: Arc<RelayServer>, host: String) -> Result<()>
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn index_server(server: Arc<RelayServer>, host: String) -> Result<()> {
|
pub async fn index_server(server: Arc<RelayServer>, host: String) -> Result<()> {
|
||||||
|
if server.is_banned_host(&host)? {
|
||||||
|
bail!("refusing to start indexer for banned host '{}'", &host);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: we should have some kind of Indexer that we can tell to cancel when a server gets banned in-flight
|
||||||
|
// instead of just having a BTreeSet<String> :)
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut active_indexers = server.active_indexers.lock().await;
|
let mut active_indexers = server.active_indexers.lock().await;
|
||||||
if active_indexers.contains(&host) {
|
if active_indexers.contains(&host) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue