diff --git a/src/commands/database/connect.ts b/src/commands/database/connect.ts index 820e0becc07..f56bf4e71d9 100644 --- a/src/commands/database/connect.ts +++ b/src/commands/database/connect.ts @@ -11,6 +11,17 @@ export interface ConnectOptions { json?: boolean } +function redactConnectionString(connectionString: string): string { + try { + const url = new URL(connectionString) + url.username = '' + url.password = '' + return url.toString() + } catch { + return 'database' + } +} + export const connect = async (options: ConnectOptions, command: BaseCommand): Promise => { const buildDir = command.netlify.site.root ?? command.project.root ?? command.project.baseDirectory if (!buildDir) { @@ -26,7 +37,7 @@ export const connect = async (options: ConnectOptions, command: BaseCommand): Pr return } - log(`Connected to ${connectionString}`) + log(`Connected to ${redactConnectionString(connectionString)}`) // --query: one-shot mode if (options.query) { diff --git a/src/commands/database/db-connection.ts b/src/commands/database/db-connection.ts index 64499e9e58f..090adf6ef59 100644 --- a/src/commands/database/db-connection.ts +++ b/src/commands/database/db-connection.ts @@ -25,6 +25,17 @@ interface RawDBConnection { } export async function connectRawClient(buildDir: string): Promise { + const envConnectionString = process.env.NETLIFY_DB_URL + if (envConnectionString) { + const client = new Client({ connectionString: envConnectionString }) + await client.connect() + return { + client, + connectionString: envConnectionString, + cleanup: () => client.end(), + } + } + const state = new LocalState(buildDir) const storedConnectionString = state.get('dbConnectionString')