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