using System; using System.Collections.Generic; using System.Configuration; using System.Diagnostics; using System.Globalization; using System.Net; using System.Net.Mail; using System.Net.Security; using System.Reflection; using System.Web; using System.Web.Helpers; using System.Web.Http; using System.Web.Mvc; using System.Web.Optimization; using System.Web.Routing; using System.Xml; using Kreta.BusinessLogic.Classes; using Kreta.BusinessLogic.Helpers; using Kreta.BusinessLogic.Security; using Kreta.Client.CoreApi.Configuration; using Kreta.Client.Eugyintezes.Configuration; using Kreta.Client.FileService.Configuration; using Kreta.Client.KGR.Configuration; using Kreta.Client.Kir; using Kreta.Client.Leltar.Configuration; using Kreta.Client.SzirApi.Configuration; using Kreta.Client.GlobalApi.Configuration; using Kreta.Core; using Kreta.Core.Configuratiaton; using Kreta.Core.JsonConverter; using Kreta.Framework; using Kreta.Web.App_Start; using Kreta.Web.Areas; using Kreta.Web.Configuration; using Kreta.Web.Logger; using Kreta.Web.ModelBinder.Mvc; using Newtonsoft.Json; using CoreConstants = Kreta.Core.Constants; namespace Kreta.Web { public class Global : HttpApplication { protected static KretaServer.KretaServer kretaServer; void Application_Start(object sender, EventArgs e) { string mdszUrl = ApplicationData.MdszUrl; string kirLoginUrl = ApplicationData.KirLoginUrl; string kirServiceUrl = KirHelper.GetServiceUrl(); string kir2ServiceUrl = KirClient.GetServiceUrl(); string reCAPTCHA = ApplicationData.ReCaptchaValidateUrl; string eventHubBaseUrl = CoreConstants.Configuration.EventHubBaseUrl; var nexiusConfig = (NexiusCourseServiceConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.NexiusCourseService); string nexiusServiceUrl = nexiusConfig.RequestBaseUri.ToString(); var ugyfelszolgalatConfig = (UgyfelszolgalatConfig)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.UgyfelszolgalatConfig); var kozpontiKretaConfig = (KozpontiKretaConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.KozpontiKretaConfig); var eugyintezesClientConfiguration = (EugyintezesClientConfiguration)ConfigurationManager.GetSection("EugyintezesClientConfiguration"); var kirConfiguration = (KirConfiguration)ConfigurationManager.GetSection("KirConfiguration"); var sapConfiguration = (SapConfiguration)ConfigurationManager.GetSection("SapConfiguration"); var fileServiceClientConfiguration = (FileServiceClientConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.FileServiceClientConfiguration); var coreApiClientConfiguration = (CoreApiClientConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.CoreApiClientConfiguration); var kgrClientConfiguration = (KGRClientConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.KGRClientConfiguration); var leltarClientConfiguration = (LeltarClientConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.LeltarClientConfiguration); var szirApiClientConfiguration = (SzirApiClientConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.SzirApiClientConfiguration); var idpConfiguration = (IdpConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.IdpConfiguration); var eesztConfiguration = (EESZTConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.EESZTConfig); var globalApiConfiguration = (GlobalApiConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.GlobalApiConfiguration); var urls = new string[] { mdszUrl, kirLoginUrl, kirServiceUrl, kir2ServiceUrl, eventHubBaseUrl, nexiusServiceUrl, ugyfelszolgalatConfig.Url, kozpontiKretaConfig.KgrUrl, kozpontiKretaConfig.KtrUrl, eugyintezesClientConfiguration.BaseUrl, reCAPTCHA, kirConfiguration.Url, sapConfiguration.BaseUrl, fileServiceClientConfiguration.IDPUrl, fileServiceClientConfiguration.FileUploadUrl, coreApiClientConfiguration.IDPUrl, coreApiClientConfiguration.DKTUrl, coreApiClientConfiguration.CoreApiIDPUrl, coreApiClientConfiguration.CoreApiUrl, kgrClientConfiguration.IDPUrl, kgrClientConfiguration.KGRUrl, leltarClientConfiguration.BaseUrl, idpConfiguration.Authority, eesztConfiguration.InterfaceUrl, szirApiClientConfiguration.ApiUrl, globalApiConfiguration.GlobalApiUrl, globalApiConfiguration.TokenUrl }; var poszeidonConfig = (IktatoServiceConfiguration)ConfigurationManager.GetSection(CoreConstants.ConfigurationSectionNames.KretaPoszeidonConfig); ServicePointManager.ServerCertificateValidationCallback += (requestSender, certificate, chain, sslPolicyErrors) => { var cfg = poszeidonConfig.EndpointAddress.Substring(poszeidonConfig.EndpointAddress.IndexOf("}") + 1); if (((HttpWebRequest)requestSender).Address.ToString().EndsWith(cfg)) { return true; } if (sslPolicyErrors == SslPolicyErrors.None) { if (requestSender is HttpWebRequest request) { var requestUrl = request.Address.ToString(); foreach (string url in urls) { if (requestUrl.Contains(url)) { return true; } } } else if (requestSender is SmtpClient) { return true; } } return false; }; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; MvcHandler.DisableMvcResponseHeader = true; ServerStarter(); AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); FilterConfig.RegisterGlobalApiFilters(GlobalConfiguration.Configuration.Filters); GlobalConfiguration.Configure(WebApiConfig.Register); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AntiForgeryConfig.UniqueClaimTypeIdentifier = KretaClaimTypes.AntiForgeryToken; RegisterCustomValidators(); RegisterCustomModelBinders(); JsonConvert.DefaultSettings = () => new JsonSerializerSettings { Culture = new CultureInfo(CoreConstants.General.HungarianCulture) { NumberFormat = { NumberDecimalSeparator = "," } }, Converters = new List { new StringTrimConverter() } }; } void RegisterCustomValidators() { DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaRequiredAttribute), typeof(RequiredAttributeAdapter)); DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaStringLengthAttribute), typeof(StringLengthAttributeAdapter)); DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaRangeAttribute), typeof(RangeAttributeAdapter)); DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaMinLengthAttribute), typeof(MinLengthAttributeAdapter)); DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaMaxLengthAttribute), typeof(MaxLengthAttributeAdapter)); DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaRequiredIfAttribute), typeof(RequiredAttributeAdapter)); DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(KretaRegularExpressionAttribute), typeof(RegularExpressionAttributeAdapter)); } void RegisterCustomModelBinders() { ModelBinders.Binders.Add(typeof(double), new DoubleModelBinder()); ModelBinders.Binders.Add(typeof(double?), new DoubleModelBinder()); ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder()); ModelBinders.Binders.Add(typeof(decimal?), new DecimalModelBinder()); ModelBinders.Binders.Add(typeof(int), new IntegerModelBinder()); ModelBinders.Binders.Add(typeof(int?), new IntegerModelBinder()); ModelBinders.Binders.Add(typeof(string), new StringTrimModelBinder()); } private void ServerStarter() { //Inditaskor loggolas WriteStack(); //Ha valami hiba volt if (Application["WebStartRequirement"] != null) { return; } AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; //ha nincs inicializalva //vagy ha nem fut a server //akkor elinditom if (kretaServer == null || kretaServer.IsRunning == false) { XmlNode fullnode = (XmlNode)ConfigurationManager.GetSection("ServerConfig"); XmlDocument doc = new XmlDocument(); doc.LoadXml(fullnode.SelectSingleNode("/ServerConfig/config").OuterXml); //Server inditasa if (kretaServer == null) { kretaServer = new KretaServer.KretaServer(doc.DocumentElement); } if (ApplicationData.KretaDebug) { kretaServer.Start(); } else { try { kretaServer.Start(); } catch { Application["WebStartRequirement"] = "Jelenleg a szolgáltatás szünetel!"; return; } } ApplicationData.SystemType = kretaServer.Configuration.SystemType; } // fastreport beallitas FastReport.Utils.Config.WebMode = true; Debug.WriteLine("LEFUTOTT AZ APPLICATIONSTART!!!!!!!"); } void Application_End(object sender, EventArgs e) { WriteStack(); //ha nem null if (kretaServer != null) { //ha fut akkor leallitom if (kretaServer.IsRunning) { kretaServer.Stop(); } //ha nem fut akkor meg nullozom else { kretaServer = null; } } HangfireLogger.ShutdownSerilog(); } private void WriteStack() { try { HttpRuntime runtime = (HttpRuntime)typeof(HttpRuntime).InvokeMember("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField, null, null, null); if (runtime == null) return; string shutDownMessage = (string)runtime.GetType().InvokeMember( "_shutDownMessage", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null); string shutDownStack = (string)runtime.GetType().InvokeMember( "_shutDownStack", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, runtime, null); //EventLog-ba iras //try //{ // if (!EventLog.SourceExists(".NETRuntime")) // { // EventLog.CreateEventSource(".NETRuntime", "Application"); // } // EventLog log = new EventLog(); // log.Source = ".NET Runtime"; // log.WriteEntry(string.Format( // "\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}", // shutDownMessage, // shutDownStack), // EventLogEntryType.Error); //} //catch { } //Fajlba iras StackTrace oSt = new StackTrace(); string message = DateTime.Now + "
" + oSt + "
" + GetHashCode(); if (System.IO.Directory.Exists(@"c:\temp")) { using (System.IO.StreamWriter oWr = new System.IO.StreamWriter(@"c:\temp\SdaLogs", true)) { oWr.WriteLine(message); oWr.WriteLine( $"\r\n\r\n_shutDownMessage={shutDownMessage}\r\n\r\n_shutDownStack={shutDownStack}"); } } } catch { } } private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { Debug.WriteLine(args.Name); return null; } void Application_Error(object sender, EventArgs e) { var exception = Server.GetLastError(); if (exception != null && !ApplicationData.KretaDebug && Request.Url.AbsoluteUri.IndexOf("HibaOldal", StringComparison.OrdinalIgnoreCase) < 0) { SDAServer.Instance.Logger.ExceptionThrown(exception); Response.Redirect("~/HibaOldal"); } } void Application_BeginRequest(object sender, EventArgs e) { var app = sender as HttpApplication; if (app != null && app.Context != null) { app.Context.Response.Headers.Remove("Server"); } } void Application_EndRequest(object sender, EventArgs e) { if (HttpContext.Current.Items.Contains(nameof(UserContext))) { var context = HttpContext.Current.Items[nameof(UserContext)] as UserContext; if (context != null && context.Activated) { context.DeActivate(); } } } } }