|
1 | 1 | use std::convert::{TryFrom, TryInto}; |
2 | 2 | use std::fs; |
| 3 | +use std::net::SocketAddr; |
3 | 4 | use std::sync::Arc; |
4 | 5 |
|
5 | 6 | use anyhow::{bail, Context, Result}; |
@@ -32,8 +33,15 @@ use fdo_util::servers::{ |
32 | 33 | configuration::{owner_onboarding_server::OwnerOnboardingServerSettings, AbsolutePathBuf}, |
33 | 34 | settings_for, OwnershipVoucherStoreMetadataKey, |
34 | 35 | }; |
| 36 | +use hyper::server::conn::AddrIncoming; |
| 37 | +use std::convert::Infallible; |
| 38 | +use tls_listener::TlsListener; |
| 39 | + |
| 40 | +pub mod tls_config; |
35 | 41 |
|
36 | 42 | mod handlers; |
| 43 | +mod ov_management; |
| 44 | +use crate::ov_management::ov_filter; |
37 | 45 |
|
38 | 46 | pub(crate) struct OwnerServiceUD { |
39 | 47 | // Trusted keys |
@@ -278,6 +286,7 @@ async fn main() -> Result<()> { |
278 | 286 |
|
279 | 287 | // Bind information |
280 | 288 | let bind_addr = settings.bind.clone(); |
| 289 | + let addr = SocketAddr::from(([0, 0, 0, 0], 8081)); |
281 | 290 |
|
282 | 291 | // Trusted keys |
283 | 292 | let trusted_device_keys = { |
@@ -423,32 +432,48 @@ async fn main() -> Result<()> { |
423 | 432 | .or(handler_to2_prove_device) |
424 | 433 | .or(handler_to2_device_service_info_ready) |
425 | 434 | .or(handler_to2_device_service_info) |
426 | | - .or(handler_to2_done), |
| 435 | + .or(handler_to2_done) |
| 436 | + .or(ov_filter(user_data.clone())), |
427 | 437 | ) |
428 | 438 | .recover(fdo_http_wrapper::server::handle_rejection) |
429 | 439 | .with(warp::log("owner-onboarding-service")); |
430 | 440 |
|
431 | | - log::info!("Listening on {}", bind_addr); |
432 | | - let server = warp::serve(routes); |
433 | | - |
434 | | - let maintenance_runner = |
435 | | - tokio::spawn(async move { perform_maintenance(user_data.clone()).await }); |
436 | | - |
437 | | - let server = server |
438 | | - .bind_with_graceful_shutdown(bind_addr, async { |
439 | | - signal(SignalKind::terminate()).unwrap().recv().await; |
440 | | - log::info!("Terminating"); |
441 | | - }) |
442 | | - .1; |
443 | | - let server = tokio::spawn(server); |
444 | | - |
445 | | - tokio::select!( |
446 | | - _ = server => { |
447 | | - log::info!("Server terminated"); |
448 | | - }, |
449 | | - _ = maintenance_runner => { |
450 | | - log::info!("Maintenance runner terminated"); |
| 441 | + log::info!("Listening on {}", addr); |
| 442 | + |
| 443 | + let service = warp::service(routes); |
| 444 | + |
| 445 | + let make_svc = hyper::service::make_service_fn(move |_| { |
| 446 | + let svc = service.clone(); |
| 447 | + async move { Ok::<_, Infallible>(svc) } |
451 | 448 | }); |
452 | 449 |
|
| 450 | + let incoming = TlsListener::new( |
| 451 | + tls_config::tls_config::tls_acceptor(), |
| 452 | + AddrIncoming::bind(&addr)?, |
| 453 | + ); |
| 454 | + let server = hyper::Server::builder(incoming).serve(make_svc); |
| 455 | + log::info!("starting at https://{}", addr); |
| 456 | + server.await?; |
| 457 | + // let server = warp::serve(routes); |
| 458 | + |
| 459 | + // let maintenance_runner = |
| 460 | + // tokio::spawn(async move { perform_maintenance(user_data.clone()).await }); |
| 461 | + |
| 462 | + // let server = server |
| 463 | + // .bind_with_graceful_shutdown(bind_addr, async { |
| 464 | + // signal(SignalKind::terminate()).unwrap().recv().await; |
| 465 | + // log::info!("Terminating"); |
| 466 | + // }) |
| 467 | + // .1; |
| 468 | + // let server = tokio::spawn(server); |
| 469 | + |
| 470 | + // tokio::select!( |
| 471 | + // _ = server => { |
| 472 | + // log::info!("Server terminated"); |
| 473 | + // }, |
| 474 | + // _ = maintenance_runner => { |
| 475 | + // log::info!("Maintenance runner terminated"); |
| 476 | + // }); |
| 477 | + |
453 | 478 | Ok(()) |
454 | 479 | } |
0 commit comments