Skip to content

Commit 1153096

Browse files
Hub: simplify and standardize command invocation
1 parent fd7bf7c commit 1153096

File tree

1 file changed

+80
-172
lines changed

1 file changed

+80
-172
lines changed

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

+80-172
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Certify.Models;
55
using Certify.Models.API;
66
using Certify.Models.Config;
7+
using Certify.Models.Providers;
78
using Certify.Models.Reporting;
89
using Certify.Server.Api.Public.SignalR.ManagementHub;
910
using Microsoft.AspNetCore.SignalR;
@@ -32,6 +33,52 @@ public ManagementAPI(IInstanceManagementStateProvider mgmtStateProvider, IHubCon
3233
_backendAPIClient = backendAPIClient;
3334
}
3435

36+
private async Task<InstanceCommandResult?> GetCommandResult(string instanceId, InstanceCommandRequest cmd)
37+
{
38+
var connectionId = _mgmtStateProvider.GetConnectionIdForInstance(instanceId);
39+
40+
if (connectionId == null)
41+
{
42+
throw new Exception("Instance connection info not known, cannot send commands to instance.");
43+
}
44+
45+
_mgmtStateProvider.AddAwaitedCommandRequest(cmd);
46+
47+
await _mgmtHubContext.Clients.Client(connectionId).SendCommandRequest(cmd);
48+
49+
return await _mgmtStateProvider.ConsumeAwaitedCommandResult(cmd.CommandId);
50+
}
51+
52+
private async Task SendCommandWithNoResult(string instanceId, InstanceCommandRequest cmd)
53+
{
54+
var connectionId = _mgmtStateProvider.GetConnectionIdForInstance(instanceId);
55+
56+
if (connectionId == null)
57+
{
58+
throw new Exception("Instance connection info not known, cannot send commands to instance.");
59+
}
60+
61+
_mgmtStateProvider.AddAwaitedCommandRequest(cmd);
62+
63+
await _mgmtHubContext.Clients.Client(connectionId).SendCommandRequest(cmd);
64+
}
65+
66+
private async Task<T?> PerformInstanceCommandTaskWithResult<T>(string instanceId, KeyValuePair<string, string>[] args, string commandType)
67+
{
68+
var cmd = new InstanceCommandRequest(commandType, args);
69+
70+
var result = await GetCommandResult(instanceId, cmd);
71+
72+
if (result?.Value != null)
73+
{
74+
return JsonSerializer.Deserialize<T>(result.Value);
75+
}
76+
else
77+
{
78+
return default;
79+
}
80+
}
81+
3582
/// <summary>
3683
/// Fetch managed cert details from the target instance
3784
/// </summary>
@@ -43,24 +90,12 @@ public ManagementAPI(IInstanceManagementStateProvider mgmtStateProvider, IHubCon
4390
{
4491
// get managed cert via local api or via management hub
4592

46-
var args = new KeyValuePair
47-
<string, string>[] {
93+
var args = new KeyValuePair<string, string>[] {
4894
new("instanceId", instanceId) ,
4995
new("managedCertId", managedCertId)
5096
};
5197

52-
var cmd = new InstanceCommandRequest(ManagementHubCommands.GetManagedItem, args);
53-
var result = await GetCommandResult(instanceId, cmd);
54-
55-
if (result?.Value != null)
56-
{
57-
return JsonSerializer.Deserialize<ManagedCertificate>(result.Value);
58-
59-
}
60-
else
61-
{
62-
return null;
63-
}
98+
return await PerformInstanceCommandTaskWithResult<ManagedCertificate?>(instanceId, args, ManagementHubCommands.GetManagedItem);
6499
}
65100

66101
/// <summary>
@@ -79,21 +114,14 @@ public ManagementAPI(IInstanceManagementStateProvider mgmtStateProvider, IHubCon
79114
new("managedCert", JsonSerializer.Serialize(managedCert))
80115
};
81116

82-
var cmd = new InstanceCommandRequest(ManagementHubCommands.UpdateManagedItem, args);
117+
var result = await PerformInstanceCommandTaskWithResult<ManagedCertificate?>(instanceId, args, ManagementHubCommands.UpdateManagedItem);
83118

84-
var result = await GetCommandResult(instanceId, cmd);
85-
86-
if (result?.Value != null)
119+
if (result != null)
87120
{
88-
var update = JsonSerializer.Deserialize<ManagedCertificate>(result.Value);
89-
90-
_mgmtStateProvider.UpdateCachedManagedInstanceItem(instanceId, update);
91-
return update;
92-
}
93-
else
94-
{
95-
return null;
121+
_mgmtStateProvider.UpdateCachedManagedInstanceItem(instanceId, result);
96122
}
123+
124+
return result;
97125
}
98126

99127
/// <summary>
@@ -112,49 +140,20 @@ public async Task<bool> RemoveManagedCertificate(string instanceId, string manag
112140
new("managedCertId",managedCertId)
113141
};
114142

115-
var cmd = new InstanceCommandRequest(ManagementHubCommands.DeleteManagedItem, args);
116-
117-
var result = await GetCommandResult(instanceId, cmd);
143+
var deletedOK = await PerformInstanceCommandTaskWithResult<bool>(instanceId, args, ManagementHubCommands.DeleteManagedItem);
118144

119-
try
120-
{
121-
_mgmtStateProvider.DeleteCachedManagedInstanceItem(instanceId, managedCertId);
122-
return true;
123-
}
124-
catch
145+
if (deletedOK)
125146
{
126-
return false;
127-
}
128-
}
129-
130-
private async Task<InstanceCommandResult?> GetCommandResult(string instanceId, InstanceCommandRequest cmd)
131-
{
132-
var connectionId = _mgmtStateProvider.GetConnectionIdForInstance(instanceId);
133-
134-
if (connectionId == null)
135-
{
136-
throw new Exception("Instance connection info not known, cannot send commands to instance.");
137-
}
138-
139-
_mgmtStateProvider.AddAwaitedCommandRequest(cmd);
140-
141-
await _mgmtHubContext.Clients.Client(connectionId).SendCommandRequest(cmd);
142-
143-
return await _mgmtStateProvider.ConsumeAwaitedCommandResult(cmd.CommandId);
144-
}
145-
146-
private async Task SendCommandWithNoResult(string instanceId, InstanceCommandRequest cmd)
147-
{
148-
var connectionId = _mgmtStateProvider.GetConnectionIdForInstance(instanceId);
149-
150-
if (connectionId == null)
151-
{
152-
throw new Exception("Instance connection info not known, cannot send commands to instance.");
147+
try
148+
{
149+
_mgmtStateProvider.DeleteCachedManagedInstanceItem(instanceId, managedCertId);
150+
}
151+
catch
152+
{
153+
}
153154
}
154155

155-
_mgmtStateProvider.AddAwaitedCommandRequest(cmd);
156-
157-
await _mgmtHubContext.Clients.Client(connectionId).SendCommandRequest(cmd);
156+
return deletedOK;
158157
}
159158

