From c83ba7db399eccee78b14a6cc55ac9bbd64168c2 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Wed, 20 Sep 2023 13:07:38 -0500 Subject: [PATCH] Allow disabling grpc at the build level --- Cargo.toml | 10 +++++--- build.rs | 1 + src/db.rs | 69 ++++++++++++++++++++++++++++------------------------ src/error.rs | 2 ++ src/lib.rs | 1 + 5 files changed, 48 insertions(+), 35 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 401165f..331fef1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,14 +11,18 @@ license = "MIT" keywords = ["nostr", "server"] categories = ["network-programming", "web-programming"] +[features] +default = ["grpc"] +grpc = ["tonic", "prost", "tonic-build"] + [dependencies] clap = { version = "4.0.32", features = ["env", "default", "derive"]} tracing = "0.1.37" tracing-appender = "0.2.2" tracing-subscriber = "0.3.16" tokio = { version = "1", features = ["full", "tracing", "signal"] } -prost = "0.11" -tonic = "0.8.3" +prost = { version = "0.11", optional = true } +tonic = { version = "0.8.3", optional = true } console-subscriber = "0.1.8" futures = "0.3" futures-util = "0.3" @@ -63,4 +67,4 @@ log = "0.4" anyhow = "1" [build-dependencies] -tonic-build = { version="0.8.3", features = ["prost"] } +tonic-build = { version="0.8.3", features = ["prost"], optional = true } diff --git a/build.rs b/build.rs index 2dc88f9..9ef8e80 100644 --- a/build.rs +++ b/build.rs @@ -1,4 +1,5 @@ fn main() -> Result<(), Box> { + #[cfg(feature = "grpc")] tonic_build::configure() .build_server(false) .protoc_arg("--experimental_allow_proto3_optional") diff --git a/src/db.rs b/src/db.rs index b7db56a..df24564 100644 --- a/src/db.rs +++ b/src/db.rs @@ -2,6 +2,7 @@ use crate::config::Settings; use crate::error::{Error, Result}; use crate::event::Event; +#[cfg(feature = "grpc")] use crate::nauthz; use crate::notice::Notice; use crate::payment::PaymentMessage; @@ -136,6 +137,7 @@ pub async fn db_writer( } // create a client if GRPC is enabled. // Check with externalized event admitter service, if one is defined. + #[cfg(feature = "grpc")] let mut grpc_client = if let Some(svr) = settings.grpc.event_admission_server { Some(nauthz::EventAuthzService::connect(&svr).await) } else { @@ -345,29 +347,31 @@ pub async fn db_writer( } } - // nip05 address - let nip05_address: Option = - validation.and_then(|x| x.ok().map(|y| y.name)); - // GRPC check - if let Some(ref mut c) = grpc_client { - trace!("checking if grpc permits"); - let grpc_start = Instant::now(); - let decision_res = c - .admit_event( - &event, - &subm_event.source_ip, - subm_event.origin, - subm_event.user_agent, - nip05_address, - subm_event.auth_pubkey, - ) - .await; - match decision_res { - Ok(decision) => { - if !decision.permitted() { - // GPRC returned a decision to reject this event - info!( + #[cfg(feature = "grpc")] + { + // nip05 address + let nip05_address: Option = + validation.and_then(|x| x.ok().map(|y| y.name)); + + if let Some(ref mut c) = grpc_client { + trace!("checking if grpc permits"); + let grpc_start = Instant::now(); + let decision_res = c + .admit_event( + &event, + &subm_event.source_ip, + subm_event.origin, + subm_event.user_agent, + nip05_address, + subm_event.auth_pubkey, + ) + .await; + match decision_res { + Ok(decision) => { + if !decision.permitted() { + // GPRC returned a decision to reject this event + info!( "GRPC rejected event: {:?} (kind: {}) from: {:?} in: {:?} (IP: {:?})", event.get_event_id_prefix(), event.kind, @@ -375,17 +379,18 @@ pub async fn db_writer( grpc_start.elapsed(), subm_event.source_ip ); - notice_tx - .try_send(Notice::blocked( - event.id, - &decision.message().unwrap_or_default(), - )) - .ok(); - continue; + notice_tx + .try_send(Notice::blocked( + event.id, + &decision.message().unwrap_or_default(), + )) + .ok(); + continue; + } + } + Err(e) => { + warn!("GRPC server error: {:?}", e); } - } - Err(e) => { - warn!("GRPC server error: {:?}", e); } } } diff --git a/src/error.rs b/src/error.rs index ecfa97f..f9626e9 100644 --- a/src/error.rs +++ b/src/error.rs @@ -66,6 +66,7 @@ pub enum Error { ChannelClosed, #[error("Authz error")] AuthzError, + #[cfg(feature = "grpc")] #[error("Tonic GRPC error")] TonicError(tonic::Status), #[error("Invalid AUTH message")] @@ -151,6 +152,7 @@ impl From for Error { } } +#[cfg(feature = "grpc")] impl From for Error { /// Wrap Config error fn from(r: tonic::Status) -> Self { diff --git a/src/lib.rs b/src/lib.rs index a6f6268..31f0ff1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,6 +8,7 @@ pub mod error; pub mod event; pub mod hexrange; pub mod info; +#[cfg(feature = "grpc")] pub mod nauthz; pub mod nip05; pub mod notice;