New azure authentication experience (#8483)

* Changes

* Work in progress

* Authenticate with azure

* enbable national clouds and initialization

* Add support for tenants

* Finish up account work

* Finish up azure auth

* Don't allow prompt if we're not initialized

* Shut down server

* Remove trailing comma

* encode uri component

* ignore errors

* Address comments on github

* Fix issues and disable feature without env var

* Don't encode the nonce

* Only use env variables to disable the new sign in

* Show more user friendly messages to users
This commit is contained in:
Amir Omidi
2019-11-27 12:33:08 -08:00
committed by GitHub
parent 3135b8525b
commit 5235a1d029
13 changed files with 531 additions and 69 deletions

View File

@@ -3,8 +3,6 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import * as constants from '../constants';
import * as azdata from 'azdata';
import * as events from 'events';
@@ -13,7 +11,8 @@ import * as path from 'path';
import * as vscode from 'vscode';
import CredentialServiceTokenCache from './tokenCache';
import providerSettings from './providerSettings';
import { AzureAccountProvider } from './azureAccountProvider';
import { AzureAccountProvider as AzureAccountProviderDeprecated } from './azureAccountProvider';
import { AzureAccountProvider as AzureAccountProvider } from './azureAccountProvider2';
import { AzureAccountProviderMetadata, ProviderSettings } from './interfaces';
let localize = nls.loadMessageBundle();
@@ -26,7 +25,7 @@ export class AzureAccountProviderService implements vscode.Disposable {
// MEMBER VARIABLES ////////////////////////////////////////////////////////
private _accountDisposals: { [accountProviderId: string]: vscode.Disposable };
private _accountProviders: { [accountProviderId: string]: AzureAccountProvider };
private _accountProviders: { [accountProviderId: string]: azdata.AccountProvider };
private _credentialProvider: azdata.CredentialProvider;
private _configChangePromiseChain: Thenable<void>;
private _currentConfig: vscode.WorkspaceConfiguration;
@@ -69,10 +68,11 @@ export class AzureAccountProviderService implements vscode.Disposable {
// PRIVATE HELPERS /////////////////////////////////////////////////////
private onClearTokenCache(): Thenable<void> {
let self = this;
// let self = this;
let promises: Thenable<void>[] = providerSettings.map(provider => {
return self._accountProviders[provider.metadata.id].clearTokenCache();
// return self._accountProviders[provider.metadata.id].clearTokenCache();
return Promise.resolve();
});
return Promise.all(promises)
@@ -129,14 +129,23 @@ export class AzureAccountProviderService implements vscode.Disposable {
}
private registerAccountProvider(provider: ProviderSettings): Thenable<void> {
let self = this;
return new Promise((resolve, reject) => {
try {
//let config = vscode.workspace.getConfiguration(AzureAccountProviderService.ConfigurationSection);
let tokenCacheKey = `azureTokenCache-${provider.metadata.id}`;
let tokenCachePath = path.join(this._userStoragePath, tokenCacheKey);
let tokenCache = new CredentialServiceTokenCache(self._credentialProvider, tokenCacheKey, tokenCachePath);
let accountProvider = new AzureAccountProvider(<AzureAccountProviderMetadata>provider.metadata, tokenCache);
let accountProvider: azdata.AccountProvider;
if (/*config.get('useNewSignInExperience') === true && */ Boolean(process.env['NEW_SIGN_IN_EXPERIENCE']) === true) {
accountProvider = new AzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache);
} else {
accountProvider = new AzureAccountProviderDeprecated(provider.metadata as AzureAccountProviderMetadata, tokenCache);
}
self._accountProviders[provider.metadata.id] = accountProvider;
self._accountDisposals[provider.metadata.id] = azdata.accounts.registerAccountProvider(provider.metadata, accountProvider);
resolve();