From bb15901c836db6a5751a8da92b3a4feb16ecf678 Mon Sep 17 00:00:00 2001 From: mertmit Date: Wed, 17 Aug 2022 16:03:45 +0300 Subject: [PATCH] feat: support custom parameters on connection url Re #3210 Signed-off-by: mertmit --- .../nocodb/src/lib/utils/NcConfigFactory.ts | 75 +++++++++++++++---- 1 file changed, 61 insertions(+), 14 deletions(-) diff --git a/packages/nocodb/src/lib/utils/NcConfigFactory.ts b/packages/nocodb/src/lib/utils/NcConfigFactory.ts index fc6d620d04..cf0b0efebd 100644 --- a/packages/nocodb/src/lib/utils/NcConfigFactory.ts +++ b/packages/nocodb/src/lib/utils/NcConfigFactory.ts @@ -39,6 +39,45 @@ const defaultConnectionConfig: any = { dateStrings: true, }; +const knownQueryParams = [ + { + parameter: 'database', + aliases: ['d', 'db'], + }, + { + parameter: 'password', + aliases: ['p'], + }, + { + parameter: 'user', + aliases: ['u'], + }, + { + parameter: 'title', + aliases: ['t'], + }, + { + parameter: 'keyFilePath', + aliases: [] + }, + { + parameter: 'certFilePath', + aliases: [] + }, + { + parameter: 'caFilePath', + aliases: [] + }, + { + parameter: 'ssl', + aliases: [] + }, + { + parameter: 'options', + aliases: ['opt', 'opts'] + }, +]; + export default class NcConfigFactory implements NcConfig { public static make(): NcConfig { this.jdbcToXcUrl(); @@ -155,17 +194,21 @@ export default class NcConfigFactory implements NcConfig { }, } as any; } else { + const parsedQuery = {} + for (const [key, value] of url.searchParams.entries()) { + const fnd = knownQueryParams.find((param) => param.parameter === key || param.aliases.includes(key)) + if (fnd) { + parsedQuery[fnd.parameter] = value; + } else { + parsedQuery[key] = value; + } + } + dbConfig = { client: url.protocol.replace(':', ''), connection: { ...defaultConnectionConfig, - database: - url.searchParams.get('d') || url.searchParams.get('database'), - host: url.hostname, - password: - url.searchParams.get('p') || url.searchParams.get('password'), - port: +url.port, - user: url.searchParams.get('u') || url.searchParams.get('user'), + ...parsedQuery }, // pool: { // min: 1, @@ -259,17 +302,21 @@ export default class NcConfigFactory implements NcConfig { : {}), }; } else { + const parsedQuery = {} + for (const [key, value] of url.searchParams.entries()) { + const fnd = knownQueryParams.find((param) => param.parameter === key || param.aliases.includes(key)) + if (fnd) { + parsedQuery[fnd.parameter] = value; + } else { + parsedQuery[key] = value; + } + } + dbConfig = { client: url.protocol.replace(':', ''), connection: { ...defaultConnectionConfig, - database: - url.searchParams.get('d') || url.searchParams.get('database'), - host: url.hostname, - password: - url.searchParams.get('p') || url.searchParams.get('password'), - port: +url.port, - user: url.searchParams.get('u') || url.searchParams.get('user'), + ...parsedQuery }, acquireConnectionTimeout: 600000, ...(url.searchParams.has('search_path')