Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions nameshield-caplugin/Models/Certificate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@ public class Certificate
[JsonPropertyName("attributes")]
[JsonProperty("attributes")]
public CertificateAttributes Attributes { get; set; }
[JsonPropertyName("relationships")]
[JsonProperty("relationships")]
public CertificateRelationships Relationships { get; set; }
}

public class CertificateAttributes
Expand All @@ -60,4 +63,18 @@ public class CertificateAttributes
[JsonProperty("pem")]
public string Pem { get; set; }
}

public class CertificateRelationships
{
[JsonPropertyName("current-order")]
[JsonProperty("current-order")]
public CertOrderRelationship Order { get; set; }
}

public class CertOrderRelationship
{
[JsonPropertyName("data")]
[JsonProperty("data")]
public RelationshipData Data { get; set; }
}
}
29 changes: 19 additions & 10 deletions nameshield-caplugin/NameshieldCAPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,12 @@ public async Task<EnrollmentResult> Enroll(string csr, string subject, Dictionar
}
_logger.LogTrace($"Certificate enrolled successfully");

var cert = GetSingleRecord(response.Order.Relationships.Certificate.Data.id).Result;

var reqId = $"{response.Order.Id}-{response.Order.Relationships.Certificate.Data.id}";
var cert = GetSingleRecord(reqId).Result;

return new EnrollmentResult
{
CARequestID = cert.CARequestID,
CARequestID = reqId,
Certificate = cert.Certificate,
Status = cert.Status,
StatusMessage = $"Successfully enrolled for certificate {subject}"
Expand Down Expand Up @@ -191,11 +192,17 @@ public List<string> GetProductIds()
public async Task<AnyCAPluginCertificate> GetSingleRecord(string caRequestID)
{
NameshieldClient client = NameshieldClient.InitializeClient(_config);
var idParts = caRequestID.Split('-').ToList();
if (idParts.Count == 1)
{
_logger.LogWarning($"Order {caRequestID} is still awaiting delivery.");
throw new Exception($"Unable to retrieve certificate for order {caRequestID} as it is still awaiting delivery. The certificate will be picked up by a future sync once it is issued.");
}
string certId = idParts[1];
var cert = Task.Run(async () => await client.GetCertificate(certId)).Result;
var certProduct = Task.Run(async () => await client.GetCertificateProduct(certId)).Result;

var cert = Task.Run(async () => await client.GetCertificate(caRequestID)).Result;
var certProduct = Task.Run(async () => await client.GetCertificateProduct(caRequestID)).Result;

int status = ConvertToKeyfactorStatus(cert.Certificate.Attributes.Status, caRequestID);
int status = ConvertToKeyfactorStatus(cert.Certificate.Attributes.Status, certId);

return new AnyCAPluginCertificate()
{
Expand Down Expand Up @@ -271,11 +278,13 @@ public async Task Synchronize(BlockingCollection<AnyCAPluginCertificate> blockin

foreach (var cert in certs.Certificates)
{
var certObj = Task.Run(async () => await client.GetCertificate(cert.Id)).Result;
var certProduct = Task.Run(async () => await client.GetCertificateProduct(cert.Id)).Result;
int status = ConvertToKeyfactorStatus(cert.Attributes.Status, cert.Id);
var newCert = new AnyCAPluginCertificate()
{
CARequestID = cert.Id,
CARequestID = $"{certObj.Certificate.Relationships.Order.Data.id}-{cert.Id}",
OldCARequestID = certObj.Certificate.Relationships.Order.Data.id,
ProductID = certProduct.CertificateProduct.Attributes.Name,
Status = status,
Certificate = cert.Attributes.Pem,
Expand Down Expand Up @@ -336,7 +345,7 @@ private static string ValidateConfigurationKey(Dictionary<string, object> connec
return string.Empty;
}

private static int ConvertToKeyfactorStatus(string status, string sslId)
private static int ConvertToKeyfactorStatus(string status, string certId)
{
switch (status.ToUpper())
{
Expand All @@ -353,7 +362,7 @@ private static int ConvertToKeyfactorStatus(string status, string sslId)
return (int)EndEntityStatus.REVOKED;

default:
throw new Exception($"Request ID {sslId} has unknown status {status}");
throw new Exception($"Request ID {certId} has unknown status {status}");
}
}

Expand Down
2 changes: 1 addition & 1 deletion nameshield-caplugin/nameshield-caplugin.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Keyfactor.AnyGateway.IAnyCAPlugin" Version="3.0.0" />
<PackageReference Include="Keyfactor.AnyGateway.IAnyCAPlugin" Version="3.2.0" />
<PackageReference Include="Keyfactor.Common" Version="2.5.0" />
<PackageReference Include="Keyfactor.Logging" Version="1.1.1" />
<PackageReference Include="Keyfactor.PKI" Version="5.5.0" />
Expand Down
Loading