Skip to content

Commit f3aa6b4

Browse files
Sanitize JSON output before parsing in ClientAppValidator (#147)
1 parent 4c5eb33 commit f3aa6b4

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/Microsoft.Agents.A365.DevTools.Cli/Services/ClientAppValidator.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.Agents.A365.DevTools.Cli.Constants;
55
using Microsoft.Agents.A365.DevTools.Cli.Exceptions;
66
using Microsoft.Agents.A365.DevTools.Cli.Helpers;
7+
using Microsoft.Agents.A365.DevTools.Cli.Services.Helpers;
78
using Microsoft.Extensions.Logging;
89
using System.Text.Json;
910
using System.Text.Json.Nodes;
@@ -168,7 +169,8 @@ public async Task EnsureRedirectUrisAsync(
168169
return;
169170
}
170171

171-
var response = JsonNode.Parse(appCheckResult.StandardOutput);
172+
var sanitizedOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(appCheckResult.StandardOutput);
173+
var response = JsonNode.Parse(sanitizedOutput);
172174
var apps = response?["value"]?.AsArray();
173175

174176
if (apps == null || apps.Count == 0)
@@ -307,7 +309,8 @@ public async Task EnsureRedirectUrisAsync(
307309
}
308310
}
309311

310-
var appResponse = JsonNode.Parse(appCheckResult.StandardOutput);
312+
var sanitizedOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(appCheckResult.StandardOutput);
313+
var appResponse = JsonNode.Parse(sanitizedOutput);
311314
var apps = appResponse?["value"]?.AsArray();
312315

313316
if (apps == null || apps.Count == 0)
@@ -409,7 +412,8 @@ private async Task<Dictionary<string, string>> ResolvePermissionIdsAsync(string
409412
return permissionNameToIdMap;
410413
}
411414

412-
var graphSpResponse = JsonNode.Parse(graphSpResult.StandardOutput);
415+
var sanitizedOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(graphSpResult.StandardOutput);
416+
var graphSpResponse = JsonNode.Parse(sanitizedOutput);
413417
var graphSps = graphSpResponse?["value"]?.AsArray();
414418

415419
if (graphSps == null || graphSps.Count == 0)
@@ -470,7 +474,8 @@ private async Task<HashSet<string>> GetConsentedPermissionsAsync(string clientAp
470474
return consentedPermissions;
471475
}
472476

473-
var spResponse = JsonNode.Parse(spCheckResult.StandardOutput);
477+
var sanitizedOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(spCheckResult.StandardOutput);
478+
var spResponse = JsonNode.Parse(sanitizedOutput);
474479
var servicePrincipals = spResponse?["value"]?.AsArray();
475480

476481
if (servicePrincipals == null || servicePrincipals.Count == 0)
@@ -499,7 +504,8 @@ private async Task<HashSet<string>> GetConsentedPermissionsAsync(string clientAp
499504
return consentedPermissions;
500505
}
501506

502-
var grantsResponse = JsonNode.Parse(grantsResult.StandardOutput);
507+
var sanitizedGrantsOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(grantsResult.StandardOutput);
508+
var grantsResponse = JsonNode.Parse(sanitizedGrantsOutput);
503509
var grants = grantsResponse?["value"]?.AsArray();
504510

505511
if (grants == null || grants.Count == 0)
@@ -549,7 +555,8 @@ private async Task<bool> ValidateAdminConsentAsync(string clientAppId, string gr
549555
return true; // Best-effort check - will be verified during first interactive authentication
550556
}
551557

552-
var spResponse = JsonNode.Parse(spCheckResult.StandardOutput);
558+
var sanitizedOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(spCheckResult.StandardOutput);
559+
var spResponse = JsonNode.Parse(sanitizedOutput);
553560
var servicePrincipals = spResponse?["value"]?.AsArray();
554561

555562
if (servicePrincipals == null || servicePrincipals.Count == 0)
@@ -579,7 +586,8 @@ private async Task<bool> ValidateAdminConsentAsync(string clientAppId, string gr
579586
return true; // Best-effort check
580587
}
581588

582-
var grantsResponse = JsonNode.Parse(grantsCheckResult.StandardOutput);
589+
var sanitizedGrantsOutput = JsonDeserializationHelper.CleanAzureCliJsonOutput(grantsCheckResult.StandardOutput);
590+
var grantsResponse = JsonNode.Parse(sanitizedGrantsOutput);
583591
var grants = grantsResponse?["value"]?.AsArray();
584592

585593
if (grants == null || grants.Count == 0)

0 commit comments

Comments
 (0)