Skip to content

Commit 7def318

Browse files
authored
Honor PostgreSQL TLS settings in pool key (#278)
* fix: include PostgreSQL TLS settings in pool key * test: use PostgreSQL require SSL mode
1 parent 6abe185 commit 7def318

2 files changed

Lines changed: 32 additions & 10 deletions

File tree

src-tauri/src/pool_manager.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,24 @@ pub(crate) fn build_connection_key(
8383
params: &ConnectionParams,
8484
connection_id: Option<&str>,
8585
) -> String {
86-
let tls_key = (params.driver == "mysql").then(|| {
87-
format!(
86+
let tls_key = match params.driver.as_str() {
87+
"mysql" => Some(format!(
8888
"ssl:{}:{}:{}:{}",
8989
params.ssl_mode.as_deref().unwrap_or("default"),
9090
params.ssl_ca.as_deref().unwrap_or(""),
9191
params.ssl_cert.as_deref().unwrap_or(""),
9292
params.ssl_key.as_deref().unwrap_or("")
93-
)
94-
});
93+
)),
94+
"postgres" => {
95+
let ssl_mode = params.ssl_mode.as_deref().unwrap_or("prefer");
96+
let ssl_ca = match ssl_mode {
97+
"verify-ca" | "verify-full" => params.ssl_ca.as_deref().unwrap_or(""),
98+
_ => "",
99+
};
100+
Some(format!("ssl:{ssl_mode}:{ssl_ca}"))
101+
}
102+
_ => None,
103+
};
95104

96105
let base_key = if let Some(conn_id) = connection_id {
97106
// Include database in key so different databases on the same connection use separate pools

src-tauri/src/pool_manager_tests.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,33 @@ mod tests {
8383
}
8484

8585
#[test]
86-
fn postgres_pool_key_ignores_mysql_ssl_key_fields() {
87-
let required = connection_params("postgres", Some("required"));
88-
let disabled = connection_params("postgres", Some("disabled"));
86+
fn postgres_pool_key_changes_when_ssl_mode_changes() {
87+
let required = connection_params("postgres", Some("require"));
88+
let disabled = connection_params("postgres", Some("disable"));
8989

90-
assert_eq!(
90+
assert_ne!(
9191
build_connection_key(&required, Some("conn-1")),
9292
build_connection_key(&disabled, Some("conn-1"))
9393
);
9494
}
9595

9696
#[test]
97-
fn sqlite_pool_key_ignores_mysql_ssl_key_fields() {
97+
fn postgres_pool_key_changes_when_ssl_ca_changes() {
98+
let without_ca = connection_params("postgres", Some("verify-ca"));
99+
let mut with_ca = connection_params("postgres", Some("verify-ca"));
100+
with_ca.ssl_ca = Some("/tmp/postgres-ca.pem".to_string());
101+
102+
assert_ne!(
103+
build_connection_key(&without_ca, Some("conn-1")),
104+
build_connection_key(&with_ca, Some("conn-1"))
105+
);
106+
}
107+
108+
#[test]
109+
fn sqlite_pool_key_ignores_tls_key_fields() {
98110
let required = connection_params("sqlite", Some("required"));
99-
let disabled = connection_params("sqlite", Some("disabled"));
111+
let mut disabled = connection_params("sqlite", Some("disabled"));
112+
disabled.ssl_ca = Some("/tmp/sqlite-ca.pem".to_string());
100113

101114
assert_eq!(
102115
build_connection_key(&required, Some("conn-1")),

0 commit comments

Comments
 (0)