Skip to content

Commit 04b6f29

Browse files
authored
fix(Designer): Only resolve app settings if they are used in resource ids (#4354)
* Only resolve app settings if they are used in subscription ids * Only resolving app settings in resource ids
1 parent b4e0212 commit 04b6f29

File tree

4 files changed

+36
-16
lines changed

4 files changed

+36
-16
lines changed

apps/designer-standalone/src/app/AzureLogicAppsDesigner/Utilities/Workflow.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ export class WorkflowUtility {
7676
if (appsettings) {
7777
for (const settingName of Object.keys(appsettings)) {
7878
const settingValue = appsettings[settingName] !== undefined ? appsettings[settingName] : '';
79-
result = replaceAllOccurrences(result, `@appsetting('${settingName}')`, settingValue);
80-
result = replaceAllOccurrences(result, `@{appsetting('${settingName}')}`, settingValue);
79+
result = replaceOccurrenceInResourceIds(result, `@appsetting('${settingName}')`, settingValue);
80+
result = replaceOccurrenceInResourceIds(result, `@{appsetting('${settingName}')}`, settingValue);
8181
}
8282
}
8383

@@ -116,3 +116,21 @@ function replaceIfFoundAndVerifyJson(stringifiedJson: string, searchValue: strin
116116
return undefined;
117117
}
118118
}
119+
120+
function replaceOccurrenceInResourceIds(_inputString: string, settingName: string, settingValue: string): string {
121+
let inputString = _inputString;
122+
const resourceIdRegex = /\/subscriptions\/[^"]+"/g;
123+
const resourceIds = inputString.match(resourceIdRegex);
124+
125+
// If no resource ids are found, return the original string
126+
if (!resourceIds) return inputString;
127+
128+
for (const resourceId of resourceIds) {
129+
if (resourceId.includes(settingName)) {
130+
const replacedString = resourceId.replace(settingName, settingValue);
131+
// Replace the original resource id in the input string with the replaced string
132+
inputString = inputString.replace(resourceId, replacedString);
133+
}
134+
}
135+
return inputString;
136+
}

libs/designer/src/lib/core/actions/bjsworkflow/operationdeserializer.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import {
6666
aggregate,
6767
equals,
6868
getRecordEntry,
69+
parseErrorMessage,
6970
} from '@microsoft/logic-apps-shared';
7071
import type { InputParameter, OutputParameter, LogicAppsV2, OperationManifest } from '@microsoft/logic-apps-shared';
7172
import type { Dispatch } from '@reduxjs/toolkit';
@@ -276,7 +277,8 @@ export const initializeOperationDetailsForManifest = async (
276277
...childGraphInputs,
277278
];
278279
} catch (error: any) {
279-
const message = `Unable to initialize operation details for operation - ${nodeId}. Error details - ${error}`;
280+
const errorMessage = parseErrorMessage(error);
281+
const message = `Unable to initialize operation details for operation - ${nodeId}. Error details - ${errorMessage}`;
280282
LoggerService().log({
281283
level: LogEntryLevel.Error,
282284
area: 'operation deserializer',

libs/designer/src/lib/core/utils/swagger/operation.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import {
4040
isDynamicSchemaExtension,
4141
isTemplateExpression,
4242
map,
43+
parseErrorMessage,
4344
parsePathnameAndQueryKeyFromUri,
4445
removeConnectionPrefix,
4546
startsWith,
@@ -124,12 +125,7 @@ export const initializeOperationDetailsForSwagger = async (
124125

125126
throw new Error('Operation info could not be found for a swagger operation');
126127
} catch (error: any) {
127-
let errorString = '';
128-
try {
129-
errorString = error?.toString() ?? error;
130-
} catch (_: any) {
131-
errorString = 'Could not convert error to string';
132-
}
128+
const errorString = parseErrorMessage(error);
133129
const message = `Unable to initialize operation details for swagger based operation - ${nodeId}. Error details - ${errorString}`;
134130
LoggerService().log({
135131
level: LogEntryLevel.Error,

libs/logic-apps-shared/src/utils/src/lib/helpers/http.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,17 @@ export const HTTP_METHODS = {
88
} as const;
99

1010
export const parseErrorMessage = (error: any, defaultErrorMessage?: string): string => {
11-
let message = error?.message ?? error?.Message ?? error?.error?.message ?? error?.content?.message ?? undefined;
12-
if (message) return message;
11+
try {
12+
let message = error?.message ?? error?.Message ?? error?.error?.message ?? error?.content?.message ?? undefined;
13+
if (message) return message;
1314

14-
// Response text needs to be parsed to get internal error message
15-
if (error?.responseText) {
16-
message = parseErrorMessage(JSON.parse(error.responseText), defaultErrorMessage);
17-
}
15+
// Response text needs to be parsed to get internal error message
16+
if (error?.responseText) {
17+
message = parseErrorMessage(JSON.parse(error.responseText), defaultErrorMessage);
18+
}
1819

19-
return message ?? defaultErrorMessage ?? 'Unknown error';
20+
return message ?? defaultErrorMessage ?? error ?? 'Unknown error';
21+
} catch (e) {
22+
return 'Could not parse error message.';
23+
}
2024
};

0 commit comments

Comments
 (0)