Add new Hcs.Broker to communicate with ГИС ЖКХ via CryptoPro LibCore

This commit is contained in:
2025-09-28 15:45:15 +09:00
parent 904988780a
commit 2b49320014
171 changed files with 185618 additions and 0 deletions

View File

@ -0,0 +1,63 @@
using Hcs.Broker.Internal;
namespace Hcs.Broker.Api.Request.Exception
{
internal class RemoteException : System.Exception
{
internal const string NO_OBJECTS_FOR_EXPORT = "INT002012";
internal const string MISSING_IN_REGISTRY = "INT002000";
internal const string ACCESS_DENIED = "AUT011003";
internal string ErrorCode { get; private set; }
internal string Description { get; private set; }
public RemoteException(string errorCode, string description)
: base(Combine(errorCode, description))
{
ErrorCode = errorCode;
Description = description;
}
public RemoteException(string errorCode, string description, System.Exception nestedException)
: base(Combine(errorCode, description), nestedException)
{
ErrorCode = errorCode;
Description = description;
}
private static string Combine(string errorCode, string description)
{
return $"Remote server returned an error: [{errorCode}] {description}";
}
internal static RemoteException CreateNew(string errorCode, string description, System.Exception nested = null)
{
if (string.Compare(errorCode, NO_OBJECTS_FOR_EXPORT) == 0)
{
return new NoResultsRemoteException(errorCode, description, nested);
}
return new RemoteException(errorCode, description);
}
internal static RemoteException CreateNew(RemoteException nested)
{
if (nested == null)
{
throw new ArgumentNullException(nameof(nested));
}
return CreateNew(nested.ErrorCode, nested.Description, nested);
}
/// <summary>
/// Возвращает true, если ошибка @e или ее вложенные ошибки содержат @errorCode
/// </summary>
internal static bool ContainsErrorCode(SystemException e, string errorCode)
{
if (e == null)
{
return false;
}
return Util.EnumerateInnerExceptions(e).OfType<RemoteException>().Where(x => x.ErrorCode == errorCode).Any();
}
}
}