vw_small

Hardened fork of Vaultwarden (https://github.com/dani-garcia/vaultwarden) with fewer features.
git clone https://git.philomathiclife.com/repos/vw_small
Log | Files | Refs | README

commit 542a73cc6edb4770755663df74b5e052019f425c
parent 78d07e2fda8816fb41b91de2e84f8f4b3df8180e
Author: Jeremy Lin <jeremy.lin@gmail.com>
Date:   Fri, 29 Apr 2022 00:26:49 -0700

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.

Diffstat:
M.env.template | 14++++++--------
Msrc/config.rs | 10++--------
Msrc/db/mod.rs | 19++++++++++++++++++-
3 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/.env.template b/.env.template @@ -31,14 +31,12 @@ ## Database connection initialization ## Allows SQL statements to be run whenever a new database connection is created. -## For example, this can be used to run connection-scoped pragma statements. -## -## Statements to run when creating a new SQLite connection -# SQLITE_CONN_INIT="PRAGMA busy_timeout = 5000; PRAGMA synchronous = NORMAL;" -## Statements to run when creating a new MySQL connection -# MYSQL_CONN_INIT="" -## Statements to run when creating a new PostgreSQL connection -# POSTGRESQL_CONN_INIT="" +## This is mainly useful for connection-scoped pragmas. +## If empty, a database-specific default is used: +## - SQLite: "PRAGMA busy_timeout = 5000; PRAGMA synchronous = NORMAL;" +## - MySQL: "" +## - PostgreSQL: "" +# DATABASE_CONN_INIT="" ## Individual folders, these override %DATA_FOLDER% # RSA_KEY_FILENAME=data/rsa_key diff --git a/src/config.rs b/src/config.rs @@ -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; diff --git a/src/db/mod.rs b/src/db/mod.rs @@ -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]