Add support for other vscode environments for github auth

This commit is contained in:
Rachel Macfarlane
2020-02-24 11:14:00 -08:00
parent 94b4d22c33
commit bf0a32e729
4 changed files with 51 additions and 7 deletions

View File

@@ -3,6 +3,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Uri } from 'vscode';
export interface ClientDetails {
id?: string;
secret?: string;
@@ -11,6 +13,12 @@ export interface ClientDetails {
export interface ClientConfig {
OSS: ClientDetails;
INSIDERS: ClientDetails;
STABLE: ClientDetails;
EXPLORATION: ClientDetails;
VSO: ClientDetails;
VSO_PPE: ClientDetails;
VSO_DEV: ClientDetails;
}
export class Registrar {
@@ -22,13 +30,18 @@ export class Registrar {
} catch (e) {
this._config = {
OSS: {},
INSIDERS: {}
INSIDERS: {},
STABLE: {},
EXPLORATION: {},
VSO: {},
VSO_PPE: {},
VSO_DEV: {}
};
}
}
getClientDetails(product: string): ClientDetails {
getClientDetails(callbackUri: Uri): ClientDetails {
let details: ClientDetails | undefined;
switch (product) {
switch (callbackUri.scheme) {
case 'code-oss':
details = this._config.OSS;
break;
@@ -37,12 +50,33 @@ export class Registrar {
details = this._config.INSIDERS;
break;
case 'vscode':
details = this._config.STABLE;
break;
case 'vscode-exploration':
details = this._config.EXPLORATION;
break;
case 'https':
switch (callbackUri.authority) {
case 'online.visualstudio.com':
details = this._config.VSO;
break;
case 'online-ppe.core.vsengsaas.visualstudio.com':
details = this._config.VSO_PPE;
break;
case 'online.dev.core.vsengsaas.visualstudio.com':
details = this._config.VSO_DEV;
break;
}
default:
throw new Error(`Unrecognized product ${product}`);
throw new Error(`Unrecognized callback ${callbackUri}`);
}
if (!details.id || !details.secret) {
throw new Error(`No client configuration available for ${product}`);
throw new Error(`No client configuration available for ${callbackUri}`);
}
return details;

View File

@@ -71,7 +71,7 @@ export class GitHubServer {
Logger.info('Logging in...');
const state = uuid();
const callbackUri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://vscode.github-authentication/did-authenticate`));
const clientDetails = ClientRegistrar.getClientDetails(callbackUri.scheme);
const clientDetails = ClientRegistrar.getClientDetails(callbackUri);
const uri = vscode.Uri.parse(`https://github.com/login/oauth/authorize?redirect_uri=${encodeURIComponent(callbackUri.toString())}&scope=${scopes}&state=${state}&client_id=${clientDetails.id}`);
vscode.env.openExternal(uri);