Notation.Plugin.AzureKeyVault/Command/DescribeKey.cs (36 lines of code) (raw):
using System.Text.Json;
using Notation.Plugin.AzureKeyVault.Client;
using Notation.Plugin.AzureKeyVault.Credential;
using Notation.Plugin.Protocol;
namespace Notation.Plugin.AzureKeyVault.Command
{
/// <summary>
/// Implementation of describe-key command.
/// </summary>
public class DescribeKey : IPluginCommand
{
private DescribeKeyRequest _request;
private IKeyVaultClient _keyVaultClient;
/// <summary>
/// Constructor to create DescribeKey object from JSON string.
/// </summary>
public DescribeKey(string inputJson)
{
// Deserialize JSON string to DescribeKeyRequest object
var request = JsonSerializer.Deserialize(inputJson, DescribeKeyRequestContext.Default.DescribeKeyRequest);
if (request == null)
{
throw new ValidationException("Failed to parse the request in JSON format. Please contact Notation maintainers to resolve the issue.");
}
this._request = request;
this._keyVaultClient = new KeyVaultClient(
id: request.KeyId,
credential: Credentials.GetCredentials(request.PluginConfig));
}
/// <summary>
/// Constructor for unit test.
/// </summary>
public DescribeKey(DescribeKeyRequest request, IKeyVaultClient keyVaultClient)
{
this._request = request;
this._keyVaultClient = keyVaultClient;
}
public async Task<IPluginResponse> RunAsync()
{
// Get certificate from Azure Key Vault
var cert = await _keyVaultClient.GetCertificateAsync();
return new DescribeKeyResponse(
keyId: _request.KeyId,
keySpec: cert.KeySpec().EncodeKeySpec());
}
}
}