/// <summary> /// Create fetch request /// </summary> /// <param name="model"></param> public FinishNewKeyPairRequestResponseApiModel(FinishNewKeyPairRequestResultModel model) { Request = model.Request != null ? new CertificateRequestRecordApiModel(model.Request) : null; Certificate = model.Certificate != null ? new X509CertificateApiModel(model.Certificate) : null; PrivateKey = model != null ? new PrivateKeyApiModel(model.PrivateKey) : null; }
/// <inheritdoc/> public async Task <FinishNewKeyPairRequestResultModel> FinishNewKeyPairRequestAsync( string requestId, VaultOperationContextModel context, CancellationToken ct) { if (string.IsNullOrEmpty(requestId)) { throw new ArgumentNullException(nameof(requestId)); } var request = await _repo.FindAsync(requestId, ct); if (request == null) { throw new ResourceNotFoundException("Request not found"); } try { var entity = await _entities.FindEntityAsync(request.Entity.Id); if (entity != null) { throw new ResourceInvalidStateException("Entity removed."); } var result = new FinishNewKeyPairRequestResultModel { Request = request.Record }; if (request.Record.State == CertificateRequestState.Completed) { result.Certificate = request.Certificate; // get private key if (request.KeyHandle != null) { var handle = Try.Op( () => _serializer.DeserializeHandle(request.KeyHandle)); if (handle != null) { var privateKey = await Try.Async( () => _keys.ExportKeyAsync(handle, ct)); result.PrivateKey = privateKey.ToServiceModel(); await Try.Async( () => _keys.DeleteKeyAsync(handle, ct)); } } } return(result); } finally { if (request.Record.State == CertificateRequestState.Completed) { // Accept await _broker.NotifyAllAsync( l => l.OnCertificateRequestAcceptedAsync(request)); _logger.Information("Key pair response accepted and finished."); } } }
/// <summary> /// Create fetch request /// </summary> /// <param name="model"></param> public static FinishNewKeyPairRequestResponseApiModel ToApiModel( this FinishNewKeyPairRequestResultModel model) { if (model == null) { return(null); } return(new FinishNewKeyPairRequestResponseApiModel { Request = model.Request.ToApiModel(), Certificate = model.Certificate.ToApiModel(), PrivateKey = model.PrivateKey.ToApiModel() }); }