Перейти к содержанию

Переопределение параметров ЭП в зависимости от карточки

Переопределение параметров ЭП в зависимости от карточки

Если важно использовать различные типы подписи в зависимости от вида документа или от других полей карточки, к которой приложен подписанный файл, такие настройки можно переопределить со сборки TESSA 3.6.0.5.

Создайте клиентское расширение, которое вызывается на все запросы подписания и проверки подписи, выполняемые к серверу.

В этом примере в параметры запроса Request.Info передаётся алиас типа карточки, полученный из текущего контекста UIContext.Current:

using System.Threading.Tasks; using Tessa.Cards; using Tessa.Cards.Extensions; using Tessa.Extensions.Default.Shared; using Tessa.UI;

namespace Tessa.Extensions.Client { public class MySignatureRequestExtension : CardRequestExtension { [Registrator] public class Registrator : RegistratorBase { public override void RegisterExtensions(IExtensionContainer extensionContainer) { extensionContainer .RegisterExtension<ICardRequestExtension, MySignatureRequestExtension>(x => x .WithOrder(ExtensionStage.AfterPlatform, 100) .WithUnity(this.UnityContainer) .WhenRequestTypes(DefaultRequestTypes.CAdESSignature)); } }

public override async Task BeforeRequest(ICardRequestExtensionContext context) { var card = UIContext.Current.CardEditor?.CardModel?.Card; if (card is null) { return; }

context.Request.Info["TypeName"] = card.TypeName; } } }

Теперь со стороны сервера переопределите класс EDSProvider. Во всех его методах в параметр info передаются данные из запроса к сервису Request.Info.

В этом примере для файлов, приложенных к карточкам типа “Договор”, используются настройки подписания и проверки подписи по умолчанию, а для остальных карточек - настройки из карточки настроек ЭП.

using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using CAdESLib.Document.Signature; using CAdESLib.Helpers; using Tessa.Cards; using Tessa.Cards.Caching; using Tessa.EDS; using Tessa.Platform.EDS; using Tessa.Platform.Storage; using Unity; using Unity.Lifetime;

namespace Tessa.Extensions.Server { public class MyEDSProvider : EDSProvider { [Registrator] public class Registrator : RegistratorBase { public override void RegisterUnity() { this.UnityContainer .RegisterType<IEDSProvider, MyEDSProvider>(new ContainerControlledLifetimeManager()); } }

public MyEDSProvider( ICAdESServiceSettings signatureSettings, ICardCache cardCache, Func<ICAdESServiceSettings, IDocumentSignatureService> getCAdESServiceFunc, ICardStreamServerRepository streamServerRepository) : base(signatureSettings, cardCache, getCAdESServiceFunc) { // создаём настройки по умолчанию для Договора this.contractSettings = new CAdESServiceSettings(cardCache, streamServerRepository); }

private readonly ICAdESServiceSettings contractSettings;

protected override async ValueTask<ICAdESServiceSettings> GetSettingsAsync( Dictionary<string, object> info = null, CancellationToken cancellationToken = default) { string typeName = info?.TryGet<string>("TypeName"); if (typeName == "Contract") { // для договора используем свои настройки return this.contractSettings; }

// для остальных карточек - настройки из базовой реализации - по карточке настроек ЭП return await base.GetSettingsAsync(info, cancellationToken); } } }

Back to top