mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-30 09:35:39 -05:00
103 lines
2.4 KiB
TypeScript
103 lines
2.4 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { Uri, env } from 'vscode';
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
export interface ClientDetails {
|
|
id?: string;
|
|
secret?: string;
|
|
}
|
|
|
|
export interface ClientConfig {
|
|
OSS: ClientDetails;
|
|
INSIDERS: ClientDetails;
|
|
STABLE: ClientDetails;
|
|
EXPLORATION: ClientDetails;
|
|
|
|
VSO: ClientDetails;
|
|
VSO_PPE: ClientDetails;
|
|
VSO_DEV: ClientDetails;
|
|
|
|
GITHUB_APP: ClientDetails;
|
|
}
|
|
|
|
export class Registrar {
|
|
private _config: ClientConfig;
|
|
|
|
constructor() {
|
|
try {
|
|
const fileContents = fs.readFileSync(path.join(env.appRoot, 'extensions/github-authentication/src/common/config.json')).toString();
|
|
this._config = JSON.parse(fileContents);
|
|
} catch (e) {
|
|
this._config = {
|
|
OSS: {},
|
|
INSIDERS: {},
|
|
STABLE: {},
|
|
EXPLORATION: {},
|
|
VSO: {},
|
|
VSO_PPE: {},
|
|
VSO_DEV: {},
|
|
GITHUB_APP: {}
|
|
};
|
|
}
|
|
}
|
|
|
|
getGitHubAppDetails(): ClientDetails {
|
|
if (!this._config.GITHUB_APP.id || !this._config.GITHUB_APP.secret) {
|
|
throw new Error(`No GitHub App client configuration available`);
|
|
}
|
|
|
|
return this._config.GITHUB_APP;
|
|
}
|
|
|
|
getClientDetails(callbackUri: Uri): ClientDetails {
|
|
let details: ClientDetails | undefined;
|
|
switch (callbackUri.scheme) {
|
|
case 'code-oss':
|
|
details = this._config.OSS;
|
|
break;
|
|
|
|
case 'vscode-insiders':
|
|
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 callback ${callbackUri}`);
|
|
}
|
|
|
|
if (!details.id || !details.secret) {
|
|
throw new Error(`No client configuration available for ${callbackUri}`);
|
|
}
|
|
|
|
return details;
|
|
}
|
|
}
|
|
|
|
const ClientRegistrar = new Registrar();
|
|
export default ClientRegistrar;
|