kreta/Kreta.EESZTInterface/eFTHelper.cs
2024-03-13 00:33:46 +01:00

90 lines
4.1 KiB
C#

using System;
using System.IO;
using System.IO.Compression;
using System.Security.Cryptography;
using System.Xml;
using System.Xml.Serialization;
using Kreta.EESZTInterface.eFT.Model.AllomanyResz.Response;
using Kreta.EESZTInterface.eFT.Model.IntezmenyiAllomanyLista.Response;
using Kreta.EESZTInterface.eFT.Model.SikeresCimzettAllomanyLetoltes.Response;
using Kreta.EESZTInterface.STS;
namespace Kreta.EESZTInterface
{
public class EFTHelper
{
private readonly string eftUrl;
public EFTHelper(string eftUrl)
{
this.eftUrl = $"{eftUrl}/EFT/AllomanyPublikalo";
}
public GetIntezmenyiAllomanyListaResponse CallIntezmenyAllomanyLista(SamlAssertion samlAssertion, string clientUserId, string organizationId)
{
var bo = eFT.CreateSoap.GetIntezmenyiAllomanyListaBusinessObject(samlAssertion, clientUserId, organizationId);
var xDoc = eFT.CreateSoap.CreateGetIntezmenyiAllomanyLista(samlAssertion.Original, bo);
var (soapResponse, _) = eFT.DoRequest.GetSoapSamlResponse(eftUrl, CertificateHelper.GetSslCertificate(), xDoc, samlAssertion);
var resp = (XmlElement)(soapResponse.GetElementsByTagName("getIntezmenyiAllomanyListaResponse", Namespaces.allomanyPublikaloServiceV1Ns).Item(0));
return SerializeResponseContent<GetIntezmenyiAllomanyListaResponse>(resp);
}
public (GetAllomanyReszResponse response, byte[] attachment) CallAllomanyResz(SamlAssertion samlAssertion, string clientUserId, string organizationId, Guid publikusId, int sorszam)
{
var bo = eFT.CreateSoap.GetAllomanyReszBusinessObject(samlAssertion, clientUserId, organizationId, publikusId, sorszam);
var xDoc = eFT.CreateSoap.CreateGetAllomanyresz(samlAssertion.Original, bo);
var (soapResponse, mTOMAttachment) = eFT.DoRequest.GetSoapSamlResponse(eftUrl, CertificateHelper.GetSslCertificate(), xDoc, samlAssertion);
var resp = (XmlElement)(soapResponse.GetElementsByTagName("getAllomanyReszResponse", Namespaces.allomanyPublikaloServiceV1Ns).Item(0));
return (SerializeResponseContent<GetAllomanyReszResponse>(resp), mTOMAttachment);
}
public SikeresCimzettAllomanyLetoltesResponse CallSikeresAllomanyLetoltes(SamlAssertion samlAssertion, string clientUserId, string organizationId, Guid publikusId)
{
var bo = eFT.CreateSoap.GetSikeresCimzettAllomanyLetoltesBO(samlAssertion, clientUserId, organizationId, publikusId);
var xDoc = eFT.CreateSoap.CreateSikeresLetoltes(samlAssertion.Original, bo);
var (soapResponse, _) = eFT.DoRequest.GetSoapSamlResponse(eftUrl, CertificateHelper.GetSslCertificate(), xDoc, samlAssertion);
var resp = (XmlElement)(soapResponse.GetElementsByTagName("sikeresCimzettAllomanyLetoltesResponse", Namespaces.allomanyPublikaloServiceV1Ns).Item(0));
return SerializeResponseContent<SikeresCimzettAllomanyLetoltesResponse>(resp);
}
private T SerializeResponseContent<T>(XmlElement element)
{
var serializer = new XmlSerializer(typeof(T));
using (TextReader reader = new StringReader(element.OuterXml))
{
return (T)serializer.Deserialize(reader);
}
}
public static byte[] ComputeSha256Hash(byte[] reszadat)
{
using (var sha256Hash = SHA256.Create())
{
return sha256Hash.ComputeHash(reszadat);
}
}
public static byte[] Decompress(byte[] input)
{
using (var source = new MemoryStream(input))
{
byte[] lengthBytes = new byte[4];
source.Read(lengthBytes, 0, 4);
var length = BitConverter.ToInt32(lengthBytes, 0);
using (var decompressionStream = new GZipStream(source,
CompressionMode.Decompress))
{
var result = new byte[length];
decompressionStream.Read(result, 0, length);
return result;
}
}
}
}
}