mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-03-19 19:41:37 -04:00
* commting .d.ts changes * added serverinfo to .d.ts * maybe its working? * works * updated contrib * remove unnecessary code * fix compile errors * init * conitnue * on the way to working maybe? * close * EVERYTHING WORKS * moved src out of client folder * formatting * reenable logging * working on build file * fixed install service gulp command * fix the command to properly return promises * clean up code * add telemetry * formatting * added logging/telemetry/statusview * formatting * address comments * resolute vscode-language versions
111 lines
3.6 KiB
TypeScript
111 lines
3.6 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
'use strict';
|
|
|
|
import { SqlOpsDataClient, ClientOptions, SqlOpsFeature } from 'dataprotocol-client';
|
|
import * as path from 'path';
|
|
import { IConfig, ServerProvider } from 'service-downloader';
|
|
import { ServerOptions, RPCMessageType, ClientCapabilities, ServerCapabilities, TransportKind } from 'vscode-languageclient';
|
|
import { Disposable } from 'vscode';
|
|
import * as UUID from 'vscode-languageclient/lib/utils/uuid';
|
|
|
|
import * as sqlops from 'sqlops';
|
|
|
|
import * as Contracts from './contracts';
|
|
import * as Constants from './constants';
|
|
import * as Utils from '../utils';
|
|
|
|
class CredentialsFeature extends SqlOpsFeature<any> {
|
|
|
|
private static readonly messagesTypes: RPCMessageType[] = [
|
|
Contracts.DeleteCredentialRequest.type,
|
|
Contracts.SaveCredentialRequest.type,
|
|
Contracts.ReadCredentialRequest.type
|
|
];
|
|
|
|
constructor(client: SqlOpsDataClient) {
|
|
super(client, CredentialsFeature.messagesTypes);
|
|
}
|
|
|
|
fillClientCapabilities(capabilities: ClientCapabilities): void {
|
|
Utils.ensure(Utils.ensure(capabilities, 'credentials')!, 'credentials')!.dynamicRegistration = true;
|
|
}
|
|
|
|
initialize(capabilities: ServerCapabilities): void {
|
|
this.register(this.messages, {
|
|
id: UUID.generateUuid(),
|
|
registerOptions: undefined
|
|
});
|
|
}
|
|
|
|
protected registerProvider(options: any): Disposable {
|
|
const client = this._client;
|
|
|
|
let readCredential = (credentialId: string): Thenable<sqlops.Credential> => {
|
|
return client.sendRequest(Contracts.ReadCredentialRequest.type, { credentialId });
|
|
};
|
|
|
|
let saveCredential = (credentialId: string, password: string): Thenable<boolean> => {
|
|
return client.sendRequest(Contracts.SaveCredentialRequest.type, { credentialId, password });
|
|
};
|
|
|
|
let deleteCredential = (credentialId: string): Thenable<boolean> => {
|
|
return client.sendRequest(Contracts.DeleteCredentialRequest.type, { credentialId });
|
|
};
|
|
|
|
return sqlops.credentials.registerProvider({
|
|
deleteCredential,
|
|
readCredential,
|
|
saveCredential,
|
|
handle: 0
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Implements a credential storage for Windows, Mac (darwin), or Linux.
|
|
*
|
|
* Allows a single credential to be stored per service (that is, one username per service);
|
|
*/
|
|
export class CredentialStore {
|
|
private _client: SqlOpsDataClient;
|
|
private _config: IConfig;
|
|
|
|
constructor(baseConfig: IConfig) {
|
|
if (baseConfig) {
|
|
this._config = JSON.parse(JSON.stringify(baseConfig));
|
|
this._config.executableFiles = ['MicrosoftSqlToolsCredentials.exe', 'MicrosoftSqlToolsCredentials'];
|
|
}
|
|
}
|
|
|
|
public start() {
|
|
let serverdownloader = new ServerProvider(this._config);
|
|
let clientOptions: ClientOptions = {
|
|
providerId: Constants.providerId,
|
|
features: [CredentialsFeature]
|
|
};
|
|
serverdownloader.getOrDownloadServer().then(e => {
|
|
let serverOptions = this.generateServerOptions(e);
|
|
this._client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
|
|
this._client.start();
|
|
});
|
|
}
|
|
|
|
dispose() {
|
|
if (this._client) {
|
|
this._client.stop();
|
|
}
|
|
}
|
|
|
|
private generateServerOptions(executablePath: string): ServerOptions {
|
|
let launchArgs = [];
|
|
launchArgs.push('--log-dir');
|
|
let logFileLocation = path.join(Utils.getDefaultLogLocation(), 'mssql');
|
|
launchArgs.push(logFileLocation);
|
|
|
|
return { command: executablePath, args: launchArgs, transport: TransportKind.stdio };
|
|
}
|
|
}
|