mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 20:47:01 +01:00
Correctly prevent start up when https sockets in use (#1579)
This commit is contained in:
parent
1974d27dd8
commit
ca5ed43b5d
|
@ -13,6 +13,7 @@ use compact_jwt::{Jws, JwsSigner, JwsUnverified, JwsValidator};
|
|||
use kanidmd_lib::prelude::*;
|
||||
use kanidmd_lib::status::StatusActor;
|
||||
use serde::Serialize;
|
||||
use tide::listener::{Listener, ToListener};
|
||||
use tide_compress::CompressMiddleware;
|
||||
use tide_openssl::TlsListener;
|
||||
use tracing::{error, info};
|
||||
|
@ -315,8 +316,7 @@ pub fn generate_integrity_hash(filename: String) -> Result<String, String> {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: Add request limits.
|
||||
pub fn create_https_server(
|
||||
pub async fn create_https_server(
|
||||
address: String,
|
||||
domain: String,
|
||||
// opt_tls_params: Option<SslAcceptorBuilder>,
|
||||
|
@ -856,7 +856,6 @@ pub fn create_https_server(
|
|||
// routemap_route.at("/").mapped_get(&mut routemap, do_routemap);
|
||||
// === End routes
|
||||
|
||||
// Create listener?
|
||||
let handle = match opt_tls_params {
|
||||
Some(tls_param) => {
|
||||
let tlsl = TlsListener::build()
|
||||
|
@ -867,11 +866,18 @@ pub fn create_https_server(
|
|||
.map_err(|e| {
|
||||
error!("Failed to build TLS Listener -> {:?}", e);
|
||||
})?;
|
||||
/*
|
||||
let x = Box::new(tls_param.build());
|
||||
let x_ref = Box::leak(x);
|
||||
let tlsl = TlsListener::new(address, x_ref);
|
||||
*/
|
||||
|
||||
let mut listener = tlsl.to_listener().map_err(|e| {
|
||||
error!("Failed to convert to Listener -> {:?}", e);
|
||||
})?;
|
||||
|
||||
if let Err(e) = listener.bind(tserver).await {
|
||||
error!(
|
||||
"Failed to start server listener on address {:?} -> {:?}",
|
||||
&address, e
|
||||
);
|
||||
return Err(());
|
||||
}
|
||||
|
||||
tokio::spawn(async move {
|
||||
tokio::select! {
|
||||
|
@ -880,10 +886,10 @@ pub fn create_https_server(
|
|||
CoreAction::Shutdown => {},
|
||||
}
|
||||
}
|
||||
server_result = tserver.listen(tlsl) => {
|
||||
server_result = listener.accept() => {
|
||||
if let Err(e) = server_result {
|
||||
error!(
|
||||
"Failed to start server listener on address {:?} -> {:?}",
|
||||
"Failed to accept via listener on address {:?} -> {:?}",
|
||||
&address, e
|
||||
);
|
||||
}
|
||||
|
@ -894,6 +900,18 @@ pub fn create_https_server(
|
|||
}
|
||||
None => {
|
||||
// Create without https
|
||||
let mut listener = (&address).to_listener().map_err(|e| {
|
||||
error!("Failed to convert to Listener -> {:?}", e);
|
||||
})?;
|
||||
|
||||
if let Err(e) = listener.bind(tserver).await {
|
||||
error!(
|
||||
"Failed to start server listener on address {:?} -> {:?}",
|
||||
&address, e
|
||||
);
|
||||
return Err(());
|
||||
}
|
||||
|
||||
tokio::spawn(async move {
|
||||
tokio::select! {
|
||||
Ok(action) = rx.recv() => {
|
||||
|
@ -901,10 +919,10 @@ pub fn create_https_server(
|
|||
CoreAction::Shutdown => {},
|
||||
}
|
||||
}
|
||||
server_result = tserver.listen(&address) => {
|
||||
server_result = listener.accept() => {
|
||||
if let Err(e) = server_result {
|
||||
error!(
|
||||
"Failed to start server listener on address {:?} -> {:?}",
|
||||
"Failed to accept via listener on address {:?} -> {:?}",
|
||||
&address, e
|
||||
);
|
||||
}
|
||||
|
|
|
@ -801,7 +801,8 @@ pub async fn create_server_core(
|
|||
server_write_ref,
|
||||
server_read_ref,
|
||||
broadcast_tx.subscribe(),
|
||||
)?;
|
||||
)
|
||||
.await?;
|
||||
|
||||
admin_info!("ready to rock! 🪨 ");
|
||||
Some(h)
|
||||
|
|
Loading…
Reference in a new issue