forked from mirrors/gecko-dev
It was unhappy about the new LICENSE (fuchsia-cprng) but it's the same as the other fuschia crates. Since I don't think this is used at build time but has the same license as the other fuschia crates, I put it in the RUNTIME_LICENSE_PACKAGE_WHITELIST list. I also removed sha1 from that list as it's not used anymore Differential Revision: https://phabricator.services.mozilla.com/D30746 --HG-- rename : third_party/rust/httparse/Cargo.toml => third_party/rust/autocfg/Cargo.toml rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/autocfg/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/autocfg/LICENSE-MIT rename : third_party/rust/httparse/Cargo.toml => third_party/rust/cloudabi/Cargo.toml rename : third_party/rust/httparse/Cargo.toml => third_party/rust/fuchsia-cprng/Cargo.toml rename : third_party/rust/sha1/LICENSE => third_party/rust/fuchsia-cprng/LICENSE rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/mio-extras/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/mio-extras/LICENSE-MIT rename : third_party/rust/rand/.cargo-checksum.json => third_party/rust/rand-0.4.3/.cargo-checksum.json rename : third_party/rust/rand/CHANGELOG.md => third_party/rust/rand-0.4.3/CHANGELOG.md rename : third_party/rust/rand/Cargo.toml => third_party/rust/rand-0.4.3/Cargo.toml rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand-0.4.3/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand-0.4.3/LICENSE-MIT rename : third_party/rust/rand/README.md => third_party/rust/rand-0.4.3/README.md rename : third_party/rust/rand/appveyor.yml => third_party/rust/rand-0.4.3/appveyor.yml rename : third_party/rust/rand/benches/bench.rs => third_party/rust/rand-0.4.3/benches/bench.rs rename : third_party/rust/rand/benches/distributions/exponential.rs => third_party/rust/rand-0.4.3/benches/distributions/exponential.rs rename : third_party/rust/rand/benches/distributions/gamma.rs => third_party/rust/rand-0.4.3/benches/distributions/gamma.rs rename : third_party/rust/rand/benches/distributions/mod.rs => third_party/rust/rand-0.4.3/benches/distributions/mod.rs rename : third_party/rust/rand/benches/distributions/normal.rs => third_party/rust/rand-0.4.3/benches/distributions/normal.rs rename : third_party/rust/rand/benches/generators.rs => third_party/rust/rand-0.4.3/benches/generators.rs rename : third_party/rust/rand/benches/misc.rs => third_party/rust/rand-0.4.3/benches/misc.rs rename : third_party/rust/rand/src/distributions/exponential.rs => third_party/rust/rand-0.4.3/src/distributions/exponential.rs rename : third_party/rust/rand/src/distributions/gamma.rs => third_party/rust/rand-0.4.3/src/distributions/gamma.rs rename : third_party/rust/rand/src/distributions/mod.rs => third_party/rust/rand-0.4.3/src/distributions/mod.rs rename : third_party/rust/rand/src/distributions/normal.rs => third_party/rust/rand-0.4.3/src/distributions/normal.rs rename : third_party/rust/rand/src/distributions/range.rs => third_party/rust/rand-0.4.3/src/distributions/range.rs rename : third_party/rust/rand/src/distributions/ziggurat_tables.rs => third_party/rust/rand-0.4.3/src/distributions/ziggurat_tables.rs rename : third_party/rust/rand/src/jitter.rs => third_party/rust/rand-0.4.3/src/jitter.rs rename : third_party/rust/rand/src/lib.rs => third_party/rust/rand-0.4.3/src/lib.rs rename : third_party/rust/rand/src/os.rs => third_party/rust/rand-0.4.3/src/os.rs rename : third_party/rust/rand/src/prng/chacha.rs => third_party/rust/rand-0.4.3/src/prng/chacha.rs rename : third_party/rust/rand/src/prng/isaac.rs => third_party/rust/rand-0.4.3/src/prng/isaac.rs rename : third_party/rust/rand/src/prng/isaac64.rs => third_party/rust/rand-0.4.3/src/prng/isaac64.rs rename : third_party/rust/rand/src/prng/mod.rs => third_party/rust/rand-0.4.3/src/prng/mod.rs rename : third_party/rust/rand/src/prng/xorshift.rs => third_party/rust/rand-0.4.3/src/prng/xorshift.rs rename : third_party/rust/rand/src/rand_impls.rs => third_party/rust/rand-0.4.3/src/rand_impls.rs rename : third_party/rust/rand/src/read.rs => third_party/rust/rand-0.4.3/src/read.rs rename : third_party/rust/rand/src/reseeding.rs => third_party/rust/rand-0.4.3/src/reseeding.rs rename : third_party/rust/rand/src/seq.rs => third_party/rust/rand-0.4.3/src/seq.rs rename : third_party/rust/rand/utils/ziggurat_tables.py => third_party/rust/rand-0.4.3/utils/ziggurat_tables.py rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_chacha/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_chacha/LICENSE-MIT rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_core-0.3.1/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_core-0.3.1/LICENSE-MIT rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_core/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_core/LICENSE-MIT rename : third_party/rust/httparse/Cargo.toml => third_party/rust/rand_hc/Cargo.toml rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_hc/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_hc/LICENSE-MIT rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_isaac/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_isaac/LICENSE-MIT rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_jitter/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_jitter/LICENSE-MIT rename : third_party/rust/rand/src/jitter.rs => third_party/rust/rand_jitter/src/lib.rs rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_os/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_os/LICENSE-MIT rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_pcg/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_pcg/LICENSE-MIT rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/rand_xorshift/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/rand_xorshift/LICENSE-MIT rename : third_party/rust/httparse/Cargo.toml => third_party/rust/rdrand/Cargo.toml rename : third_party/rust/rand/LICENSE-APACHE => third_party/rust/sha-1/LICENSE-APACHE rename : third_party/rust/rand/LICENSE-MIT => third_party/rust/sha-1/LICENSE-MIT extra : moz-landing-system : lando
122 lines
3.3 KiB
Rust
122 lines
3.3 KiB
Rust
extern crate clap;
|
|
extern crate env_logger;
|
|
#[cfg(feature = "ssl")]
|
|
extern crate openssl;
|
|
/// WebSocket server to demonstrate ssl encryption within an a websocket server.
|
|
///
|
|
/// The resulting executable takes three arguments:
|
|
/// ADDR - The address to listen for incoming connections (e.g. 127.0.0:3012)
|
|
/// CERT - The path to the cert PEM (e.g. snakeoil.crt)
|
|
/// KEY - The path to the key PEM (e.g. snakeoil.key)
|
|
///
|
|
/// For more details concerning setting up the SSL context, see rust-openssl docs.
|
|
extern crate ws;
|
|
|
|
#[cfg(feature = "ssl")]
|
|
use std::fs::File;
|
|
#[cfg(feature = "ssl")]
|
|
use std::io::Read;
|
|
#[cfg(feature = "ssl")]
|
|
use std::rc::Rc;
|
|
|
|
#[cfg(feature = "ssl")]
|
|
use openssl::pkey::PKey;
|
|
#[cfg(feature = "ssl")]
|
|
use openssl::ssl::{SslAcceptor, SslMethod, SslStream};
|
|
#[cfg(feature = "ssl")]
|
|
use openssl::x509::X509;
|
|
|
|
#[cfg(feature = "ssl")]
|
|
use ws::util::TcpStream;
|
|
|
|
#[cfg(feature = "ssl")]
|
|
struct Server {
|
|
out: ws::Sender,
|
|
ssl: Rc<SslAcceptor>,
|
|
}
|
|
|
|
#[cfg(feature = "ssl")]
|
|
impl ws::Handler for Server {
|
|
fn on_message(&mut self, msg: ws::Message) -> ws::Result<()> {
|
|
self.out.send(msg) // simple echo
|
|
}
|
|
|
|
fn upgrade_ssl_server(&mut self, sock: TcpStream) -> ws::Result<SslStream<TcpStream>> {
|
|
self.ssl.accept(sock).map_err(From::from)
|
|
}
|
|
}
|
|
|
|
#[cfg(feature = "ssl")]
|
|
fn main() {
|
|
// Setup logging
|
|
env_logger::init();
|
|
|
|
// setup command line arguments
|
|
let matches = clap::App::new("WS-RS SSL Server Configuration")
|
|
.version("1.0")
|
|
.author("Jason Housley <housleyjk@gmail.com>")
|
|
.about("Establish a WebSocket server that encrypts and decrypts messages.")
|
|
.arg(
|
|
clap::Arg::with_name("ADDR")
|
|
.help("Address on which to bind the server.")
|
|
.required(true)
|
|
.index(1),
|
|
)
|
|
.arg(
|
|
clap::Arg::with_name("CERT")
|
|
.help("Path to the SSL certificate.")
|
|
.required(true)
|
|
.index(2),
|
|
)
|
|
.arg(
|
|
clap::Arg::with_name("KEY")
|
|
.help("Path to the SSL certificate key.")
|
|
.required(true)
|
|
.index(3),
|
|
)
|
|
.get_matches();
|
|
|
|
let cert = {
|
|
let data = read_file(matches.value_of("CERT").unwrap()).unwrap();
|
|
X509::from_pem(data.as_ref()).unwrap()
|
|
};
|
|
|
|
let pkey = {
|
|
let data = read_file(matches.value_of("KEY").unwrap()).unwrap();
|
|
PKey::private_key_from_pem(data.as_ref()).unwrap()
|
|
};
|
|
|
|
let acceptor = Rc::new({
|
|
let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
|
|
builder.set_private_key(&pkey).unwrap();
|
|
builder.set_certificate(&cert).unwrap();
|
|
|
|
builder.build()
|
|
});
|
|
|
|
ws::Builder::new()
|
|
.with_settings(ws::Settings {
|
|
encrypt_server: true,
|
|
..ws::Settings::default()
|
|
})
|
|
.build(|out: ws::Sender| Server {
|
|
out: out,
|
|
ssl: acceptor.clone(),
|
|
})
|
|
.unwrap()
|
|
.listen(matches.value_of("ADDR").unwrap())
|
|
.unwrap();
|
|
}
|
|
|
|
#[cfg(feature = "ssl")]
|
|
fn read_file(name: &str) -> std::io::Result<Vec<u8>> {
|
|
let mut file = File::open(name)?;
|
|
let mut buf = Vec::new();
|
|
file.read_to_end(&mut buf)?;
|
|
Ok(buf)
|
|
}
|
|
|
|
#[cfg(not(feature = "ssl"))]
|
|
fn main() {
|
|
println!("SSL feature is not enabled.")
|
|
}
|