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,7 @@
{
"config": {
"connectionStrings": [
"Data Source=kretalocal;User ID=kreta;Password=Porcica1.;Initial Catalog=Kreta;Connection Timeout=3000;"
]
}
}

View file

@ -0,0 +1,43 @@
using System;
using System.Configuration;
using System.Web.Configuration;
using System.Web.Http;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(Kreta.User.WebApi.App_Start.Startup))]
namespace Kreta.User.WebApi.App_Start
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
IncludeErrorDetailPolicy errorDetailPolicy;
var customErrors = (CustomErrorsSection)ConfigurationManager.GetSection("system.web/customErrors");
switch (customErrors.Mode)
{
case CustomErrorsMode.RemoteOnly:
errorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;
break;
case CustomErrorsMode.On:
errorDetailPolicy = IncludeErrorDetailPolicy.Never;
break;
case CustomErrorsMode.Off:
errorDetailPolicy = IncludeErrorDetailPolicy.Always;
break;
default:
throw new ArgumentOutOfRangeException();
}
log4net.Config.XmlConfigurator.Configure();
var config = GlobalConfiguration.Configuration;
config.IncludeErrorDetailPolicy = errorDetailPolicy;
app.UseWebApi(config);
}
}
}

View file

@ -0,0 +1,38 @@
using System.Web.Http;
using Kreta.Core.JsonConverter;
using Kreta.Core.ModelBinder;
using Kreta.Web.Logging.Interceptors;
using Newtonsoft.Json;
namespace Kreta.User.WebApi
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
formatter.SerializerSettings = new JsonSerializerSettings
{
Formatting = Formatting.Indented,
TypeNameHandling = TypeNameHandling.None
};
formatter.SerializerSettings.Converters.Add(new StringTrimConverter());
// Web API routes
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
config.MessageHandlers.Add(new ApiLoggingHandler());
config.BindParameter(typeof(string), new StringTrimModelBinder());
}
}
}

