Skip to content

Commit 8c98fc9

Browse files
committed
Support indirecty ref toggle % in variable #512
1 parent 031c4f5 commit 8c98fc9

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/utils/httpVariableProviders/systemVariableProvider.ts

+23-20
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class SystemVariableProvider implements HttpVariableProvider {
2828
private readonly randomIntegerRegex: RegExp = new RegExp(`\\${Constants.RandomIntVariableName}\\s(\\-?\\d+)\\s(\\-?\\d+)`);
2929
private readonly processEnvRegex: RegExp = new RegExp(`\\${Constants.ProcessEnvVariableName}\\s(\\%)?(\\w+)`);
3030

31-
private readonly dotenvRegex: RegExp = new RegExp(`\\${Constants.DotenvVariableName}\\s([\\w-.]+)`);
31+
private readonly dotenvRegex: RegExp = new RegExp(`\\${Constants.DotenvVariableName}\\s(\\%)?([\\w-.]+)`);
3232

3333
private readonly requestUrlRegex: RegExp = /^(?:[^\s]+\s+)([^:]*:\/\/\/?[^/\s]*\/?)/;
3434

@@ -160,20 +160,6 @@ export class SystemVariableProvider implements HttpVariableProvider {
160160
return { warning: ResolveWarningMessage.IncorrectRandomIntegerVariableFormat };
161161
});
162162
}
163-
164-
private async resolveSettingsEnvironmentVariable (name: string) {
165-
if (await this.innerSettingsEnvironmentVariableProvider.has(name)) {
166-
const { value, error, warning } = await this.innerSettingsEnvironmentVariableProvider.get(name);
167-
if (!error && !warning) {
168-
return value!.toString();
169-
} else {
170-
return name;
171-
}
172-
} else {
173-
return name;
174-
}
175-
}
176-
177163
private registerProcessEnvVariable() {
178164
this.resolveFuncs.set(Constants.ProcessEnvVariableName, async name => {
179165
const groups = this.processEnvRegex.exec(name);
@@ -200,15 +186,19 @@ export class SystemVariableProvider implements HttpVariableProvider {
200186
if (!await fs.pathExists(absolutePath)) {
201187
return { warning: ResolveWarningMessage.DotenvFileNotFound };
202188
}
203-
const parsed = dotenv.parse(fs.readFileSync(absolutePath));
204189
const groups = this.dotenvRegex.exec(name);
205-
if (groups !== null && groups.length === 2) {
206-
const [, key] = groups;
207-
if (!(key in parsed)) {
190+
if (groups !== null && groups.length === 3) {
191+
const parsed = dotenv.parse(await fs.readFile(absolutePath));
192+
const [, refToggle, key] = groups;
193+
let dotEnvVarName = key;
194+
if (refToggle !== undefined) {
195+
dotEnvVarName = await this.resolveSettingsEnvironmentVariable(key);
196+
}
197+
if (!(dotEnvVarName in parsed)) {
208198
return { warning: ResolveWarningMessage.DotenvVariableNotFound };
209199
}
210200

211-
return { value: parsed[key] };
201+
return { value: parsed[dotEnvVarName] };
212202
}
213203

214204
return { warning: ResolveWarningMessage.IncorrectDotenvVariableFormat };
@@ -285,6 +275,19 @@ export class SystemVariableProvider implements HttpVariableProvider {
285275
});
286276
}
287277

278+
private async resolveSettingsEnvironmentVariable(name: string) {
279+
if (await this.innerSettingsEnvironmentVariableProvider.has(name)) {
280+
const { value, error, warning } = await this.innerSettingsEnvironmentVariableProvider.get(name);
281+
if (!error && !warning) {
282+
return value!.toString();
283+
} else {
284+
return name;
285+
}
286+
} else {
287+
return name;
288+
}
289+
}
290+
288291
// #region AAD
289292

290293
private getCloudProvider(endpoint: string): { cloud: string, targetApp: string } {

0 commit comments

Comments
 (0)