Skip to content

Commit f999e5c

Browse files
Krystal Culpkmjjc
authored andcommitted
remove query string from base proxy uri and fix bug parsing query params
1 parent 15c9d1c commit f999e5c

3 files changed

Lines changed: 22 additions & 5 deletions

File tree

src/VirtualClient/VirtualClient.Core/DependencyFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,14 @@ public static VirtualClientProxyApiClient CreateVirtualClientProxyApiClient(Uri
682682
{
683683
proxyApiUri.ThrowIfNull(nameof(proxyApiUri));
684684

685+
if (proxyApiUri.Query != null)
686+
{
687+
// e.g.
688+
// https://any.service.azure.com/?miid=307591a4-abb2-4559-af59-b47177d140cf -> https://any.service.azure.com/
689+
690+
proxyApiUri = new Uri(proxyApiUri.OriginalString.Substring(0, proxyApiUri.OriginalString.IndexOf("?")));
691+
}
692+
685693
IRestClientBuilder builder = new RestClientBuilder(timeout)
686694
.AlwaysTrustServerCertificate()
687695
.AddAcceptedMediaType(MediaType.Json);

src/VirtualClient/VirtualClient.Core/EndpointUtility.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -388,10 +388,12 @@ public static bool IsPackageUri(Uri endpointUri, string storeName)
388388
/// <returns>True/False if the method was able to successfully parse both the subject name and the issuer of the certificate.</returns>
389389
public static bool TryParseCertificateReference(Uri uri, out string issuer, out string subject)
390390
{
391-
IDictionary<string, string> queryParameters = TextParsingExtensions.ParseDelimitedValues(uri.Query)?.ToDictionary(
392-
entry => entry.Key,
393-
entry => entry.Value?.ToString(),
394-
StringComparer.OrdinalIgnoreCase);
391+
string queryString = Uri.UnescapeDataString(uri.Query).Trim('?').Replace("&", ",,,");
392+
393+
IDictionary<string, string> queryParameters = TextParsingExtensions.ParseDelimitedValues(queryString)?.ToDictionary(
394+
entry => entry.Key,
395+
entry => entry.Value?.ToString(),
396+
StringComparer.OrdinalIgnoreCase);
395397

396398
return TryGetCertificateReferenceForUri(queryParameters, out issuer, out subject);
397399
}

src/VirtualClient/VirtualClient.Main/CommandBase.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
namespace VirtualClient
55
{
6+
67
using System;
78
using System.Collections.Generic;
89
using System.Data;
@@ -564,7 +565,7 @@ protected virtual IServiceCollection InitializeDependencies(string[] args)
564565
IApiManager apiManager = new ApiManager(systemManagement.FirewallManager);
565566
IProfileManager profileManager = new ProfileManager();
566567
ISshClientFactory sshClientFactory = new SshClientFactory();
567-
List <IBlobManager> blobStores = new List<IBlobManager>();
568+
List<IBlobManager> blobStores = new List<IBlobManager>();
568569

569570
IKeyVaultManager keyVaultManager = new KeyVaultManager();
570571

@@ -623,6 +624,12 @@ protected virtual IServiceCollection InitializeDependencies(string[] args)
623624

624625
CommandBase.proxyApiDebugLoggers.Add(debugLogger);
625626

627+
X509Certificate2 certificate = null;
628+
if (EndpointUtility.TryParseCertificateReference(this.ProxyApiUri, out string issuer, out string subject))
629+
{
630+
certificate = this.CertificateManager.GetCertificateFromStoreAsync(issuer, subject).GetAwaiter().GetResult();
631+
}
632+
626633
blobStores.Add(DependencyFactory.CreateProxyBlobManager(new DependencyProxyStore(DependencyBlobStore.Packages, blobStore.EndpointUri), packageSource?.ToString(), debugLogger));
627634

628635
// Enabling ApiClientManager to save Proxy API will allow downstream to access proxy endpoints as required.

0 commit comments

Comments
 (0)