diff --git a/src/PSInfisicalAPI/Models/InfisicalCertificatePolicy.cs b/src/PSInfisicalAPI/Models/InfisicalCertificatePolicy.cs index 5708648..a8181a0 100644 --- a/src/PSInfisicalAPI/Models/InfisicalCertificatePolicy.cs +++ b/src/PSInfisicalAPI/Models/InfisicalCertificatePolicy.cs @@ -8,7 +8,7 @@ namespace PSInfisicalAPI.Models public string ProjectId { get; set; } public string Name { get; set; } public string Description { get; set; } - public InfisicalCertificatePolicySubject Subject { get; set; } + public InfisicalCertificatePolicySubject[] Subject { get; set; } public InfisicalCertificatePolicySan[] Sans { get; set; } public InfisicalCertificatePolicyUsages KeyUsages { get; set; } public InfisicalCertificatePolicyUsages ExtendedKeyUsages { get; set; } diff --git a/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyDtos.cs b/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyDtos.cs index 485ea5a..3da73d5 100644 --- a/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyDtos.cs +++ b/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyDtos.cs @@ -10,7 +10,7 @@ namespace PSInfisicalAPI.Pki [JsonProperty("projectId")] public string ProjectId { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } - [JsonProperty("subject")] public InfisicalCertificatePolicySubjectDto Subject { get; set; } + [JsonProperty("subject")] public JToken SubjectRaw { get; set; } [JsonProperty("sans")] public JToken SansRaw { get; set; } [JsonProperty("keyUsages")] public InfisicalCertificatePolicyUsagesDto KeyUsages { get; set; } [JsonProperty("extendedKeyUsages")] public InfisicalCertificatePolicyUsagesDto ExtendedKeyUsages { get; set; } diff --git a/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyMapper.cs b/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyMapper.cs index 69d3f74..8ba015a 100644 --- a/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyMapper.cs +++ b/src/PSInfisicalAPI/Pki/InfisicalCertificatePolicyMapper.cs @@ -21,7 +21,7 @@ namespace PSInfisicalAPI.Pki ProjectId = !string.IsNullOrEmpty(dto.ProjectId) ? dto.ProjectId : fallbackProjectId, Name = dto.Name, Description = dto.Description, - Subject = MapSubject(dto.Subject), + Subject = MapSubjects(dto.SubjectRaw), Sans = MapSans(dto.SansRaw), KeyUsages = MapUsages(dto.KeyUsages), ExtendedKeyUsages = MapUsages(dto.ExtendedKeyUsages), @@ -52,8 +52,32 @@ namespace PSInfisicalAPI.Pki return results.ToArray(); } - private static InfisicalCertificatePolicySubject MapSubject(InfisicalCertificatePolicySubjectDto dto) + private static InfisicalCertificatePolicySubject[] MapSubjects(JToken token) { + if (token == null || token.Type == JTokenType.Null) { return null; } + + List results = new List(); + if (token.Type == JTokenType.Array) + { + foreach (JToken child in (JArray)token) + { + InfisicalCertificatePolicySubject mapped = MapSubjectObject(child); + if (mapped != null) { results.Add(mapped); } + } + } + else if (token.Type == JTokenType.Object) + { + InfisicalCertificatePolicySubject mapped = MapSubjectObject(token); + if (mapped != null) { results.Add(mapped); } + } + + return results.Count > 0 ? results.ToArray() : null; + } + + private static InfisicalCertificatePolicySubject MapSubjectObject(JToken token) + { + if (token == null || token.Type != JTokenType.Object) { return null; } + InfisicalCertificatePolicySubjectDto dto = token.ToObject(); if (dto == null) { return null; } return new InfisicalCertificatePolicySubject {