mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-19 08:08:39 +01:00
Register a NullAuthProvider for github-enterprise when there is no setting set (#248870)
This should help in some cases where extensions call getSession to get github-enterprise and end up waiting 5 seconds for it to time out because it use to only be registered when there was a setting set.
This commit is contained in:
committed by
GitHub
parent
a18494e20a
commit
a1d4a24624
@@ -6,10 +6,42 @@
|
||||
import * as vscode from 'vscode';
|
||||
import { GitHubAuthenticationProvider, UriEventHandler } from './github';
|
||||
|
||||
function initGHES(context: vscode.ExtensionContext, uriHandler: UriEventHandler) {
|
||||
const settingNotSent = '"github-enterprise.uri" not set';
|
||||
const settingInvalid = '"github-enterprise.uri" invalid';
|
||||
|
||||
class NullAuthProvider implements vscode.AuthenticationProvider {
|
||||
private _onDidChangeSessions = new vscode.EventEmitter<vscode.AuthenticationProviderAuthenticationSessionsChangeEvent>();
|
||||
onDidChangeSessions = this._onDidChangeSessions.event;
|
||||
|
||||
private readonly _disposable: vscode.Disposable;
|
||||
|
||||
constructor(private readonly _errorMessage: string) {
|
||||
this._disposable = vscode.authentication.registerAuthenticationProvider('github-enterprise', 'GitHub Enterprise', this);
|
||||
}
|
||||
|
||||
createSession(): Thenable<vscode.AuthenticationSession> {
|
||||
throw new Error(this._errorMessage);
|
||||
}
|
||||
|
||||
getSessions(): Thenable<vscode.AuthenticationSession[]> {
|
||||
return Promise.resolve([]);
|
||||
}
|
||||
removeSession(): Thenable<void> {
|
||||
throw new Error(this._errorMessage);
|
||||
}
|
||||
|
||||
dispose() {
|
||||
this._onDidChangeSessions.dispose();
|
||||
this._disposable.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
function initGHES(context: vscode.ExtensionContext, uriHandler: UriEventHandler): vscode.Disposable {
|
||||
const settingValue = vscode.workspace.getConfiguration().get<string>('github-enterprise.uri');
|
||||
if (!settingValue) {
|
||||
return undefined;
|
||||
const provider = new NullAuthProvider(settingNotSent);
|
||||
context.subscriptions.push(provider);
|
||||
return provider;
|
||||
}
|
||||
|
||||
// validate user value
|
||||
@@ -18,7 +50,9 @@ function initGHES(context: vscode.ExtensionContext, uriHandler: UriEventHandler)
|
||||
uri = vscode.Uri.parse(settingValue, true);
|
||||
} catch (e) {
|
||||
vscode.window.showErrorMessage(vscode.l10n.t('GitHub Enterprise Server URI is not a valid URI: {0}', e.message ?? e));
|
||||
return;
|
||||
const provider = new NullAuthProvider(settingInvalid);
|
||||
context.subscriptions.push(provider);
|
||||
return provider;
|
||||
}
|
||||
|
||||
const githubEnterpriseAuthProvider = new GitHubAuthenticationProvider(context, uriHandler, uri);
|
||||
@@ -33,12 +67,14 @@ export function activate(context: vscode.ExtensionContext) {
|
||||
|
||||
context.subscriptions.push(new GitHubAuthenticationProvider(context, uriHandler));
|
||||
|
||||
let githubEnterpriseAuthProvider: GitHubAuthenticationProvider | undefined = initGHES(context, uriHandler);
|
||||
|
||||
let before = vscode.workspace.getConfiguration().get<string>('github-enterprise.uri');
|
||||
let githubEnterpriseAuthProvider = initGHES(context, uriHandler);
|
||||
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(async e => {
|
||||
if (e.affectsConfiguration('github-enterprise.uri')) {
|
||||
if (vscode.workspace.getConfiguration().get<string>('github-enterprise.uri')) {
|
||||
const after = vscode.workspace.getConfiguration().get<string>('github-enterprise.uri');
|
||||
if (before !== after) {
|
||||
githubEnterpriseAuthProvider?.dispose();
|
||||
before = after;
|
||||
githubEnterpriseAuthProvider = initGHES(context, uriHandler);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user