Skip to content

Commit 107b0d1

Browse files
committed
packages/ak-axum/accept/tls: init (#21318)
Squashed commit of the following: commit 65f33d6 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 18:35:12 2026 +0200 packages/ak-axum/accept/tls: init Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 116e601 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 18:28:43 2026 +0200 packages/ak-axum/server: init Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 67ed0dc Merge: b4f06d6 095d38c Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:17:40 2026 +0200 Merge branch 'rust-config' into rust-axum Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 095d38c Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:11:52 2026 +0200 fixup Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 7eb07d5 Merge: cb1f86b 507eb2f Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:11:08 2026 +0200 Merge branch 'rust-arbiter' into rust-config commit 507eb2f Merge: 6968d59 0079984 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:10:37 2026 +0200 Merge branch 'rust-lib-rename' into rust-arbiter Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 0079984 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:08:07 2026 +0200 packages/ak-common: rename from ak-lib Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit b4f06d6 Merge: c08e2a3 cb1f86b Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:05:36 2026 +0200 wip Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit c08e2a3 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 17:05:01 2026 +0200 wip Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 75622e9 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 16:57:45 2026 +0200 packages/ak-axum: init Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit cb1f86b Merge: c8fa1b8 a3fea5d Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 16:53:19 2026 +0200 Merge branch 'fix-rustfmt-config' into rust-config commit 6968d59 Merge: 341c9cc a3fea5d Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 16:52:55 2026 +0200 Merge branch 'fix-rustfmt-config' into rust-arbiter commit a3fea5d Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Wed Apr 1 16:32:16 2026 +0200 root: fix rustfmt config Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit c8fa1b8 Merge: 48c833c 341c9cc Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Tue Mar 31 13:56:39 2026 +0200 Merge branch 'rust-arbiter' into rust-config commit 341c9cc Merge: a1cf0a7 55e555c Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Tue Mar 31 13:55:28 2026 +0200 Merge branch 'main' into rust-arbiter Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 48c833c Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 20:31:04 2026 +0200 lint Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 681117d Merge: 4c54511 a1cf0a7 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 20:03:49 2026 +0200 Merge branch 'rust-arbiter' into rust-config Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit a1cf0a7 Merge: 1ee6f11 524b788 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 20:03:01 2026 +0200 Merge branch 'rust-lib' into rust-arbiter Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 524b788 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:57:51 2026 +0200 fixup Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit dc65ab1 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 16:33:49 2026 +0200 packages/ak-lib: init Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 4c54511 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:52:55 2026 +0200 move into lib crate Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit d7141df Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:48:34 2026 +0200 fixup Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 2bab7ed Merge: 2bc79f1 1ee6f11 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:43:24 2026 +0200 Merge branch 'rust-arbiter' into rust-config commit 1ee6f11 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:43:21 2026 +0200 fixup Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 2bc79f1 Merge: e7d3704 27ff039 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:42:58 2026 +0200 Merge branch 'rust-arbiter' into rust-config Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 27ff039 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:40:37 2026 +0200 rename to ak-lib Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit e7d3704 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:32:59 2026 +0200 packages/ak-config: init Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 1e5cb4b Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 19:32:18 2026 +0200 sort out package versions Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 64b9391 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 17:49:16 2026 +0200 lint Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 57edeec Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 17:48:51 2026 +0200 add tests Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit 5294f8a Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 16:38:11 2026 +0200 fixup Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> commit f1257d2 Author: Marc 'risson' Schmitt <marc.schmitt@risson.space> Date: Mon Mar 30 16:33:49 2026 +0200 packages/ak-arbiter: init Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
1 parent 4fe3094 commit 107b0d1

7 files changed

Lines changed: 94 additions & 1 deletion

File tree

Cargo.lock

Lines changed: 29 additions & 0 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
@@ -33,6 +33,7 @@ console-subscriber = "= 0.5.0"
3333
dotenvy = "= 0.15.7"
3434
durstr = "= 0.5.1"
3535
eyre = "= 0.6.12"
36+
futures = "= 0.3.32"
3637
glob = "= 0.3.3"
3738
json-subscriber = "= 0.2.8"
3839
nix = { version = "= 0.31.2", features = ["signal"] }
@@ -76,6 +77,7 @@ time = { version = "= 0.3.47", features = ["macros"] }
7677
thiserror = "= 2.0.18"
7778
time = { version = "= 0.3.47", features = ["macros"] }
7879
tokio = { version = "= 1.51.0", features = ["full", "tracing"] }
80+
tokio-rustls = "= 0.26.4"
7981
tokio-util = { version = "= 0.7.18", features = ["full"] }
8082
tower = "= 0.5.3"
8183
tower-http = { version = "= 0.6.8", features = ["timeout"] }

packages/ak-axum/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ axum-server.workspace = true
1515
axum.workspace = true
1616
durstr.workspace = true
1717
eyre.workspace = true
18+
futures.workspace = true
19+
tokio-rustls.workspace = true
1820
tokio.workspace = true
1921
tower-http.workspace = true
2022
tower.workspace = true

packages/ak-axum/src/accept/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod tls;

packages/ak-axum/src/accept/tls.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use axum::{Extension, middleware::AddExtension};
2+
use axum_server::{accept::Accept, tls_rustls::RustlsAcceptor};
3+
use futures::future::BoxFuture;
4+
use tokio::io::{AsyncRead, AsyncWrite};
5+
use tokio_rustls::{rustls::pki_types::CertificateDer, server::TlsStream};
6+
use tower::Layer as _;
7+
use tracing::instrument;
8+
9+
#[derive(Clone, Debug)]
10+
pub struct TlsState {
11+
pub peer_certificates: Option<Vec<CertificateDer<'static>>>,
12+
}
13+
14+
#[derive(Clone)]
15+
pub(crate) struct TlsAcceptor<A> {
16+
inner: RustlsAcceptor<A>,
17+
}
18+
19+
impl<A> TlsAcceptor<A> {
20+
pub(crate) fn new(inner: RustlsAcceptor<A>) -> Self {
21+
Self { inner }
22+
}
23+
}
24+
25+
impl<A, I, S> Accept<I, S> for TlsAcceptor<A>
26+
where
27+
A: Accept<I, S> + Clone + Send + 'static,
28+
A::Stream: AsyncRead + AsyncWrite + Unpin + Send,
29+
A::Service: Send,
30+
A::Future: Send,
31+
I: AsyncRead + AsyncWrite + Unpin + Send + 'static,
32+
S: Send + 'static,
33+
{
34+
type Future = BoxFuture<'static, std::io::Result<(Self::Stream, Self::Service)>>;
35+
type Service = AddExtension<A::Service, TlsState>;
36+
type Stream = TlsStream<A::Stream>;
37+
38+
#[instrument(skip_all)]
39+
fn accept(&self, stream: I, service: S) -> Self::Future {
40+
let acceptor = self.inner.clone();
41+
42+
Box::pin(async move {
43+
let (stream, service) = acceptor.accept(stream, service).await?;
44+
let server_conn = stream.get_ref().1;
45+
let tls_state = TlsState {
46+
peer_certificates: server_conn.peer_certificates().map(|c| c.to_owned()),
47+
};
48+
49+
let service = Extension(tls_state).layer(service);
50+
51+
Ok((stream, service))
52+
})
53+
}
54+
}

packages/ak-axum/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
//! Utilities for working with [`axum`].
22
3+
pub mod accept;
34
pub mod error;
45
pub mod router;
56
pub mod server;

packages/ak-axum/src/server.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ use axum_server::{
1212
use eyre::Result;
1313
use tracing::info;
1414

15+
use crate::accept::tls::TlsAcceptor;
16+
1517
async fn run_plain(
1618
arbiter: Arbiter,
1719
name: &str,
@@ -119,7 +121,9 @@ async fn run_tls(
119121
arbiter.add_net_handle(handle.clone()).await;
120122

121123
axum_server::Server::bind(addr)
122-
.acceptor(RustlsAcceptor::new(config).acceptor(DefaultAcceptor::new()))
124+
.acceptor(TlsAcceptor::new(
125+
RustlsAcceptor::new(config).acceptor(DefaultAcceptor::new()),
126+
))
123127
.handle(handle)
124128
.serve(router.into_make_service_with_connect_info::<net::SocketAddr>())
125129
.await?;

0 commit comments

Comments
 (0)