Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions extensions/mssql/src/azure/accountStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,20 @@ import * as vscode from "vscode";
import * as Constants from "../constants/constants";
import * as Loc from "../constants/locConstants";
import { IAccount } from "../models/contracts/azure";
import { Logger } from "../models/logger";
import { ILogger, logger } from "../models/logger";
import { Deferred } from "../protocol";
import { getErrorMessage } from "../utils/utils";
import VscodeWrapper from "../controllers/vscodeWrapper";

export class AccountStore {
public readonly initialized: Deferred<void> = new Deferred<void>();
private readonly _logger: Logger;
private readonly _logger: ILogger;

constructor(
private _context: vscode.ExtensionContext,
private _vscodeWrapper: VscodeWrapper,
) {
this._logger = Logger.create(this._vscodeWrapper.outputChannel, "AccountStore");
this._logger = logger.withPrefix("AccountStore");

void this.initialize().then(() => {
this.initialized.resolve();
Expand Down
20 changes: 9 additions & 11 deletions extensions/mssql/src/azure/azureController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ import { getCloudProviderSettings } from "./providerSettings";
import VscodeWrapper from "../controllers/vscodeWrapper";
import { ConnectionProfile } from "../models/connectionProfile";
import { AzureAuthType, IAADResource, IAccount, ITenant, IToken } from "../models/contracts/azure";
import { Logger } from "../models/logger";
import { ILogger, Logger } from "../models/logger";
import { INameValueChoice, IPrompter, IQuestion, QuestionTypes } from "../prompts/question";
import { AccountStore } from "./accountStore";
import { ICredentialStore } from "../credentialstore/icredentialstore";

export abstract class AzureController {
protected _vscodeWrapper: VscodeWrapper;
protected _credentialStoreInitialized = false;
protected logger: Logger;
protected logger: ILogger;

constructor(
protected context: vscode.ExtensionContext,
Expand All @@ -36,12 +36,10 @@ export abstract class AzureController {
this._vscodeWrapper = new VscodeWrapper();
}

// Setup Logger

let channel = this._vscodeWrapper.createOutputChannel(
this.logger = Logger.forChannelName(
LocalizedConstants.azureLogChannelName,
"AzureController",
);
this.logger = Logger.create(channel);

vscode.workspace.onDidChangeConfiguration((changeEvent) => {
const impactsProvider = changeEvent.affectsConfiguration(
Expand Down Expand Up @@ -88,7 +86,7 @@ export abstract class AzureController {
let config = azureUtils.getAzureActiveDirectoryConfig();
let account = await this.login(config!);
await accountStore.addAccount(account!);
this.logger.verbose("Account added successfully.");
this.logger.debug("Account added successfully.");
return account;
}

Expand All @@ -103,7 +101,7 @@ export abstract class AzureController {
await this._vscodeWrapper.showErrorMessage(LocalizedConstants.msgAccountNotFound);
throw new Error(LocalizedConstants.msgAccountNotFound);
}
this.logger.verbose(
this.logger.debug(
"Account found and SQL Authentication Provider is enabled, access token will not be refreshed by extension.",
);
return profile;
Expand Down Expand Up @@ -162,9 +160,9 @@ export abstract class AzureController {
getCloudProviderSettings(session.account.key.providerId).settings.armResource,
);
session.token = token!;
this.logger.verbose(`Access Token refreshed for account: ${session?.account?.key.id}`);
this.logger.debug(`Access Token refreshed for account: ${session?.account?.key.id}`);
} else {
this.logger.verbose(
this.logger.debug(
`Access Token not refreshed for account: ${session?.account?.key.id}`,
);
}
Expand Down Expand Up @@ -242,7 +240,7 @@ export abstract class AzureController {
}
}

this.logger.log("Initialized vscode-mssql storage.");
this.logger.trace("Initialized vscode-mssql storage.");
return storagePath;
}

Expand Down
4 changes: 2 additions & 2 deletions extensions/mssql/src/azure/fileEncryptionHelper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ import {
DidChangeEncryptionIVKeyParams,
EncryptionKeysChangedNotification,
} from "../models/contracts/connection";
import { Logger } from "../models/logger";
import { ILogger } from "../models/logger";
import SqlToolsServerClient from "../languageservice/serviceclient";
import { azureAccountProviderCredentials } from "./constants";

export class FileEncryptionHelper {
constructor(
private readonly _credentialStore: ICredentialStore,
private readonly _vscodeWrapper: VscodeWrapper,
protected readonly _logger: Logger,
protected readonly _logger: ILogger,
protected readonly _fileName: string,
) {
this._algorithm = "aes-256-cbc";
Expand Down
22 changes: 11 additions & 11 deletions extensions/mssql/src/azure/msal/msalAzureAuth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import {
LoginResult,
} from "../../models/contracts/azure";
import { IDeferred } from "../../models/interfaces";
import { Logger } from "../../models/logger";
import { ILogger } from "../../models/logger";
import { AzureAuthError } from "../azureAuthError";
import * as Constants from "../constants";
import { ErrorResponseBody } from "@azure/arm-subscriptions";
Expand All @@ -53,7 +53,7 @@ export abstract class MsalAzureAuth {
protected clientApplication: PublicClientApplication,
protected readonly authType: AzureAuthType,
protected readonly vscodeWrapper: VscodeWrapper,
protected readonly logger: Logger,
protected readonly logger: ILogger,
) {
this.loginEndpointUrl =
this.providerSettings.loginEndpoint ?? "https://login.microsoftonline.com/";
Expand All @@ -68,7 +68,7 @@ export abstract class MsalAzureAuth {
public async startLogin(): Promise<LoginResult> {
let loginComplete: IDeferred<void, Error> | undefined = undefined;
try {
this.logger.verbose("Starting login");
this.logger.debug("Starting login");
if (!this.providerSettings.settings.windowsManagementResource) {
throw new Error(
LocalizedConstants.azureNoMicrosoftResource(this.providerSettings.displayName),
Expand Down Expand Up @@ -106,13 +106,13 @@ export abstract class MsalAzureAuth {
if (ex instanceof AzureAuthError) {
if (loginComplete) {
loginComplete.reject(ex);
this.logger.error(ex);
this.logger.error(ex.message);
} else {
void vscode.window.showErrorMessage(ex.message);
this.logger.error(ex.originalMessageAndException);
}
} else {
this.logger.error(ex);
this.logger.error(String(ex));
}
return {
success: false,
Expand Down Expand Up @@ -210,7 +210,7 @@ export abstract class MsalAzureAuth {
};
return this.handleInteractionRequired(tenant, settings);
} else if (e.name === "ClientAuthError") {
this.logger.verbose("[ClientAuthError] Failed to silently acquire token");
this.logger.debug("[ClientAuthError] Failed to silently acquire token");
}

this.logger.error(
Expand Down Expand Up @@ -308,7 +308,7 @@ export abstract class MsalAzureAuth {
"tenants?api-version=2019-11-01",
);
try {
this.logger.verbose("Fetching tenants with uri {0}", tenantUri);
this.logger.debug("Fetching tenants with uri {0}", tenantUri);
let tenantList: string[] = [];
const tenantResponse = await this._httpHelper.makeGetRequest<GetTenantsResponseData>(
tenantUri,
Expand Down Expand Up @@ -337,7 +337,7 @@ export abstract class MsalAzureAuth {
tenantCategory: tenantInfo.tenantCategory,
} as ITenant;
});
this.logger.verbose(`Tenants: ${tenantList}`);
this.logger.debug(`Tenants: ${tenantList}`);
const homeTenantIndex = tenants.findIndex(
(tenant) => tenant.tenantCategory === Constants.homeCategory,
);
Expand All @@ -346,7 +346,7 @@ export abstract class MsalAzureAuth {
const homeTenant = tenants.splice(homeTenantIndex, 1);
tenants.unshift(homeTenant[0]);
}
this.logger.verbose(`Filtered Tenants: ${tenantList}`);
this.logger.debug(`Filtered Tenants: ${tenantList}`);
return tenants;
} catch (ex) {
this.logger.error(`Error fetching tenants :${ex}`);
Expand Down Expand Up @@ -442,9 +442,9 @@ export abstract class MsalAzureAuth {
//#region data modeling

public createAccount(tokenClaims: ITokenClaims, key: string, tenants: ITenant[]): IAccount {
this.logger.verbose(`Token Claims acccount: ${tokenClaims.name}, TID: ${tokenClaims.tid}`);
this.logger.debug(`Token Claims acccount: ${tokenClaims.name}, TID: ${tokenClaims.tid}`);
tenants.forEach((tenant) => {
this.logger.verbose(`Tenant ID: ${tenant.id}, Tenant Name: ${tenant.displayName}`);
this.logger.debug(`Tenant ID: ${tenant.id}, Tenant Name: ${tenant.displayName}`);
});

// Determine if this is a microsoft account
Expand Down
4 changes: 2 additions & 2 deletions extensions/mssql/src/azure/msal/msalAzureCodeGrant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
} from "@azure/msal-node";
import { ITenant, AzureAuthType, IProviderSettings } from "../../models/contracts/azure";
import { IDeferred } from "../../models/interfaces";
import { Logger } from "../../models/logger";
import { ILogger } from "../../models/logger";
import { MsalAzureAuth } from "./msalAzureAuth";
import { SimpleWebServer } from "../simpleWebServer";
import { AzureAuthError } from "../azureAuthError";
Expand All @@ -40,7 +40,7 @@ export class MsalAzureCodeGrant extends MsalAzureAuth {
protected readonly context: vscode.ExtensionContext,
protected clientApplication: PublicClientApplication,
protected readonly vscodeWrapper: VscodeWrapper,
protected readonly logger: Logger,
protected readonly logger: ILogger,
) {
super(
providerSettings,
Expand Down
14 changes: 7 additions & 7 deletions extensions/mssql/src/azure/msal/msalAzureController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { IPrompter } from "../../prompts/question";
import { ICredentialStore } from "../../credentialstore/icredentialstore";
import * as azureUtils from "../utils";
import VscodeWrapper from "../../controllers/vscodeWrapper";
import { Logger } from "../../models/logger";
import { ILogger } from "../../models/logger";
import { sendActionEvent } from "../../telemetry/telemetry";
import { TelemetryActions, TelemetryViews } from "../../sharedInterfaces/telemetry";

Expand All @@ -53,11 +53,11 @@ export class MsalAzureController extends AzureController {
break;
case MsalLogLevel.Verbose:
default:
this.logger.verbose(message);
this.logger.debug(message);
break;
}
} else {
this.logger.pii(message);
this.logger.piiSanitized(message, [], []);
}
};
}
Expand Down Expand Up @@ -142,10 +142,10 @@ export class MsalAzureController extends AzureController {
try {
await fsPromises.access(filePath);
await fsPromises.rm(filePath);
this.logger.verbose(`Old cache file removed successfully.`);
this.logger.debug(`Old cache file removed successfully.`);
} catch (e) {
if (e.code !== "ENOENT") {
this.logger.verbose(`Error occurred while removing old cache file: ${e}`);
this.logger.debug(`Error occurred while removing old cache file: ${e}`);
} // else file doesn't exist.
}
}
Expand Down Expand Up @@ -328,7 +328,7 @@ export class MsalAzureController extends AzureController {
profile.user = account!.displayInfo.displayName;
profile.email = account!.displayInfo.email;
profile.accountId = account!.key.id;
this.logger.verbose(
this.logger.debug(
"SQL Authentication Provider is enabled, access token will not be acquired by extension.",
);
return profile;
Expand Down Expand Up @@ -404,7 +404,7 @@ export class CloudAuthApplication {
private loggerCallback: ILoggerCallback,
private readonly context: vscode.ExtensionContext,
private readonly vscodeWrapper: VscodeWrapper,
private readonly logger: Logger,
private readonly logger: ILogger,
) {
this._authMappings = new Map<AzureAuthType, MsalAzureAuth>();
this.createClientApplication();
Expand Down
16 changes: 9 additions & 7 deletions extensions/mssql/src/azure/msal/msalAzureDeviceCode.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import * as LocalizedConstants from "../../constants/locConstants";
import VscodeWrapper from "../../controllers/vscodeWrapper";
import { AzureAuthType, IProviderSettings, ITenant } from "../../models/contracts/azure";
import { IDeferred } from "../../models/interfaces";
import { Logger } from "../../models/logger";
import { ILogger } from "../../models/logger";
import { MsalAzureAuth } from "./msalAzureAuth";

export class MsalAzureDeviceCode extends MsalAzureAuth {
Expand All @@ -18,7 +18,7 @@ export class MsalAzureDeviceCode extends MsalAzureAuth {
protected readonly context: vscode.ExtensionContext,
protected clientApplication: PublicClientApplication,
protected readonly vscodeWrapper: VscodeWrapper,
protected readonly logger: Logger,
protected readonly logger: ILogger,
) {
super(
providerSettings,
Expand Down Expand Up @@ -60,10 +60,14 @@ export class MsalAzureDeviceCode extends MsalAzureAuth {
};

const authResult = await this.clientApplication.acquireTokenByDeviceCode(deviceCodeRequest);
this.logger.pii(
this.logger.piiSanitized(
`Authentication completed for account: ${authResult?.account!.name}, tenant: ${authResult?.tenantId}`,
[],
[],
);
this.closeOnceComplete(authCompletePromise).catch((error) =>
this.logger.error("Error waiting for device code auth completion", error),
);
this.closeOnceComplete(authCompletePromise).catch(this.logger.error);

Comment thread
aasimkhan30 marked this conversation as resolved.
return {
response: authResult!,
Expand All @@ -88,9 +92,7 @@ export class MsalAzureDeviceCode extends MsalAzureAuth {
if (selection === LocalizedConstants.msgCopyAndOpenWebpage) {
this.vscodeWrapper.clipboardWriteText(userCode);
await vscode.env.openExternal(vscode.Uri.parse(verificationUrl));
console.log(msg);
console.log(userCode);
console.log(verificationUrl);
this.logger.debug("Opened device code verification URL.");
}
Comment thread
aasimkhan30 marked this conversation as resolved.
return;
}
Expand Down
20 changes: 9 additions & 11 deletions extensions/mssql/src/azure/msal/msalCachePlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ import * as lockFile from "lockfile";
import * as path from "path";
import VscodeWrapper from "../../controllers/vscodeWrapper";
import { ICredentialStore } from "../../credentialstore/icredentialstore";
import { Logger } from "../../models/logger";
import { ILogger } from "../../models/logger";
import { FileEncryptionHelper } from "../fileEncryptionHelper";

export class MsalCachePluginProvider {
constructor(
private readonly _serviceName: string,
private readonly _msalFilePath: string,
private readonly _vscodeWrapper: VscodeWrapper,
private readonly _logger: Logger,
private readonly _logger: ILogger,
private readonly _credentialStore: ICredentialStore,
) {
this._msalFilePath = path.join(this._msalFilePath, this._serviceName);
Expand All @@ -29,7 +29,7 @@ export class MsalCachePluginProvider {
this._logger,
this._serviceName,
);
this._logger.verbose(
this._logger.debug(
`MsalCachePluginProvider: Using cache path ${_msalFilePath} and serviceName ${_serviceName}`,
);
}
Expand Down Expand Up @@ -66,18 +66,16 @@ export class MsalCachePluginProvider {
} catch (e) {
// Handle deserialization error in cache file in case file gets corrupted.
// Clearing cache here will ensure account is marked stale so re-authentication can be triggered.
this._logger.verbose(
this._logger.warn(
`MsalCachePlugin: Error occurred when trying to read cache file, file contents will be cleared: ${e.message}`,
);
await fsPromises.unlink(this._msalFilePath);
}
this._logger.verbose(`MsalCachePlugin: Token read from cache successfully.`);
this._logger.debug(`MsalCachePlugin: Token read from cache successfully.`);
} catch (e) {
if (e.code === "ENOENT") {
// File doesn't exist, log and continue
this._logger.verbose(
`MsalCachePlugin: Cache file not found on disk: ${e.code}`,
);
this._logger.debug(`MsalCachePlugin: Cache file not found on disk: ${e.code}`);
} else {
this._logger.error(
`MsalCachePlugin: Failed to read from cache file, file contents will be cleared : ${e}`,
Expand All @@ -99,7 +97,7 @@ export class MsalCachePluginProvider {
await fsPromises.writeFile(this._msalFilePath, encryptedCache, {
encoding: "utf8",
});
this._logger.verbose(`MsalCachePlugin: Token written to cache successfully.`);
this._logger.debug(`MsalCachePlugin: Token written to cache successfully.`);
} catch (e) {
this._logger.error(`MsalCachePlugin: Failed to write to cache file. ${e}`);
throw e;
Expand Down Expand Up @@ -130,7 +128,7 @@ export class MsalCachePluginProvider {
// so we check if the lockfile exists and if it does, calling unlockSync() will clear it.
if (lockFile.checkSync(lockFilePath) && !this._lockTaken) {
lockFile.unlockSync(lockFilePath);
this._logger.verbose(`MsalCachePlugin: Stale lockfile found and has been removed.`);
this._logger.debug(`MsalCachePlugin: Stale lockfile found and has been removed.`);
}

let retryAttempt = 0;
Expand All @@ -151,7 +149,7 @@ export class MsalCachePluginProvider {
);
}
retryAttempt++;
this._logger.verbose(
this._logger.trace(
`MsalCachePlugin: Failed to acquire lock on cache file. Retrying in ${retryWait} ms.`,
);

Expand Down
Loading
Loading