Skip to content

Commit 332b980

Browse files
committed
Allow disabling grpc at the build level
1 parent 26f296f commit 332b980

File tree

5 files changed

+57
-41
lines changed

5 files changed

+57
-41
lines changed

Cargo.toml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ license = "MIT"
1111
keywords = ["nostr", "server"]
1212
categories = ["network-programming", "web-programming"]
1313

14+
[features]
15+
default = ["grpc"]
16+
grpc = ["tonic", "prost", "tonic-build"]
17+
1418
[dependencies]
1519
clap = { version = "4.0.32", features = ["env", "default", "derive"]}
1620
tracing = "0.1.37"
1721
tracing-appender = "0.2.2"
1822
tracing-subscriber = "0.3.16"
1923
tokio = { version = "1", features = ["full", "tracing", "signal"] }
20-
prost = "0.11"
21-
tonic = "0.8.3"
24+
prost = { version = "0.11", optional = true }
25+
tonic = { version = "0.8.3", optional = true }
2226
console-subscriber = "0.1.8"
2327
futures = "0.3"
2428
futures-util = "0.3"
@@ -63,4 +67,4 @@ log = "0.4"
6367
anyhow = "1"
6468

6569
[build-dependencies]
66-
tonic-build = { version="0.8.3", features = ["prost"] }
70+
tonic-build = { version="0.8.3", features = ["prost"], optional = true }

build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
fn main() -> Result<(), Box<dyn std::error::Error>> {
2+
#[cfg(feature = "grpc")]
23
tonic_build::configure()
34
.build_server(false)
45
.protoc_arg("--experimental_allow_proto3_optional")

src/db.rs

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
//! Event persistence and querying
2-
use crate::config::Settings;
2+
use crate::config::{Grpc, Settings};
33
use crate::error::{Error, Result};
44
use crate::event::Event;
5+
#[cfg(feature = "grpc")]
56
use crate::nauthz;
67
use crate::notice::Notice;
78
use crate::payment::PaymentMessage;
@@ -136,11 +137,15 @@ pub async fn db_writer(
136137
}
137138
// create a client if GRPC is enabled.
138139
// Check with externalized event admitter service, if one is defined.
139-
let mut grpc_client = if let Some(svr) = settings.grpc.event_admission_server {
140-
Some(nauthz::EventAuthzService::connect(&svr).await)
141-
} else {
142-
None
143-
};
140+
#[allow(unused_variables, unused_mut)]
141+
let mut grpc_client: Option<Grpc> = None;
142+
143+
#[cfg(feature = "grpc")]
144+
{
145+
if let Some(svr) = settings.grpc.event_admission_server {
146+
grpc_client = Some(nauthz::EventAuthzService::connect(&svr).await)
147+
};
148+
}
144149

145150
//let gprc_client = settings.grpc.event_admission_server.map(|s| {
146151
// event_admitter_connect(&s);
@@ -345,47 +350,50 @@ pub async fn db_writer(
345350
}
346351
}
347352

348-
// nip05 address
349-
let nip05_address: Option<crate::nip05::Nip05Name> =
350-
validation.and_then(|x| x.ok().map(|y| y.name));
351-
352353
// GRPC check
353-
if let Some(ref mut c) = grpc_client {
354-
trace!("checking if grpc permits");
355-
let grpc_start = Instant::now();
356-
let decision_res = c
357-
.admit_event(
358-
&event,
359-
&subm_event.source_ip,
360-
subm_event.origin,
361-
subm_event.user_agent,
362-
nip05_address,
363-
subm_event.auth_pubkey,
364-
)
365-
.await;
366-
match decision_res {
367-
Ok(decision) => {
368-
if !decision.permitted() {
369-
// GPRC returned a decision to reject this event
370-
info!(
354+
#[cfg(feature = "grpc")]
355+
{
356+
// nip05 address
357+
let nip05_address: Option<crate::nip05::Nip05Name> =
358+
validation.and_then(|x| x.ok().map(|y| y.name));
359+
360+
if let Some(ref mut c) = grpc_client {
361+
trace!("checking if grpc permits");
362+
let grpc_start = Instant::now();
363+
let decision_res = c
364+
.admit_event(
365+
&event,
366+
&subm_event.source_ip,
367+
subm_event.origin,
368+
subm_event.user_agent,
369+
nip05_address,
370+
subm_event.auth_pubkey,
371+
)
372+
.await;
373+
match decision_res {
374+
Ok(decision) => {
375+
if !decision.permitted() {
376+
// GPRC returned a decision to reject this event
377+
info!(
371378
"GRPC rejected event: {:?} (kind: {}) from: {:?} in: {:?} (IP: {:?})",
372379
event.get_event_id_prefix(),
373380
event.kind,
374381
event.get_author_prefix(),
375382
grpc_start.elapsed(),
376383
subm_event.source_ip
377384
);
378-
notice_tx
379-
.try_send(Notice::blocked(
380-
event.id,
381-
&decision.message().unwrap_or_default(),
382-
))
383-
.ok();
384-
continue;
385+
notice_tx
386+
.try_send(Notice::blocked(
387+
event.id,
388+
&decision.message().unwrap_or_default(),
389+
))
390+
.ok();
391+
continue;
392+
}
393+
}
394+
Err(e) => {
395+
warn!("GRPC server error: {:?}", e);
385396
}
386-
}
387-
Err(e) => {
388-
warn!("GRPC server error: {:?}", e);
389397
}
390398
}
391399
}

src/error.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ pub enum Error {
6666
ChannelClosed,
6767
#[error("Authz error")]
6868
AuthzError,
69+
#[cfg(feature = "grpc")]
6970
#[error("Tonic GRPC error")]
7071
TonicError(tonic::Status),
7172
#[error("Invalid AUTH message")]
@@ -151,6 +152,7 @@ impl From<config::ConfigError> for Error {
151152
}
152153
}
153154

155+
#[cfg(feature = "grpc")]
154156
impl From<tonic::Status> for Error {
155157
/// Wrap Config error
156158
fn from(r: tonic::Status) -> Self {

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ pub mod error;
88
pub mod event;
99
pub mod hexrange;
1010
pub mod info;
11+
#[cfg(feature = "grpc")]
1112
pub mod nauthz;
1213
pub mod nip05;
1314
pub mod notice;

0 commit comments

Comments
 (0)