1
0
Fork 0
mirror of https://github.com/dani-garcia/vaultwarden.git synced 2025-07-18 18:18:21 +00:00

Switch to a single config option for database connection init

The main pro is less config options, while the main con is less clarity in
what the defaults are for the various database types.
This commit is contained in:
Jeremy Lin 2022-04-29 00:26:49 -07:00
commit 542a73cc6e
3 changed files with 26 additions and 17 deletions

View file

@ -520,14 +520,8 @@ make_config! {
/// Database connection pool size
database_max_conns: u32, false, def, 10;
/// SQLite connection init |> Statements to run when creating a new SQLite connection
sqlite_conn_init: String, false, def, "PRAGMA busy_timeout = 5000; PRAGMA synchronous = NORMAL;".to_string();
/// MySQL connection init |> Statements to run when creating a new MySQL connection
mysql_conn_init: String, false, def, "".to_string();
/// PostgreSQL connection init |> Statements to run when creating a new PostgreSQL connection
postgresql_conn_init: String, false, def, "".to_string();
/// Database connection init |> SQL statements to run when creating a new database connection, mainly useful for connection-scoped pragmas. If empty, a database-specific default is used.
database_conn_init: String, false, def, "".to_string();
/// Bypass admin page security (Know the risks!) |> Disables the Admin Token for the admin page so you may use your own auth in-front
disable_admin_token: bool, true, def, false;

View file

@ -140,7 +140,7 @@ macro_rules! generate_connections {
.max_size(CONFIG.database_max_conns())
.connection_timeout(Duration::from_secs(CONFIG.database_timeout()))
.connection_customizer(Box::new(DbConnOptions{
init_stmts: paste::paste!{ CONFIG. [< $name _conn_init >] () }
init_stmts: conn_type.get_init_stmts()
}))
.build(manager)
.map_res("Failed to create pool")?;
@ -215,6 +215,23 @@ impl DbConnType {
err!("`DATABASE_URL` looks like a SQLite URL, but 'sqlite' feature is not enabled")
}
}
pub fn get_init_stmts(&self) -> String {
let init_stmts = CONFIG.database_conn_init();
if !init_stmts.is_empty() {
init_stmts
} else {
self.default_init_stmts()
}
}
pub fn default_init_stmts(&self) -> String {
match self {
Self::sqlite => "PRAGMA busy_timeout = 5000; PRAGMA synchronous = NORMAL;".to_string(),
Self::mysql => "".to_string(),
Self::postgresql => "".to_string(),
}
}
}
#[macro_export]