Skip to content

Merge 1.3.2 to main - #37

Merged
indrora merged 4 commits into
mainfrom
release-1.3
Oct 27, 2026
Merged

indrora merged 4 commits into
mainfrom
release-1.3

Conversation

@indrora

@indrora indrora commented Oct 27, 2026

Copy link
Copy Markdown
Member

Merge release-1.3 to main - Automated PR

bhillkeyfactor and others added 3 commits March 3, 2026 11:52
---------

Co-authored-by: Keyfactor <keyfactor@keyfactor.github.io>
Removed specific root/intermediate names (ISRG Root X1, R3) that go stale
when Let's Encrypt rotates their chain. Users are now directed to the
official Let's Encrypt certificates page to identify the currently active
root and intermediate certificates.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ProcessAuthorizations created challenge TXT records but nothing ever
called DeleteRecordAsync, leaving orphaned _acme-challenge records in
the DNS zone after every enrollment.

Track created records and remove them in a finally block after order
finalization (best effort, failures are logged and never fail the
enrollment). Also fix Cloudflare deletion, which queried by the
zone-relative name instead of the FQDN and removed only the first match.

AB#111453
Copilot AI balanced review requested due to automatic review settings October 27, 2026 01:33

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

DNS cleanup can remove unrelated challenges and fails for Azure, while orders without a Location header can return null request identifiers.

4 open issues
What changed in this PR

Merges release 1.3.2 into main, updating the ACME gateway plugin with DNS challenge cleanup, container configuration, and framework support.

Changes:

  • Adds post-enrollment DNS cleanup, improves Cloudflare zone lookup, and hashes order URLs into fixed-length request IDs.
  • Adds connector enablement, configurable account storage, and inline Google service-account JSON credentials.
  • Adds .NET 10 targeting, updates dependencies, and refreshes deployment documentation.
File Description
TestProgram/​TestProgram.csproj Adds .NET 10 targeting and updates dependencies.
README.md Documents configuration options and container deployment.
integration-manifest.json Describes the new configuration fields.
docsource/​configuration.md Updates authentication, storage, and deployment guidance.
CHANGELOG.md Records release 1.3.0 and 1.3.2 changes.
AcmeCaPlugin/​Clients/​DNS/​GoogleDnsProvider.cs Supports service-account JSON supplied directly in configuration.
AcmeCaPlugin/​Clients/​DNS/​DnsProviderFactory.cs Passes JSON credentials to the Google provider.
AcmeCaPlugin/​Clients/​DNS/​CloudflareDnsProvider.cs Updates zone discovery and matching TXT record deletion.
AcmeCaPlugin/​Clients/​Acme/​AcmeClientManager.cs Passes the configured account storage path.
AcmeCaPlugin/​Clients/​Acme/​AccountManager.cs Supports custom storage paths and a working-directory fallback.
AcmeCaPlugin/​AcmeClientConfig.cs Adds enablement, JSON credentials, and storage settings.
AcmeCaPlugin/​AcmeCaPluginConfig.cs Exposes annotations for the new settings.
AcmeCaPlugin/​AcmeCaPlugin.csproj Adds .NET 10, updates dependencies, and enables assembly metadata generation.
AcmeCaPlugin/​AcmeCaPlugin.cs Adds enablement checks, hashed request IDs, and DNS cleanup.
.gitignore Excludes local tooling and migration artifacts.

Review effort: Balanced

Comment on lines 538 to +539
await dnsProvider.CreateRecordAsync(validation.DnsRecordName, validation.DnsRecordValue);
createdRecords.Add(validation.DnsRecordName);
Comment on lines +74 to +78
// A wildcard and its base domain publish two TXT values under the same name; remove all of them
var allDeleted = true;
foreach (var record in resultArray.EnumerateArray())
{
var recordId = record.GetProperty("id").GetString();
order.OrderUrl, order.Payload?.Status);

// Extract order identifier BEFORE finalization to ensure we use the original order URL
var orderIdentifier = ExtractOrderIdentifier(order.OrderUrl);
{
try
{
if (await dnsProvider.DeleteRecordAsync(name))
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 27, 2026 01:48
@indrora
indrora merged commit d051307 into main Oct 27, 2026
24 of 27 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

{
public static class DnsProviderFactory
{
public static IDnsProvider Create(AcmeClientConfig config, ILogger logger)

_dnsService = new DnsService(new BaseClientService.Initializer
{
HttpClientInitializer = credential,

var change = new Change
{
Deletions = new List<ResourceRecordSet> { match }
<PackageReference Include="Keyfactor.AnyGateway.IAnyCAPlugin" Version="3.3.0" />
<PackageReference Include="Keyfactor.Logging" Version="1.3.0" />
<PackageReference Include="Keyfactor.PKI" Version="8.3.1" />
<PackageReference Include="Keyfactor.AnyGateway.IAnyCAPlugin" Version="3.1.0" />
Comment on lines +538 to +539
await dnsProvider.CreateRecordAsync(validation.DnsRecordName, validation.DnsRecordValue);
createdRecords.Add(validation.DnsRecordName);
Comments = "Ns1 DNS: Api Key only if Using Ns1 DNS (Optional)",
Hidden = true,
DefaultValue = "",
Type = "String"
Comment on lines +80 to +81
var rrsetsRequest = _dnsService.ResourceRecordSets.List(_projectId, zone.Name);
var rrsets = await rrsetsRequest.ExecuteAsync();
Name = formattedName,
Type = "TXT",
Ttl = 60,
Rrdatas = new List<string> { $"\"{txtValue}\"" }
Comment on lines +170 to +172
var zonesRequest = _dnsService.ManagedZones.List(_projectId);
var zonesResponse = await zonesRequest.ExecuteAsync();
var zones = zonesResponse.ManagedZones;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants