This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,11 @@
using Kreta.Client.Kir2Service;
namespace Kreta.Client.Kir.Interfaces
{
public interface IKirAuthentication
{
string GetKirToken();
KIR2AuthHeaderType GetAuthHeader(string kirToken);
}
}

View file

@ -0,0 +1,11 @@
using Kreta.Client.Kir.Models;
namespace Kreta.Client.Kir.Interfaces
{
public interface IKirClient
{
KirKerelemModel.BekuldesResponseModel KerelemBekuldese(KirKerelemModel.BekuldesRequestModel requestModel);
KirKerelemModel.StatuszLekerdezesResponseModel KerelemStatuszLekerdezes(KirKerelemModel.StatuszLekerdezesRequestModel requestModel);
}
}

View file

@ -0,0 +1,171 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Runtime.Caching;
using System.Threading.Tasks;
using HtmlAgilityPack;
using Kreta.Client.Kir.Interfaces;
using Kreta.Client.Kir.Models;
using Kreta.Client.Kir2Service;
using Kreta.Core;
using Kreta.Resources;
namespace Kreta.Client.Kir
{
public class KirAuthentication : IKirAuthentication
{
private static HttpClient HttpClient = new HttpClient();
#region Privát osztály változók
private string FelhasznaloNevCacheKey { get; set; }
private string JelszoCacheKey { get; set; }
private string IntezmenyAzonosito { get; }
private string FelhasznaloNev
{
get => Cache.Get(FelhasznaloNevCacheKey)?.ToString();
set
{
if (FelhasznaloNev == null)
{
Cache.Add(FelhasznaloNevCacheKey, value, new CacheItemPolicy { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(5)) });
}
}
}
private string Jelszo
{
get => Cache.Get(JelszoCacheKey)?.ToString();
set
{
if (Jelszo == null)
{
Cache.Add(JelszoCacheKey, value, new CacheItemPolicy { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(5)) });
}
}
}
private string LoginUrl { get; }
#endregion Privát osztály változók
public KirAuthentication(KirLogin loginModel, string felhasznaloNevCacheKey, string jelszoCacheKey)
{
LoginUrl = loginModel.LoginUrl;
IntezmenyAzonosito = loginModel.IntezmenyAzonosito;
FelhasznaloNevCacheKey = felhasznaloNevCacheKey;
JelszoCacheKey = jelszoCacheKey;
if (string.IsNullOrWhiteSpace(FelhasznaloNev) && string.IsNullOrWhiteSpace(Jelszo))
{
FelhasznaloNev = loginModel.FelhasznaloNev;
Jelszo = loginModel.Jelszo;
}
if (string.IsNullOrWhiteSpace(LoginUrl))
{
throw new ArgumentException(ErrorResource.KirLoginUrlNincsMegadvaAzAppSettingsben);
}
}
public KIR2AuthHeaderType GetAuthHeader(string kirToken)
{
return new KIR2AuthHeaderType
{
Intezmeny = IntezmenyAzonosito,
Felhasznalo = new FelhasznaloType
{
Item = new IntezmenyiFelhasznaloType
{
FelhasznaloNev = FelhasznaloNev,
KIRToken = kirToken
}
}
};
}
#region Get KIR token
public string GetKirToken()
{
try
{
string requestVerificationToken = GetRequestVerificationToken();
string loginResponse = AsyncUtil.RunSync(() => GetLoginResponse(requestVerificationToken, IntezmenyAzonosito, FelhasznaloNev, Jelszo));
return GetToken(loginResponse);
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError)
{
if (ex.Response is HttpWebResponse response)
{
var statusCode = (int)response.StatusCode;
if (statusCode != (int)HttpStatusCode.OK)
{
throw new Exception(ErrorResource.ASzolgaltatasNemElerhetoProbaljaKesobbEsetlegHaAHibaHuzamosabbIdeigFennallJelezzeAzIlletekeseknek, ex);
}
}
}
else
{
throw new Exception(ErrorResource.IsmeretlenHibaTortentAKirOldalanKerjukKisereljeMegAzImportalastKesobb, ex);
}
}
return null;
}
private string GetRequestVerificationToken()
{
string loginPage = AsyncUtil.RunSync(() => HttpClient.GetStringAsync(LoginUrl));
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(loginPage);
HtmlNode requestVerificationTokenNode = htmlDocument.DocumentNode.SelectSingleNode("//input[@name='__RequestVerificationToken']");
return requestVerificationTokenNode?.Attributes["value"].Value;
}
private async Task<string> GetLoginResponse(string requestVerificationToken, string intezmenyAzonosito, string felhasznaloNev, string jelszo)
{
HttpResponseMessage result = await HttpClient.PostAsync(LoginUrl,
new FormUrlEncodedContent(
new Dictionary<string, string>
{
{ "__RequestVerificationToken", requestVerificationToken },
{ "UserDto.UserType", "3" },
{ "UserDto.FenntId", string.Empty },
{ "UserDto.TKAzonosito", string.Empty },
{ "UserDto.OMAzonosito", intezmenyAzonosito },
{ "UserDto.UserName", felhasznaloNev },
{ "UserDto.Password", jelszo },
{ "ContinueUrl", string.Empty },
{ "RedirectPartnerId", string.Empty }
}
));
return await result.Content.ReadAsStringAsync();
}
private string GetToken(string loginResponse)
{
var htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(loginResponse);
HtmlNode tokenNode = htmlDocument.GetElementbyId("token");
return tokenNode?.InnerText.Trim();
}
#endregion Get KIR token
}
}

