Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tabs in login - separate for system and non-system logins #25515

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
2 changes: 2 additions & 0 deletions extensions/sql-migration/src/constants/strings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,8 @@ export const LOGIN_MIGRATIONS_VM_TEXT = localize('sql.login.migration.vm.title',
export const LOGIN_MIGRATIONS_AZURE_SQL_TARGET_PAGE_TITLE = localize('sql.login.migration.target.title', "Azure SQL target");
export const LOGIN_MIGRATIONS_SELECT_LOGINS_PAGE_TITLE = localize('sql.login.migration.select.page.title', "Select login(s) to migrate");
export const LOGIN_MIGRATIONS_SELECT_LOGINS_WINDOWS_AUTH_WARNING = localize('sql.login.migration.select.logins.windows.auth.warning', "Please note that this wizard does not display windows authentication login types because migrating that type is currently not supported. Capability for migrating windows authentication logins is coming soon.");
export const LOGIN_MIGRATIONS_SELECT_LOGINS_TAB_NON_SYSTEM_LOGIN_TITLE = localize('sql.login.migration.select.logins.tab.non.system.title', "Logins ready for migration");
export const LOGIN_MIGRATIONS_SELECT_LOGINS_TAB_SYSTEM_LOGIN_TITLE = localize('sql.login.migration.select.logins.tab.system.title', "System type logins");
export const LOGIN_MIGRATIONS_STATUS_PAGE_TITLE = localize('sql.login.migration.status.page.title', "Migration Status");
export function LOGIN_MIGRATIONS_STATUS_PAGE_DESCRIPTION(numLogins: number, targetType: string, targetName: string): string {
return localize('sql.login.migration.status.page.description', "Migrating {0} logins to target {1} '{2}'", numLogins, targetType, targetName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export class LoginMigrationModel {
public collectedSourceLogins: boolean = false;
public collectedTargetLogins: boolean = false;
public loginsOnSource: LoginTableInfo[] = [];
public systemLoginsOnSource: LoginTableInfo[] = [];
public loginsOnTarget: string[] = [];
public loginMigrationsResult!: contracts.StartLoginMigrationResult;
public loginMigrationsError: any;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@ import * as constants from '../constants/strings';
import * as styles from '../constants/styles';
import { WIZARD_INPUT_COMPONENT_WIDTH, WizardController } from './wizardController';
import * as utils from '../api/utils';
import * as contracts from '../service/contracts';
import { MigrationTargetType } from '../api/utils';
import { azureResource } from 'azurecore';
import { AzureSqlDatabaseServer, getVMInstanceView, SqlVMServer } from '../api/azure';
import { collectSourceLogins, collectTargetLogins, getSourceConnectionId, getSourceConnectionProfile, isSourceConnectionSysAdmin, LoginTableInfo } from '../api/sqlUtils';
import { collectSourceLogins, collectTargetLogins, getSourceConnectionId, getSourceConnectionProfile, getSourceConnectionString, isSourceConnectionSysAdmin, LoginTableInfo } from '../api/sqlUtils';
import { NetworkInterfaceModel } from '../api/dataModels/azure/networkInterfaceModel';
import { getTelemetryProps, logError, sendSqlMigrationActionEvent, TelemetryAction, TelemetryViews } from '../telemetry';
import { ConnectingToTargetFailed, } from '../models/loginMigrationModel';
Expand Down Expand Up @@ -344,10 +345,29 @@ export class LoginMigrationTargetSelectionPage extends MigrationWizardPage {
await this.populateLocationDropdown();

// Collect source login info here, as it will speed up loading the next page
const sourceLogins: LoginTableInfo[] = [];
var sourceLogins: LoginTableInfo[] = [];
krritik marked this conversation as resolved.
Show resolved Hide resolved
sourceLogins.push(...await collectSourceLogins(
await getSourceConnectionId(),
this.migrationStateModel.isWindowsAuthMigrationSupported));

var validateLoginEligibilityResult: contracts.StartLoginMigrationPreValidationResult | undefined = await this.migrationStateModel.migrationService.validateLoginEligibility(
await getSourceConnectionString(),
"",
sourceLogins.map(row => row.loginName),
""
);

var sourceSystemLoginsName: string[] = [];

if (validateLoginEligibilityResult !== undefined) {
sourceSystemLoginsName = Object.keys(validateLoginEligibilityResult.exceptionMap).map(loginName => loginName.toLocaleLowerCase());
}

const sourceSystemLogins: LoginTableInfo[] = sourceLogins.filter(login => sourceSystemLoginsName.includes(login.loginName.toLocaleLowerCase()));
sourceLogins = sourceLogins.filter(login => !sourceSystemLoginsName.includes(login.loginName.toLocaleLowerCase()));

this.migrationStateModel._loginMigrationModel.systemLoginsOnSource = sourceSystemLogins;

this.migrationStateModel._loginMigrationModel.collectedSourceLogins = true;
this.migrationStateModel._loginMigrationModel.loginsOnSource = sourceLogins;
}));
Expand Down