@@ -19,6 +19,7 @@ use actix_web::web::{Bytes, Data, Path};
1919use actix_web:: { get, post, web, App , Error , HttpResponse , HttpServer , Responder } ;
2020use clap:: { crate_version, clap_app} ;
2121use futures:: Stream ;
22+ use openssl:: ssl:: { SslAcceptor , SslFiletype , SslMethod } ;
2223use serde:: { Deserialize , Serialize } ;
2324use tokio:: sync:: broadcast:: { channel, Receiver , Sender } ;
2425use 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