[SQL Migration] Properly respect user's encryptConnection and trustServerCertificate settings (#21824)

* WIP

* Always get latest current connection

* Update more references

* Clean up

* Clean up

* vbump

* Update comments

* Address PR feedback

* Separate into helper methods
This commit is contained in:
Raymond Truong
2023-02-08 10:12:11 -08:00
committed by GitHub
parent 99a924dbcd
commit 480d8e2cd0
25 changed files with 206 additions and 154 deletions

View File

@@ -15,6 +15,7 @@ import { SelectMigrationServiceDialog } from '../dialog/selectMigrationService/s
import { logError, TelemetryViews } from '../telemetry';
import { AdsMigrationStatus, ServiceContextChangeEvent, TabBase } from './tabBase';
import { DashboardStatusBar } from './DashboardStatusBar';
import { getSourceConnectionId } from '../api/sqlUtils';
interface IActionMetadata {
title?: string,
@@ -764,11 +765,10 @@ export class DashboardTab extends TabBase<DashboardTab> {
})
.component();
const connectionProfile = await azdata.connection.getCurrentConnection();
this.disposables.push(
this.serviceContextChangedEvent.event(
async (e) => {
if (e.connectionId === connectionProfile.connectionId) {
if (e.connectionId === await getSourceConnectionId()) {
await this.updateServiceContext(this._serviceContextButton);
await this.refresh();
}

View File

@@ -13,6 +13,7 @@ import { getResourceName } from '../api/azure';
import { InfoFieldSchema, infoFieldWidth, MigrationDetailsTabBase, MigrationTargetTypeName } from './migrationDetailsTabBase';
import { EmptySettingValue } from './tabBase';
import { DashboardStatusBar } from './DashboardStatusBar';
import { getSourceConnectionServerInfo } from '../api/sqlUtils';
const MigrationDetailsBlobContainerTabId = 'MigrationDetailsBlobContainerTab';
@@ -79,7 +80,7 @@ export class MigrationDetailsBlobContainerTab extends MigrationDetailsTabBase<Mi
const sqlServerName = migration.properties.sourceServerName;
const sourceDatabaseName = migration.properties.sourceDatabaseName;
const sqlServerInfo = await azdata.connection.getServerInfo((await azdata.connection.getCurrentConnection()).connectionId);
const sqlServerInfo = await getSourceConnectionServerInfo();
const versionName = getSqlServerName(sqlServerInfo.serverMajorVersion!);
const sqlServerVersion = versionName ? versionName : sqlServerInfo.serverVersion;
const targetDatabaseName = migration.name;

View File

@@ -15,6 +15,7 @@ import { getResourceName } from '../api/azure';
import { EmptySettingValue } from './tabBase';
import { InfoFieldSchema, infoFieldWidth, MigrationDetailsTabBase, MigrationTargetTypeName } from './migrationDetailsTabBase';
import { DashboardStatusBar } from './DashboardStatusBar';
import { getSourceConnectionServerInfo } from '../api/sqlUtils';
const MigrationDetailsFileShareTabId = 'MigrationDetailsFileShareTab';
@@ -92,7 +93,7 @@ export class MigrationDetailsFileShareTab extends MigrationDetailsTabBase<Migrat
const sqlServerName = migration.properties.sourceServerName;
const sourceDatabaseName = migration.properties.sourceDatabaseName;
const sqlServerInfo = await azdata.connection.getServerInfo((await azdata.connection.getCurrentConnection()).connectionId);
const sqlServerInfo = await getSourceConnectionServerInfo();
const versionName = getSqlServerName(sqlServerInfo.serverMajorVersion!);
const sqlServerVersion = versionName ? versionName : sqlServerInfo.serverVersion;
const targetDatabaseName = migration.name;

View File

@@ -14,6 +14,7 @@ import { InfoFieldSchema, infoFieldLgWidth, MigrationDetailsTabBase, MigrationTa
import { IconPathHelper } from '../constants/iconPathHelper';
import { EOL } from 'os';
import { DashboardStatusBar } from './DashboardStatusBar';
import { getSourceConnectionServerInfo } from '../api/sqlUtils';
const MigrationDetailsTableTabId = 'MigrationDetailsTableTab';
@@ -110,7 +111,7 @@ export class MigrationDetailsTableTab extends MigrationDetailsTabBase<MigrationD
const sqlServerName = migration?.properties.sourceServerName;
const sourceDatabaseName = migration?.properties.sourceDatabaseName;
const sqlServerInfo = await azdata.connection.getServerInfo((await azdata.connection.getCurrentConnection()).connectionId);
const sqlServerInfo = await getSourceConnectionServerInfo();
const versionName = getSqlServerName(sqlServerInfo.serverMajorVersion!);
const sqlServerVersion = versionName ? versionName : sqlServerInfo.serverVersion;
const targetDatabaseName = migration?.name;

View File

@@ -15,6 +15,7 @@ import { logError, TelemetryViews } from '../telemetry';
import { SelectMigrationServiceDialog } from '../dialog/selectMigrationService/selectMigrationServiceDialog';
import { AdsMigrationStatus, EmptySettingValue, ServiceContextChangeEvent, TabBase } from './tabBase';
import { DashboardStatusBar } from './DashboardStatusBar';
import { getSourceConnectionId } from '../api/sqlUtils';
export const MigrationsListTabId = 'MigrationsListTab';
@@ -174,11 +175,10 @@ export class MigrationsListTab extends TabBase<MigrationsListTab> {
await dialog.initialize();
}));
const connectionProfile = await azdata.connection.getCurrentConnection();
this.disposables.push(
this.serviceContextChangedEvent.event(
async (e) => {
if (e.connectionId === connectionProfile.connectionId) {
if (e.connectionId === await getSourceConnectionId()) {
await this.updateServiceContext(this._serviceContextButton);
await this.refresh();
}
@@ -408,7 +408,7 @@ export class MigrationsListTab extends TabBase<MigrationsListTab> {
(<azdata.CategoryValue>this._columnSortDropdown.value).name,
this._columnSortCheckbox.checked === true);
const connectionProfile = await azdata.connection.getCurrentConnection();
const connectionProfileId = await getSourceConnectionId();
const data: any[] = this._filteredMigrations.map((migration, index) => {
return [
<azdata.HyperlinkColumnCellValue>{
@@ -432,7 +432,7 @@ export class MigrationsListTab extends TabBase<MigrationsListTab> {
<azdata.ContextMenuColumnCellValue>{
title: '',
context: {
connectionId: connectionProfile.connectionId,
connectionId: connectionProfileId,
migrationId: migration.id,
migrationOperationId: migration.properties.migrationOperationId,
},

View File

@@ -16,6 +16,7 @@ import { MigrationDetailsFileShareTab } from './migrationDetailsFileShareTab';
import { MigrationDetailsBlobContainerTab } from './migrationDetailsBlobContainerTab';
import { MigrationDetailsTableTab } from './migrationDetailsTableTab';
import { DashboardStatusBar } from './DashboardStatusBar';
import { getSourceConnectionId } from '../api/sqlUtils';
export const MigrationsTabId = 'MigrationsTab';
@@ -110,11 +111,9 @@ export class MigrationsTab extends TabBase<MigrationsTab> {
this.statusBar);
this.disposables.push(this._migrationDetailsFileShareTab);
const connectionProfile = await azdata.connection.getCurrentConnection();
const connectionId = connectionProfile.connectionId;
this.disposables.push(
this._migrationDetailsEvent.event(async e => {
if (e.connectionId === connectionId) {
if (e.connectionId === await getSourceConnectionId()) {
const migration = await this._getMigrationDetails(e.migrationId, e.migrationOperationId);
if (migration) {
await this.openMigrationDetails(migration);

View File

@@ -26,6 +26,7 @@ import { DashboardStatusBar, ErrorEvent } from './DashboardStatusBar';
import { DashboardTab } from './dashboardTab';
import { MigrationsTab, MigrationsTabId } from './migrationsTab';
import { AdsMigrationStatus, MigrationDetailsEvent, ServiceContextChangeEvent } from './tabBase';
import { getSourceConnectionId, getSourceConnectionProfile } from '../api/sqlUtils';
export interface MenuCommandArgs {
connectionId: string,
@@ -73,10 +74,9 @@ export class DashboardWidget {
CSSStyles: { 'font-size': '14px', 'display': 'none', },
}).component();
const connectionProfile = await azdata.connection.getCurrentConnection();
const statusBar = new DashboardStatusBar(
this._context,
connectionProfile.connectionId,
await getSourceConnectionId(),
statusInfoBox,
this._errorEvent);
@@ -133,8 +133,7 @@ export class DashboardWidget {
let migrationsTabInitialized = false;
disposables.push(
tabs.onTabChanged(async tabId => {
const connectionProfile = await azdata.connection.getCurrentConnection();
await this.clearError(connectionProfile.connectionId);
await this.clearError(await getSourceConnectionId());
if (tabId === MigrationsTabId && !migrationsTabInitialized) {
migrationsTabInitialized = true;
await migrationsTab.refresh();
@@ -428,23 +427,20 @@ export class DashboardWidget {
}
public async launchMigrationWizard(): Promise<void> {
const activeConnection = await azdata.connection.getCurrentConnection();
let connectionId: string = '';
const activeConnection = await getSourceConnectionProfile();
let serverName: string = '';
if (!activeConnection) {
const connection = await azdata.connection.openConnectionDialog();
if (connection) {
connectionId = connection.connectionId;
serverName = connection.options.server;
}
} else {
connectionId = activeConnection.connectionId;
serverName = activeConnection.serverName;
}
if (serverName) {
const api = (await vscode.extensions.getExtension(mssql.extension.name)?.activate()) as mssql.IExtension;
if (api) {
this.stateModel = new MigrationStateModel(this._context, connectionId, api.sqlMigration, api.tdeMigration);
this.stateModel = new MigrationStateModel(this._context, api.sqlMigration, api.tdeMigration);
this._context.subscriptions.push(this.stateModel);
const savedInfo = this.checkSavedInfo(serverName);
if (savedInfo) {
@@ -460,36 +456,33 @@ export class DashboardWidget {
this._context,
this.stateModel,
this._onServiceContextChanged);
await wizardController.openWizard(connectionId);
await wizardController.openWizard();
}
}
}
}
public async launchLoginMigrationWizard(): Promise<void> {
const activeConnection = await azdata.connection.getCurrentConnection();
let connectionId: string = '';
const activeConnection = await getSourceConnectionProfile();
let serverName: string = '';
if (!activeConnection) {
const connection = await azdata.connection.openConnectionDialog();
if (connection) {
connectionId = connection.connectionId;
serverName = connection.options.server;
}
} else {
connectionId = activeConnection.connectionId;
serverName = activeConnection.serverName;
}
if (serverName) {
const api = (await vscode.extensions.getExtension(mssql.extension.name)?.activate()) as mssql.IExtension;
if (api) {
this.stateModel = new MigrationStateModel(this._context, connectionId, api.sqlMigration, api.tdeMigration);
this.stateModel = new MigrationStateModel(this._context, api.sqlMigration, api.tdeMigration);
this._context.subscriptions.push(this.stateModel);
const wizardController = new WizardController(
this._context,
this.stateModel,
this._onServiceContextChanged);
await wizardController.openLoginWizard(connectionId);
await wizardController.openLoginWizard();
}
}
}