View file

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using Kreta.User.WebApi.Infrastructure;
namespace Kreta.User.WebApi.Attributes
{
internal class ApiKeyAuthorizationAttribute : AuthorizationFilterAttribute, IOverrideFilter
{
const string ApiKey = nameof(ApiKey);
public Type FiltersToOverride
{
get
{
return typeof(IAuthorizationFilter);
}
}
private bool AccessGratnedByApiKey(KeyValuePair<string, IEnumerable<string>> apiKeyHeader)
{
if (apiKeyHeader.Value != null)
{
string targetApiKey = apiKeyHeader.Value?.SingleOrDefault();
if (!string.IsNullOrWhiteSpace(targetApiKey) && targetApiKey == ApiKeyConfiguration.Instance.ApiKey)
{
return true;
}
}
return false;
}
public override void OnAuthorization(HttpActionContext actionContext)
{
var headers = actionContext.Request.Headers;
var apiKeyHeader = headers.SingleOrDefault(x => x.Key.Equals(ApiKey, StringComparison.InvariantCultureIgnoreCase));
if (!AccessGratnedByApiKey(apiKeyHeader))
{
actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}
}
}

View file

@ -0,0 +1,146 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Web.Http;
using Kreta.BusinessLogic.Helpers;
using Kreta.BusinessLogic.Security;
using Kreta.BusinessLogic.Utils;
using Kreta.Core.ConnectionType;
using Kreta.Framework;
using Kreta.Framework.Security;
using Kreta.User.WebApi.Attributes;
using Kreta.User.WebApi.Infrastructure;
using static Kreta.Core.Constants;
namespace Kreta.User.WebApi.Controllers
{
[ApiKeyAuthorization]
[RoutePrefix(Constants.RoutePrefix + Constants.VersionName)]
public class AuthenticationController : ApiController
{
[Route("authenticate")]
[HttpPost]
public IHttpActionResult Authenticate(AuthenticationRequest authenticationRequest)
{
var organizationIdentifier = CommonUtils.GetOrganizationIdentifier();
AuthenticationInfo authenticationInfo;
try
{
authenticationInfo = !string.IsNullOrWhiteSpace(authenticationRequest.Password)
? AuthenticateByUserNameAndPassword(authenticationRequest.UserName, authenticationRequest.Password, organizationIdentifier)
: AuthenticateByUserNameAndUniqueId(authenticationRequest.IdpUniqueId, organizationIdentifier);
}
catch (FrameworkException ex) when (ex is UserNotFoundException || ex is NextTanevBelepesException || ex is ArchivBelepesException)
{
return Unauthorized();
}
catch (Exception ex)
{
return InternalServerError(ex);
}
if (authenticationInfo == null)
{
return Unauthorized();
}
return Ok(authenticationInfo);
}
[Route("status")]
[HttpGet]
public IHttpActionResult Status()
{
return Ok("IAmAlive");
}
[Route("changePassword")]
[HttpPost]
public IHttpActionResult ChangePassword(ChangePasswordRequest changePasswordRequest)
{
if (!ModelState.IsValid)
{
return BadRequest();
}
try
{
var organizationIdentifier = CommonUtils.GetOrganizationIdentifier();
var loginInfo = new FelhasznaloBelepesHelper(new OrganizationConnectionType(0, 0, organizationIdentifier, 0)).AuthenticateUser(changePasswordRequest.Username, changePasswordRequest.Password);
if (loginInfo == null || loginInfo.PasswordState == PasswordState.INVALID)
{
throw new IncorrectPasswordException(loginInfo.BelepesiNev);
}
new FelhasznaloBelepesHelper(new MobileConnectionType(loginInfo.FelhasznaloId, loginInfo.IntezmenyId, loginInfo.IntezmenyAzonosito, loginInfo.AktivTanevId))
.ChangeUserPassword(changePasswordRequest.Username, changePasswordRequest.NewPassword);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
return Ok();
}
private AuthenticationInfo AuthenticateByUserNameAndPassword(string userName, string password, string organizationIdentifier)
{
var loginInfo = new FelhasznaloBelepesHelper(new OrganizationConnectionType(0, 0, organizationIdentifier, 0)).AuthenticateUser(userName, password);
if (loginInfo == null || loginInfo.PasswordState == PasswordState.INVALID)
{
return null;
}
var authenticationInfo = new AuthenticationHelper(new MobileConnectionType(loginInfo.FelhasznaloId, loginInfo.IntezmenyId, loginInfo.IntezmenyAzonosito, loginInfo.AktivTanevId)).GetAuthenticationInfo(loginInfo, intezmenyiDictionaryEnvironmentName: string.Empty);
return authenticationInfo;
}
private AuthenticationInfo AuthenticateByUserNameAndUniqueId(Guid idpUniqueId, string organizationIdentifier)
{
var loginInfo = new FelhasznaloBelepesHelper(new OrganizationConnectionType(0, 0, organizationIdentifier, 0)).GetLoginInfo(bejelentkezesiNev: null, idpUniqueId);
if (loginInfo == null)
{
return null;
}
var authenticationInfo = new AuthenticationHelper(new MobileConnectionType(loginInfo.FelhasznaloId, loginInfo.IntezmenyId, loginInfo.IntezmenyAzonosito, loginInfo.AktivTanevId)).GetAuthenticationInfo(loginInfo, intezmenyiDictionaryEnvironmentName: string.Empty);
var userUniqueId = authenticationInfo.TutelaryIdpUniqueId ?? authenticationInfo.InstituteUserIdpUniqueId;
if (idpUniqueId != userUniqueId)
{
return null;
}
return authenticationInfo;
}
public class AuthenticationRequest
{
public string UserName { get; set; }
public string Password { get; set; }
public Guid IdpUniqueId { get; set; }
}
public class ChangePasswordRequest
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
[Required]
[StringLength(General.JelszoMaximumKarakterekSzama, MinimumLength = General.JelszoMinimumKarakterekSzama)]
public string NewPassword { get; set; }
}
}
}

View file

@ -0,0 +1,25 @@
using System.Web.Http;
using Kreta.User.WebApi.Attributes;
using Kreta.User.WebApi.Infrastructure;
namespace Kreta.User.WebApi.Controllers
{
[ApiKeyAuthorization]
[RoutePrefix(Constants.RoutePrefix + Constants.VersionName)]
public class InformationController : ApiController
{
private readonly Core.VersionInfo _versionInfo;
public InformationController()
{
_versionInfo = Core.KretaVersion.Instance;
}
[Route("getversion")]
[HttpGet]
public Core.VersionInfo GetVersion()
{
return _versionInfo;
}
}
}

View file

@ -0,0 +1 @@
<%@ Application Codebehind="Global.asax.cs" Inherits="Kreta.User.WebApi.WebApiApplication" Language="C#" %>

View file

@ -0,0 +1,50 @@
using System;
using System.Configuration;
using System.Web;
using System.Xml;
namespace Kreta.User.WebApi
{
public class WebApiApplication : HttpApplication
{
protected static KretaServer.KretaServer kretaServer;
protected void Application_Start()
{
ServerStarter();
}
protected void Application_End(object sender, EventArgs e)
{
if (kretaServer != null)
{
if (kretaServer.IsRunning)
{
kretaServer.Stop();
}
else
{
kretaServer = null;
}
}
}
private void ServerStarter()
{
if (kretaServer == null || kretaServer.IsRunning == false)
{
var fullnode = (XmlNode)ConfigurationManager.GetSection("ServerConfig");
var doc = new XmlDocument();
doc.LoadXml(fullnode.SelectSingleNode("/ServerConfig/config").OuterXml);
if (kretaServer == null)
{
kretaServer = new KretaServer.KretaServer(doc.DocumentElement);
}
kretaServer.Start();
}
}
}
}

View file

@ -0,0 +1,26 @@
using System;
using System.Configuration;
namespace Kreta.User.WebApi.Infrastructure
{
public class ApiKeyConfiguration : ConfigurationSection, IApiKeyConfiguration
{
static Lazy<ApiKeyConfiguration> instance;
public static ApiKeyConfiguration Instance
{
get
{
return instance.Value;
}
}
[ConfigurationProperty(nameof(ApiKey), IsRequired = true)]
public string ApiKey => (string)base[nameof(ApiKey)];
static ApiKeyConfiguration()
{
instance = new Lazy<ApiKeyConfiguration>(() => (ApiKeyConfiguration)ConfigurationManager.GetSection(Constants.ConfigurationSectionNames.ApiKeyConfiguration));
}
}
}

View file

@ -0,0 +1,14 @@
namespace Kreta.User.WebApi.Infrastructure
{
public static class Constants
{
public const string VersionName = "v1";
public const string RoutePrefix = "api/";
public static class ConfigurationSectionNames
{
public const string ApiKeyConfiguration = nameof(ApiKeyConfiguration);
}
}
}

View file

@ -0,0 +1,7 @@
namespace Kreta.User.WebApi.Infrastructure
{
interface IApiKeyConfiguration
{
string ApiKey { get; }
}
}

View file

@ -0,0 +1,321 @@
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0AE15A9F-7B41-425F-8A34-B75F5A730D82}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Kreta.User.WebApi</RootNamespace>
<AssemblyName>Kreta.User.WebApi</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<UseIISExpress>false</UseIISExpress>
<Use64BitIISExpress />
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
<UseGlobalApplicationHostFile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CacheManager.Core, Version=1.2.0.0, Culture=neutral, PublicKeyToken=5b450b4fb65c4cdb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\CacheManager.Core.1.2.0\lib\net45\CacheManager.Core.dll</HintPath>
</Reference>
<Reference Include="CacheManager.StackExchange.Redis, Version=1.2.0.0, Culture=neutral, PublicKeyToken=5b450b4fb65c4cdb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\CacheManager.StackExchange.Redis.1.2.0\lib\net461\CacheManager.StackExchange.Redis.dll</HintPath>
</Reference>
<Reference Include="CacheManager.SystemRuntimeCaching, Version=1.2.0.0, Culture=neutral, PublicKeyToken=5b450b4fb65c4cdb, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\CacheManager.SystemRuntimeCaching.1.2.0\lib\net45\CacheManager.SystemRuntimeCaching.dll</HintPath>
</Reference>
<Reference Include="DevDefined.OAuth, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a3261f5b4697e67d, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\DevDefined.OAuth.0.2\lib\DevDefined.OAuth.dll</HintPath>
</Reference>
<Reference Include="Easy.Logger, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Easy.Logger.3.2.0\lib\net40\Easy.Logger.dll</HintPath>
</Reference>
<Reference Include="Easy.Logger.Interfaces, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Easy.Logger.Interfaces.1.1.0\lib\net40\Easy.Logger.Interfaces.dll</HintPath>
</Reference>
<Reference Include="Elasticsearch.Net, Version=7.0.0.0, Culture=neutral, PublicKeyToken=96c599bbe3e70f5d, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Elasticsearch.Net.7.0.0\lib\net461\Elasticsearch.Net.dll</HintPath>
</Reference>
<Reference Include="Hangfire.Core, Version=1.7.27.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Hangfire.Core.1.7.27\lib\net46\Hangfire.Core.dll</HintPath>
</Reference>
<Reference Include="Kreta.Core.Configuration, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Kreta.Core.Configuration.1.3.20119.1\lib\net452\Kreta.Core.Configuration.dll</HintPath>
</Reference>
<Reference Include="Kreta.Web.Logging, Version=1.4.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Kreta.Web.Logging.1.4.5\lib\net48\Kreta.Web.Logging.dll</HintPath>
</Reference>
<Reference Include="Kreta.Web.Logging.Abstractions, Version=1.0.12.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Kreta.Web.Logging.Abstractions.1.0.12\lib\net48\Kreta.Web.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
</Reference>
<Reference Include="log4net.ElasticSearch, Version=2.3.6.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\log4net.ElasticSearch.2.3.6\lib\net45\log4net.ElasticSearch.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.1\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.DotNet.PlatformAbstractions, Version=2.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.DotNet.PlatformAbstractions.2.0.4\lib\net45\Microsoft.DotNet.PlatformAbstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.Configuration.2.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Configuration.Abstractions, Version=2.0.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.0.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Configuration.Binder, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.Configuration.Binder.2.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyModel, Version=2.0.4.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.DependencyModel.2.0.4\lib\net451\Microsoft.Extensions.DependencyModel.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Options, Version=2.0.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.Options.2.0.1\lib\netstandard2.0\Microsoft.Extensions.Options.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Options.ConfigurationExtensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.Options.ConfigurationExtensions.2.0.0\lib\netstandard2.0\Microsoft.Extensions.Options.ConfigurationExtensions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Primitives, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Extensions.Primitives.2.0.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Owin.4.1.0\lib\net45\Microsoft.Owin.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Owin.Host.SystemWeb, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.Owin.Host.SystemWeb.4.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Nexius.Common, Version=18.37.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Nexius.Common.1.0.0.29\lib\Nexius.Common.dll</HintPath>
</Reference>
<Reference Include="Nexius.IdentityProvider.Model, Version=18.36.0.2101, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Nexius.IdentityProvider.Model.1.0.0.109\lib\Nexius.IdentityProvider.Model.dll</HintPath>
</Reference>
<Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
</Reference>
<Reference Include="Pipelines.Sockets.Unofficial, Version=1.0.0.0, Culture=neutral, PublicKeyToken=42ea0a778e13fbe2, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Pipelines.Sockets.Unofficial.2.1.16\lib\net472\Pipelines.Sockets.Unofficial.dll</HintPath>
</Reference>
<Reference Include="Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.2.8.0\lib\net46\Serilog.dll</HintPath>
</Reference>
<Reference Include="Serilog.Formatting.Compact, Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Formatting.Compact.1.0.0\lib\net45\Serilog.Formatting.Compact.dll</HintPath>
</Reference>
<Reference Include="Serilog.Formatting.Elasticsearch, Version=0.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Formatting.Elasticsearch.8.0.0\lib\net45\Serilog.Formatting.Elasticsearch.dll</HintPath>
</Reference>
<Reference Include="Serilog.Settings.Configuration, Version=3.1.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Settings.Configuration.3.1.0\lib\net461\Serilog.Settings.Configuration.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.Elasticsearch, Version=8.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Sinks.Elasticsearch.8.0.0\lib\net461\Serilog.Sinks.Elasticsearch.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.File, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Sinks.File.4.0.0\lib\net45\Serilog.Sinks.File.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.PeriodicBatching, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Sinks.PeriodicBatching.2.1.1\lib\net45\Serilog.Sinks.PeriodicBatching.dll</HintPath>
</Reference>
<Reference Include="Serilog.Sinks.RollingFile, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Serilog.Sinks.RollingFile.3.3.0\lib\net45\Serilog.Sinks.RollingFile.dll</HintPath>
</Reference>
<Reference Include="StackExchange.Redis, Version=2.0.0.0, Culture=neutral, PublicKeyToken=c219ff1ca8c2ce46, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\StackExchange.Redis.2.1.58\lib\net472\StackExchange.Redis.dll</HintPath>
</Reference>
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.3.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Diagnostics.DiagnosticSource.4.5.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Diagnostics.PerformanceCounter, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Diagnostics.PerformanceCounter.4.7.0\lib\net461\System.Diagnostics.PerformanceCounter.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.IO.Pipelines, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.IO.Pipelines.4.7.1\lib\netstandard2.0\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Caching" />
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Channels, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Threading.Channels.4.7.1\lib\net461\System.Threading.Channels.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Http, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebApi.Core.5.2.6\lib\net45\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.Owin, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebApi.Owin.5.2.6\lib\net45\System.Web.Http.Owin.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.WebHost, Version=5.2.6.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.6\lib\net45\System.Web.Http.WebHost.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Web.Services" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Content Include="Global.asax" />
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\Tools\SharedAssemblyInfo.cs">
<Link>Properties\SharedAssemblyInfo.cs</Link>
</Compile>
<Compile Include="App_Start\Startup.cs" />
<Compile Include="App_Start\WebApiConfig.cs" />
<Compile Include="Attributes\ApiKeyAuthorizationAttribute.cs" />
<Compile Include="Controllers\AuthenticationController.cs" />
<Compile Include="Controllers\InformationController.cs" />
<Compile Include="Global.asax.cs">
<DependentUpon>Global.asax</DependentUpon>
</Compile>
<Compile Include="Infrastructure\ApiKeyConfiguration.cs" />
<Compile Include="Infrastructure\Constants.cs" />
<Compile Include="Infrastructure\IApiKeyConfiguration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RequestResponseLogger\AuthenticateRequestBodyRenderer.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="App_Data\IntezmenyConnectionString.json" />
<Content Include="..\..\..\KretaWeb\Resources\StringResources.kres">
<Link>StringResources.kres</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Include="packages.config" />
<None Include="Web.Base.config" />
<None Include="Web.Release.config">
<DependentUpon>Web.Base.config</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Framework\Kreta.Framework.csproj">
<Project>{320ef478-7155-441d-b1e9-47ec3e57fb45}</Project>
<Name>Kreta.Framework</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Kreta.BusinessLogic\Kreta.BusinessLogic.csproj">
<Project>{8876fe0d-841e-422d-a5a0-59239cd98482}</Project>
<Name>Kreta.BusinessLogic</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Kreta.Core\Kreta.Core.csproj">
<Project>{57418D3E-CAF1-482C-9B18-85D147ABD495}</Project>
<Name>Kreta.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Kreta.DataAccessManual\Kreta.DataAccessManual.csproj">
<Project>{3212F2BF-6883-48B4-9F7D-0DFF4C826221}</Project>
<Name>Kreta.DataAccessManual</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Kreta.Enums\Kreta.Enums.csproj">
<Project>{1D5E0AC2-DFAB-4D32-9AD1-B5788A7D06BD}</Project>
<Name>Kreta.Enums</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\Kreta.KretaServer\Kreta.KretaServer.csproj">
<Project>{62eb8504-1c3a-4db1-ab86-f96b2341e201}</Project>
<Name>Kreta.KretaServer</Name>
</ProjectReference>
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>True</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>29035</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>https://biatorbagyi.ekreta.hu/user</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>False</UseCustomServer>
<CustomServerUrl>
</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<Target Name="BeforeBuild">
<TransformXml Condition="Exists('Web.$(Configuration).config')" Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
<Copy Condition="!Exists('Web.$(Configuration).config')" SourceFiles="Web.Base.config" DestinationFiles="Web.config" />
</Target>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
</Target>
</Project>