160159
public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? currentAuthContext)
@@ -186,18 +185,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
186185
new("instanceId", instanceId)
187186
};
188187

189-
var cmd = new InstanceCommandRequest(ManagementHubCommands.GetAcmeAccounts, args);
190-
191-
var result = await GetCommandResult(instanceId, cmd);
192-
193-
if (result?.Value != null)
194-
{
195-
return JsonSerializer.Deserialize<ICollection<Models.AccountDetails>>(result.Value);
196-
}
197-
else
198-
{
199-
return null;
200-
}
188+
return await PerformInstanceCommandTaskWithResult<ICollection<Models.AccountDetails>>(instanceId, args, ManagementHubCommands.GetAcmeAccounts);
201189
}
202190

203191
public async Task<ActionResult?> AddAcmeAccount(string instanceId, ContactRegistration registration, AuthContext? currentAuthContext)
@@ -207,18 +195,15 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
207195
new("registration", JsonSerializer.Serialize(registration))
208196
};
209197

210-
var cmd = new InstanceCommandRequest(ManagementHubCommands.AddAcmeAccount, args);
211-
212-
var result = await GetCommandResult(instanceId, cmd);
198+
return await PerformInstanceCommandTaskWithResult<ActionResult?>(instanceId, args, ManagementHubCommands.AddAcmeAccount);
199+
}
213200

214-
if (result?.Value != null)
215-
{
216-
return JsonSerializer.Deserialize<ActionResult>(result.Value);
217-
}
218-
else
219-
{
220-
return null;
221-
}
201+
public async Task<ICollection<ChallengeProviderDefinition>?> GetChallengeProviders(string instanceId, AuthContext? currentAuthContext)
202+
{
203+
var args = new KeyValuePair<string, string>[] {
204+
new("instanceId", instanceId)
205+
};
206+
return await PerformInstanceCommandTaskWithResult<ICollection<ChallengeProviderDefinition>>(instanceId, args, ManagementHubCommands.GetChallengeProviders);
222207
}
223208

224209
public async Task<ICollection<Models.Providers.DnsZone>?> GetDnsZones(string instanceId, string providerTypeId, string credentialsId, AuthContext? currentAuthContext)
@@ -229,18 +214,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
229214
new("credentialsId", credentialsId)
230215
};
231216

232-
var cmd = new InstanceCommandRequest(ManagementHubCommands.GetDnsZones, args);
233-
234-
var result = await GetCommandResult(instanceId, cmd);
235-
236-
if (result?.Value != null)
237-
{
238-
return JsonSerializer.Deserialize<ICollection<Models.Providers.DnsZone>>(result.Value);
239-
}
240-
else
241-
{
242-
return null;
243-
}
217+
return await PerformInstanceCommandTaskWithResult<ICollection<DnsZone>>(instanceId, args, ManagementHubCommands.GetDnsZones);
244218
}
245219

246220
public async Task<ICollection<Models.Config.StoredCredential>?> GetStoredCredentials(string instanceId, AuthContext? currentAuthContext)
@@ -249,18 +223,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
249223
new("instanceId", instanceId)
250224
};
251225

