/// <summary> /// Create new request /// </summary> /// <param name="model"></param> public StartNewKeyPairRequestApiModel(StartNewKeyPairRequestModel model) { EntityId = model.EntityId; GroupId = model.GroupId; SubjectName = model.SubjectName; DomainNames = model.DomainNames; }
/// <inheritdoc/> public async Task<StartNewKeyPairRequestResultModel> StartNewKeyPairRequestAsync( StartNewKeyPairRequestModel request, VaultOperationContextModel context, CancellationToken ct) { if (request == null) { throw new ArgumentNullException(nameof(request)); } if (string.IsNullOrEmpty(request.EntityId)) { throw new ArgumentNullException(nameof(request.EntityId)); } if (string.IsNullOrEmpty(request.GroupId)) { throw new ArgumentNullException(nameof(request.GroupId)); } if (string.IsNullOrEmpty(request.SubjectName)) { throw new ArgumentNullException(nameof(request.SubjectName)); } // Get entity var entity = await _entities.FindEntityAsync(request.EntityId); if (entity == null) { throw new ResourceNotFoundException("Entity not found"); } // Validate subject name var subjectList = Opc.Ua.Utils.ParseDistinguishedName(request.SubjectName); if (subjectList == null || subjectList.Count == 0) { throw new ArgumentException("Invalid Subject", nameof(request.SubjectName)); } if (!subjectList.Any(c => c.StartsWith("CN=", StringComparison.InvariantCulture))) { throw new ArgumentException("Invalid Subject, must have a common name (CN=).", nameof(request.SubjectName)); } entity.SubjectName = string.Join(", ", subjectList); // Add domain names if (request.DomainNames != null) { if (entity.Addresses == null) { entity.Addresses = request.DomainNames; } else { entity.Addresses.AddRange(request.DomainNames); } } var result = await _repo.AddAsync(new CertificateRequestModel { Record = new CertificateRequestRecordModel { Type = CertificateRequestType.KeyPairRequest, EntityId = entity.Id, GroupId = request.GroupId, Submitted = context.Validate(), }, Entity = entity }, ct); await _broker.NotifyAllAsync( l => l.OnCertificateRequestSubmittedAsync(result)); _logger.Information("New Key pair request submitted."); return new StartNewKeyPairRequestResultModel { RequestId = result.Record.RequestId }; }