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.
65 lines
2.4 KiB
C#
65 lines
2.4 KiB
C#
using EnvelopeGenerator.Application.PdfSigning;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Infrastructure;
|
|
using MediatR;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace EnvelopeGenerator.Server.Services;
|
|
|
|
public sealed class EnvelopeFinalizationWorker(
|
|
IServiceScopeFactory scopeFactory,
|
|
ILogger<EnvelopeFinalizationWorker> logger) : BackgroundService
|
|
{
|
|
private static readonly TimeSpan PollInterval = TimeSpan.FromMinutes(1);
|
|
|
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
|
{
|
|
while (!stoppingToken.IsCancellationRequested)
|
|
{
|
|
try
|
|
{
|
|
using var scope = scopeFactory.CreateScope();
|
|
var dbContext = scope.ServiceProvider.GetRequiredService<EGDbContext>();
|
|
var sender = scope.ServiceProvider.GetRequiredService<ISender>();
|
|
|
|
var envelopeIds = await dbContext.Envelopes
|
|
.AsNoTracking()
|
|
.Where(e => e.Status == EnvelopeStatus.EnvelopeCompletelySigned && e.DocResult == null)
|
|
.Select(e => e.Id)
|
|
.ToListAsync(stoppingToken);
|
|
|
|
foreach(var envelopeId in envelopeIds)
|
|
{
|
|
try
|
|
{
|
|
await sender.Send(new FinalizeEnvelopeCommand()
|
|
{
|
|
Id = envelopeId,
|
|
BurnedAllowed = false,
|
|
SaveDocResult = true,
|
|
}, stoppingToken);
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
// TODO: integrate rabbit mq and handle exception (such as delete)
|
|
logger.LogError(ex, "Unexpected exception happened during finalization of envelope. Envelope ID: {EnvelopeId}", envelopeId);
|
|
}
|
|
}
|
|
|
|
// continue here
|
|
logger.LogDebug("EnvelopeFinalizationWorker found {Count} signed envelope(s) without DOC_RESULT.", envelopeIds.Count);
|
|
}
|
|
catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
|
|
{
|
|
break;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.LogError(ex, "EnvelopeFinalizationWorker failed while reading envelopes.");
|
|
}
|
|
|
|
await Task.Delay(PollInterval, stoppingToken);
|
|
}
|
|
}
|
|
}
|