From 021f2fe5b48a49da71e5a42dc9d6b60995dea5c6 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 16 Oct 2022 23:37:24 +0200 Subject: [PATCH] Encode connection URL to database - If you have a database password that contains characters like `#` or `*`, sqlx will error about a InvalidPort, this is due to not encoding the url. [See issue on sqlx](https://github.com/launchbadge/sqlx/issues/1624). - Removed useless statements. --- db/db-sqlx-maria/Cargo.toml | 1 + db/db-sqlx-maria/src/lib.rs | 9 ++++----- db/db-sqlx-postgres/Cargo.toml | 1 + db/db-sqlx-postgres/src/lib.rs | 9 ++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/db/db-sqlx-maria/Cargo.toml b/db/db-sqlx-maria/Cargo.toml index 7f419404..2c5d82e1 100644 --- a/db/db-sqlx-maria/Cargo.toml +++ b/db/db-sqlx-maria/Cargo.toml @@ -13,6 +13,7 @@ async-trait = "0.1.51" db-core = {path = "../db-core"} futures = "0.3.15" sqlx = { version = "0.5.13", features = [ "runtime-actix-rustls", "mysql", "time", "offline" ] } +urlencoding = "2.1.2" [dev-dependencies] actix-rt = "2" diff --git a/db/db-sqlx-maria/src/lib.rs b/db/db-sqlx-maria/src/lib.rs index 5d7d6809..d62412b3 100644 --- a/db/db-sqlx-maria/src/lib.rs +++ b/db/db-sqlx-maria/src/lib.rs @@ -68,14 +68,13 @@ impl Connect for ConnectionOptions { async fn connect(self) -> DBResult { let pool = match self { Self::Fresh(fresh) => { - let mut connect_options = - sqlx::mysql::MySqlConnectOptions::from_str(&fresh.url).unwrap(); + let mut connect_options = sqlx::mysql::MySqlConnectOptions::from_str( + &urlencoding::encode(&fresh.url), + ) + .unwrap(); if fresh.disable_logging { connect_options.disable_statement_logging(); } - sqlx::mysql::MySqlConnectOptions::from_str(&fresh.url) - .unwrap() - .disable_statement_logging(); fresh .pool_options .connect_with(connect_options) diff --git a/db/db-sqlx-postgres/Cargo.toml b/db/db-sqlx-postgres/Cargo.toml index 027b7a0e..9066b57a 100644 --- a/db/db-sqlx-postgres/Cargo.toml +++ b/db/db-sqlx-postgres/Cargo.toml @@ -13,6 +13,7 @@ async-trait = "0.1.51" db-core = {path = "../db-core"} futures = "0.3.15" sqlx = { version = "0.5.13", features = [ "runtime-actix-rustls", "postgres", "time", "offline" ] } +urlencoding = "2.1.2" [dev-dependencies] actix-rt = "2" diff --git a/db/db-sqlx-postgres/src/lib.rs b/db/db-sqlx-postgres/src/lib.rs index 6149f68d..667ad55a 100644 --- a/db/db-sqlx-postgres/src/lib.rs +++ b/db/db-sqlx-postgres/src/lib.rs @@ -68,14 +68,13 @@ impl Connect for ConnectionOptions { async fn connect(self) -> DBResult { let pool = match self { Self::Fresh(fresh) => { - let mut connect_options = - sqlx::postgres::PgConnectOptions::from_str(&fresh.url).unwrap(); + let mut connect_options = sqlx::postgres::PgConnectOptions::from_str( + &urlencoding::encode(&fresh.url), + ) + .unwrap(); if fresh.disable_logging { connect_options.disable_statement_logging(); } - sqlx::postgres::PgConnectOptions::from_str(&fresh.url) - .unwrap() - .disable_statement_logging(); fresh .pool_options .connect_with(connect_options)