From d088253a23f04b685b106a65a7e650763ac7e0d1 Mon Sep 17 00:00:00 2001 From: Marianna BIttencourt Date: Fri, 22 Nov 2024 16:51:45 +0100 Subject: [PATCH 1/3] Use quotes for the password in case of special characters --- src/Joomlatools/Console/Command/Database/AbstractDatabase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Joomlatools/Console/Command/Database/AbstractDatabase.php b/src/Joomlatools/Console/Command/Database/AbstractDatabase.php index aa93437..a8e4679 100644 --- a/src/Joomlatools/Console/Command/Database/AbstractDatabase.php +++ b/src/Joomlatools/Console/Command/Database/AbstractDatabase.php @@ -151,7 +151,7 @@ private function _executeMysqlWithCredentials(callable $callback) $contents = <<mysql->user} -password={$this->mysql->password} +password="{$this->mysql->password}" host={$this->mysql->host} port={$this->mysql->port} STR; From a71c5b8013d1964b285bf121fde6e2a4bd159497 Mon Sep 17 00:00:00 2001 From: Marianna BIttencourt Date: Tue, 10 Dec 2024 13:51:17 +0100 Subject: [PATCH 2/3] Add private function to process string --- .../Command/Database/AbstractDatabase.php | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/Joomlatools/Console/Command/Database/AbstractDatabase.php b/src/Joomlatools/Console/Command/Database/AbstractDatabase.php index a8e4679..b0bfa36 100644 --- a/src/Joomlatools/Console/Command/Database/AbstractDatabase.php +++ b/src/Joomlatools/Console/Command/Database/AbstractDatabase.php @@ -7,6 +7,7 @@ namespace Joomlatools\Console\Command\Database; +use RuntimeException; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; @@ -148,17 +149,21 @@ private function _executeMysqlWithCredentials(callable $callback) $file = tmpfile(); $path = stream_get_meta_data($file)['uri']; + $user = $this->processString($this->mysql->user); + $password = $this->processString($this->mysql->password); + $host = $this->processString($this->mysql->host); + $port = $this->processString($this->mysql->port); + $contents = <<mysql->user} -password="{$this->mysql->password}" -host={$this->mysql->host} -port={$this->mysql->port} +user={$user} +password={$password} +host={$host} +port={$port} STR; fwrite($file, $contents); - return exec($callback($path)); } finally { @@ -185,4 +190,20 @@ protected function _promptDatabaseDetails(InputInterface $input, OutputInterface $input->setOption('mysql-database', $this->target_db); $input->setOption('mysql-driver', $this->mysql->driver); } + + private function processString(string $input): string + { + // Undo escaped characters + $input = stripslashes($input); + + // Check if the string starts and ends with single quotes and replace with double quotes + // or add double quotes if the string does not start and end with quotes + if (preg_match("/^'(.*)'$/", $input, $matches)) { + $input = '"' . $matches[1] . '"'; + } elseif (!preg_match('/^["\'].*["\']$/', $input)) { + $input = '"' . $input . '"'; + } + + return $input; + } } From 21a344687068c4f3d1aa798ae64cf37cba29d6b4 Mon Sep 17 00:00:00 2001 From: MariannaBittencourt <51627531+MariannaBittencourt@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:57:13 +0100 Subject: [PATCH 3/3] Update AbstractDatabase.php Delete the unused Exception --- src/Joomlatools/Console/Command/Database/AbstractDatabase.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Joomlatools/Console/Command/Database/AbstractDatabase.php b/src/Joomlatools/Console/Command/Database/AbstractDatabase.php index b0bfa36..76f01a0 100644 --- a/src/Joomlatools/Console/Command/Database/AbstractDatabase.php +++ b/src/Joomlatools/Console/Command/Database/AbstractDatabase.php @@ -7,11 +7,9 @@ namespace Joomlatools\Console\Command\Database; -use RuntimeException; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; - use Joomlatools\Console\Command\Site\AbstractSite; abstract class AbstractDatabase extends AbstractSite