From f94f236f91de3d3fe052f2f72bf2be2329b2aee1 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Fri, 18 Oct 2024 14:50:00 +0200 Subject: [PATCH] Use URI and CGI to parse the Candlepin DB URL --- definitions/features/candlepin_database.rb | 24 +++++++++------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/definitions/features/candlepin_database.rb b/definitions/features/candlepin_database.rb index 3916d8009..9e941a223 100644 --- a/definitions/features/candlepin_database.rb +++ b/definitions/features/candlepin_database.rb @@ -1,3 +1,6 @@ +require 'uri' +require 'cgi' + class Features::CandlepinDatabase < ForemanMaintain::Feature CANDLEPIN_DB_CONFIG = '/etc/candlepin/candlepin.conf'.freeze @@ -33,17 +36,17 @@ def check_option_using_cpdb_help(option_name, parent_cmd = '') def load_configuration raw_config = File.read(CANDLEPIN_DB_CONFIG) full_config = Hash[raw_config.scan(/(^[^#\n][^=]*)=(.*)/)] - uri_regexp = %r{://(([^/:]*):?([^/]*))/([^?]*)\??(ssl=([^&]*))?} url = full_config['jpa.config.hibernate.connection.url'] - uri = uri_regexp.match(url) + uri = URI.parse(url) + query = uri.query ? CGI.parse(uri.query) : {} { 'username' => full_config['jpa.config.hibernate.connection.username'], 'password' => full_config['jpa.config.hibernate.connection.password'], - 'database' => uri[4], - 'host' => uri[2], - 'port' => uri[3] || '5432', - 'ssl' => (fetch_extra_param(url, 'ssl') == 'true'), - 'sslfactory' => fetch_extra_param(url, 'sslfactory'), + 'database' => uri.path, + 'host' => uri.host, + 'port' => uri.port || '5432', + 'ssl' => query['ssl']&.first == 'true', + 'sslfactory' => query['sslfactory']&.first, 'driver_class' => full_config['jpa.config.hibernate.connection.driver_class'], 'url' => url, } @@ -57,11 +60,4 @@ def extend_with_db_options end db_options end - - def fetch_extra_param(url, key_name) - query_string = url.split('?')[1] - return nil unless query_string - output = /#{key_name}=([^&]*)?/.match(query_string) - output[1] if output - end end