pub struct TlsListenerBuilder<State> { /* private fields */ }
Expand description
§A builder for TlsListeners
This is created with a call to
TlsListener::build
. This also can
be passed directly to tide::Server::listen
, skipping the
TlsListenerBuilder::finish
call.
§Examples
let listener = TlsListener::<()>::build()
.addrs("localhost:4433")
.cert("./tls/localhost-4433.cert")
.key("./tls/localhost-4433.key")
.finish();
let listener = TlsListener::<()>::build()
.tcp(std::net::TcpListener::bind("localhost:4433").unwrap())
.config(rustls::ServerConfig::new(rustls::NoClientAuth::new()))
.finish();
Implementations§
Source§impl<State> TlsListenerBuilder<State>
impl<State> TlsListenerBuilder<State>
Sourcepub fn key(self, path: impl AsRef<Path>) -> Self
pub fn key(self, path: impl AsRef<Path>) -> Self
Provide a path to a key file, in either pkcs8 or rsa
formats. This is mutually exclusive with providing a server
config with TlsListenerBuilder::config
, but must be used
in conjunction with TlsListenerBuilder::cert
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 async_std::task::block_on(async {
15 let mut app = tide::new();
16 app.at("*").all(endpoint);
17 app.at("/").all(endpoint);
18
19 if let (Ok(cert), Ok(key)) = (env::var("TIDE_CERT"), env::var("TIDE_KEY")) {
20 app.listen(
21 TlsListener::build()
22 .addrs("localhost:4433")
23 .cert(cert)
24 .key(key),
25 )
26 .await?;
27 } else {
28 eprintln!(
29 "
30To run this app locally:
31* install https://github.com/FiloSottile/mkcert
32* $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
33* $ env TIDE_CERT=cert.pem TIDE_KEY=key.pem cargo run --example hello_tls
34* $ curl -v https://localhost:4433/secure
35"
36 );
37 }
38
39 Ok(())
40 })
41}
Sourcepub fn cert(self, path: impl AsRef<Path>) -> Self
pub fn cert(self, path: impl AsRef<Path>) -> Self
Provide a path to a cert file. This is mutually exclusive with
providing a server config with TlsListenerBuilder::config
,
but must be used in conjunction with
TlsListenerBuilder::key
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 async_std::task::block_on(async {
15 let mut app = tide::new();
16 app.at("*").all(endpoint);
17 app.at("/").all(endpoint);
18
19 if let (Ok(cert), Ok(key)) = (env::var("TIDE_CERT"), env::var("TIDE_KEY")) {
20 app.listen(
21 TlsListener::build()
22 .addrs("localhost:4433")
23 .cert(cert)
24 .key(key),
25 )
26 .await?;
27 } else {
28 eprintln!(
29 "
30To run this app locally:
31* install https://github.com/FiloSottile/mkcert
32* $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
33* $ env TIDE_CERT=cert.pem TIDE_KEY=key.pem cargo run --example hello_tls
34* $ curl -v https://localhost:4433/secure
35"
36 );
37 }
38
39 Ok(())
40 })
41}
Sourcepub fn config(self, config: ServerConfig) -> Self
pub fn config(self, config: ServerConfig) -> Self
Provide a prebuilt
rustls::ServerConfig
with any
options. This is mutually exclusive with both
TlsListenerBuilder::key
and TlsListenerBuilder::cert
,
but provides the opportunity for more configuration choices.
Sourcepub fn tls_acceptor(self, acceptor: Arc<dyn CustomTlsAcceptor>) -> Self
pub fn tls_acceptor(self, acceptor: Arc<dyn CustomTlsAcceptor>) -> Self
Provides a custom acceptor for TLS connections. This is mutually
exclusive with any of TlsListenerBuilder::key
,
TlsListenerBuilder::cert
, and TlsListenerBuilder::config
, but
gives total control over accepting TLS connections, including
multiplexing other streams or ALPN negotiations on the same TLS
connection that tide should ignore.
Sourcepub fn tcp(self, tcp: impl Into<TcpListener>) -> Self
pub fn tcp(self, tcp: impl Into<TcpListener>) -> Self
Provides a bound tcp listener (either async-std or std) to
build this tls listener on. This is mutually exclusive with
TlsListenerBuilder::addrs
, but one of them is mandatory.
Sourcepub fn addrs(self, addrs: impl ToSocketAddrs) -> Self
pub fn addrs(self, addrs: impl ToSocketAddrs) -> Self
Provides a std::net::ToSocketAddrs
specification for this
tls listener. This is mutually exclusive with
TlsListenerBuilder::tcp
but one of them is mandatory.
Examples found in repository?
13fn main() -> std::io::Result<()> {
14 async_std::task::block_on(async {
15 let mut app = tide::new();
16 app.at("*").all(endpoint);
17 app.at("/").all(endpoint);
18
19 if let (Ok(cert), Ok(key)) = (env::var("TIDE_CERT"), env::var("TIDE_KEY")) {
20 app.listen(
21 TlsListener::build()
22 .addrs("localhost:4433")
23 .cert(cert)
24 .key(key),
25 )
26 .await?;
27 } else {
28 eprintln!(
29 "
30To run this app locally:
31* install https://github.com/FiloSottile/mkcert
32* $ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
33* $ env TIDE_CERT=cert.pem TIDE_KEY=key.pem cargo run --example hello_tls
34* $ curl -v https://localhost:4433/secure
35"
36 );
37 }
38
39 Ok(())
40 })
41}
Sourcepub fn finish(self) -> Result<TlsListener<State>>
pub fn finish(self) -> Result<TlsListener<State>>
finishes building a TlsListener from this TlsListenerBuilder.
§Errors
this will return an error unless all of the following conditions are met:
- either of these is provided, but not both
- exactly one of these is provided
Trait Implementations§
Source§impl<State> Debug for TlsListenerBuilder<State>
impl<State> Debug for TlsListenerBuilder<State>
Source§impl<State> Default for TlsListenerBuilder<State>
impl<State> Default for TlsListenerBuilder<State>
Source§impl<State: Clone + Send + Sync + 'static> ToListener<State> for TlsListenerBuilder<State>
impl<State: Clone + Send + Sync + 'static> ToListener<State> for TlsListenerBuilder<State>
Source§type Listener = TlsListener<State>
type Listener = TlsListener<State>
Source§fn to_listener(self) -> Result<Self::Listener>
fn to_listener(self) -> Result<Self::Listener>
Listener
. Unless self is
already bound/connected to the underlying io, converting to a
listener does not initiate a connection. An Err return
indicates an unsuccessful conversion to a listener, not an
unsuccessful bind attempt.