init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
11
Kreta.Client/Kir/Interfaces/IKirAuthentication.cs
Normal file
11
Kreta.Client/Kir/Interfaces/IKirAuthentication.cs
Normal file
|
@ -0,0 +1,11 @@
|
|||
using Kreta.Client.Kir2Service;
|
||||
|
||||
namespace Kreta.Client.Kir.Interfaces
|
||||
{
|
||||
public interface IKirAuthentication
|
||||
{
|
||||
string GetKirToken();
|
||||
|
||||
KIR2AuthHeaderType GetAuthHeader(string kirToken);
|
||||
}
|
||||
}
|
11
Kreta.Client/Kir/Interfaces/IKirClient.cs
Normal file
11
Kreta.Client/Kir/Interfaces/IKirClient.cs
Normal 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);
|
||||
}
|
||||
}
|
171
Kreta.Client/Kir/KirAuthentication.cs
Normal file
171
Kreta.Client/Kir/KirAuthentication.cs
Normal 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
|
||||
}
|
||||
}
|
160
Kreta.Client/Kir/KirClient.cs
Normal file
160
Kreta.Client/Kir/KirClient.cs
Normal 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
|
||||
}
|
||||
}
|
18998
Kreta.Client/Kir/KirModels/KirKretaKerelem.cs
Normal file
18998
Kreta.Client/Kir/KirModels/KirKretaKerelem.cs
Normal file
File diff suppressed because it is too large
Load diff
15028
Kreta.Client/Kir/KirModels/newReference.cs
Normal file
15028
Kreta.Client/Kir/KirModels/newReference.cs
Normal file
File diff suppressed because it is too large
Load diff
29
Kreta.Client/Kir/Models/KerelemFejModel.cs
Normal file
29
Kreta.Client/Kir/Models/KerelemFejModel.cs
Normal 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
|
||||
};
|
||||
}
|
||||
}
|
88
Kreta.Client/Kir/Models/KirKerelemModel.cs
Normal file
88
Kreta.Client/Kir/Models/KirKerelemModel.cs
Normal 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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
13
Kreta.Client/Kir/Models/KirLogin.cs
Normal file
13
Kreta.Client/Kir/Models/KirLogin.cs
Normal 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; }
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue