Path: blob/main/extensions/microsoft-authentication/src/extensionV2.ts
3314 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Environment, EnvironmentParameters } from '@azure/ms-rest-azure-env';6import Logger from './logger';7import { MsalAuthProvider } from './node/authProvider';8import { UriEventHandler } from './UriEventHandler';9import { authentication, commands, ExtensionContext, l10n, window, workspace, Disposable, Uri } from 'vscode';10import { MicrosoftAuthenticationTelemetryReporter, MicrosoftSovereignCloudAuthenticationTelemetryReporter } from './common/telemetryReporter';1112async function initMicrosoftSovereignCloudAuthProvider(13context: ExtensionContext,14uriHandler: UriEventHandler15): Promise<Disposable | undefined> {16const environment = workspace.getConfiguration('microsoft-sovereign-cloud').get<string | undefined>('environment');17let authProviderName: string | undefined;18if (!environment) {19return undefined;20}2122if (environment === 'custom') {23const customEnv = workspace.getConfiguration('microsoft-sovereign-cloud').get<EnvironmentParameters>('customEnvironment');24if (!customEnv) {25const res = await window.showErrorMessage(l10n.t('You must also specify a custom environment in order to use the custom environment auth provider.'), l10n.t('Open settings'));26if (res) {27await commands.executeCommand('workbench.action.openSettingsJson', 'microsoft-sovereign-cloud.customEnvironment');28}29return undefined;30}31try {32Environment.add(customEnv);33} catch (e) {34const res = await window.showErrorMessage(l10n.t('Error validating custom environment setting: {0}', e.message), l10n.t('Open settings'));35if (res) {36await commands.executeCommand('workbench.action.openSettings', 'microsoft-sovereign-cloud.customEnvironment');37}38return undefined;39}40authProviderName = customEnv.name;41} else {42authProviderName = environment;43}4445const env = Environment.get(authProviderName);46if (!env) {47await window.showErrorMessage(l10n.t('The environment `{0}` is not a valid environment.', authProviderName), l10n.t('Open settings'));48return undefined;49}5051const authProvider = await MsalAuthProvider.create(52context,53new MicrosoftSovereignCloudAuthenticationTelemetryReporter(context.extension.packageJSON.aiKey),54window.createOutputChannel(l10n.t('Microsoft Sovereign Cloud Authentication'), { log: true }),55uriHandler,56env57);58const disposable = authentication.registerAuthenticationProvider(59'microsoft-sovereign-cloud',60authProviderName,61authProvider,62{ supportsMultipleAccounts: true, supportsChallenges: true }63);64context.subscriptions.push(disposable);65return disposable;66}6768export async function activate(context: ExtensionContext, mainTelemetryReporter: MicrosoftAuthenticationTelemetryReporter) {69const uriHandler = new UriEventHandler();70context.subscriptions.push(uriHandler);71const authProvider = await MsalAuthProvider.create(72context,73mainTelemetryReporter,74Logger,75uriHandler76);77context.subscriptions.push(authentication.registerAuthenticationProvider(78'microsoft',79'Microsoft',80authProvider,81{82supportsMultipleAccounts: true,83supportsChallenges: true,84supportedAuthorizationServers: [85Uri.parse('https://login.microsoftonline.com/*'),86Uri.parse('https://login.microsoftonline.com/*/v2.0')87]88}89));9091let microsoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, uriHandler);9293context.subscriptions.push(workspace.onDidChangeConfiguration(async e => {94if (e.affectsConfiguration('microsoft-sovereign-cloud')) {95microsoftSovereignCloudAuthProviderDisposable?.dispose();96microsoftSovereignCloudAuthProviderDisposable = await initMicrosoftSovereignCloudAuthProvider(context, uriHandler);97}98}));99}100101export function deactivate() { }102103104