View file

@ -0,0 +1 @@


View file

@ -0,0 +1,76 @@
using System;
using System.Collections.Specialized;
using System.Text;
using System.Web;
using Kreta.Web.Logging.Logger;
namespace Kreta.User.WebApi.RequestResponseLogger
{
class AuthenticateRequestBodyRenderer : LoggingFieldRenderer
{
const string SecretLogValue = "***";
const string Password = nameof(Password);
const string UserName = nameof(UserName);
public override void Render(string fieldName, LoggingFieldRendererContext context)
{
var contentBodyString = context.GetFieldValue(fieldName) as string;
if (!string.IsNullOrWhiteSpace(contentBodyString))
{
try
{
string userName = null;
NameValueCollection contentBodyElements = HttpUtility.ParseQueryString(contentBodyString);
foreach (string key in contentBodyElements.AllKeys)
{
if (string.Equals(key, Password, StringComparison.InvariantCultureIgnoreCase))
{
contentBodyElements[key] = SecretLogValue;
}
if (string.Equals(key, UserName, StringComparison.InvariantCultureIgnoreCase))
{
userName = contentBodyElements[key];
}
}
if (!string.IsNullOrWhiteSpace(userName))
{
var requestUserIdentifier = new StringBuilder(userName.ToUpper());
var requestUri = context.GetFieldValue(RequestResponseLoggingFields.Request.Uri) as string;
if (!string.IsNullOrWhiteSpace(requestUri))
{
requestUserIdentifier.Append('/');
try
{
var uri = new Uri(requestUri);
requestUserIdentifier.Append(uri.Authority.Split('.')[0]);
}
catch (Exception ex)
{
requestUserIdentifier.Append($"[{ex.Message}]");
}
}
context.SetFieldValue(RequestResponseLoggingFields.Request.User, requestUserIdentifier.ToString());
}
context.SetFieldValue(fieldName, contentBodyElements.ToString());
}
catch (Exception ex)
{
context.SetFieldValue(fieldName, ex.ToString());
}
}
}
}
}

