Line data Source code
1 : pub mod routes;
2 : use std::sync::Arc;
3 :
4 : use http_utils::tls_certs::ReloadingCertificateResolver;
5 : pub use routes::make_router;
6 : pub use safekeeper_api::models;
7 : use tokio_util::sync::CancellationToken;
8 :
9 : use crate::{GlobalTimelines, SafeKeeperConf};
10 :
11 0 : pub async fn task_main_http(
12 0 : conf: Arc<SafeKeeperConf>,
13 0 : http_listener: std::net::TcpListener,
14 0 : global_timelines: Arc<GlobalTimelines>,
15 0 : ) -> anyhow::Result<()> {
16 0 : let router = make_router(conf, global_timelines)
17 0 : .build()
18 0 : .map_err(|err| anyhow::anyhow!(err))?;
19 :
20 0 : let service = Arc::new(
21 0 : http_utils::RequestServiceBuilder::new(router).map_err(|err| anyhow::anyhow!(err))?,
22 : );
23 0 : let server = http_utils::server::Server::new(service, http_listener, None)?;
24 0 : server.serve(CancellationToken::new()).await?;
25 0 : Ok(()) // unreachable
26 0 : }
27 :
28 0 : pub async fn task_main_https(
29 0 : conf: Arc<SafeKeeperConf>,
30 0 : https_listener: std::net::TcpListener,
31 0 : global_timelines: Arc<GlobalTimelines>,
32 0 : ) -> anyhow::Result<()> {
33 0 : let cert_resolver = ReloadingCertificateResolver::new(
34 0 : "main",
35 0 : &conf.ssl_key_file,
36 0 : &conf.ssl_cert_file,
37 0 : conf.ssl_cert_reload_period,
38 0 : )
39 0 : .await?;
40 :
41 0 : let server_config = rustls::ServerConfig::builder()
42 0 : .with_no_client_auth()
43 0 : .with_cert_resolver(cert_resolver);
44 0 :
45 0 : let tls_acceptor = tokio_rustls::TlsAcceptor::from(Arc::new(server_config));
46 :
47 0 : let router = make_router(conf, global_timelines)
48 0 : .build()
49 0 : .map_err(|err| anyhow::anyhow!(err))?;
50 :
51 0 : let service = Arc::new(
52 0 : http_utils::RequestServiceBuilder::new(router).map_err(|err| anyhow::anyhow!(err))?,
53 : );
54 0 : let server = http_utils::server::Server::new(service, https_listener, Some(tls_acceptor))?;
55 0 : server.serve(CancellationToken::new()).await?;
56 0 : Ok(()) // unreachable
57 0 : }
|