From 901cd12bd4606fce954fb7cbdda279ca74fddb7d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 14 Nov 2025 13:36:38 +0000
Subject: [PATCH 01/11] Initial plan
From 809a61b5f54aea8c864188c036beaa2c373834f5 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 14 Nov 2025 13:40:38 +0000
Subject: [PATCH 02/11] Add CertificateStoreLocation selection for
Frends.HTTP.Request module
Co-authored-by: jefim <1387820+jefim@users.noreply.github.com>
---
.../Definitions/CertificateStoreLocation.cs | 16 ++++++++++++++++
.../Frends.HTTP.Request/Definitions/Options.cs | 9 +++++++++
.../Frends.HTTP.Request/Extensions.cs | 15 +++++++++++----
3 files changed, 36 insertions(+), 4 deletions(-)
create mode 100644 Frends.HTTP.Request/Frends.HTTP.Request/Definitions/CertificateStoreLocation.cs
diff --git a/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/CertificateStoreLocation.cs b/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/CertificateStoreLocation.cs
new file mode 100644
index 0000000..7cbf8cb
--- /dev/null
+++ b/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/CertificateStoreLocation.cs
@@ -0,0 +1,16 @@
+namespace Frends.HTTP.Request.Definitions;
+
+///
+/// Certificate store location.
+///
+public enum CertificateStoreLocation
+{
+ ///
+ /// The X.509 certificate store assigned to the current user.
+ ///
+ CurrentUser,
+ ///
+ /// The X.509 certificate store assigned to the local machine.
+ ///
+ LocalMachine
+}
diff --git a/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/Options.cs b/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/Options.cs
index 27d1ccd..73f27d4 100644
--- a/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/Options.cs
+++ b/Frends.HTTP.Request/Frends.HTTP.Request/Definitions/Options.cs
@@ -80,6 +80,15 @@ public class Options
[UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
public string CertificateThumbprint { get; set; }
+ ///
+ /// Applicable only when Certificate Source is "CertificateStore".
+ /// Store location for the certificate.
+ ///
+ /// CurrentUser
+ [UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
+ [DefaultValue(CertificateStoreLocation.CurrentUser)]
+ public CertificateStoreLocation CertificateStoreLocation { get; set; }
+
///
/// Should the entire certificate chain be loaded from the certificate store and included in the request. Only valid when using Certificate Store as the Certificate Source
///
diff --git a/Frends.HTTP.Request/Frends.HTTP.Request/Extensions.cs b/Frends.HTTP.Request/Frends.HTTP.Request/Extensions.cs
index 5c41542..ba4efdf 100644
--- a/Frends.HTTP.Request/Frends.HTTP.Request/Extensions.cs
+++ b/Frends.HTTP.Request/Frends.HTTP.Request/Extensions.cs
@@ -61,7 +61,7 @@ private static X509Certificate[] GetCertificates(Options options)
{
case CertificateSource.CertificateStore:
var thumbprint = options.CertificateThumbprint;
- certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate);
+ certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate, options.CertificateStoreLocation);
break;
case CertificateSource.File:
certificates = GetCertificatesFromFile(options.ClientCertificateFilePath, options.ClientCertificateKeyPhrase);
@@ -105,17 +105,24 @@ private static X509Certificate2[] GetCertificatesFromFile(string clientCertifica
}
private static X509Certificate2[] GetCertificatesFromStore(string thumbprint,
- bool loadEntireChain)
+ bool loadEntireChain, CertificateStoreLocation storeLocation)
{
thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
- using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
+ var location = storeLocation == CertificateStoreLocation.CurrentUser
+ ? StoreLocation.CurrentUser
+ : StoreLocation.LocalMachine;
+ var locationText = storeLocation == CertificateStoreLocation.CurrentUser
+ ? "current user"
+ : "local machine";
+
+ using (var store = new X509Store(StoreName.My, location))
{
store.Open(OpenFlags.ReadOnly);
var signingCert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
if (signingCert.Count == 0)
{
throw new FileNotFoundException(
- $"Certificate with thumbprint: '{thumbprint}' not found in current user cert store.");
+ $"Certificate with thumbprint: '{thumbprint}' not found in {locationText} cert store.");
}
var certificate = signingCert[0];
From 5b3990967d4232044d568a3646ab415d97c38584 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 14 Nov 2025 13:44:27 +0000
Subject: [PATCH 03/11] Add CertificateStoreLocation selection to all HTTP
modules
Co-authored-by: jefim <1387820+jefim@users.noreply.github.com>
---
.../Definitions/CertificateStoreLocation.cs | 16 ++++++++++++++++
.../Definitions/Options.cs | 9 +++++++++
.../Frends.HTTP.DownloadFile/Extensions.cs | 15 +++++++++++----
.../Definitions/CertificateStoreLocation.cs | 16 ++++++++++++++++
.../Definitions/Options.cs | 9 +++++++++
.../Frends.HTTP.RequestBytes/Extensions.cs | 15 +++++++++++----
.../Definitions/CertificateStoreLocation.cs | 16 ++++++++++++++++
.../Definitions/Options.cs | 9 +++++++++
.../Extensions.cs | 15 +++++++++++----
.../Definitions/CertificateStoreLocation.cs | 16 ++++++++++++++++
.../Frends.HTTP.SendBytes/Definitions/Options.cs | 9 +++++++++
.../Frends.HTTP.SendBytes/Extensions.cs | 15 +++++++++++----
12 files changed, 144 insertions(+), 16 deletions(-)
create mode 100644 Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/CertificateStoreLocation.cs
create mode 100644 Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/CertificateStoreLocation.cs
create mode 100644 Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/CertificateStoreLocation.cs
create mode 100644 Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/CertificateStoreLocation.cs
diff --git a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/CertificateStoreLocation.cs b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/CertificateStoreLocation.cs
new file mode 100644
index 0000000..83cfeb7
--- /dev/null
+++ b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/CertificateStoreLocation.cs
@@ -0,0 +1,16 @@
+namespace Frends.HTTP.DownloadFile.Definitions;
+
+///
+/// Certificate store location.
+///
+public enum CertificateStoreLocation
+{
+ ///
+ /// The X.509 certificate store assigned to the current user.
+ ///
+ CurrentUser,
+ ///
+ /// The X.509 certificate store assigned to the local machine.
+ ///
+ LocalMachine
+}
diff --git a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/Options.cs b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/Options.cs
index d2d70a0..9bb7b41 100644
--- a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/Options.cs
+++ b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Definitions/Options.cs
@@ -81,6 +81,15 @@ public class Options
[UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
public string CertificateThumbprint { get; set; }
+ ///
+ /// Applicable only when Certificate Source is "CertificateStore".
+ /// Store location for the certificate.
+ ///
+ /// CurrentUser
+ [UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
+ [DefaultValue(CertificateStoreLocation.CurrentUser)]
+ public CertificateStoreLocation CertificateStoreLocation { get; set; }
+
///
/// Should the entire certificate chain be loaded from the certificate store and included in the request. Only valid when using Certificate Store as the Certificate Source
///
diff --git a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Extensions.cs b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Extensions.cs
index 3ab6b87..0182151 100644
--- a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Extensions.cs
+++ b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Extensions.cs
@@ -54,7 +54,7 @@ private static X509Certificate[] GetCertificates(Options options)
{
case CertificateSource.CertificateStore:
var thumbprint = options.CertificateThumbprint;
- certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate);
+ certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate, options.CertificateStoreLocation);
break;
case CertificateSource.File:
certificates = GetCertificatesFromFile(options.ClientCertificateFilePath, options.ClientCertificateKeyPhrase);
@@ -94,14 +94,21 @@ private static X509Certificate2[] GetCertificatesFromFile(string clientCertifica
}
private static X509Certificate2[] GetCertificatesFromStore(string thumbprint,
- bool loadEntireChain)
+ bool loadEntireChain, CertificateStoreLocation storeLocation)
{
thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
- using var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
+ var location = storeLocation == CertificateStoreLocation.CurrentUser
+ ? StoreLocation.CurrentUser
+ : StoreLocation.LocalMachine;
+ var locationText = storeLocation == CertificateStoreLocation.CurrentUser
+ ? "current user"
+ : "local machine";
+
+ using var store = new X509Store(StoreName.My, location);
store.Open(OpenFlags.ReadOnly);
var signingCert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
if (signingCert.Count == 0)
- throw new FileNotFoundException($"Certificate with thumbprint: '{thumbprint}' not found in current user cert store.");
+ throw new FileNotFoundException($"Certificate with thumbprint: '{thumbprint}' not found in {locationText} cert store.");
var certificate = signingCert[0];
diff --git a/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/CertificateStoreLocation.cs b/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/CertificateStoreLocation.cs
new file mode 100644
index 0000000..cdeadc7
--- /dev/null
+++ b/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/CertificateStoreLocation.cs
@@ -0,0 +1,16 @@
+namespace Frends.HTTP.RequestBytes.Definitions;
+
+///
+/// Certificate store location.
+///
+public enum CertificateStoreLocation
+{
+ ///
+ /// The X.509 certificate store assigned to the current user.
+ ///
+ CurrentUser,
+ ///
+ /// The X.509 certificate store assigned to the local machine.
+ ///
+ LocalMachine
+}
diff --git a/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/Options.cs b/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/Options.cs
index c1df7ed..eb3953f 100644
--- a/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/Options.cs
+++ b/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Definitions/Options.cs
@@ -80,6 +80,15 @@ public class Options
[UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
public string CertificateThumbprint { get; set; }
+ ///
+ /// Applicable only when Certificate Source is "CertificateStore".
+ /// Store location for the certificate.
+ ///
+ /// CurrentUser
+ [UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
+ [DefaultValue(CertificateStoreLocation.CurrentUser)]
+ public CertificateStoreLocation CertificateStoreLocation { get; set; }
+
///
/// Should the entire certificate chain be loaded from the certificate store and included in the request. Only valid when using Certificate Store as the Certificate Source
///
diff --git a/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Extensions.cs b/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Extensions.cs
index d73fc0b..48b4807 100644
--- a/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Extensions.cs
+++ b/Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes/Extensions.cs
@@ -61,7 +61,7 @@ private static X509Certificate[] GetCertificates(Options options)
{
case CertificateSource.CertificateStore:
var thumbprint = options.CertificateThumbprint;
- certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate);
+ certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate, options.CertificateStoreLocation);
break;
case CertificateSource.File:
certificates = GetCertificatesFromFile(options.ClientCertificateFilePath, options.ClientCertificateKeyPhrase);
@@ -105,17 +105,24 @@ private static X509Certificate2[] GetCertificatesFromFile(string clientCertifica
}
private static X509Certificate2[] GetCertificatesFromStore(string thumbprint,
- bool loadEntireChain)
+ bool loadEntireChain, CertificateStoreLocation storeLocation)
{
thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
- using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
+ var location = storeLocation == CertificateStoreLocation.CurrentUser
+ ? StoreLocation.CurrentUser
+ : StoreLocation.LocalMachine;
+ var locationText = storeLocation == CertificateStoreLocation.CurrentUser
+ ? "current user"
+ : "local machine";
+
+ using (var store = new X509Store(StoreName.My, location))
{
store.Open(OpenFlags.ReadOnly);
var signingCert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
if (signingCert.Count == 0)
{
throw new FileNotFoundException(
- $"Certificate with thumbprint: '{thumbprint}' not found in current user cert store.");
+ $"Certificate with thumbprint: '{thumbprint}' not found in {locationText} cert store.");
}
var certificate = signingCert[0];
diff --git a/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/CertificateStoreLocation.cs b/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/CertificateStoreLocation.cs
new file mode 100644
index 0000000..e225084
--- /dev/null
+++ b/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/CertificateStoreLocation.cs
@@ -0,0 +1,16 @@
+namespace Frends.HTTP.SendAndReceiveBytes.Definitions;
+
+///
+/// Certificate store location.
+///
+public enum CertificateStoreLocation
+{
+ ///
+ /// The X.509 certificate store assigned to the current user.
+ ///
+ CurrentUser,
+ ///
+ /// The X.509 certificate store assigned to the local machine.
+ ///
+ LocalMachine
+}
diff --git a/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/Options.cs b/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/Options.cs
index 0a3e108..22e4c4b 100644
--- a/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/Options.cs
+++ b/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Definitions/Options.cs
@@ -83,6 +83,15 @@ public class Options
[UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
public string CertificateThumbprint { get; set; }
+ ///
+ /// Applicable only when Certificate Source is "CertificateStore".
+ /// Store location for the certificate.
+ ///
+ /// CurrentUser
+ [UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
+ [DefaultValue(CertificateStoreLocation.CurrentUser)]
+ public CertificateStoreLocation CertificateStoreLocation { get; set; }
+
///
/// Should the entire certificate chain be loaded from the certificate store and included in the request. Only valid when using Certificate Store as the Certificate Source
///
diff --git a/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Extensions.cs b/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Extensions.cs
index 308f16d..8340723 100644
--- a/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Extensions.cs
+++ b/Frends.HTTP.SendAndReceiveBytes/Frends.HTTP.SendAndReceiveBytes/Extensions.cs
@@ -59,7 +59,7 @@ private static X509Certificate[] GetCertificates(Options options)
{
case CertificateSource.CertificateStore:
var thumbprint = options.CertificateThumbprint;
- certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate);
+ certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate, options.CertificateStoreLocation);
break;
case CertificateSource.File:
certificates = GetCertificatesFromFile(options.ClientCertificateFilePath, options.ClientCertificateKeyPhrase);
@@ -103,17 +103,24 @@ private static X509Certificate2[] GetCertificatesFromFile(string clientCertifica
}
private static X509Certificate2[] GetCertificatesFromStore(string thumbprint,
- bool loadEntireChain)
+ bool loadEntireChain, CertificateStoreLocation storeLocation)
{
thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
- using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
+ var location = storeLocation == CertificateStoreLocation.CurrentUser
+ ? StoreLocation.CurrentUser
+ : StoreLocation.LocalMachine;
+ var locationText = storeLocation == CertificateStoreLocation.CurrentUser
+ ? "current user"
+ : "local machine";
+
+ using (var store = new X509Store(StoreName.My, location))
{
store.Open(OpenFlags.ReadOnly);
var signingCert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
if (signingCert.Count == 0)
{
throw new FileNotFoundException(
- $"Certificate with thumbprint: '{thumbprint}' not found in current user cert store.");
+ $"Certificate with thumbprint: '{thumbprint}' not found in {locationText} cert store.");
}
var certificate = signingCert[0];
diff --git a/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/CertificateStoreLocation.cs b/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/CertificateStoreLocation.cs
new file mode 100644
index 0000000..56069bd
--- /dev/null
+++ b/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/CertificateStoreLocation.cs
@@ -0,0 +1,16 @@
+namespace Frends.HTTP.SendBytes.Definitions;
+
+///
+/// Certificate store location.
+///
+public enum CertificateStoreLocation
+{
+ ///
+ /// The X.509 certificate store assigned to the current user.
+ ///
+ CurrentUser,
+ ///
+ /// The X.509 certificate store assigned to the local machine.
+ ///
+ LocalMachine
+}
diff --git a/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/Options.cs b/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/Options.cs
index 42ca4ab..2ff9451 100644
--- a/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/Options.cs
+++ b/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Definitions/Options.cs
@@ -80,6 +80,15 @@ public class Options
[UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
public string CertificateThumbprint { get; set; }
+ ///
+ /// Applicable only when Certificate Source is "CertificateStore".
+ /// Store location for the certificate.
+ ///
+ /// CurrentUser
+ [UIHint(nameof(Authentication), "", Authentication.ClientCertificate)]
+ [DefaultValue(CertificateStoreLocation.CurrentUser)]
+ public CertificateStoreLocation CertificateStoreLocation { get; set; }
+
///
/// Should the entire certificate chain be loaded from the certificate store and included in the request. Only valid when using Certificate Store as the Certificate Source
///
diff --git a/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Extensions.cs b/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Extensions.cs
index 2602daa..3adee62 100644
--- a/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Extensions.cs
+++ b/Frends.HTTP.SendBytes/Frends.HTTP.SendBytes/Extensions.cs
@@ -59,7 +59,7 @@ private static X509Certificate[] GetCertificates(Options options)
{
case CertificateSource.CertificateStore:
var thumbprint = options.CertificateThumbprint;
- certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate);
+ certificates = GetCertificatesFromStore(thumbprint, options.LoadEntireChainForCertificate, options.CertificateStoreLocation);
break;
case CertificateSource.File:
certificates = GetCertificatesFromFile(options.ClientCertificateFilePath, options.ClientCertificateKeyPhrase);
@@ -103,17 +103,24 @@ private static X509Certificate2[] GetCertificatesFromFile(string clientCertifica
}
private static X509Certificate2[] GetCertificatesFromStore(string thumbprint,
- bool loadEntireChain)
+ bool loadEntireChain, CertificateStoreLocation storeLocation)
{
thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
- using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
+ var location = storeLocation == CertificateStoreLocation.CurrentUser
+ ? StoreLocation.CurrentUser
+ : StoreLocation.LocalMachine;
+ var locationText = storeLocation == CertificateStoreLocation.CurrentUser
+ ? "current user"
+ : "local machine";
+
+ using (var store = new X509Store(StoreName.My, location))
{
store.Open(OpenFlags.ReadOnly);
var signingCert = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
if (signingCert.Count == 0)
{
throw new FileNotFoundException(
- $"Certificate with thumbprint: '{thumbprint}' not found in current user cert store.");
+ $"Certificate with thumbprint: '{thumbprint}' not found in {locationText} cert store.");
}
var certificate = signingCert[0];
From 244982c1b1febed0a240ef0088659a860c4d8bd2 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Tue, 18 Nov 2025 04:06:13 +0000
Subject: [PATCH 04/11] Bump versions and add changelog entries for
CertificateStoreLocation feature
Co-authored-by: jefim <1387820+jefim@users.noreply.github.com>
---
Frends.HTTP.DownloadFile/CHANGELOG.md | 4 ++++
.../Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile.csproj | 2 +-
Frends.HTTP.Request/CHANGELOG.md | 4 ++++
.../Frends.HTTP.Request/Frends.HTTP.Request.csproj | 2 +-
Frends.HTTP.RequestBytes/CHANGELOG.md | 4 ++++
.../Frends.HTTP.RequestBytes/Frends.HTTP.RequestBytes.csproj | 2 +-
Frends.HTTP.SendAndReceiveBytes/CHANGELOG.md | 4 ++++
.../Frends.HTTP.SendAndReceiveBytes.csproj | 2 +-
Frends.HTTP.SendBytes/CHANGELOG.md | 4 ++++
.../Frends.HTTP.SendBytes/Frends.HTTP.SendBytes.csproj | 2 +-
10 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/Frends.HTTP.DownloadFile/CHANGELOG.md b/Frends.HTTP.DownloadFile/CHANGELOG.md
index 597e1b9..20f6d39 100644
--- a/Frends.HTTP.DownloadFile/CHANGELOG.md
+++ b/Frends.HTTP.DownloadFile/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## [1.4.0] - 2025-11-18
+### Added
+- Added CertificateStoreLocation option to allow selection between CurrentUser and LocalMachine certificate stores when using certificate authentication.
+
## [1.3.0] - 2025-05-15
### Changed
- Added new Overwrite parameter to control whether the downloaded file should replace an existing one.
diff --git a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile.csproj b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile.csproj
index 524cdd5..a870dfb 100644
--- a/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile.csproj
+++ b/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile/Frends.HTTP.DownloadFile.csproj
@@ -2,7 +2,7 @@
net6.0
- 1.3.0
+ 1.4.0
Frends
Frends
Frends
diff --git a/Frends.HTTP.Request/CHANGELOG.md b/Frends.HTTP.Request/CHANGELOG.md
index 6b27b00..e9a5705 100644
--- a/Frends.HTTP.Request/CHANGELOG.md
+++ b/Frends.HTTP.Request/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## [1.6.0] - 2025-11-18
+### Added
+- Added CertificateStoreLocation option to allow selection between CurrentUser and LocalMachine certificate stores when using certificate authentication.
+
## [1.5.0] - 2025-10-03
### Changed
- Changed default return format from String to JToken
diff --git a/Frends.HTTP.Request/Frends.HTTP.Request/Frends.HTTP.Request.csproj b/Frends.HTTP.Request/Frends.HTTP.Request/Frends.HTTP.Request.csproj
index 382e8e1..3eb843e 100644
--- a/Frends.HTTP.Request/Frends.HTTP.Request/Frends.HTTP.Request.csproj
+++ b/Frends.HTTP.Request/Frends.HTTP.Request/Frends.HTTP.Request.csproj
@@ -2,7 +2,7 @@
net6.0
- 1.5.0
+ 1.6.0
Frends
Frends
Frends
diff --git a/Frends.HTTP.RequestBytes/CHANGELOG.md b/Frends.HTTP.RequestBytes/CHANGELOG.md
index d03e15b..e972dc9 100644
--- a/Frends.HTTP.RequestBytes/CHANGELOG.md
+++ b/Frends.HTTP.RequestBytes/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## [1.4.0] - 2025-11-18
+### Added
+- Added CertificateStoreLocation option to allow selection between CurrentUser and LocalMachine certificate stores when using certificate authentication.
+
## [1.3.0] - 2025-10-10
### Changed
- Changed the return type of RequestBytes from Task