using Hcs.Client.Internal;
using Hcs.Client.Logger;
using Hcs.Client.MessageCapturer;
using System.Security.Cryptography.X509Certificates;
namespace Hcs.Client
{
public abstract class ClientBase
{
///
/// Идентификатор поставщика данных ГИС ЖКХ
///
public string OrgPPAGUID { get; set; }
///
/// Исполнитель/сотрудник ГИС ЖКХ, от которого будут регистрироваться ответы
///
public string ExecutorGUID { get; set; }
///
/// Признак, указывающий на то, что используется ли внешний туннель (stunnel)
///
public bool UseTunnel { get; set; }
///
/// Если true, то запросы будут выполняться на промышленном стенде, иначе - на тестовом
///
public bool IsPPAK { get; set; }
///
/// Роль
///
public OrganizationRole Role { get; set; }
///
/// Устанавливаемый пользователем приемник отладочных сообщений
///
public ILogger Logger { get; set; }
///
/// Устанавливаемый пользователем механизм перехвата содержимого отправляемых
/// и принимаемых пакетов
///
public IMessageCapturer MessageCapturer { get; set; }
///
/// Сертификат клиента для применения при формировании запросов
///
internal X509Certificate2 Certificate { get; set; }
///
/// Тип криптопровайдера, полученный из сертификата
///
internal GostXades.CryptoProviderTypeEnum CryptoProviderType { get; set; }
internal GostCryptography.Base.ProviderType GostCryptoProviderType =>
(GostCryptography.Base.ProviderType)CryptoProviderType;
///
/// Отпечаток сертификата
///
internal string CertificateThumbprint { get; set; }
///
/// Пароль доступа к сертификату
///
internal string CertificatePassword { get; set; }
internal string ComposeEndpointUri(string endpointName)
{
if (UseTunnel)
{
return $"http://{Constants.URI_TUNNEL}/{endpointName}";
}
return IsPPAK
? $"https://{Constants.URI_PPAK}/{endpointName}"
: $"https://{Constants.URI_SIT_02}/{endpointName}";
}
///
/// Пробует вывести сообщение в установленный приемник отладочных сообщений
///
internal void TryLog(string message)
{
Logger?.WriteLine(message);
}
///
/// Пробует отправить тело сообщения в установленный перехватчик
///
internal void TryCaptureMessage(bool sent, string messageBody)
{
MessageCapturer?.CaptureMessage(sent, messageBody);
}
}
}