Skip to content

Commit d8cbbd9

Browse files
Da 329 remove password visibility inside terminal
Hide password in environment variables
1 parent d7cb7c8 commit d8cbbd9

5 files changed

Lines changed: 34 additions & 19 deletions

File tree

src/commands/tools/dataImport.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,7 @@ export class DataImport {
774774
return "";
775775
}
776776

777-
public dataImport = async () => {
777+
public dataImport = async (context: vscode.ExtensionContext) => {
778778
const connection = getActiveConnection();
779779
if (!connection) {
780780
return;
@@ -879,7 +879,7 @@ export class DataImport {
879879
keysAndAdvancedSettingsData.ignoreFields,
880880
threads: keysAndAdvancedSettingsData.threads,
881881
verbose: keysAndAdvancedSettingsData.verboseLog,
882-
});
882+
}, context);
883883

884884
break;
885885
}

src/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ export function activate(context: vscode.ExtensionContext) {
452452
vscode.commands.registerCommand(
453453
Commands.dataExport,
454454
async () => {
455-
await dataExport();
455+
await dataExport(context);
456456
}
457457
)
458458
);
@@ -461,7 +461,7 @@ export function activate(context: vscode.ExtensionContext) {
461461
vscode.commands.registerCommand(
462462
Commands.dataImport,
463463
async () => {
464-
await new DataImport().dataImport();
464+
await new DataImport().dataImport(context);
465465
}
466466
)
467467
);

src/pages/Tools/DataExport/dataExport.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ export interface IDataExportWebviewState {
7070
webviewPanel: vscode.WebviewPanel;
7171
}
7272

73-
export const dataExport = async () => {
73+
export const dataExport = async (context: vscode.ExtensionContext) => {
7474
const connection = getActiveConnection();
7575
if (!connection) {
7676
return;
@@ -146,7 +146,8 @@ export const dataExport = async () => {
146146
formData.collectionFieldName,
147147
formData.format,
148148
formData.threads,
149-
formData.verboseLog
149+
formData.verboseLog,
150+
context
150151
);
151152
} else {
152153
currentPanel.webview.postMessage({

src/tools/CBExport.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ export class CBExport {
1717
colName: string,
1818
format: string,
1919
threads: string,
20-
verbose: boolean
20+
verbose: boolean,
21+
context: vscode.ExtensionContext
2122
): Promise<void> {
2223

2324
const connection = getActiveConnection();
@@ -66,8 +67,8 @@ export class CBExport {
6667
cmd.push(connection.url);
6768
cmd.push("-u");
6869
cmd.push(connection.username);
69-
cmd.push("-p");
70-
cmd.push('"' + password + '"');
70+
// cmd.push("-p");
71+
// cmd.push('"' + password + '"');
7172
cmd.push("-b");
7273
cmd.push(bucket);
7374

@@ -93,11 +94,19 @@ export class CBExport {
9394
cmd.push("-v");
9495
}
9596

97+
cmd.push("; \n");
98+
cmd.push("export CB_PASSWORD=''"); // To make sure that password is truly unset
99+
96100
// Run Command
97-
const terminal = vscode.window.createTerminal("CBExport");
101+
const terminal: vscode.Terminal = vscode.window.createTerminal("CBExport");
102+
// sending password to vscode environment variables. Note: Password is still accessible via terminal, till its removed
103+
context.environmentVariableCollection.replace('CB_PASSWORD', password);
98104
let text = cmd.join(" ");
99105
terminal.sendText(text);
100106
terminal.show();
107+
// removing password from vscode environment variables after 5 seconds
108+
await new Promise((resolve)=>setTimeout(resolve, 5000));
109+
context.environmentVariableCollection.replace('CB_PASSWORD', '');
101110
} catch (error) {
102111
console.error("An error occurred while trying to export the dataset");
103112
console.error(error);

src/tools/CBImport.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export interface ICBImportData {
2222

2323
export class CBImport {
2424

25-
static async import(importData: ICBImportData): Promise<void> {
25+
static async import(importData: ICBImportData, context: vscode.ExtensionContext): Promise<void> {
2626
const connection = getActiveConnection();
2727
if(!connection){
2828
return;
@@ -44,12 +44,23 @@ export class CBImport {
4444

4545
// CMD Runner
4646
try {
47+
const password = await keytar.getPassword(Constants.extensionID, getConnectionId(connection));
48+
if (!password) {
49+
logger.error("password not found");
50+
return ;
51+
}
4752
const terminal = vscode.window.createTerminal("CBImport");
53+
// sending password to vscode environment variables. Note: Password is still accessible via terminal, till its removed
54+
context.environmentVariableCollection.replace('CB_PASSWORD', password);
4855
let text = cmd.join(" ");
4956
logger.info("CB Import Command to run: "+ text);
5057

5158
terminal.sendText(text);
5259
terminal.show();
60+
61+
// removing password from vscode environment variables after 5 seconds
62+
await new Promise((resolve)=>setTimeout(resolve, 5000));
63+
context.environmentVariableCollection.replace('CB_PASSWORD', '');
5364

5465
} catch(err) {
5566
logger.error("Error while running command for CB Import");
@@ -60,11 +71,6 @@ export class CBImport {
6071

6172
static async cmdBuilder(importData: ICBImportData, connection: IConnection): Promise<string[] | Error> {
6273

63-
const password = await keytar.getPassword(Constants.extensionID, getConnectionId(connection));
64-
if (!password) {
65-
return new Error("Password not found");
66-
}
67-
6874
const cmd: string[] = [];
6975
cmd.push(CBTools.getTool(Type.CB_IMPORT).path);
7076
cmd.push(importData.fileFormat);
@@ -75,8 +81,6 @@ export class CBImport {
7581
cmd.push(connection.url);
7682
cmd.push("-u");
7783
cmd.push(connection.username);
78-
cmd.push("-p");
79-
cmd.push('"' + password + '"');
8084
cmd.push("-b");
8185
cmd.push(importData.bucket);
8286

@@ -135,7 +139,8 @@ export class CBImport {
135139
if (importData.verbose) {
136140
cmd.push("-v");
137141
}
138-
142+
cmd.push("; \n");
143+
cmd.push("export CB_PASSWORD=''"); // To make sure that password is truly unset
139144
return cmd;
140145

141146
}

0 commit comments

Comments
 (0)