use native_tls::Certificate as native_tls_cert;
use native_tls::TlsConnector;
use postgres_native_tls::MakeTlsConnector;
use bb8::Pool;
use bb8_postgres::PostgresConnectionManager;
use crate::core::core_config::CoreConfig;
pub async fn get_db_pool(
config: &CoreConfig,
) -> Pool<PostgresConnectionManager<MakeTlsConnector>> {
let ca_bytes = std::fs::read(&config.db_config.ca_path).unwrap();
let db_tls_ca = native_tls_cert::from_pem(&ca_bytes).unwrap();
let connector = TlsConnector::builder()
.add_root_certificate(db_tls_ca)
.build()
.unwrap();
let connector = MakeTlsConnector::new(connector);
let db_conn_no_password = format!(
"{}://{}:REDACTED@{}/{}?\
sslmode=require",
config.db_conn_type,
config.db_username,
config.db_address,
config.db_name
);
let db_conn_str = format!(
"{}://{}:{}@{}/{}?\
sslmode=require",
config.db_conn_type,
config.db_username,
config.db_password,
config.db_address,
config.db_name
);
info!(
"connecting to postgres: {db_conn_no_password} \
with db_tls_ca={}",
config.db_config.ca_path
);
let pg_mgr =
PostgresConnectionManager::new_from_stringlike(db_conn_str, connector)
.unwrap();
match Pool::builder().build(pg_mgr).await {
Ok(pool) => pool,
Err(e) => {
panic!(
"bb8 db threadpool hit an error '{e}' \
connecting to {db_conn_no_password} \
with db_tls_ca={}",
config.db_config.ca_path
)
}
}
}