View file

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="ServerConfig" type="Kreta.BusinessLogic.Classes.ConfigsectionHandler"/>
<section name="ApiKeyConfiguration" type="Kreta.User.WebApi.Infrastructure.ApiKeyConfiguration, Kreta.User.WebApi"/>
<section name="RequestResponseLogging" type="Kreta.Web.Logging.Configuration.RequestResponseLoggingConfigurationSection, Kreta.Web.Logging"/>
<section name="SerilogRequestResponseLogger" type="Kreta.Web.Logging.Configuration.Serilog.SerilogConfigurationSection, Kreta.Web.Logging" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<ServerConfig>
<config>
<server>
<name>KRETA</name>
<systemtype>Teszt</systemtype>
<port>18099</port>
<loglevel>DEBUG</loglevel>
<sessiontimeout>46</sessiontimeout>
<!-- A felhasználok inaktivitással töltött max ideje mindig 1 percel kevesebb mint a session idő, (ha 1 akkor 30 másodperc lesz) -->
<!-- Az egy kérésben felhozható rekordok maximális száma. -->
<maxrecordsperrequest>30000</maxrecordsperrequest>
<dbconnection>Data Source=kretalocal;User ID=kreta;Password=Porcica1.;Initial Catalog=Kreta;Connection Timeout=3000;</dbconnection>
<globalapidbconnection>Data Source={0};User ID=kreta;Password=Porcica1.;Initial Catalog={1};MultiSubnetFailover=true;Connection Timeout=100;</globalapidbconnection>
<lcid>1038</lcid>
</server>
</config>
</ServerConfig>
<ApiKeyConfiguration ApiKey="e74cde7878894a83909ca9164ac48ea8"/>
<RequestResponseLogging EnableLogging="false">
<!-- Define handlers here. Handlers are fallback type handlers (if first handler could not log the request second will be applied then third etc.) -->
<Handlers>
<Handler Urls="http://*.*.hu/user/api/v1/authenticate, https://*.*.hu/user/api/v1/authenticate" LogLevels="*" RequestHeaderTrimLength="4096"
RequestBodyTrimLength="8192" ResponseHeaderTrimLength="4096" ResponseBodyTrimLength="32768">
<Renderers>
<Renderer FieldName="Request.ContentBody" Type="Kreta.User.WebApi.RequestResponseLogger.AuthenticateRequestBodyRenderer, Kreta.User.WebApi"/>
</Renderers>
</Handler>
<Handler RequestMediaTypes="multipart/form-data" LogLevels="info" RequestHeaderTrimLength="2048" RequestBodyTrimLength="0"
ResponseHeaderTrimLength="2048" ResponseBodyTrimLength="4096"/>
<Handler RequestMediaTypes="multipart/form-data" LogLevels="error" RequestHeaderTrimLength="4096" RequestBodyTrimLength="0"
ResponseHeaderTrimLength="4096" ResponseBodyTrimLength="32768"/>
<Handler ResponseMediaTypes="text/html" LogLevels="info" RequestHeaderTrimLength="2048" RequestBodyTrimLength="2048" ResponseHeaderTrimLength="2048"
ResponseBodyTrimLength="0"/>
<Handler ResponseMediaTypes="application/json, application/xml, text/plain, empty" LogLevels="info" RequestHeaderTrimLength="2048"
RequestBodyTrimLength="2048" ResponseHeaderTrimLength="2048" ResponseBodyTrimLength="4096"/>
<Handler ResponseMediaTypes="text/html, application/json, application/xml, text/plain, empty" LogLevels="error" RequestHeaderTrimLength="4096"
RequestBodyTrimLength="32768" ResponseHeaderTrimLength="4096" ResponseBodyTrimLength="32768"/>
</Handlers>
</RequestResponseLogging>
<SerilogRequestResponseLogger LossyBufferSize="10000">
<ElasticSearch
UseCustomBackOffLogic="true"
NodeUris="http://elasticsearch.ekreta-dev.hu:9200/"
IndexFormat="kreta_user_requestresponselog_serilog-{0:yyyy.MM.dd}"
MinimumLogEventLevel="Information"
ConnectionTimeoutInSeconds="30"
WaitBetweenForCheckingEventBatchesInSeconds="1"
BatchPostingLimit="100"
AutoRegisterTemplateVersion="ESv7" />
</SerilogRequestResponseLogger>
<log4net>
<logger name="RequestResponseLogger">
<level value="ALL"/>
<appender-ref ref="AsyncBufferingForwarder"/>
</logger>
<appender name="AsyncBufferingForwarder" type="Easy.Logger.AsyncBufferingForwardingAppender, Easy.Logger">
<bufferSize value="2048"/>
<lossy value="true"/>
<Fix value="508"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ALL"/>
</evaluator>
<appender-ref ref="FileAppender"/>
</appender>
<appender name="ElasticSearchAppender" type="log4net.ElasticSearch.ElasticSearchAppender, log4net.ElasticSearch">
<connectionString value="Scheme=http;Server=elasticsearch.ekreta-dev.hu;Index=kreta_user_requestresponselog;Port=9200;rolling=true"/>
<lossy value="false"/>
<Fix value="508"/>
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ALL"/>
</evaluator>
<bufferSize value="1"/>
</appender>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
<file value="App_Data\Log\requestresponse"/>
<datePattern value=".yyyy-MM-dd'.log'"/>
<appendToFile value="true"/>
<maximumFileSize value="2MB"/>
<maxSizeRollBackups value="10"/>
<rollingStyle value="Composite"/>
<countDirection value="1"/>
<staticLogFileName value="false"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %utcdate %level %thread %logger %message%newline"/>
</layout>
</appender>
</log4net>
<appSettings/>
<system.web>
<customErrors mode="Off"/>
<compilation debug="true" targetFramework="4.8"/>
<httpRuntime targetFramework="4.6.1"/>
<pages>
<namespaces>
<remove namespace="Kendo.Mvc.UI"/>
<remove namespace="MvcSiteMapProvider.Web.Html"/>
<remove namespace="MvcSiteMapProvider.Web.Html.Models"/>
</namespaces>
</pages>
</system.web>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
<modules>
<remove name="UsageModule"/>
<remove name="LoggingModule"/>
<remove name="Session"/>
</modules>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Configuration" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Options" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.1.0" newVersion="2.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Configuration.FileExtensions" publicKeyToken="adb9793829ddae60" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Configuration.Binder" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.FileProviders.Physical" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.FileProviders.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.FileSystemGlobbing" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.DotNet.PlatformAbstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.4.0" newVersion="2.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CacheManager.Core" publicKeyToken="5b450b4fb65c4cdb" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.0" newVersion="1.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- For more information on using web.config transformation visit https://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
<connectionStrings>
<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
-->
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
<!--
In the example below, the "Replace" transform will replace the entire
<customErrors> section of your web.config file.
Note that because there is only one customErrors section under the
<system.web> node, there is no need to use the "xdt:Locator" attribute.
<customErrors defaultRedirect="GenericError.htm"
mode="RemoteOnly" xdt:Transform="Replace">
<error statusCode="500" redirect="InternalError.htm"/>
</customErrors>
-->
</system.web>
</configuration>

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CacheManager.Core" version="1.2.0" targetFramework="net48" />
<package id="CacheManager.StackExchange.Redis" version="1.2.0" targetFramework="net48" />
<package id="CacheManager.SystemRuntimeCaching" version="1.2.0" targetFramework="net48" />
<package id="DevDefined.OAuth" version="0.2" targetFramework="net48" />
<package id="Easy.Logger" version="3.2.0" targetFramework="net48" />
<package id="Easy.Logger.Interfaces" version="1.1.0" targetFramework="net48" />
<package id="Elasticsearch.Net" version="7.0.0" targetFramework="net48" />
<package id="Hangfire.Core" version="1.7.27" targetFramework="net48" />
<package id="Kreta.Core.Configuration" version="1.3.20119.1" targetFramework="net48" />
<package id="Kreta.Web.Logging" version="1.4.5" targetFramework="net48" />
<package id="Kreta.Web.Logging.Abstractions" version="1.0.12" targetFramework="net48" />
<package id="log4net" version="2.0.8" targetFramework="net48" />
<package id="log4net.ElasticSearch" version="2.3.6" targetFramework="net48" />
<package id="Meziantou.Analyzer" version="1.0.688" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.AspNet.WebApi" version="5.2.6" targetFramework="net48" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.6" targetFramework="net48" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.6" targetFramework="net48" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.6" targetFramework="net48" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.6" targetFramework="net48" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="1.1.1" targetFramework="net48" />
<package id="Microsoft.DotNet.PlatformAbstractions" version="2.0.4" targetFramework="net48" />
<package id="Microsoft.Extensions.Configuration" version="2.0.0" targetFramework="net48" />
<package id="Microsoft.Extensions.Configuration.Abstractions" version="2.0.1" targetFramework="net48" />
<package id="Microsoft.Extensions.Configuration.Binder" version="2.0.0" targetFramework="net48" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.0.0" targetFramework="net48" />
<package id="Microsoft.Extensions.DependencyModel" version="2.0.4" targetFramework="net48" />
<package id="Microsoft.Extensions.Options" version="2.0.1" targetFramework="net48" />
<package id="Microsoft.Extensions.Options.ConfigurationExtensions" version="2.0.0" targetFramework="net48" />
<package id="Microsoft.Extensions.Primitives" version="2.0.0" targetFramework="net48" />
<package id="Microsoft.Owin" version="4.1.0" targetFramework="net48" />
<package id="Microsoft.Owin.Host.SystemWeb" version="4.1.0" targetFramework="net48" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net48" />
<package id="Nexius.Common" version="1.0.0.29" targetFramework="net48" />
<package id="Nexius.IdentityProvider.Model" version="1.0.0.109" targetFramework="net48" />
<package id="Owin" version="1.0" targetFramework="net48" />
<package id="Pipelines.Sockets.Unofficial" version="2.1.16" targetFramework="net48" />
<package id="Serilog" version="2.8.0" targetFramework="net48" />
<package id="Serilog.Formatting.Compact" version="1.0.0" targetFramework="net48" />
<package id="Serilog.Formatting.Elasticsearch" version="8.0.0" targetFramework="net48" />
<package id="Serilog.Settings.Configuration" version="3.1.0" targetFramework="net48" />
<package id="Serilog.Sinks.Elasticsearch" version="8.0.0" targetFramework="net48" />
<package id="Serilog.Sinks.File" version="4.0.0" targetFramework="net48" />
<package id="Serilog.Sinks.PeriodicBatching" version="2.1.1" targetFramework="net48" />
<package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net48" />
<package id="StackExchange.Redis" version="2.1.58" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="4.5.1" targetFramework="net48" />
<package id="System.Diagnostics.PerformanceCounter" version="4.7.0" targetFramework="net48" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net48" />
<package id="System.IO.Pipelines" version="4.7.1" targetFramework="net48" />
<package id="System.Memory" version="4.5.3" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.7.1" targetFramework="net48" />
<package id="System.Threading.Channels" version="4.7.1" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
</packages>