Skip to content

Commit c77d6cf

Browse files
committed
versioned core communication
1 parent 1867655 commit c77d6cf

File tree

4 files changed

+117
-10
lines changed

4 files changed

+117
-10
lines changed

Cargo.lock

Lines changed: 93 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ homepage = "https://github.com/DefGuard/proxy"
77
repository = "https://github.com/DefGuard/proxy"
88

99
[dependencies]
10+
defguard_version = { path = "../defguard/crates/defguard_version" }
1011
# base `axum` deps
1112
axum = { version = "0.7", features = ["macros", "tracing"] }
1213
axum-client-ip = "0.6"
@@ -44,6 +45,7 @@ tower_governor = "0.4"
4445
rust-embed = { version = "8.5", features = ["include-exclude"] }
4546
mime_guess = "2.0"
4647
base64 = "0.22.1"
48+
tonic-middleware = "0.2"
4749

4850
[build-dependencies]
4951
tonic-build = { version = "0.12" }

src/http.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::{
22
fs::read_to_string,
33
net::{IpAddr, Ipv4Addr, SocketAddr},
4-
sync::atomic::Ordering,
4+
sync::{atomic::Ordering, Arc},
55
time::Duration,
66
};
77

@@ -15,9 +15,11 @@ use axum::{
1515
};
1616
use axum_extra::extract::cookie::Key;
1717
use clap::crate_version;
18+
use defguard_version::{server::DefguardVersionServerMiddleware, DefguardVersionSet};
1819
use serde::Serialize;
1920
use tokio::{net::TcpListener, task::JoinSet};
2021
use tonic::transport::{Identity, Server, ServerTlsConfig};
22+
use tonic_middleware::MiddlewareFor;
2123
use tower_governor::{
2224
governor::GovernorConfigBuilder, key_extractor::SmartIpKeyExtractor, GovernorLayer,
2325
};
@@ -116,7 +118,10 @@ fn get_client_addr(request: &Request<Body>) -> String {
116118
)
117119
}
118120

119-
pub async fn run_server(config: Config) -> anyhow::Result<()> {
121+
pub async fn run_server(
122+
config: Config,
123+
version_set: Arc<DefguardVersionSet>,
124+
) -> anyhow::Result<()> {
120125
info!("Starting Defguard Proxy server");
121126
debug!("Using config: {config:?}");
122127

@@ -162,8 +167,15 @@ pub async fn run_server(config: Config) -> anyhow::Result<()> {
162167
} else {
163168
Server::builder()
164169
};
170+
let versioned_server = MiddlewareFor::new(
171+
proxy_server::ProxyServer::new(grpc_server),
172+
DefguardVersionServerMiddleware::new(
173+
version_set.own.clone(),
174+
Arc::clone(&version_set.proxy),
175+
),
176+
);
165177
builder
166-
.add_service(proxy_server::ProxyServer::new(grpc_server))
178+
.add_service(versioned_server)
167179
.serve(addr)
168180
.await
169181
.context("Error running gRPC server")

src/main.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use defguard_proxy::{config::get_config, http::run_server, logging::init_tracing, VERSION};
1+
use defguard_proxy::{config::get_config, http::run_server, VERSION};
22

33
#[tokio::main]
44
async fn main() -> anyhow::Result<()> {
@@ -9,11 +9,15 @@ async fn main() -> anyhow::Result<()> {
99

1010
// read config from env
1111
let config = get_config()?;
12-
init_tracing(&config.log_level);
12+
let version_set = defguard_version::tracing::init(
13+
VERSION,
14+
&config.log_level.to_string(),
15+
&["send_grpc_message", "bidirectional_communication"],
16+
);
1317
tracing::info!("Starting ... version v{}", VERSION);
1418

1519
// run API web server
16-
run_server(config).await?;
20+
run_server(config, version_set).await?;
1721

1822
Ok(())
1923
}

0 commit comments

Comments
 (0)