Skip to content

Commit 0e98726

Browse files
Implement DnsZoneQueryResult to report success or failure as well as the zone list
1 parent 2406f13 commit 0e98726

File tree

13 files changed

+71
-38
lines changed

13 files changed

+71
-38
lines changed

src/Certify.Client/CertifyApiClient.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Certify.Models;
1111
using Certify.Models.Config;
1212
using Certify.Models.Hub;
13+
using Certify.Models.Providers;
1314
using Certify.Models.Reporting;
1415
using Certify.Models.Utils;
1516
using Certify.Shared;
@@ -574,10 +575,10 @@ public async Task<List<StatusMessage>> PerformChallengeCleanup(ManagedCertificat
574575
var response = await PostAsync($"managedcertificates/challengecleanup", site, authContext);
575576
return JsonConvert.DeserializeObject<List<StatusMessage>>(await response.Content.ReadAsStringAsync());
576577
}
577-
public async Task<List<Models.Providers.DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId, AuthContext authContext = null)
578+
public async Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId, AuthContext authContext = null)
578579
{
579580
var json = await FetchAsync($"managedcertificates/dnszones/{providerTypeId}/{credentialId}", authContext);
580-
return JsonConvert.DeserializeObject<List<Models.Providers.DnsZone>>(json);
581+
return JsonConvert.DeserializeObject<DnsZoneQueryResult>(json);
581582
}
582583

583584
public async Task<List<ActionStep>> PreviewActions(ManagedCertificate site, AuthContext authContext = null)

src/Certify.Client/ICertifyClient.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Certify.Models;
55
using Certify.Models.Config;
66
using Certify.Models.Hub;
7+
using Certify.Models.Providers;
78
using Certify.Models.Reporting;
89
using Certify.Models.Utils;
910
using Certify.Shared;
@@ -71,7 +72,7 @@ public partial interface ICertifyInternalApiClient
7172
Task<CertificateRequestResult> BeginCertificateRequest(string managedItemId, bool resumePaused, bool isInteractive, AuthContext authContext = null);
7273
Task<List<StatusMessage>> TestChallengeConfiguration(ManagedCertificate site, AuthContext authContext = null);
7374
Task<List<StatusMessage>> PerformChallengeCleanup(ManagedCertificate site, AuthContext authContext = null);
74-
Task<List<Models.Providers.DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId, AuthContext authContext = null);
75+
Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId, AuthContext authContext = null);
7576
Task<List<ActionStep>> PreviewActions(ManagedCertificate site, AuthContext authContext = null);
7677
Task<List<ChallengeProviderDefinition>> GetChallengeAPIList(AuthContext authContext = null);
7778
Task<List<DeploymentProviderDefinition>> GetDeploymentProviderList(AuthContext authContext = null);

src/Certify.Core/Management/CertifyManager/CertifyManager.ManagedCertificates.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -701,21 +701,39 @@ public async Task<ActionResult<byte[]>> ExportCertificate(string managedCertId,
701701
}
702702
}
703703

704-
public async Task<List<DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId)
704+
public async Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId)
705705
{
706706
var dnsHelper = new Core.Management.Challenges.DnsChallengeHelper(_credentialsManager);
707707

708708
var result = await dnsHelper.GetDnsProvider(providerTypeId, credentialId, null, _credentialsManager, _serviceLog);
709709

710710
if (result.Provider != null)
711711
{
712-
var list = await result.Provider.GetZones();
713-
714-
return list?.OrderBy(x => x.Name).ToList();
712+
try
713+
{
714+
var list = await result.Provider.GetZones();
715+
return new DnsZoneQueryResult
716+
{
717+
IsSuccess = true,
718+
Result = list?.OrderBy(x => x.Name).ToList() ?? []
719+
};
720+
}
721+
catch (Exception exp)
722+
{
723+
return new DnsZoneQueryResult
724+
{
725+
IsSuccess = false,
726+
Message = $"Failed to Get DNS Zones using provider {result.Provider.ProviderTitle} : {exp.Message}"
727+
};
728+
}
715729
}
716730
else
717731
{
718-
return new List<DnsZone>();
732+
return new DnsZoneQueryResult
733+
{
734+
IsSuccess = false,
735+
Message = $"Failed to create provider while fetching DNS Zones using {result.Provider?.ProviderTitle ?? providerTypeId}"
736+
};
719737
}
720738
}
721739

