@@ -255,9 +255,9 @@ pub async fn build(
255255 let listener_address = config. api_listener_address ( ) ?;
256256 let listener = std:: net:: TcpListener :: bind ( listener_address)
257257 . map_err ( |err| GoatNsError :: StartupError ( format ! ( "Failed to bind API listener: {err}" ) ) ) ?;
258- listener
259- . set_nonblocking ( true )
260- . map_err ( |err| GoatNsError :: StartupError ( format ! ( "Failed to set API listener nonblocking: {err}" ) ) ) ?;
258+ listener. set_nonblocking ( true ) . map_err ( |err| {
259+ GoatNsError :: StartupError ( format ! ( "Failed to set API listener nonblocking: {err}" ) )
260+ } ) ?;
261261 build_with_listener ( tx, rx, config, connpool, listener) . await
262262}
263263
@@ -269,18 +269,20 @@ pub async fn build_with_listener(
269269 listener : std:: net:: TcpListener ,
270270) -> Result < JoinHandle < Result < ( ) , std:: io:: Error > > , GoatNsError > {
271271 let router = build_router ( tx, config. clone ( ) , connpool) . await ?;
272- let listener_address: SocketAddr = listener
273- . local_addr ( )
274- . map_err ( |err| GoatNsError :: StartupError ( format ! ( "Failed to inspect API listener: {err}" ) ) ) ?;
272+ let listener_address: SocketAddr = listener. local_addr ( ) . map_err ( |err| {
273+ GoatNsError :: StartupError ( format ! ( "Failed to inspect API listener: {err}" ) )
274+ } ) ?;
275275 let hostname = config. hostname . clone ( ) ;
276+ let tls_cert = config. api_tls_cert . clone ( ) ;
277+ let tls_key = config. api_tls_key . clone ( ) ;
278+ let tls_config = config
279+ . get_tls_config ( )
280+ . await
281+ . map_err ( GoatNsError :: StartupError ) ?;
276282 let mut rx = rx;
277283 let res: JoinHandle < Result < ( ) , std:: io:: Error > > = tokio:: spawn ( async move {
278- let tls_config = config
279- . get_tls_config ( )
280- . await
281- . map_err ( std:: io:: Error :: other) ?;
282284 let handle = axum_server:: Handle :: new ( ) ;
283- let server = axum_server:: from_tcp_rustls ( listener, tls_config) ?
285+ let server = axum_server:: from_tcp_rustls ( listener, tls_config. clone ( ) ) ?
284286 . handle ( handle. clone ( ) )
285287 . serve ( router. into_make_service ( ) ) ;
286288 tokio:: pin!( server) ;
@@ -289,7 +291,14 @@ pub async fn build_with_listener(
289291 tokio:: select! {
290292 Some ( action) = rx. recv( ) => match action {
291293 ServerCommand :: ReloadTls => {
292- warn!( "Ignoring TLS reload for pre-bound API listener" ) ;
294+ match tls_config. reload_from_pem_file( & tls_cert, & tls_key) . await {
295+ Ok ( ( ) ) => {
296+ info!( "Reloaded TLS configuration for API listener." ) ;
297+ }
298+ Err ( err) => {
299+ error!( "Failed to reload TLS configuration: {err}" ) ;
300+ }
301+ }
293302 }
294303 ServerCommand :: ShutDown => {
295304 info!( "Shutting down web server." ) ;
@@ -308,7 +317,9 @@ pub async fn build_with_listener(
308317 } ) ;
309318 let startup_message = format ! (
310319 "Started Web server on https://{} / https://{}:{}" ,
311- listener_address, hostname, listener_address. port( )
320+ listener_address,
321+ hostname,
322+ listener_address. port( )
312323 ) ;
313324
314325 #[ cfg( test) ]
0 commit comments