Skip to content

Commit 822f616

Browse files
committed
built-in https now
1 parent 45a6627 commit 822f616

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,6 @@ Cargo.lock
99

1010
# These are backup files generated by rustfmt
1111
**/*.rs.bk
12+
13+
# HTTPS creds
14+
keys/

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ edition = "2018"
66

77
[dependencies]
88
actix-rt = "1.0.0"
9-
actix-web = "2.0.0"
9+
actix-web = { version = "2.0.0", features = ["openssl"] }
10+
openssl = { version = "0.10", features = ["vendored"] }
11+
chrono = { version = "= 0.4.29" }
1012
env_logger = "0.7"
1113
futures = "0.3.1"
1214
tokio = { version="0.2", features=["full"] }

src/main.rs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use actix_web::web::{Bytes, Data, Path};
1919
use actix_web::{get, post, web, App, Error, HttpResponse, HttpServer, Responder};
2020
use clap::{crate_version, clap_app};
2121
use futures::Stream;
22+
use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod};
2223
use serde::{Deserialize, Serialize};
2324
use tokio::sync::broadcast::{channel, Receiver, Sender};
2425
use tokio::time::{interval_at, Instant};
@@ -34,25 +35,42 @@ async fn main() -> std::io::Result<()> {
3435
(about: "A sse-based pubsub with different channels")
3536
(@arg HOST: --host +takes_value "Address to host on")
3637
(@arg PORT: --port +takes_value "Port to host on")
38+
(@arg KEY: --key +takes_value "SSL Private Key file")
39+
(@arg CERT: --cert +takes_value "Certificate file")
3740
).get_matches();
3841

3942
let data = BroadcasterMap::create();
4043

4144

42-
HttpServer::new(move || {
45+
let server = HttpServer::new(move || {
4346
App::new()
4447
.wrap(Cors::new().finish())
4548
.app_data(data.clone())
4649
.service(index)
4750
.service(new_client)
4851
.service(broadcast)
49-
})
50-
.bind(format!("{}:{}",
52+
});
53+
let host = format!("{}:{}",
5154
matches.value_of("HOST").unwrap_or("127.0.0.1"),
52-
matches.value_of("PORT").unwrap_or("8080")))?
53-
.maxconn(500000)
54-
.run()
55-
.await
55+
matches.value_of("PORT").unwrap_or("8080"));
56+
57+
let server = match (matches.value_of("KEY"), matches.value_of("CERT")) {
58+
(Some(keyfile), Some(certfile)) => {
59+
let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
60+
builder
61+
.set_private_key_file(keyfile, SslFiletype::PEM)
62+
.expect("Invalid private key provided");
63+
builder.set_certificate_chain_file(certfile).expect("Invalid certificate provided");
64+
server.bind_openssl(host, builder)
65+
},
66+
_ => server.bind(host)
67+
};
68+
69+
server
70+
.expect("Failed to bind")
71+
.maxconn(500000)
72+
.run()
73+
.await
5674
}
5775

5876
#[get("/")]

0 commit comments

Comments
 (0)