View file

@ -0,0 +1,160 @@
using System;
using System.Runtime.Caching;
using Kreta.Client.Kir.Interfaces;
using Kreta.Client.Kir.Models;
using Kreta.Client.Kir2Service;
using Kreta.Core;
using Kreta.Resources;
namespace Kreta.Client.Kir
{
public class KirClient : IKirClient
{
#region Privát osztály változók
private string KirTokenCacheKey { get; set; }
private string KirToken
{
get => Cache.Get(KirTokenCacheKey)?.ToString();
set
{
if (KirToken == null)
{
Cache.Add(KirTokenCacheKey, value, new CacheItemPolicy { AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(5)) });
}
}
}
private IKirAuthentication KirAuthentication { get; }
private KIR2AuthHeaderType Kir2AuthHeaderType { get; set; }
private string IntezmenyAzonosito { get; set; }
#endregion Privát osztály változók
public static string GetServiceUrl()
{
using (var client = new Service_KIR_IFClient())
{
return client.Endpoint.Address.Uri.ToString();
}
}
public KirClient(IKirAuthentication kirAuthentication, string kirTokenCacheKey)
{
KirAuthentication = kirAuthentication;
try
{
KirTokenCacheKey = kirTokenCacheKey;
if (string.IsNullOrWhiteSpace(KirToken))
{
Authenticate();
}
else
{
Kir2AuthHeaderType = KirAuthentication.GetAuthHeader(KirToken);
}
}
catch
{
throw;
}
}
private void Authenticate()
{
string kirToken = KirAuthentication.GetKirToken();
if (string.IsNullOrWhiteSpace(kirToken))
{
throw new Exception(ErrorResource.AKirRendszerbenTortenoAzonositasKozbenHibaTortent);
}
KirToken = kirToken;
Kir2AuthHeaderType = KirAuthentication.GetAuthHeader(kirToken);
}
private T CallService<T>(Func<Service_KIR_IFClient, T> action)
{
return new ClientHelper().CallService(action);
}
#region Kérelem beküldése
public KirKerelemModel.BekuldesResponseModel KerelemBekuldese(KirKerelemModel.BekuldesRequestModel requestModel)
{
KerelemBekuldesRequestType request = KirKerelemModel.BekuldesRequestModel.ConvertRequestModelToRequestType(requestModel);
try
{
KirKerelemModel.BekuldesResponseModel resultRequest = KerelemBekuldese(request);
return resultRequest;
}
catch
{
throw;
}
}
private KirKerelemModel.BekuldesResponseModel KerelemBekuldese(KerelemBekuldesRequestType request)
{
KerelemBekuldesResponseType response = CallService(x => x.KerelemBekuldes(Kir2AuthHeaderType, request));
if (response.isSuccess)
{
KirKerelemModel.BekuldesResponseModel resultResponse = KirKerelemModel.BekuldesResponseModel.ConvertResponseTypeToResponseModel(response);
return resultResponse;
}
throw new Exception(ErrorResource.NemSikerultAKirKerelemBekuldese);
}
#endregion Kérelem beküldése
#region Kérelem státusz lekérdezés
public KirKerelemModel.StatuszLekerdezesResponseModel KerelemStatuszLekerdezes(KirKerelemModel.StatuszLekerdezesRequestModel requestModel)
{
KerelemStatuszLekerdezesRequestType request = KirKerelemModel.StatuszLekerdezesRequestModel.ConvertRequestModelToRequestType(requestModel);
if (!string.IsNullOrWhiteSpace(requestModel.KontenerElemId))
{
request.KontenerElemID = requestModel.KontenerElemId;
}
try
{
KirKerelemModel.StatuszLekerdezesResponseModel resultResponse = KerelemStatuszLekerdezes(request);
return resultResponse;
}
catch
{
throw;
}
}
private KirKerelemModel.StatuszLekerdezesResponseModel KerelemStatuszLekerdezes(KerelemStatuszLekerdezesRequestType request)
{
KerelemStatuszLekerdezesResponseType response = CallService(x => x.KerelemStatuszLekerdezes(Kir2AuthHeaderType, request));
if (response.isSuccess)
{
KirKerelemModel.StatuszLekerdezesResponseModel resultResponse = KirKerelemModel.StatuszLekerdezesResponseModel.ConvertResponseTypeToResponseModel(response);
return resultResponse;
}
throw new Exception(ErrorResource.NemSikerultAKirStatuszLekerdezes);
}
#endregion Kérelem státusz lekérdezés
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,29 @@
using System;
using Kreta.Client.Kir.KirModels;
namespace Kreta.Client.Kir.Models
{
public class KerelemFejModel
{
public string RogzitoKliensId { get; set; }
public string RogzitoKliensValue { get; set; }
public ulong RogzitoNeveId { get; set; }
public string RogzitoNeveValue { get; set; }
public DateTime RogzitesDatuma { get; set; }
public string KliensId { get; set; }
public KerelemFejType ConvertKerelemFejModelToKerelemFejType()
=> new KerelemFejType
{
RogzitoKliens = new stringWithStringId { id = RogzitoKliensId, Value = RogzitoKliensValue },
RogzitoNeve = new stringWithId { id = RogzitoNeveId, Value = RogzitoNeveValue },
RogzitesDatuma = RogzitesDatuma,
KliensId = KliensId
};
}
}

View file

@ -0,0 +1,88 @@
using System;
using Kreta.Client.Kir2Service;
namespace Kreta.Client.Kir.Models
{
public class KirKerelemModel
{
public string ExternalId { get; set; } = "1";
public string Version { get; set; } = "1";
public string ClientApp { get; set; } = "KRETA";
public string KontenerId { get; set; }
public string IARAzonosito { get; set; }
public MessageType[] Messages { get; set; }
public class BekuldesRequestModel : KirKerelemModel
{
public CelSzolgaltatasType CelSzolgaltatasType { get; set; }
public DateTime Idopont { get; set; }
public bool Alairva { get; set; } = false;
public string KerelemXml { get; set; }
public static KerelemBekuldesRequestType ConvertRequestModelToRequestType(BekuldesRequestModel requestModel)
=> new KerelemBekuldesRequestType
{
externalId = requestModel.ExternalId,
version = requestModel.Version,
clientApp = requestModel.ClientApp,
KontenerID = requestModel.KontenerId,
IARAzonosito = requestModel.IARAzonosito,
CelSzolgaltatas = requestModel.CelSzolgaltatasType,
Idopont = requestModel.Idopont,
Alairva = requestModel.Alairva,
KerelemXML = requestModel.KerelemXml
};
}
public class StatuszLekerdezesRequestModel : KirKerelemModel
{
public string KontenerElemId { get; set; } = null;
public static KerelemStatuszLekerdezesRequestType ConvertRequestModelToRequestType(StatuszLekerdezesRequestModel requestModel)
=> new KerelemStatuszLekerdezesRequestType
{
externalId = requestModel.ExternalId,
version = requestModel.Version,
clientApp = requestModel.ClientApp,
KontenerID = requestModel.KontenerId,
IARAzonosito = requestModel.IARAzonosito
};
}
public class BekuldesResponseModel : KirKerelemModel
{
public string Valaszkod { get; set; }
public static BekuldesResponseModel ConvertResponseTypeToResponseModel(KerelemBekuldesResponseType responseModel)
=> new BekuldesResponseModel
{
ExternalId = responseModel.externalId,
Messages = responseModel.Messages,
Valaszkod = responseModel.Valaszkod
};
}
public class StatuszLekerdezesResponseModel : KirKerelemModel
{
public KontenerStatuszType KontenerStatusz { get; set; }
public static StatuszLekerdezesResponseModel ConvertResponseTypeToResponseModel(KerelemStatuszLekerdezesResponseType responseModel)
=> new StatuszLekerdezesResponseModel
{
ExternalId = responseModel.externalId,
Messages = responseModel.Messages,
KontenerStatusz = responseModel.KontenerStatusz
};
}
}
}

View file

@ -0,0 +1,13 @@
namespace Kreta.Client.Kir.Models
{
public class KirLogin
{
public string LoginUrl { get; set; }
public string IntezmenyAzonosito { get; set; }
public string FelhasznaloNev { get; set; }
public string Jelszo { get; set; }
}
}