From bb24eb29c53ca39d6d2d7844c009eed512df6c96 Mon Sep 17 00:00:00 2001 From: Cheena Malhotra <13396919+cheenamalhotra@users.noreply.github.com> Date: Tue, 1 Nov 2022 09:26:37 -0700 Subject: [PATCH] Fix issue with SQL Database Projects unable to connect due to default encryption (#21010) --- .../models/connections/connectionService.ts | 6 +++- .../connection/common/connectionProfile.ts | 8 ++++- .../test/common/connectionProfile.test.ts | 35 +++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/extensions/sql-database-projects/src/models/connections/connectionService.ts b/extensions/sql-database-projects/src/models/connections/connectionService.ts index 9161fd6a42..c56e234167 100644 --- a/extensions/sql-database-projects/src/models/connections/connectionService.ts +++ b/extensions/sql-database-projects/src/models/connections/connectionService.ts @@ -32,6 +32,7 @@ export class ConnectionService { const azdataApi = utils.getAzdataApi(); const vscodeMssqlApi = azdataApi ? undefined : await utils.getVscodeMssqlApi(); if (azdataApi) { + // TODO receive encrypt/trustservercertificate from profile. const connectionProfile = { password: profile.password, serverName: `${profile.serverName},${profile.port}`, @@ -42,7 +43,10 @@ export class ConnectionService { saveProfile: false, id: '', connectionName: profile.profileName, - options: [], + options: { + 'encrypt': true, + 'trustServerCertificate': true + }, authenticationType: azdataApi.connection.AuthenticationType.SqlLogin }; return await azdataApi.connection.connect(connectionProfile, saveConnectionAndPassword, false); diff --git a/src/sql/platform/connection/common/connectionProfile.ts b/src/sql/platform/connection/common/connectionProfile.ts index 7927872c1e..8a83bf0042 100644 --- a/src/sql/platform/connection/common/connectionProfile.ts +++ b/src/sql/platform/connection/common/connectionProfile.ts @@ -47,7 +47,6 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa this.groupFullName = model.groupFullName; this.savePassword = model.savePassword; this.saveProfile = model.saveProfile; - this.azureTenantId = model.azureTenantId; // Special case setting properties to support both IConnectionProfile and azdata.connection.ConnectionProfile @@ -68,6 +67,13 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa let appNameKey = appNameOption.name; this.options[appNameKey] = Constants.applicationName; } + // Set values for advanced options received in model. + Object.keys(model.options).forEach(a => { + let option = options.find(opt => opt.name === a); + if (option !== undefined) { + this.options[option.name] = model.options[a]; + } + }); } if (model.options.registeredServerDescription) { this.registeredServerDescription = model.options.registeredServerDescription; diff --git a/src/sql/platform/connection/test/common/connectionProfile.test.ts b/src/sql/platform/connection/test/common/connectionProfile.test.ts index 3152010190..4797835ed2 100644 --- a/src/sql/platform/connection/test/common/connectionProfile.test.ts +++ b/src/sql/platform/connection/test/common/connectionProfile.test.ts @@ -44,7 +44,10 @@ suite('SQL ConnectionProfileInfo tests', () => { groupFullName: 'g2/g2-2', groupId: 'group id', providerId: mssqlProviderName, - options: {}, + options: { + 'encrypt': true, + 'trustServerCertificate': true + }, saveProfile: true, connectionId: 'my id' }; @@ -137,7 +140,33 @@ suite('SQL ConnectionProfileInfo tests', () => { isRequired: true, specialValueType: ConnectionOptionSpecialType.password, valueType: ServiceOptionType.string - } + }, + { + name: 'encrypt', + displayName: undefined!, + description: undefined!, + groupName: undefined!, + categoryValues: undefined!, + defaultValue: "true", + isIdentity: false, + showOnConnectionDialog: true, + isRequired: false, + specialValueType: undefined, + valueType: ServiceOptionType.boolean + }, + { + name: 'trustServerCertificate', + displayName: undefined!, + description: undefined!, + groupName: undefined!, + categoryValues: undefined!, + defaultValue: "false", + isIdentity: false, + showOnConnectionDialog: true, + isRequired: false, + specialValueType: undefined, + valueType: ServiceOptionType.boolean + }, ]; msSQLCapabilities = { providerId: mssqlProviderName, @@ -199,6 +228,8 @@ suite('SQL ConnectionProfileInfo tests', () => { assert.strictEqual(conn.groupFullName, connectionProfile.groupFullName); assert.strictEqual(conn.savePassword, connectionProfile.savePassword); assert.strictEqual(conn.providerName, connectionProfile.providerId); + assert.strictEqual(conn.options['encrypt'], connectionProfile.options['encrypt']); + assert.strictEqual(conn.options['trustServerCertificate'], connectionProfile.options['trustServerCertificate']); }); test('getOptionsKey should create a valid unique id', () => {