252-
var cmd = new InstanceCommandRequest(ManagementHubCommands.GetStoredCredentials, args);
253-
254-
var result = await GetCommandResult(instanceId, cmd);
255-
256-
if (result?.Value != null)
257-
{
258-
return JsonSerializer.Deserialize<ICollection<Models.Config.StoredCredential>>(result.Value);
259-
}
260-
else
261-
{
262-
return null;
263-
}
226+
return await PerformInstanceCommandTaskWithResult<ICollection<StoredCredential>>(instanceId, args, ManagementHubCommands.GetStoredCredentials);
264227
}
265228

266229
public async Task<ActionResult?> UpdateStoredCredential(string instanceId, StoredCredential item, AuthContext? currentAuthContext)
@@ -270,18 +233,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
270233
new("item", JsonSerializer.Serialize(item))
271234
};
272235

273-
var cmd = new InstanceCommandRequest(ManagementHubCommands.UpdateStoredCredential, args);
274-
275-
var result = await GetCommandResult(instanceId, cmd);
276-
277-
if (result?.Value != null)
278-
{
279-
return JsonSerializer.Deserialize<ActionResult>(result.Value);
280-
}
281-
else
282-
{
283-
return null;
284-
}
236+
return await PerformInstanceCommandTaskWithResult<ActionResult?>(instanceId, args, ManagementHubCommands.UpdateStoredCredential);
285237
}
286238

287239
public async Task<ActionResult?> DeleteStoredCredential(string instanceId, string storageKey, AuthContext authContext)
@@ -293,18 +245,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
293245
new("storageKey",storageKey)
294246
};
295247

296-
var cmd = new InstanceCommandRequest(ManagementHubCommands.DeleteStoredCredential, args);
297-
298-
var result = await GetCommandResult(instanceId, cmd);
299-
300-
if (result?.Value != null)
301-
{
302-
return JsonSerializer.Deserialize<ActionResult>(result.Value);
303-
}
304-
else
305-
{
306-
return null;
307-
}
248+
return await PerformInstanceCommandTaskWithResult<ActionResult?>(instanceId, args, ManagementHubCommands.DeleteStoredCredential);
308249
}
309250

310251
public async Task<LogItem[]> GetItemLog(string instanceId, string managedCertId, int maxLines, AuthContext? currentAuthContext)
@@ -315,18 +256,7 @@ public async Task<LogItem[]> GetItemLog(string instanceId, string managedCertId,
315256
new("limit",maxLines.ToString())
316257
};
317258

318-
var cmd = new InstanceCommandRequest(ManagementHubCommands.GetManagedItemLog, args);
319-
320-
var result = await GetCommandResult(instanceId, cmd);
321-
322-
if (result?.Value != null)
323-
{
324-
return JsonSerializer.Deserialize<LogItem[]>(result.Value);
325-
}
326-
else
327-
{
328-
return [];
329-
}
259+
return await PerformInstanceCommandTaskWithResult<LogItem[]>(instanceId, args, ManagementHubCommands.GetManagedItemLog) ?? [];
330260
}
331261

332262
internal async Task<List<StatusMessage>> TestManagedCertificateConfiguration(string instanceId, ManagedCertificate managedCert, AuthContext? currentAuthContext)
@@ -336,18 +266,7 @@ internal async Task<List<StatusMessage>> TestManagedCertificateConfiguration(str
336266
new("managedCert",JsonSerializer.Serialize(managedCert))
337267
};
338268

339-
var cmd = new InstanceCommandRequest(ManagementHubCommands.TestManagedItemConfiguration, args);
340-
341-
var result = await GetCommandResult(instanceId, cmd);
342-
343-
if (result?.Value != null)
344-
{
345-
return JsonSerializer.Deserialize<List<StatusMessage>>(result.Value);
346-
}
347-
else
348-
{
349-
return [];
350-
}
269+
return await PerformInstanceCommandTaskWithResult<List<StatusMessage>>(instanceId, args, ManagementHubCommands.TestManagedItemConfiguration) ?? [];
351270
}
352271

353272
internal async Task<List<ActionStep>> GetPreviewActions(string instanceId, ManagedCertificate managedCert, AuthContext? currentAuthContext)
@@ -357,18 +276,7 @@ internal async Task<List<ActionStep>> GetPreviewActions(string instanceId, Manag
357276
new("managedCert",JsonSerializer.Serialize(managedCert))
358277
};
359278

360-
var cmd = new InstanceCommandRequest(ManagementHubCommands.GetManagedItemRenewalPreview, args);
361-
362-
var result = await GetCommandResult(instanceId, cmd);
363-
364-
if (result?.Value != null)
365-
{
366-
return JsonSerializer.Deserialize<List<ActionStep>>(result.Value);
367-
}
368-
else
369-
{
370-
return [];
371-
}
279+
return await PerformInstanceCommandTaskWithResult<List<ActionStep>>(instanceId, args, ManagementHubCommands.GetManagedItemRenewalPreview) ?? [];
372280
}
373281

374282
internal async Task PerformManagedCertificateRequest(string instanceId, string managedCertId, AuthContext? currentAuthContext)

0 commit comments

Comments
 (0)