Skip to content

Commit e3b9e89

Browse files
committed
enable tls by default for dev
1 parent f3ba6f9 commit e3b9e89

File tree

10 files changed

+148
-13
lines changed

10 files changed

+148
-13
lines changed

Cargo.lock

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

demo/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ <h2>PulseBeam</h2>
1414

1515
<form id="controls" class="field middle-align mb-2">
1616
<input type="text" id="endpoint" placeholder="Enter WHIP/WHEP endpoint"
17-
value="http://localhost:3000/api/v1/rooms/test" required />
17+
value="https://localhost:3000/api/v1/rooms/test" required />
1818
<button type="submit" id="toggle" class="small-round">Start</button>
1919
</form>
2020

pulsebeam-runtime/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ bytes = "1.10.1"
2323
rustls = "0.23.31"
2424
turmoil = "0.6.6"
2525
futures.workspace = true
26+
quinn-udp = "0.5.14"
2627

2728
[dev-dependencies]
2829
rcgen = "0.14.4"

pulsebeam-runtime/src/mailbox.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ impl<T> Sender<T> {
7474
use mpsc::error::TrySendError as TokioTrySendError;
7575
self.sender.try_send(message).map_err(|e| match e {
7676
TokioTrySendError::Full(m) => {
77-
tracing::debug!("try_send dropped a packet due to full queue");
77+
tracing::info!("try_send dropped a packet due to full queue");
7878
TrySendError::Full(m)
7979
}
8080
TokioTrySendError::Closed(m) => TrySendError::Closed(m),

pulsebeam/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ mimalloc = "0.1.48"
3434
hyper = "1.7.0"
3535
pulsebeam-runtime = { version = "^0.1.0", path = "../pulsebeam-runtime" }
3636
thread-priority = "3.0.0"
37+
axum-server = { version = "0.7.2", features = ["tls-rustls"] }
3738

3839
[dev-dependencies]
3940
turmoil = "0.6.6"

pulsebeam/src/cert.pem

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDCTCCAfGgAwIBAgIUO0H77pE2RU+CnDi1y/HUOk4F+9MwDQYJKoZIhvcNAQEL
3+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDkxMjE3NTYzMVoXDTI2MDkx
4+
MjE3NTYzMVowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
5+
AAOCAQ8AMIIBCgKCAQEAwJAcX9nfPdrelLCTix4sST2VQ65xGtyKNEIyTCrJW299
6+
2p9O9atiVc0WIU4MdfjRHUkWtwVLZs2w3uYfsIbKmoHduG2yWsbURwxMbHF/9gmH
7+
hl+QyJDga9ErX26iWC4Bl84bCkQu5d7nIkVpZlqEmk0ql+OiYuDyXcZ+XcrCXKix
8+
H9v8ItI4/7oixZeN/+ajEXJdXcyClRVScNM0nTztxigefefduf4JRfAsdJGjXfBQ
9+
Ide8+9Txb04AaAGc4neBXeLjtZjwwonJcxRdMzAHgOdmeN7TZo9CjIJ6YjY6O/wF
10+
1NgszPRhXFil0vJJ73TvwQzzMoYt2w30RoRG2sWD8QIDAQABo1MwUTAdBgNVHQ4E
11+
FgQUaKFJocjsFH5ghAJ0dfQK5c4LmrswHwYDVR0jBBgwFoAUaKFJocjsFH5ghAJ0
12+
dfQK5c4LmrswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAPAzs
13+
C7llEwM8s72/R0/gJV45D75Cpuq+jKTOUGjXIpzqO3j0PW3bHV8D25K7VhQEcSVI
14+
vbGNPCV86AhDteaMX42U5Mz5rPfofb9SzFF3xT57Da6FWvcoeY/dSOoriVHg7Xoy
15+
1wCV5bGzsaFJxg4p3SmR+xVNhkPHoOEpmRqSsXRfHtPHwQhqN2K8ED7OOHIalfWl
16+
MHCC06LbJ6up+a31eFe880oasiCrXbQ/YQQGbspijWCupgAqWTNHUigzE8ieZ057
17+
g5cjgTTcHUbOiihu+Evvon7cahDqST3SJ9TqC1ZgY4ZHev4tr85Z8GO4axc+aKU/
18+
MdXVKFIq7OPLctQREA==
19+
-----END CERTIFICATE-----

pulsebeam/src/key.pem

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAkBxf2d892t6U
3+
sJOLHixJPZVDrnEa3Io0QjJMKslbb33an071q2JVzRYhTgx1+NEdSRa3BUtmzbDe
4+
5h+whsqagd24bbJaxtRHDExscX/2CYeGX5DIkOBr0StfbqJYLgGXzhsKRC7l3uci
5+
RWlmWoSaTSqX46Ji4PJdxn5dysJcqLEf2/wi0jj/uiLFl43/5qMRcl1dzIKVFVJw
6+
0zSdPO3GKB595925/glF8Cx0kaNd8FAh17z71PFvTgBoAZzid4Fd4uO1mPDCiclz
7+
FF0zMAeA52Z43tNmj0KMgnpiNjo7/AXU2CzM9GFcWKXS8knvdO/BDPMyhi3bDfRG
8+
hEbaxYPxAgMBAAECgf8cTfpk/Q7B87Hkj+bmJzyRk4c/qcW9lEt2P/6quYTBTlo+
9+
LUhT+/5b9AxpFAMxL9UKqxOj1JWDxljrXDafk5EwuWdOx2bQCAgLTuhP6PwJxwcT
10+
OfVBhfunOT8CB3lA+U0YYN9kttnBOeAhcB/J0JQMnxmePY1PfKyqvxek8bkhRL1N
11+
Gjx7j86DBCnqklv6BsgG+DQQeKg6dxa61oCzj+SXgV4PIxK11k2YRXs9AZtUbF4c
12+
LYVXWLUDjHpnuyrcb6MDnyqK3Jot3H0g9DqBC8qSsGNvFk8egr7lzwJmfk9rTrXr
13+
pv0nlXDzHKcfLbk1bd/dLZ2uqcRxQIJ0+kGGCZkCgYEA+7dVQC+9BZwLce6toqsJ
14+
C2eN0GR1fj2D8hxyGAlmt5LjGOEXMaNlTMPsB74BGLp775XFDTWyuBGSYWXai9Pf
15+
hKwnFTBFkqb4IRxSc0MF++KCA0ugia1LykN78tgsQANP84OXkdlHrsCaJiVvDjY0
16+
v81zo44ric3OZi/NUbZfUakCgYEAw9cPur6X8QYf1ZOK/689GkZLZ09npCQIdJ2Y
17+
N4GqeP34RD9SefFv8Eyf31UDjFC++c7Iznu8dVR7vFTSSZk5tFkz7eEXJQel84/u
18+
KJtLcopceNoBzCF3muyKdX6gx+etjBK+EZp3h69b3LS1XjeUDQhO0mFcOA5WCjyK
19+
SJ3/nQkCgYEA6Irxbi/sH3+Orz3CGbKK04diYzA7v1mTSRvwZ7Zft54ywSxJoikC
20+
j828g1aMasz1bFxfxBlkt1o8clCHe4BMUaQ9Iv0KeTZZqzUgEq3LnG0gkWzPrgF0
21+
MDLyEmKVVrn4pc5fO3WRHKeAgVc55tY7Gyrx9xqDrHZ+hLcKpr+mBakCgYEArBk6
22+
AWmsLGqtXwqhg7+Deqt7Z/Ynpd7kb1ZuhZi1Lk5A9fiPignZzNoJREF5NL1gljZZ
23+
0Np76r+rXP1NLtAwHYSmVc0QgcIO29MH/zc5PhbI3Ir4OWLPsJ1dr5Lvx7yYjheK
24+
X/3WPK6lk3ZaS8mbmThLzCUy3S/7/FLnUplGH8ECgYA9lwdg36mQAH2Ef1z+pya+
25+
cVAHogPqd+V5wVc+hrlswq10cExkYgmCwhRZbd8WluK54JEjgO5qw8eaPlI/PPVv
26+
I9vpJNyDw5CTkKXZ9gPlixxgDu+Mo/o4wdpJKTRDIL99It577Hn1Up5fNk61gYSN
27+
GOt65wUsGHd6gA9vPQa90w==
28+
-----END PRIVATE KEY-----

pulsebeam/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ pub async fn run(cpu_rt: rt::Runtime) {
7272
.expect("bind to udp socket");
7373
let http_socket: SocketAddr = "0.0.0.0:3000".parse().unwrap();
7474
tracing::info!(
75-
"✅ Signaling server listening. Clients should connect to http://{}:3000 or http://localhost:3000",
75+
"✅ Signaling server listening. Clients should connect to https://{}:3000 or https://localhost:3000",
7676
external_ip,
7777
);
7878

79-
node::run(cpu_rt, external_addr, unified_socket, http_socket)
79+
node::run(cpu_rt, external_addr, unified_socket, http_socket, true)
8080
.await
8181
.unwrap();
8282
}

pulsebeam/src/node.rs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ pub async fn run(
99
external_addr: SocketAddr,
1010
unified_socket: net::UnifiedSocket,
1111
http_socket: SocketAddr,
12+
enable_tls: bool,
1213
) -> anyhow::Result<()> {
1314
// Configure CORS
1415
let cors = CorsLayer::very_permissive()
@@ -41,14 +42,30 @@ pub async fn run(
4142
let controller_handle = controller_ready_rx.await?;
4243
// Set up signaling router
4344
let router = signaling::router(controller_handle).layer(cors);
44-
let listener = tokio::net::TcpListener::bind(http_socket)
45-
.await
46-
.expect("bind to http socket");
47-
let signaling = async move {
48-
let _ = axum::serve(listener, router).await;
49-
};
50-
let signaling_handle = tokio::spawn(signaling);
51-
join_set.push(signaling_handle.map(|_| ()).boxed());
45+
46+
if enable_tls {
47+
// TODO: exclude from production build
48+
use axum_server::tls_rustls::RustlsConfig;
49+
let cert = include_bytes!("cert.pem");
50+
let key = include_bytes!("key.pem");
51+
let config = RustlsConfig::from_pem(cert.to_vec(), key.to_vec()).await?;
52+
53+
let signaling = async move {
54+
axum_server::bind_rustls(http_socket, config)
55+
.serve(router.into_make_service())
56+
.await
57+
.unwrap();
58+
};
59+
join_set.push(tokio::spawn(signaling).map(|_| ()).boxed());
60+
} else {
61+
let signaling = async move {
62+
axum_server::bind(http_socket)
63+
.serve(router.into_make_service())
64+
.await
65+
.unwrap();
66+
};
67+
join_set.push(tokio::spawn(signaling).map(|_| ()).boxed());
68+
}
5269

5370
// Wait for all tasks to complete
5471
while join_set.next().await.is_some() {}

pulsebeam/src/signaling.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ async fn join_room(
7878

7979
// TODO: remove hardcoded URI
8080
let location_url = format!(
81-
"http://localhost:3000/api/v1/rooms/{}/participants/{}",
81+
"https://localhost:3000/api/v1/rooms/{}/participants/{}",
8282
&room_id.external, &participant_id
8383
);
8484
let mut response_headers = HeaderMap::new();

0 commit comments

Comments
 (0)