Skip to content

Commit 6175950

Browse files
fixed renewal window issues
1 parent 2f29083 commit 6175950

2 files changed

Lines changed: 34 additions & 7 deletions

File tree

SslStoreCaProxy/SslStoreCAPluginConfig.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class ConfigConstants
1414
public static string AuthToken = "AuthToken";
1515
public static string PageSize = "PageSize";
1616
public static string Enabled = "Enabled";
17+
public static string RenewalWindow = "RenewalWindow";
1718
}
1819

1920
public class Config
@@ -23,6 +24,7 @@ public class Config
2324
public string AuthToken { get; set; }
2425
public int PageSize { get; set; } = DefaultPageSize;
2526
public bool Enabled { get; set; }
27+
public int RenewalWindow { get; set; } = 30;
2628
}
2729

2830
public static Dictionary<string, PropertyConfigInfo> GetPluginAnnotations()
@@ -63,6 +65,13 @@ public static Dictionary<string, PropertyConfigInfo> GetPluginAnnotations()
6365
Hidden = false,
6466
DefaultValue = true,
6567
Type = "Bool"
68+
},
69+
[ConfigConstants.RenewalWindow] = new PropertyConfigInfo()
70+
{
71+
Comments = "Number of days before order expiry to trigger a renewal instead of a reissue.",
72+
Hidden = false,
73+
DefaultValue = 30,
74+
Type = "Number"
6675
}
6776
};
6877
}

SslStoreCaProxy/SslStoreCaProxy.cs

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class SslStoreCaProxy : IAnyCAPlugin
2828
public string PartnerCode { get; set; }
2929
public string AuthenticationToken { get; set; }
3030
public int PageSize { get; set; }
31+
public int RenewalWindow { get; set; }
3132

3233
public void Initialize(IAnyCAPluginConfigProvider configProvider, ICertificateDataReader certificateDataReader)
3334
{
@@ -42,6 +43,7 @@ public void Initialize(IAnyCAPluginConfigProvider configProvider, ICertificateDa
4243
PartnerCode = _config.PartnerCode;
4344
AuthenticationToken = _config.AuthToken;
4445
PageSize = _config.PageSize > 0 ? _config.PageSize : SslStoreCAPluginConfig.DefaultPageSize;
46+
RenewalWindow = _config.RenewalWindow > 0 ? _config.RenewalWindow : 30;
4547

4648
_requestManager = new RequestManager(this);
4749

@@ -245,16 +247,32 @@ public async Task<EnrollmentResult> Enroll(string csr, string subject, Dictionar
245247
var orderStatusResponse = await client.SubmitOrderStatusRequestAsync(orderStatusRequest);
246248
_logger.LogTrace($"orderStatusResponse JSON {JsonConvert.SerializeObject(orderStatusResponse)}");
247249

248-
// Try renewal first, fall back to reissue
249-
var renewRequest = _requestManager.GetRenewalRequest(orderStatusResponse, csr);
250-
_logger.LogTrace($"renewRequest JSON {JsonConvert.SerializeObject(renewRequest)}");
250+
// Determine renewal vs reissue based on order expiry and RenewalWindow
251+
var shouldRenew = false;
252+
if (DateTime.TryParse(orderStatusResponse.OrderExpiryDateInUtc, out var orderExpiry))
253+
{
254+
var daysUntilOrderExpiry = (orderExpiry - DateTime.UtcNow).TotalDays;
255+
_logger.LogTrace($"Order expiry: {orderExpiry:u}, days remaining: {daysUntilOrderExpiry:F0}, renewal window: {RenewalWindow} days");
256+
shouldRenew = daysUntilOrderExpiry <= RenewalWindow;
257+
}
258+
else
259+
{
260+
_logger.LogWarning($"Could not parse OrderExpiryDateInUTC '{orderStatusResponse.OrderExpiryDateInUtc}', defaulting to renewal");
261+
shouldRenew = true;
262+
}
251263

252-
enrollmentResponse = await client.SubmitRenewRequestAsync(renewRequest);
253-
_logger.LogTrace($"enrollmentResponse JSON {JsonConvert.SerializeObject(enrollmentResponse)}");
264+
if (shouldRenew)
265+
{
266+
_logger.LogTrace("Order is within renewal window, performing renewal (new order)...");
267+
var renewRequest = _requestManager.GetRenewalRequest(orderStatusResponse, csr);
268+
_logger.LogTrace($"renewRequest JSON {JsonConvert.SerializeObject(renewRequest)}");
254269

255-
if (enrollmentResponse != null && enrollmentResponse.AuthResponse != null && enrollmentResponse.AuthResponse.IsError)
270+
enrollmentResponse = await client.SubmitRenewRequestAsync(renewRequest);
271+
_logger.LogTrace($"enrollmentResponse JSON {JsonConvert.SerializeObject(enrollmentResponse)}");
272+
}
273+
else
256274
{
257-
_logger.LogTrace("Renewal failed, attempting reissue...");
275+
_logger.LogTrace("Order has life remaining, performing reissue (same order)...");
258276
var reIssueRequest = _requestManager.GetReIssueRequest(orderStatusResponse, csr, false);
259277
_logger.LogTrace($"reIssueRequest JSON {JsonConvert.SerializeObject(reIssueRequest)}");
260278

0 commit comments

Comments
 (0)