src/Certify.Core/Management/Challenges/DNS/DnsChallengeHelper.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -178,24 +178,14 @@ public async Task<DnsChallengeHelperResult> CompleteDNSChallenge(ILog log, Manag
178178
}
179179
catch (Exception exp)
180180
{
181-
return new DnsChallengeHelperResult($"DNS Challenge API Provider could not be created. Check all required credentials are set. {exp.ToString()}");
181+
return new DnsChallengeHelperResult($"DNS Challenge API Provider could not be created. Check all required credentials are set. {exp}");
182182
}
183183

184184
if (dnsAPIProvider == null)
185185
{
186186
return new DnsChallengeHelperResult("DNS Challenge API Provider not set or not recognised. Select an API to proceed.");
187187
}
188188

189-
if (isTestMode && !dnsAPIProvider.IsTestModeSupported)
190-
{
191-
return new DnsChallengeHelperResult
192-
{
193-
Result = new ActionResult { IsSuccess = true, Message = dnsAPIProvider.ProviderTitle + " does not perform any tests." },
194-
PropagationSeconds = 0,
195-
IsAwaitingUser = false
196-
};
197-
}
198-
199189
string zoneId = null;
200190
if (parameters != null && parameters.ContainsKey("zoneid"))
201191
{

src/Certify.Models/Providers/ICertifyManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public interface ICertifyManager
4141
Task<List<StatusMessage>> TestChallenge(ILog log, ManagedCertificate managedCertificate, bool isPreviewMode, IProgress<RequestProgressState>? progress = null);
4242
Task<List<StatusMessage>> PerformChallengeCleanup(ILog log, ManagedCertificate managedCertificate, IProgress<RequestProgressState>? progress = null);
4343
Task<List<ActionResult>> PerformServiceDiagnostics();
44-
Task<List<DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId);
44+
Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId);
4545
Task<ActionResult> UpdateCertificateAuthority(CertificateAuthority certificateAuthority);
4646
Task<List<CertificateAuthority>> GetCertificateAuthorities();
4747
Task<StatusMessage> RevokeCertificate(ILog log, ManagedCertificate managedCertificate);

src/Certify.Models/Providers/IDnsProvider.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66

77
namespace Certify.Models.Providers
88
{
9+
public class DnsZoneQueryResult : ActionResult<ICollection<DnsZone>>
10+
{
11+
public DnsZoneQueryResult()
12+
{
13+
}
14+
public DnsZoneQueryResult(string msg, bool isSuccess, ICollection<DnsZone> result = null)
15+
: base(msg, isSuccess, result)
16+
{
17+
}
18+
}
919
public class DnsZone
1020
{
1121
public string ZoneId { get; set; }

src/Certify.Server/Certify.Server.Core/Certify.Server.Core/Controllers/ManagedCertificateController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Certify.Models;
44
using Certify.Models.Config;
55
using Certify.Models.Hub;
6+
using Certify.Models.Providers;
67
using Certify.Models.Reporting;
78
using Certify.Models.Utils;
89
using Microsoft.AspNetCore.Mvc;
@@ -301,7 +302,7 @@ public async Task<List<SimpleAuthorizationChallengeItem>> GetCurrentChallenges(s
301302
}
302303

303304
[HttpGet, Route("dnszones/{providerTypeId}/{credentialId}")]
304-
public async Task<List<Models.Providers.DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId) => await _certifyManager.GetDnsProviderZones(providerTypeId, credentialId);
305+
public async Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId) => await _certifyManager.GetDnsProviderZones(providerTypeId, credentialId);
305306

306307
[HttpGet, Route("maintenance/{id?}")]
307308
public async Task<List<Models.Config.ActionResult>> PerformCertMaintenanceTasks(string id = null)

