Switch to DocumentService API, remove PKCS#11 support
Replaced PKCS#11-based cryptographic operations with a new DocumentService API integration. Removed all PKCS#11-related code, configurations, and dependencies, including options, self-test status, and signing logic. Updated `FinalizeEnvelopeCommand` to include a notification service and added base64 conversion for documents. Updated `ServiceCollectionExtensions` to register the new DocumentService client. Removed outdated documentation and diagrams related to PKCS#11. Updated project files and configurations to reflect these changes and incremented the version number. Added a comment in `EnvelopeFinalizationWorker` for future RabbitMQ integration.
This commit is contained in:
@@ -1,94 +0,0 @@
|
||||
using EnvelopeGenerator.Application.Common.Enums;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace EnvelopeGenerator.Application.Common.Configurations;
|
||||
|
||||
/// <summary>
|
||||
/// Represents PKCS#11 signing configuration for PDF signing workflows.
|
||||
/// This options model maps to the <c>Crypt:Pkcs11</c> configuration section.
|
||||
/// </summary>
|
||||
public sealed class Pkcs11Options
|
||||
{
|
||||
/// <summary>
|
||||
/// Configuration section path used for binding PKCS#11 options.
|
||||
/// </summary>
|
||||
public const string SectionName = "Crypt:Pkcs11";
|
||||
|
||||
/// <summary>
|
||||
/// Optional base directory that contains the <c>pkcs11</c> folder.
|
||||
/// If null/empty, runtime uses the application base directory.
|
||||
/// </summary>
|
||||
public string? AssetsRootPath { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional numeric slot identifier used to directly select the target token slot.
|
||||
/// </summary>
|
||||
public ulong? SlotId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional token label used as a fallback token selector when <see cref="SlotId"/> is not provided.
|
||||
/// </summary>
|
||||
public string? TokenLabel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional PKCS#11 proxy endpoint (for example <c>tcp://host:port</c>).
|
||||
/// </summary>
|
||||
public string? ProxySocket { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Resolved absolute PKCS#11 proxy module path used at runtime.
|
||||
/// Computed from <see cref="AssetsRootPath"/> and runtime defaults.
|
||||
/// </summary>
|
||||
public string ResolvedLibraryPath { get; private set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Resolved absolute pkcs11-tool path used at runtime.
|
||||
/// Computed from <see cref="AssetsRootPath"/> and runtime defaults.
|
||||
/// Can be null when tool fallback is not available.
|
||||
/// </summary>
|
||||
public string? ResolvedToolPath { get; private set; }
|
||||
|
||||
public void SetResolvedPaths(string resolvedLibraryPath, string? resolvedToolPath)
|
||||
{
|
||||
ResolvedLibraryPath = resolvedLibraryPath;
|
||||
ResolvedToolPath = resolvedToolPath;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// User PIN used to authenticate to the PKCS#11 token session.
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MinLength(1)]
|
||||
public required string UserPin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Label of the private key object used to create digital signatures.
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MinLength(1)]
|
||||
public required string PrivateKeyLabel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Label of the certificate object returned/embedded with the signature.
|
||||
/// </summary>
|
||||
[Required]
|
||||
[MinLength(1)]
|
||||
public required string CertificateLabel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optional global default signing reason used when request-level options do not specify a value.
|
||||
/// </summary>
|
||||
public string? DefaultReason { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Application name embedded into PDF signature metadata.
|
||||
/// This value is controlled via app settings and is not client-overridable.
|
||||
/// </summary>
|
||||
public string? ApplicationName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Controls how fallback signing time is created when request-level options do not specify a value.
|
||||
/// <c>true</c> uses <see cref="DateTimeOffset.UtcNow"/>, <c>false</c> uses <see cref="DateTimeOffset.Now"/>.
|
||||
/// </summary>
|
||||
public bool UseUtcSigningTime { get; set; } = true;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
namespace EnvelopeGenerator.Application.Common.Dto;
|
||||
|
||||
public sealed record Pkcs11SelfTestStatusDto(
|
||||
bool Completed,
|
||||
bool Success,
|
||||
string Mode,
|
||||
string Summary,
|
||||
DateTimeOffset? CheckedAtUtc,
|
||||
string? InteropError,
|
||||
string? ToolError);
|
||||
@@ -1,8 +0,0 @@
|
||||
using EnvelopeGenerator.Application.Common.Dto;
|
||||
|
||||
namespace EnvelopeGenerator.Application.Common.Interfaces.Services;
|
||||
|
||||
public interface IPkcs11SelfTestStatusProvider
|
||||
{
|
||||
Pkcs11SelfTestStatusDto GetStatus();
|
||||
}
|
||||
@@ -44,6 +44,7 @@ public record FinalizeEnvelopeCommand : EnvelopeQueryBase, IRequest
|
||||
/// </summary>
|
||||
/// <param name="Repo"></param>
|
||||
/// <param name="Sender"></param>
|
||||
/// <param name="NtfServer"></param>
|
||||
public class FinalizeEnvelopeCommandHandler(IRepository<Envelope> Repo, ISender Sender, IEnvelopeNotificationService NtfServer) : IRequestHandler<FinalizeEnvelopeCommand>
|
||||
{
|
||||
/// <summary>
|
||||
@@ -90,7 +91,7 @@ public class FinalizeEnvelopeCommandHandler(IRepository<Envelope> Repo, ISender
|
||||
using var ms = new MemoryStream();
|
||||
docStream.CopyTo(ms);
|
||||
byte[] doc = ms.ToArray();
|
||||
|
||||
string base64 = Convert.ToBase64String(doc);
|
||||
foreach (var er in envelope.EnvelopeReceivers)
|
||||
{
|
||||
await NtfServer.Notify(er.Receiver.EmailAddress, new DocumentSignedNotification()
|
||||
|
||||
Reference in New Issue
Block a user