AzureAccountProvider & AzureAccountProviderService strict nulls (#20543)

This commit is contained in:
Charles Gagnon
2022-09-06 10:48:32 -07:00
committed by GitHub
parent 7ec3506f5f
commit 8319f89b84
3 changed files with 26 additions and 24 deletions

View File

@@ -699,7 +699,7 @@ export interface RefreshToken extends AccountKey {
}
export interface MultiTenantTokenResponse {
[tenantId: string]: Token
[tenantId: string]: Token | undefined;
}
export interface Token extends AccountKey {

View File

@@ -25,7 +25,7 @@ const localize = nls.loadMessageBundle();
export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disposable {
private static readonly CONFIGURATION_SECTION = 'accounts.azure.auth';
private readonly authMappings = new Map<AzureAuthType, AzureAuth>();
private initComplete: Deferred<void, Error>;
private initComplete!: Deferred<void, Error>;
private initCompletePromise: Promise<void> = new Promise<void>((resolve, reject) => this.initComplete = { resolve, reject });
constructor(
@@ -58,14 +58,15 @@ export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disp
this.authMappings.clear();
const configuration = vscode.workspace.getConfiguration(AzureAccountProvider.CONFIGURATION_SECTION);
const codeGrantMethod: boolean = configuration.get('codeGrant');
const deviceCodeMethod: boolean = configuration.get('deviceCode');
const codeGrantMethod: boolean = configuration.get<boolean>('codeGrant', false);
const deviceCodeMethod: boolean = configuration.get<boolean>('deviceCode', false);
if (codeGrantMethod === true && !this.forceDeviceCode) {
this.authMappings.set(AzureAuthType.AuthCodeGrant, new AzureAuthCodeGrant(metadata, tokenCache, context, uriEventHandler));
}
if (deviceCodeMethod === true || this.forceDeviceCode) {
} else if (deviceCodeMethod === true || this.forceDeviceCode) {
this.authMappings.set(AzureAuthType.DeviceCode, new AzureDeviceCode(metadata, tokenCache, context, uriEventHandler));
} else {
console.error('No authentication methods selected');
}
}
@@ -74,12 +75,17 @@ export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disp
return this.authMappings.values().next().value;
}
const authType: AzureAuthType = account?.properties?.azureAuthType;
const authType: AzureAuthType | undefined = account?.properties?.azureAuthType;
if (authType) {
return this.authMappings.get(authType);
} else {
return this.authMappings.values().next().value;
const authMapping = this.authMappings.get(authType);
if (authMapping) {
return authMapping;
}
}
if (this.authMappings.size === 0) {
throw new Error('No authentication mappings selected');
}
return this.authMappings.values().next().value;
}
initialize(storedAccounts: AzureAccount[]): Thenable<AzureAccount[]> {

View File

@@ -30,22 +30,15 @@ export class AzureAccountProviderService implements vscode.Disposable {
// MEMBER VARIABLES ////////////////////////////////////////////////////////
private _disposables: vscode.Disposable[] = [];
private _accountDisposals: { [accountProviderId: string]: vscode.Disposable };
private _accountProviders: { [accountProviderId: string]: azdata.AccountProvider };
private _credentialProvider: azdata.CredentialProvider;
private _configChangePromiseChain: Thenable<void>;
private _currentConfig: vscode.WorkspaceConfiguration;
private _event: events.EventEmitter;
private readonly _uriEventHandler: UriEventHandler;
private _accountDisposals: { [accountProviderId: string]: vscode.Disposable } = {};
private _accountProviders: { [accountProviderId: string]: azdata.AccountProvider } = {};
private _credentialProvider: azdata.CredentialProvider | undefined = undefined;
private _configChangePromiseChain: Thenable<void> = Promise.resolve();
private _currentConfig: vscode.WorkspaceConfiguration | undefined = undefined;
private _event: events.EventEmitter = new events.EventEmitter();
private readonly _uriEventHandler: UriEventHandler = new UriEventHandler();
constructor(private _context: vscode.ExtensionContext, private _userStoragePath: string) {
this._accountDisposals = {};
this._accountProviders = {};
this._configChangePromiseChain = Promise.resolve();
this._currentConfig = null;
this._event = new events.EventEmitter();
this._uriEventHandler = new UriEventHandler();
this._disposables.push(vscode.window.registerUriHandler(this._uriEventHandler));
}
@@ -148,6 +141,9 @@ export class AzureAccountProviderService implements vscode.Disposable {
try {
const noSystemKeychain = vscode.workspace.getConfiguration('azure').get<boolean>('noSystemKeychain');
let tokenCacheKey = `azureTokenCache-${provider.metadata.id}`;
if (!this._credentialProvider) {
throw new Error('Credential provider not registered');
}
let simpleTokenCache = new SimpleTokenCache(tokenCacheKey, this._userStoragePath, noSystemKeychain, this._credentialProvider);
await simpleTokenCache.init();