src/Certify.Server/Certify.Server.Hub.Api/Services/ManagementAPI.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Text.Json;
1+
using System.Text.Json;
22
using Certify.Client;
33
using Certify.Models;
44
using Certify.Models.Config;
@@ -464,15 +464,15 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
464464
/// <param name="credentialId">The credential identifier.</param>
465465
/// <param name="currentAuthContext">The current authentication context.</param>
466466
/// <returns>A collection of <see cref="Models.Providers.DnsZone"/> objects, or null if none found.</returns>
467-
public async Task<ICollection<Models.Providers.DnsZone>?> GetDnsZones(string instanceId, string providerTypeId, string credentialId, AuthContext? currentAuthContext)
467+
public async Task<DnsZoneQueryResult?> GetDnsZones(string instanceId, string providerTypeId, string credentialId, AuthContext? currentAuthContext)
468468
{
469469
var args = new KeyValuePair<string, string>[] {
470470
new("instanceId", instanceId),
471471
new("providerTypeId", providerTypeId),
472472
new("credentialId", credentialId)
473473
};
474474

475-
return await PerformInstanceCommandTaskWithResult<ICollection<DnsZone>>(instanceId, args, ManagementHubCommands.GetDnsZones);
475+
return await PerformInstanceCommandTaskWithResult<DnsZoneQueryResult>(instanceId, args, ManagementHubCommands.GetDnsZones);
476476
}
477477

478478
/// <summary>

src/Certify.Server/Certify.Server.HubService/Services/CertifyDirectHubService.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ private ServiceControllers.TagController _tagController(AuthContext authContext)
131131
public Task<List<ProviderDefinition>> GetDataStoreProviders(AuthContext? authContext = null) => throw new NotImplementedException();
132132
public Task<DeploymentProviderDefinition> GetDeploymentProviderDefinition(string id, DeploymentTaskConfig config, AuthContext? authContext = null) => throw new NotImplementedException();
133133
public Task<List<DeploymentProviderDefinition>> GetDeploymentProviderList(AuthContext? authContext = null) => throw new NotImplementedException();
134-
public Task<List<DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId, AuthContext? authContext = null) => throw new NotImplementedException();
134+
135135
public Task<LogItem[]> GetItemLog(string id, int limit, AuthContext? authContext = null) => throw new NotImplementedException();
136136
public Task<ManagedCertificate> GetManagedCertificate(string managedItemId, AuthContext? authContext = null) => throw new NotImplementedException();
137137
public Task<List<ManagedCertificate>> GetManagedCertificates(ManagedCertificateFilter filter, AuthContext? authContext = null) => throw new NotImplementedException();
@@ -173,6 +173,7 @@ private ServiceControllers.TagController _tagController(AuthContext authContext)
173173

174174
public Task<ActionResult> AddHubItemTag(ItemTag tag, AuthContext authContext) => _tagController(authContext).AddTag(tag);
175175
public Task<ICollection<ItemTag>> GetHubItemTags(AuthContext authContext) => _tagController(authContext).GetTags();
176+
public Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId, AuthContext? authContext = null) => throw new NotImplementedException();
176177

177178
#pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
178179
}

src/Certify.Service/Controllers/ManagedCertificateController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Certify.Models;
1010
using Certify.Models.Config;
1111
using Certify.Models.Hub;
12+
using Certify.Models.Providers;
1213
using Certify.Models.Reporting;
1314
using Certify.Models.Utils;
1415
using Microsoft.Extensions.Logging;
@@ -306,7 +307,7 @@ public async Task<List<SimpleAuthorizationChallengeItem>> GetCurrentChallenges(s
306307
}
307308

308309
[HttpGet, Route("dnszones/{providerTypeId}/{credentialId}")]
309-
public async Task<List<Models.Providers.DnsZone>> GetDnsProviderZones(string providerTypeId, string credentialId) => await _certifyManager.GetDnsProviderZones(providerTypeId, credentialId);
310+
public async Task<DnsZoneQueryResult> GetDnsProviderZones(string providerTypeId, string credentialId) => await _certifyManager.GetDnsProviderZones(providerTypeId, credentialId);
310311

311312
[HttpGet, Route("maintenance/{id?}")]
312313
public async Task<List<Models.Config.ActionResult>> PerformCertMaintenanceTasks(string id = null)

0 commit comments

Comments
 (0)