4
4
using Certify . Models ;
5
5
using Certify . Models . API ;
6
6
using Certify . Models . Config ;
7
+ using Certify . Models . Providers ;
7
8
using Certify . Models . Reporting ;
8
9
using Certify . Server . Api . Public . SignalR . ManagementHub ;
9
10
using Microsoft . AspNetCore . SignalR ;
@@ -32,6 +33,52 @@ public ManagementAPI(IInstanceManagementStateProvider mgmtStateProvider, IHubCon
32
33
_backendAPIClient = backendAPIClient ;
33
34
}
34
35
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
+
35
82
/// <summary>
36
83
/// Fetch managed cert details from the target instance
37
84
/// </summary>
@@ -43,24 +90,12 @@ public ManagementAPI(IInstanceManagementStateProvider mgmtStateProvider, IHubCon
43
90
{
44
91
// get managed cert via local api or via management hub
45
92
46
- var args = new KeyValuePair
47
- < string , string > [ ] {
93
+ var args = new KeyValuePair < string , string > [ ] {
48
94
new ( "instanceId" , instanceId ) ,
49
95
new ( "managedCertId" , managedCertId )
50
96
} ;
51
97
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 ) ;
64
99
}
65
100
66
101
/// <summary>
@@ -79,21 +114,14 @@ public ManagementAPI(IInstanceManagementStateProvider mgmtStateProvider, IHubCon
79
114
new ( "managedCert" , JsonSerializer . Serialize ( managedCert ) )
80
115
} ;
81
116
82
- var cmd = new InstanceCommandRequest ( ManagementHubCommands . UpdateManagedItem , args ) ;
117
+ var result = await PerformInstanceCommandTaskWithResult < ManagedCertificate ? > ( instanceId , args , ManagementHubCommands . UpdateManagedItem ) ;
83
118
84
- var result = await GetCommandResult ( instanceId , cmd ) ;
85
-
86
- if ( result ? . Value != null )
119
+ if ( result != null )
87
120
{
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 ) ;
96
122
}
123
+
124
+ return result ;
97
125
}
98
126
99
127
/// <summary>
@@ -112,49 +140,20 @@ public async Task<bool> RemoveManagedCertificate(string instanceId, string manag
112
140
new ( "managedCertId" , managedCertId )
113
141
} ;
114
142
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 ) ;
118
144
119
- try
120
- {
121
- _mgmtStateProvider . DeleteCachedManagedInstanceItem ( instanceId , managedCertId ) ;
122
- return true ;
123
- }
124
- catch
145
+ if ( deletedOK )
125
146
{
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
+ }
153
154
}
154
155
155
- _mgmtStateProvider . AddAwaitedCommandRequest ( cmd ) ;
156
-
157
- await _mgmtHubContext . Clients . Client ( connectionId ) . SendCommandRequest ( cmd ) ;
156
+ return deletedOK ;
158
157
}
159
158
160
159
public async Task < StatusSummary > GetManagedCertificateSummary ( AuthContext ? currentAuthContext )
@@ -186,18 +185,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
186
185
new ( "instanceId" , instanceId )
187
186
} ;
188
187
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 ) ;
201
189
}
202
190
203
191
public async Task < ActionResult ? > AddAcmeAccount ( string instanceId , ContactRegistration registration , AuthContext ? currentAuthContext )
@@ -207,18 +195,15 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
207
195
new ( "registration" , JsonSerializer . Serialize ( registration ) )
208
196
} ;
209
197
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
+ }
213
200
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 ) ;
222
207
}
223
208
224
209
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
229
214
new ( "credentialsId" , credentialsId )
230
215
} ;
231
216
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 ) ;
244
218
}
245
219
246
220
public async Task < ICollection < Models . Config . StoredCredential > ? > GetStoredCredentials ( string instanceId , AuthContext ? currentAuthContext )
@@ -249,18 +223,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
249
223
new ( "instanceId" , instanceId )
250
224
} ;
251
225
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 ) ;
264
227
}
265
228
266
229
public async Task < ActionResult ? > UpdateStoredCredential ( string instanceId , StoredCredential item , AuthContext ? currentAuthContext )
@@ -270,18 +233,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
270
233
new ( "item" , JsonSerializer . Serialize ( item ) )
271
234
} ;
272
235
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 ) ;
285
237
}
286
238
287
239
public async Task < ActionResult ? > DeleteStoredCredential ( string instanceId , string storageKey , AuthContext authContext )
@@ -293,18 +245,7 @@ public async Task<StatusSummary> GetManagedCertificateSummary(AuthContext? curre
293
245
new ( "storageKey" , storageKey )
294
246
} ;
295
247
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 ) ;
308
249
}
309
250
310
251
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,
315
256
new ( "limit" , maxLines . ToString ( ) )
316
257
} ;
317
258
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 ) ?? [ ] ;
330
260
}
331
261
332
262
internal async Task < List < StatusMessage > > TestManagedCertificateConfiguration ( string instanceId , ManagedCertificate managedCert , AuthContext ? currentAuthContext )
@@ -336,18 +266,7 @@ internal async Task<List<StatusMessage>> TestManagedCertificateConfiguration(str
336
266
new ( "managedCert" , JsonSerializer . Serialize ( managedCert ) )
337
267
} ;
338
268
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 ) ?? [ ] ;
351
270
}
352
271
353
272
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
357
276
new ( "managedCert" , JsonSerializer . Serialize ( managedCert ) )
358
277
} ;
359
278
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 ) ?? [ ] ;
372
280
}
373
281
374
282
internal async Task PerformManagedCertificateRequest ( string instanceId , string managedCertId , AuthContext ? currentAuthContext )
0 commit comments