Support updating version information.

This commit is contained in:
Nick Blakely 2022-09-05 13:42:41 -07:00
parent 24e547fde2
commit 79e5e42527
19 changed files with 735 additions and 261 deletions

1
.gitignore vendored
View File

@ -13,6 +13,7 @@ vcpkg_installed
*.userosscache
*.sln.docstates
appsettings.Development.json
appsettings.Production.json
profile.arm.json
# User-specific files (MonoDevelop/Xamarin Studio)

View File

@ -35,5 +35,15 @@
{
return new Version(this.Major, this.Minor, this.Build, this.Revision);
}
public static bool operator<(AppVersion a, AppVersion b)
{
return a.ToVersion() < b.ToVersion();
}
public static bool operator>(AppVersion a, AppVersion b)
{
return a.ToVersion() > b.ToVersion();
}
}
}

View File

@ -0,0 +1,6 @@
using Giants.DataContract.V1;
namespace Giants.DataContract.Contracts.V1
{
public record VersionInfoUpdate(string AppName, AppVersion AppVersion, string FileName);
}

View File

@ -17,8 +17,8 @@
services.AddSingleton<IServerRegistryStore, CosmosDbServerRegistryStore>();
services.AddSingleton<IDateTimeProvider, DefaultDateTimeProvider>();
services.AddSingleton<IMemoryCache, MemoryCache>();
services.AddSingleton<IUpdaterStore, CosmosDbUpdaterStore>();
services.AddSingleton<IUpdaterService, UpdaterService>();
services.AddSingleton<IVersioningStore, CosmosDbVersioningStore>();
services.AddSingleton<IVersioningService, VersioningService>();
services.AddSingleton<ICommunityService, CommunityService>();
services.AddSingleton<ICrashReportService, CrashReportService>();

View File

@ -1,9 +0,0 @@
namespace Giants.Services
{
using System.Threading.Tasks;
public interface IUpdaterService
{
Task<VersionInfo> GetVersionInfo(string gameName);
}
}

View File

@ -0,0 +1,12 @@
namespace Giants.Services
{
using Giants.DataContract.V1;
using System.Threading.Tasks;
public interface IVersioningService
{
Task<VersionInfo> GetVersionInfo(string appName);
Task UpdateVersionInfo(string appName, AppVersion appVersion, string fileName);
}
}

View File

@ -6,11 +6,11 @@
public class InitializerService : IHostedService
{
private readonly IUpdaterStore updaterStore;
private readonly IVersioningStore updaterStore;
private readonly IServerRegistryStore serverRegistryStore;
public InitializerService(
IUpdaterStore updaterStore,
IVersioningStore updaterStore,
IServerRegistryStore serverRegistryStore)
{
// TODO: Pick these up from reflection and auto initialize

View File

@ -1,21 +0,0 @@
using System.Threading.Tasks;
namespace Giants.Services
{
public class UpdaterService : IUpdaterService
{
private readonly IUpdaterStore updaterStore;
public UpdaterService(IUpdaterStore updaterStore)
{
this.updaterStore = updaterStore;
}
public async Task<VersionInfo> GetVersionInfo(string appName)
{
ArgumentUtility.CheckStringForNullOrEmpty(appName, nameof(appName));
return await this.updaterStore.GetVersionInfo(appName);
}
}
}

View File

@ -0,0 +1,71 @@
using Giants.DataContract.V1;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Giants.Services
{
public class VersioningService : IVersioningService
{
private readonly IVersioningStore versioningStore;
private readonly IConfiguration configuration;
private readonly ILogger<VersioningService> logger;
private const string InstallerContainerName = "public";
public VersioningService(
IVersioningStore updaterStore,
IConfiguration configuration,
ILogger<VersioningService> logger)
{
this.versioningStore = updaterStore;
this.configuration = configuration;
this.logger = logger;
}
public Task<VersionInfo> GetVersionInfo(string appName)
{
ArgumentUtility.CheckStringForNullOrEmpty(appName);
return this.versioningStore.GetVersionInfo(appName);
}
public async Task UpdateVersionInfo(string appName, AppVersion appVersion, string fileName)
{
ArgumentUtility.CheckStringForNullOrEmpty(appName);
ArgumentUtility.CheckForNull(appVersion);
ArgumentUtility.CheckStringForNullOrEmpty(fileName);
Uri storageAccountUri = new Uri(this.configuration["StorageAccountUri"]);
VersionInfo versionInfo = await this.GetVersionInfo(appName);
if (versionInfo == null)
{
throw new ArgumentException($"No version information for {appName} found.", nameof(appName));
}
if (appVersion < versionInfo.Version)
{
throw new ArgumentException($"Version {appVersion.SerializeToJson()} is less than current version {versionInfo.Version.SerializeToJson()}", nameof(appVersion));
}
if (fileName.Contains('/') || fileName.Contains('\\'))
{
throw new ArgumentException("File name must be relative to configured storage account.", nameof(fileName));
}
var installerUri = new Uri(storageAccountUri, $"{InstallerContainerName}/{fileName}");
var newVersionInfo = new VersionInfo()
{
AppName = appName,
Version = appVersion,
InstallerUri = installerUri,
};
this.logger.LogInformation("Updating version info for {appName}: {versionInfo}", appName, newVersionInfo.SerializeToJson());
await this.versioningStore.UpdateVersionInfo(newVersionInfo);
}
}
}

View File

@ -6,14 +6,14 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
public class CosmosDbUpdaterStore : IUpdaterStore
public class CosmosDbVersioningStore : IVersioningStore
{
private readonly ILogger<CosmosDbServerRegistryStore> logger;
private readonly IMemoryCache memoryCache;
private readonly IConfiguration configuration;
private CosmosDbClient client;
public CosmosDbUpdaterStore(
public CosmosDbVersioningStore(
ILogger<CosmosDbServerRegistryStore> logger,
IMemoryCache memoryCache,
IConfiguration configuration)
@ -39,6 +39,11 @@
return versionInfo;
}
public async Task UpdateVersionInfo(VersionInfo versionInfo)
{
await this.client.UpsertItem(versionInfo);
}
public async Task Initialize()
{
this.client = new CosmosDbClient(

View File

@ -3,13 +3,18 @@
using System;
using System.Threading.Tasks;
public class FileUpdaterStore : IUpdaterStore
public class FileVersioningStore : IVersioningStore
{
public Task<VersionInfo> GetVersionInfo(string appName)
{
throw new NotImplementedException();
}
public Task UpdateVersionInfo(VersionInfo versionInfo)
{
throw new NotImplementedException();
}
public Task Initialize()
{
throw new NotImplementedException();

View File

@ -2,10 +2,12 @@
{
using System.Threading.Tasks;
public interface IUpdaterStore
public interface IVersioningStore
{
Task<VersionInfo> GetVersionInfo(string appName);
Task UpdateVersionInfo(VersionInfo versionInfo);
Task Initialize();
}
}

View File

@ -1,10 +1,5 @@
namespace Giants.Services
{
// Decompiled with JetBrains decompiler
// Type: Microsoft.VisualStudio.Services.Common.ArgumentUtility
// Assembly: Microsoft.VisualStudio.Services.Common, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// MVID: 8C174B92-2E1F-4F71-9E6B-FC8D9F2C517A
using System;
using System.Collections;
using System.ComponentModel;
@ -14,7 +9,7 @@
public static class ArgumentUtility
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForNull(object var, string varName)
public static void CheckForNull(object var, [CallerArgumentExpression("var")] string varName = null)
{
if (var == null)
throw new ArgumentNullException(varName);
@ -23,18 +18,18 @@
public static void CheckStringForNullOrEmpty(
string stringVar,
string stringVarName)
[CallerArgumentExpression("stringVar")] string stringVarName = null)
{
ArgumentUtility.CheckStringForNullOrEmpty(stringVar, stringVarName, false);
ArgumentUtility.CheckStringForNullOrEmpty(stringVar, false, stringVarName);
}
public static void CheckForNonnegativeInt(int var, string varName)
public static void CheckForNonnegativeInt(int var, [CallerArgumentExpression("var")] string varName = null)
{
if (var < 0)
throw new ArgumentOutOfRangeException(varName);
}
public static void CheckForNonPositiveInt(int var, string varName)
public static void CheckForNonPositiveInt(int var, [CallerArgumentExpression("var")] string varName = null)
{
if (var <= 0)
throw new ArgumentOutOfRangeException(varName);
@ -42,8 +37,8 @@
public static void CheckStringForNullOrEmpty(
string stringVar,
string stringVarName,
bool trim)
bool trim,
[CallerArgumentExpression("stringVar")] string stringVarName = null)
{
ArgumentUtility.CheckForNull((object)stringVar, stringVarName);
if (trim)
@ -54,9 +49,9 @@
public static void CheckStringLength(
string stringVar,
string stringVarName,
int maxLength,
int minLength = 0)
int minLength = 0,
[CallerArgumentExpression("stringVar")] string stringVarName = null)
{
ArgumentUtility.CheckForNull((object)stringVar, stringVarName);
if (stringVar.Length < minLength || stringVar.Length > maxLength)
@ -65,7 +60,7 @@
public static void CheckEnumerableForNullOrEmpty(
IEnumerable enumerable,
string enumerableName)
[CallerArgumentExpression("enumerable")] string enumerableName = null)
{
ArgumentUtility.CheckForNull((object)enumerable, enumerableName);
if (!enumerable.GetEnumerator().MoveNext())
@ -74,7 +69,7 @@
public static void CheckEnumerableForNullElement(
IEnumerable enumerable,
string enumerableName)
[CallerArgumentExpression("enumerable")] string enumerableName = null)
{
ArgumentUtility.CheckForNull((object)enumerable, enumerableName);
foreach (object obj in enumerable)
@ -84,7 +79,7 @@
}
}
public static void CheckForEmptyGuid(Guid guid, string varName)
public static void CheckForEmptyGuid(Guid guid, [CallerArgumentExpression("guid")] string varName = null)
{
if (guid.Equals(Guid.Empty))
throw new ArgumentException("EmptyGuidNotAllowed", varName);
@ -94,7 +89,7 @@
int value,
int minValue,
int maxValue,
string varName)
[CallerArgumentExpression("value")] string varName = null)
{
if (value < minValue || value > maxValue)
throw new ArgumentOutOfRangeException(varName, "ValueOutOfRange");
@ -103,8 +98,8 @@
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForOutOfRange<T>(
T var,
string varName,
T minimum)
T minimum,
[CallerArgumentExpression("var")] string varName = null)
where T : IComparable<T>
{
ArgumentUtility.CheckForNull((object)var, varName);
@ -115,9 +110,9 @@
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForOutOfRange(
int var,
string varName,
int minimum,
int maximum)
int maximum,
[CallerArgumentExpression("var")] string varName = null)
{
if (var < minimum || var > maximum)
throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange");
@ -126,9 +121,9 @@
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForOutOfRange(
long var,
string varName,
long minimum,
long maximum)
long maximum,
[CallerArgumentExpression("var")] string varName = null)
{
if (var < minimum || var > maximum)
throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange");
@ -136,18 +131,12 @@
public static void CheckForDateTimeRange(
DateTime var,
string varName,
DateTime minimum,
DateTime maximum)
DateTime maximum,
[CallerArgumentExpression("var")] string varName = null)
{
if (var < minimum || var > maximum)
throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange");
}
public static void EnsureIsNull(object var, string varName)
{
if (var != null)
throw new ArgumentException("NullValueNecessary");
}
}
}

View File

@ -0,0 +1,12 @@
using System.Text.Json;
namespace Giants.Services
{
public static class ObjectExtensions
{
public static string SerializeToJson(this object obj)
{
return JsonSerializer.Serialize(obj);
}
}
}

View File

@ -1,7 +1,10 @@
using System.Threading.Tasks;
using AutoMapper;
using AutoMapper;
using Giants.DataContract.Contracts.V1;
using Giants.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Web.Resource;
using System.Threading.Tasks;
namespace Giants.WebApi.Controllers
{
@ -12,22 +15,36 @@ namespace Giants.WebApi.Controllers
public class VersionController : ControllerBase
{
private readonly IMapper mapper;
private readonly IUpdaterService updaterService;
private readonly IVersioningService versioningService;
private const string VersionWriteScope = "App.Write";
public VersionController(
IMapper mapper,
IUpdaterService updaterService)
IVersioningService versioningService)
{
this.mapper = mapper;
this.updaterService = updaterService;
this.versioningService = versioningService;
}
[HttpGet]
public async Task<DataContract.V1.VersionInfo> GetVersionInfo(string appName)
{
Services.VersionInfo versionInfo = await this.updaterService.GetVersionInfo(appName);
ArgumentUtility.CheckStringForNullOrEmpty(appName);
Services.VersionInfo versionInfo = await this.versioningService.GetVersionInfo(appName);
return this.mapper.Map<DataContract.V1.VersionInfo>(versionInfo);
}
[Authorize]
[RequiredScopeOrAppPermission(
AcceptedAppPermission = new[] { VersionWriteScope }) ]
[HttpPost]
public async Task UpdateVersionInfo([FromBody] VersionInfoUpdate versionInfoUpdate)
{
ArgumentUtility.CheckForNull(versionInfoUpdate);
await this.versioningService.UpdateVersionInfo(versionInfoUpdate.AppName, versionInfoUpdate.AppVersion, versionInfoUpdate.FileName);
}
}
}

View File

@ -11,8 +11,9 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="10.0.0" />
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.14.0" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="4.1.1" />
<PackageReference Include="Microsoft.Identity.Web" Version="1.25.2" />
<PackageReference Include="NSwag.AspNetCore" Version="13.7.0" />
</ItemGroup>

View File

@ -1,5 +1,6 @@
using AutoMapper;
using Giants.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
@ -8,6 +9,12 @@ using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
using Microsoft.Identity.Web;
using Microsoft.IdentityModel.Logging;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Threading.Tasks;
namespace Giants.Web
{
@ -32,6 +39,47 @@ namespace Giants.Web
services.AddOpenApiDocument();
services.AddApplicationInsightsTelemetry();
IdentityModelEventSource.ShowPII = true;
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAd", options);
options.Events = new JwtBearerEvents();
options.Events.OnAuthenticationFailed = async context =>
{
await Task.CompletedTask;
};
options.Events.OnForbidden = async context =>
{
await Task.CompletedTask;
};
options.Events.OnChallenge = async context =>
{
await Task.CompletedTask;
};
options.Events.OnTokenValidated = async context =>
{
string[] allowedClientApps = this.Configuration.GetValue<string>("AllowedClientIds").Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
string clientAppId = context?.Principal?.Claims
.FirstOrDefault(x => x.Type == "azp" || x.Type == "appid")?.Value;
if (clientAppId == null || !allowedClientApps.Contains(clientAppId))
{
throw new UnauthorizedAccessException("The client app is not permitted to access this API");
}
await Task.CompletedTask;
};
}, options =>
{
Configuration.Bind("AzureAd", options);
});
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
@ -46,6 +94,7 @@ namespace Giants.Web
{
if (env.IsDevelopment())
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
app.UseDeveloperExceptionPage();
app.UseOpenApi();
}
@ -54,8 +103,10 @@ namespace Giants.Web
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();

View File

@ -12,7 +12,7 @@
"ServerTimeoutPeriodInMinutes": "7",
"ServerCleanupIntervalInMinutes": "1",
"MaxServerCount": 1000,
"MaxServersPerIp": 5,
"MaxServersPerIp": 5,
"DiscordUri": "https://discord.gg/Avj4azU",
"BlobConnectionString": "",
"CrashBlobContainerName": "crashes"

View File

@ -12,14 +12,23 @@
"System.Reflection.Emit": "4.7.0"
}
},
"Microsoft.ApplicationInsights": {
"Microsoft.ApplicationInsights.AspNetCore": {
"type": "Direct",
"requested": "[2.14.0, )",
"resolved": "2.14.0",
"contentHash": "j66/uh1Mb5Px/nvMwDWx73Wd9MdO2X+zsDw9JScgm5Siz5r4Cw8sTW+VCrjurFkpFqrNkj+0wbfRHDBD9b+elA==",
"requested": "[2.21.0, )",
"resolved": "2.21.0",
"contentHash": "d+7MB4YdUMc9Mtq2u6C7TritzC0eKfHkhGmlnNckDDQiOQuk9IHMPxUmPBRMm/tn+db8fI/BYno9jGxLhI+SZw==",
"dependencies": {
"System.Diagnostics.DiagnosticSource": "4.6.0",
"System.Memory": "4.5.4"
"Microsoft.ApplicationInsights": "2.21.0",
"Microsoft.ApplicationInsights.DependencyCollector": "2.21.0",
"Microsoft.ApplicationInsights.EventCounterCollector": "2.21.0",
"Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0",
"Microsoft.ApplicationInsights.WindowsServer": "2.21.0",
"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0",
"Microsoft.AspNetCore.Hosting": "2.1.1",
"Microsoft.AspNetCore.Http": "2.1.22",
"Microsoft.Extensions.Configuration.Json": "3.1.0",
"Microsoft.Extensions.Logging.ApplicationInsights": "2.21.0",
"System.Text.Encodings.Web": "4.7.2"
}
},
"Microsoft.AspNetCore.Mvc.Versioning": {
@ -28,6 +37,25 @@
"resolved": "4.1.1",
"contentHash": "ioFhRz5gm2Ny+t758Jab638eTG8Uui++klcH00EgBuU/BQbjkbFY+9xw/CkoAChIcrJsoQP2NKDYJ09zN5jR0g=="
},
"Microsoft.Identity.Web": {
"type": "Direct",
"requested": "[1.25.2, )",
"resolved": "1.25.2",
"contentHash": "AMKPBr5ldwZhv74Ks1ZmO8JHaT438pfLX2yxE00R+MhU9ZJm0VyozD0RW7kTy8U5su9pMKXQk438rI/PJ4PFpA==",
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "5.0.12",
"Microsoft.AspNetCore.Authentication.OpenIdConnect": "5.0.12",
"Microsoft.Identity.Web.Certificate": "1.25.2",
"Microsoft.Identity.Web.Certificateless": "1.25.2",
"Microsoft.Identity.Web.TokenCache": "1.25.2",
"Microsoft.IdentityModel.Logging": "6.20.0",
"Microsoft.IdentityModel.LoggingExtensions": "6.20.0",
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.20.0",
"Microsoft.IdentityModel.Validators": "6.20.0",
"System.IdentityModel.Tokens.Jwt": "6.20.0",
"System.Text.Encodings.Web": "5.0.1"
}
},
"NSwag.AspNetCore": {
"type": "Direct",
"requested": "[13.7.0, )",
@ -49,8 +77,8 @@
},
"Azure.Core": {
"type": "Transitive",
"resolved": "1.4.1",
"contentHash": "6LbGLiZwlU6SfOaINCfrQ+f91bRWZ8XvB90Qfm69x1t3z+5D4jmXnQiuPYPZcgtxFjPKA3IwyHGuDZRkSo1Urg==",
"resolved": "1.6.0",
"contentHash": "kI4m2NsODPOrxo0OoKjk6B3ADbdovhDQIEmI4039upjjZKRaewVLx/Uz4DfRa/NtnIRZQPUALe1yvdHWAoRt4w==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "1.0.0",
"System.Buffers": "4.5.0",
@ -61,6 +89,42 @@
"System.Threading.Tasks.Extensions": "4.5.2"
}
},
"Azure.Identity": {
"type": "Transitive",
"resolved": "1.3.0",
"contentHash": "l1SYfZKOFBuUFG7C2SWHmJcrQQaiXgBdVCycx4vcZQkC6efDVt7mzZ5pfJAFEJDBUq7mjRQ0RPq9ZDGdSswqMg==",
"dependencies": {
"Azure.Core": "1.6.0",
"Microsoft.Identity.Client": "4.22.0",
"Microsoft.Identity.Client.Extensions.Msal": "2.16.5",
"System.Memory": "4.5.3",
"System.Security.Cryptography.ProtectedData": "4.5.0",
"System.Text.Json": "4.6.0",
"System.Threading.Tasks.Extensions": "4.5.2"
}
},
"Azure.Security.KeyVault.Certificates": {
"type": "Transitive",
"resolved": "4.1.0",
"contentHash": "I+irkjO1JBzJWYBLhW835/b7GllxkjMbQwrirhxUJsf6FQnH+eIGin4T/jBLgyuu1zPsn2AxiUFju6Shb/uiNA==",
"dependencies": {
"Azure.Core": "1.0.2",
"System.Memory": "4.5.3",
"System.Text.Json": "4.6.0",
"System.Threading.Tasks.Extensions": "4.5.2"
}
},
"Azure.Security.KeyVault.Secrets": {
"type": "Transitive",
"resolved": "4.1.0",
"contentHash": "SK4XTPEaXI5UTdtSkr8TN4ZKnvazNHhybnnkxHgOyRAhV9ObcIjbrNlhS4ZeR8XtI+HidL+v/WIIVfR1+jKB8Q==",
"dependencies": {
"Azure.Core": "1.0.2",
"System.Memory": "4.5.3",
"System.Text.Json": "4.6.0",
"System.Threading.Tasks.Extensions": "4.5.2"
}
},
"Azure.Storage.Blobs": {
"type": "Transitive",
"resolved": "12.5.1",
@ -79,6 +143,78 @@
"Azure.Core": "1.4.1"
}
},
"Microsoft.ApplicationInsights": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "btZEDWAFNo9CoYliMCriSMTX3ruRGZTtYw4mo2XyyfLlowFicYVM2Xszi5evDG95QRYV7MbbH3D2RqVwfZlJHw==",
"dependencies": {
"System.Diagnostics.DiagnosticSource": "5.0.0"
}
},
"Microsoft.ApplicationInsights.DependencyCollector": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "XArm5tBEUdWs05eDKxnsUUQBduJ45DEQOMnpL7wNWxBpgxn+dbl8nObA2jzExbQhbw6P74lc/1f+RdV4iPaOgg==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.21.0",
"System.Diagnostics.DiagnosticSource": "5.0.0"
}
},
"Microsoft.ApplicationInsights.EventCounterCollector": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "MfF9IKxx9UhaYHVFQ1VKw0LYvBhkjZtPNUmCTYlGws0N7D2EaupmeIj/EWalqP47sQRedR9+VzARsONcwH8OCA==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.21.0"
}
},
"Microsoft.ApplicationInsights.PerfCounterCollector": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "RcckSVkfu+NkDie6/HyM6AVLHmTMVZrUrYnDeJdvRByOc2a+DqTM6KXMtsTHW/5+K7DT9QK5ZrZdi0YbBW8PVA==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.21.0",
"Microsoft.Extensions.Caching.Memory": "1.0.0",
"System.Diagnostics.PerformanceCounter": "4.7.0"
}
},
"Microsoft.ApplicationInsights.WindowsServer": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "Xbhss7dqbKyE5PENm1lRA9oxzhKEouKGMzgNqJ9xTHPZiogDwKVMK02qdbVhvaXKf9zG8RvvIpM5tnGR5o+Onw==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.21.0",
"Microsoft.ApplicationInsights.DependencyCollector": "2.21.0",
"Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0",
"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0",
"System.Diagnostics.DiagnosticSource": "5.0.0"
}
},
"Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "7D4oq+9YyagEPx+0kNNOXdG6c7IDM/2d+637nAYKFqdWhNN0IqHZEed0DuG28waj7hBSLM9lBO+B8qQqgfE4rw==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.21.0",
"System.IO.FileSystem.AccessControl": "4.7.0"
}
},
"Microsoft.AspNetCore.Authentication.JwtBearer": {
"type": "Transitive",
"resolved": "5.0.12",
"contentHash": "3JwsAApGFKFBVvlV8vMNdF04Mb8zPuHT5q8sunwNTbaN4JtjXLVGKAyUCy+I1JeqP+3EKfZxe3wMj4fVEOLKlA==",
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.7.1"
}
},
"Microsoft.AspNetCore.Authentication.OpenIdConnect": {
"type": "Transitive",
"resolved": "5.0.12",
"contentHash": "YtPrKHTie1TZeqnlbIKAEU51alFD+SCvTIu2L2no+UGStU5RzEqRuJvVfe+aP9tSrJE+Wyy+YdUqZLtA9QfkHg==",
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.7.1"
}
},
"Microsoft.AspNetCore.Authorization": {
"type": "Transitive",
"resolved": "1.0.2",
@ -89,82 +225,108 @@
"System.Security.Claims": "4.0.1"
}
},
"Microsoft.AspNetCore.Cryptography.Internal": {
"type": "Transitive",
"resolved": "5.0.8",
"contentHash": "giHheyNLOb+cAHpb8b0GhaS0xJ+hAIIDSyWPe5aOPwpgctsjOPRKFyn/268xv+zBVuEtyRJJEnBUlkOVzyIpZA=="
},
"Microsoft.AspNetCore.DataProtection": {
"type": "Transitive",
"resolved": "5.0.8",
"contentHash": "wCMdfuKA+ePcB4nEDau5tNhhhC5NFa2LEXoRhk2Xaot13FFlyKA4t5UzIyV/OnAfB/bqbAIvChJD+biWY7u5SA==",
"dependencies": {
"Microsoft.AspNetCore.Cryptography.Internal": "5.0.8",
"Microsoft.AspNetCore.DataProtection.Abstractions": "5.0.8",
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
"Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
"Microsoft.Extensions.Logging.Abstractions": "5.0.0",
"Microsoft.Extensions.Options": "5.0.0",
"Microsoft.Win32.Registry": "5.0.0",
"System.Security.Cryptography.Xml": "5.0.0"
}
},
"Microsoft.AspNetCore.DataProtection.Abstractions": {
"type": "Transitive",
"resolved": "5.0.8",
"contentHash": "ZI9S2NGjuOKXN3PxJcF8EKVwd1cqpWyUSqiVoH8gqq5tlHaXULwPmoR0DBOFON4sEFETRWI69f5RQ3tJWw205A=="
},
"Microsoft.AspNetCore.Hosting": {
"type": "Transitive",
"resolved": "2.1.1",
"contentHash": "MqYc0DUxrhAPnb5b4HFspxsoJT+gJlLsliSxIgovf4BsbmpaXQId0/pDiVzLuEbmks2w1/lRfY8w0lQOuK1jQQ==",
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1",
"Microsoft.AspNetCore.Http": "2.1.1",
"Microsoft.AspNetCore.Http.Extensions": "2.1.1",
"Microsoft.Extensions.Configuration": "2.1.1",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "2.1.1",
"Microsoft.Extensions.Configuration.FileExtensions": "2.1.1",
"Microsoft.Extensions.DependencyInjection": "2.1.1",
"Microsoft.Extensions.FileProviders.Physical": "2.1.1",
"Microsoft.Extensions.Hosting.Abstractions": "2.1.1",
"Microsoft.Extensions.Logging": "2.1.1",
"Microsoft.Extensions.Options": "2.1.1",
"System.Diagnostics.DiagnosticSource": "4.5.0",
"System.Reflection.Metadata": "1.6.0"
}
},
"Microsoft.AspNetCore.Hosting.Abstractions": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "CSVd9h1TdWDT2lt62C4FcgaF285J4O3MaOqTVvc7xP+3bFiwXcdp6qEd+u1CQrdJ+xJuslR+tvDW7vWQ/OH5Qw==",
"resolved": "2.1.1",
"contentHash": "76cKcp2pWhvdV2TXTqMg/DyW7N6cDzTEhtL8vVWFShQN+Ylwv3eO/vUQr2BS3Hz4IZHEpL+FOo2T+MtymHDqDQ==",
"dependencies": {
"Microsoft.AspNetCore.Hosting.Server.Abstractions": "1.0.2",
"Microsoft.AspNetCore.Http.Abstractions": "1.0.2",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.2",
"Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.2",
"Microsoft.Extensions.FileProviders.Abstractions": "1.0.1",
"Microsoft.Extensions.Logging.Abstractions": "1.0.2"
"Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.1.1",
"Microsoft.AspNetCore.Http.Abstractions": "2.1.1",
"Microsoft.Extensions.Hosting.Abstractions": "2.1.1"
}
},
"Microsoft.AspNetCore.Hosting.Server.Abstractions": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "6ZtFh0huTlrUl72u9Vic0icCVIQiEx7ULFDx3P7BpOI97wjb0GAXf8B4m9uSpSGf0vqLEKFlkPbvXF0MXXEzhw==",
"resolved": "2.1.1",
"contentHash": "+vD7HJYzAXNq17t+NgRkpS38cxuAyOBu8ixruOiA3nWsybozolUdALWiZ5QFtGRzajSLPFA2YsbO3NPcqoUwcw==",
"dependencies": {
"Microsoft.AspNetCore.Http.Features": "1.0.2",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.2"
"Microsoft.AspNetCore.Http.Features": "2.1.1",
"Microsoft.Extensions.Configuration.Abstractions": "2.1.1"
}
},
"Microsoft.AspNetCore.Http": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "w9AJMakVIuP0KhLe3pdwWNDSWhwDEjfRyai907iGmia0a5O3OBJw9JMhpenVHHeXAARwLi/zVn9oVwd1RFKzTA==",
"resolved": "2.1.22",
"contentHash": "+Blk++1JWqghbl8+3azQmKhiNZA5wAepL9dY2I6KVmu2Ri07MAcvAVC888qUvO7yd7xgRgZOMfihezKg14O/2A==",
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "1.0.2",
"Microsoft.AspNetCore.WebUtilities": "1.0.2",
"Microsoft.Extensions.ObjectPool": "1.0.1",
"Microsoft.Extensions.Options": "1.0.2",
"Microsoft.Net.Http.Headers": "1.0.2",
"System.Buffers": "4.0.0",
"System.Threading": "4.0.11"
"Microsoft.AspNetCore.Http.Abstractions": "2.1.1",
"Microsoft.AspNetCore.WebUtilities": "2.1.1",
"Microsoft.Extensions.ObjectPool": "2.1.1",
"Microsoft.Extensions.Options": "2.1.1",
"Microsoft.Net.Http.Headers": "2.1.1"
}
},
"Microsoft.AspNetCore.Http.Abstractions": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "peJqc7BgYwhTzOIfFHX3/esV6iOXf17Afekh6mCYuUD3aWyaBwQuWYaKLR+RnjBEWaSzpCDgfCMMp5Y3LUXsiA==",
"resolved": "2.1.1",
"contentHash": "kQUEVOU4loc8CPSb2WoHFTESqwIa8Ik7ysCBfTwzHAd0moWovc9JQLmhDIHlYLjHbyexqZAlkq/FPRUZqokebw==",
"dependencies": {
"Microsoft.AspNetCore.Http.Features": "1.0.2",
"System.Globalization.Extensions": "4.0.1",
"System.Linq.Expressions": "4.1.1",
"System.Reflection.TypeExtensions": "4.1.0",
"System.Runtime.InteropServices": "4.1.0",
"System.Text.Encodings.Web": "4.0.0"
"Microsoft.AspNetCore.Http.Features": "2.1.1",
"System.Text.Encodings.Web": "4.5.0"
}
},
"Microsoft.AspNetCore.Http.Extensions": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "itaTI4YSVsLjvmpInhQ3b6Xs1q+CxJT/3z3q5G6hLuLkq30vvWEbM40NfzUzvwzPCEiXXlp+nJTEK2wgoJa70Q==",
"resolved": "2.1.1",
"contentHash": "ncAgV+cqsWSqjLXFUTyObGh4Tr7ShYYs3uW8Q/YpRwZn7eLV7dux5Z6GLY+rsdzmIHiia3Q2NWbLULQi7aziHw==",
"dependencies": {
"Microsoft.AspNetCore.Http.Abstractions": "1.0.2",
"Microsoft.Extensions.FileProviders.Abstractions": "1.0.1",
"Microsoft.Net.Http.Headers": "1.0.2",
"System.Buffers": "4.0.0",
"System.IO.FileSystem": "4.0.1"
"Microsoft.AspNetCore.Http.Abstractions": "2.1.1",
"Microsoft.Extensions.FileProviders.Abstractions": "2.1.1",
"Microsoft.Net.Http.Headers": "2.1.1",
"System.Buffers": "4.5.0"
}
},
"Microsoft.AspNetCore.Http.Features": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "9l/Y/CO3q8tET3w+dDiByREH8lRtpd14cMevwMV5nw2a/avJ5qcE3VVIE5U5hesec2phTT6udQEgwjHmdRRbig==",
"resolved": "2.1.1",
"contentHash": "VklZ7hWgSvHBcDtwYYkdMdI/adlf7ebxTZ9kdzAhX+gUs5jSHE9mZlTamdgf9miSsxc1QjNazHXTDJdVPZKKTw==",
"dependencies": {
"Microsoft.Extensions.Primitives": "1.0.1",
"System.Collections": "4.0.11",
"System.ComponentModel": "4.0.1",
"System.Linq": "4.1.0",
"System.Net.Primitives": "4.0.11",
"System.Net.WebSockets": "4.0.0",
"System.Runtime.Extensions": "4.1.0",
"System.Security.Claims": "4.0.1",
"System.Security.Cryptography.X509Certificates": "4.1.0",
"System.Security.Principal": "4.0.1"
"Microsoft.Extensions.Primitives": "2.1.1"
}
},
"Microsoft.AspNetCore.JsonPatch": {
@ -274,15 +436,11 @@
},
"Microsoft.AspNetCore.WebUtilities": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "xWCqsnZLt0nSoiyw3x250k7PzV/ub1dtjZfLUCy89gTdAHF3jWivnzN+Mw5+LB8EYwEA4WY+u5l5s6innImJTw==",
"resolved": "2.1.1",
"contentHash": "PGKIZt4+412Z/XPoSjvYu/QIbTxcAQuEFNoA1Pw8a9mgmO0ZhNBmfaNyhgXFf7Rq62kP0tT/2WXpxdcQhkFUPA==",
"dependencies": {
"Microsoft.Extensions.Primitives": "1.0.1",
"System.Buffers": "4.0.0",
"System.Collections": "4.0.11",
"System.IO": "4.1.0",
"System.IO.FileSystem": "4.0.1",
"System.Text.Encodings.Web": "4.0.0"
"Microsoft.Net.Http.Headers": "2.1.1",
"System.Text.Encodings.Web": "4.5.0"
}
},
"Microsoft.Azure.Cosmos": {
@ -332,21 +490,22 @@
},
"Microsoft.Extensions.Caching.Abstractions": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "Uj/0fmq7FWi7B7RfLkn2UJE1SThJ60mOlChx9P5nRjP/EbeYNm+LoyiOr6yPhDsArwHttKyun18TXXJ2C9EE/g==",
"resolved": "5.0.0",
"contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==",
"dependencies": {
"Microsoft.Extensions.Primitives": "3.1.7"
"Microsoft.Extensions.Primitives": "5.0.0"
}
},
"Microsoft.Extensions.Caching.Memory": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "EvNcJWk0KKSqyXefiUTgF5D94r40rmmtAvo5/yhy7u5/CtRjqyN7wQBSKz2ezWlu5vbuMGyaMktANgkk4kEkaw==",
"resolved": "5.0.0",
"contentHash": "/1qPCleFOkJe0O+xmFqCNLFYQZTJz965sVw8CUB/BQgsApBwzAUsL2BUkDvQW+geRUVTXUS9zLa0pBjC2VJ1gA==",
"dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "3.1.7",
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7",
"Microsoft.Extensions.Logging.Abstractions": "3.1.7",
"Microsoft.Extensions.Options": "3.1.7"
"Microsoft.Extensions.Caching.Abstractions": "5.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
"Microsoft.Extensions.Logging.Abstractions": "5.0.0",
"Microsoft.Extensions.Options": "5.0.0",
"Microsoft.Extensions.Primitives": "5.0.0"
}
},
"Microsoft.Extensions.Configuration": {
@ -359,32 +518,50 @@
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "WJEbrrIgly95D9rM8Gwr4w8sbYla6/iOcCZ0UE7+Qg/Q8NnQJwAJ60Lq1A26zbNE8Fm1fkbGU90LDl8e+BoRSQ==",
"resolved": "5.0.0",
"contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==",
"dependencies": {
"Microsoft.Extensions.Primitives": "3.1.7"
"Microsoft.Extensions.Primitives": "5.0.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"Microsoft.Extensions.Configuration.EnvironmentVariables": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "FYQ64i7DwYO6XDdOFi+VkoRDDzel570I+X/vTYt6mVJWNj1SAstXwZ71P5d6P2Cei+cT950NiScOwj4F8EUeTA==",
"resolved": "2.1.1",
"contentHash": "6xMxFIfKL+7J/jwlk8zV8I61sF3+DRG19iKQxnSfYQU+iMMjGbcWNCHFF/3MHf3o4sTZPZ8D6Io+GwKFc3TIZA==",
"dependencies": {
"Microsoft.Extensions.Configuration": "3.1.7"
"Microsoft.Extensions.Configuration": "2.1.1"
}
},
"Microsoft.Extensions.Configuration.FileExtensions": {
"type": "Transitive",
"resolved": "3.1.0",
"contentHash": "OjRJIkVxUFiVkr9a39AqVThft9QHoef4But5pDCydJOXJ4D/SkmzuW1tm6J2IXynxj6qfeAz9QTnzQAvOcGvzg==",
"dependencies": {
"Microsoft.Extensions.Configuration": "3.1.0",
"Microsoft.Extensions.FileProviders.Physical": "3.1.0"
}
},
"Microsoft.Extensions.Configuration.Json": {
"type": "Transitive",
"resolved": "3.1.0",
"contentHash": "gBpBE1GoaCf1PKYC7u0Bd4mVZ/eR2bnOvn7u8GBXEy3JGar6sC3UVpVfTB9w+biLPtzcukZynBG9uchSBbLTNQ==",
"dependencies": {
"Microsoft.Extensions.Configuration": "3.1.0",
"Microsoft.Extensions.Configuration.FileExtensions": "3.1.0"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "yp38AFc5tJQZkjINjXBcxq+dANU06lo27D84duitZthtRPsgKJL87uf9RWRsDdRsWd+kXflmdMWFLKFjyKx6Pw==",
"resolved": "5.0.0",
"contentHash": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "oKL2yNtTN1/cOp+cbdyv5TeLzO+GkO9B3fvbcPzKWTNCkDoH3ccYS3FWC1p4KSYe9frW4WsyfSTeM8X+xftOig=="
"resolved": "5.0.0",
"contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA=="
},
"Microsoft.Extensions.DependencyModel": {
"type": "Transitive",
@ -400,10 +577,10 @@
},
"Microsoft.Extensions.FileProviders.Abstractions": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "nasMSdDlIIBcKgGVHoZdFSmfUY1bI0zkvfZTsWLlEFcMCVD0fzcgsVlkeZTzPLJV0w7Uwq3okOgMWpU1nFEhxg==",
"resolved": "5.0.0",
"contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==",
"dependencies": {
"Microsoft.Extensions.Primitives": "3.1.7"
"Microsoft.Extensions.Primitives": "5.0.0"
}
},
"Microsoft.Extensions.FileProviders.Embedded": {
@ -415,15 +592,28 @@
"System.Runtime.Extensions": "4.1.0"
}
},
"Microsoft.Extensions.FileProviders.Physical": {
"type": "Transitive",
"resolved": "3.1.0",
"contentHash": "KsvgrYp2fhNXoD9gqSu8jPK9Sbvaa7SqNtsLqHugJkCwFmgRvdz76z6Jz2tlFlC7wyMTZxwwtRF8WAorRQWTEA==",
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "3.1.0",
"Microsoft.Extensions.FileSystemGlobbing": "3.1.0"
}
},
"Microsoft.Extensions.FileSystemGlobbing": {
"type": "Transitive",
"resolved": "3.1.0",
"contentHash": "tK5HZOmVv0kUYkonMjuSsxR0CBk+Rd/69QU3eOMv9FvODGZ2d0SR+7R+n8XIgBcCCoCHJBSsI4GPRaoN3Le4rA=="
},
"Microsoft.Extensions.Hosting.Abstractions": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "4j6lSyPJF2emznd7Y4nZp8UbVyhe/defMPyFBV+YfINbAgJ3HgUPWp2QdsO87WOzWjlXTU4ZFwL2fuuMbwdR5g==",
"resolved": "5.0.0",
"contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==",
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "3.1.7",
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7",
"Microsoft.Extensions.FileProviders.Abstractions": "3.1.7",
"Microsoft.Extensions.Logging.Abstractions": "3.1.7"
"Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "5.0.0"
}
},
"Microsoft.Extensions.Http": {
@ -438,38 +628,41 @@
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "p68Hvr8S+t+bGUeXRX6wcjlkK961w0YRXWy8O6pkTsucdNpnzB8mwLIgcnQ7oj0biw8S1Ftv4PREzPIwo1UwpA==",
"resolved": "5.0.0",
"contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==",
"dependencies": {
"Microsoft.Extensions.Configuration.Binder": "3.1.7",
"Microsoft.Extensions.DependencyInjection": "3.1.7",
"Microsoft.Extensions.Logging.Abstractions": "3.1.7",
"Microsoft.Extensions.Options": "3.1.7"
"Microsoft.Extensions.DependencyInjection": "5.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
"Microsoft.Extensions.Logging.Abstractions": "5.0.0",
"Microsoft.Extensions.Options": "5.0.0"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "oD7LQbMuaqq/yAz8PKX0hl4+H/vDFTQHo8rxbKB36P1/bG8FG7JUVKBoHkSt1MaJUtgyiHrH1AlAhaucKUKyEg=="
"resolved": "5.0.0",
"contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w=="
},
"Microsoft.Extensions.Logging.ApplicationInsights": {
"type": "Transitive",
"resolved": "2.21.0",
"contentHash": "tjzErt5oaLs1caaThu6AbtJuHH0oIGDG/rYCXDruHVGig3m8MyCDuwDsGQwzimY7g4aFyLOKfHc3unBN2G96gw==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.21.0",
"Microsoft.Extensions.Logging": "2.1.1"
}
},
"Microsoft.Extensions.ObjectPool": {
"type": "Transitive",
"resolved": "1.0.1",
"contentHash": "pJMOnxuqmG37OjccfvtqVoo3bQGoN+0EJUzzp7+2uxSdioER82caAk6Yi/z5aysapn5XENNIIa7SaYnYKSS69A==",
"dependencies": {
"System.Diagnostics.Debug": "4.0.11",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
"System.Threading": "4.0.11"
}
"resolved": "2.1.1",
"contentHash": "SErON45qh4ogDp6lr6UvVmFYW0FERihW+IQ+2JyFv1PUyWktcJytFaWH5zarufJvZwhci7Rf1IyGXr9pVEadTw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "O5TXu1D79hbaZuKCIK4mswSP86MtmiIQjuOZnVhPdbjOVILsoQwZUtnmU2xRfX1E0QWuFEI0umhw3mDDn6dNHw==",
"resolved": "5.0.0",
"contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7",
"Microsoft.Extensions.Primitives": "3.1.7"
"Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
"Microsoft.Extensions.Primitives": "5.0.0"
}
},
"Microsoft.Extensions.PlatformAbstractions": {
@ -487,8 +680,8 @@
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "sa17s3vDAXTuIVGxuJcK713i0B0iaUoiwY4Sl2SLHhMqM8snznn0YVGiZAVkoKEUFWjvIg1Z/JNmAicBamI4mg=="
"resolved": "5.0.0",
"contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ=="
},
"Microsoft.Extensions.WebEncoders": {
"type": "Transitive",
@ -500,19 +693,128 @@
"System.Text.Encodings.Web": "4.0.0"
}
},
"Microsoft.Identity.Client": {
"type": "Transitive",
"resolved": "4.42.0",
"contentHash": "BQeEI4mKDJaludUZwZXfmAs7y1Lhkbm81KDg4Q3JWY8tXi5S7vFFJ4+xcrZtEEuqtDnyhP+Yx0u+1PeOALuTGA=="
},
"Microsoft.Identity.Client.Extensions.Msal": {
"type": "Transitive",
"resolved": "2.16.5",
"contentHash": "VlGUZEpF8KP/GCfFI59sdE0WA0o9quqwM1YQY0dSp6jpGy5EOBkureaybLfpwCuYUUjQbLkN2p7neUIcQCfbzA==",
"dependencies": {
"Microsoft.Identity.Client": "4.22.0",
"System.Security.Cryptography.ProtectedData": "4.5.0"
}
},
"Microsoft.Identity.Web.Certificate": {
"type": "Transitive",
"resolved": "1.25.2",
"contentHash": "XAiRKbc7hmwOgxb7B5ufUKLJyP44tvXgFpSN5ppgdqZl+IGbaL+AOnjXGAhTq2MC1J379ArBrg+wCIXHzcpv5w==",
"dependencies": {
"Azure.Identity": "1.3.0",
"Azure.Security.KeyVault.Certificates": "4.1.0",
"Azure.Security.KeyVault.Secrets": "4.1.0",
"System.Text.Encodings.Web": "5.0.1"
}
},
"Microsoft.Identity.Web.Certificateless": {
"type": "Transitive",
"resolved": "1.25.2",
"contentHash": "hqLe/10QqZr+/pByoOIPj3mAzAJDb5gKVvPdbfgNc+aYAr2Zff27LiOPG1XIEAKBzt12kt2LR7htDXv7eBQLiA==",
"dependencies": {
"Azure.Identity": "1.3.0",
"System.Text.Encodings.Web": "4.7.2"
}
},
"Microsoft.Identity.Web.TokenCache": {
"type": "Transitive",
"resolved": "1.25.2",
"contentHash": "CkiQRFBNflNDpojiznQ2gybup/ZnieObi5kRrc0yfLgLvYU54AP6PD1yo8v6mzWJnf+/dEYeMJNcpaXm9C7fIg==",
"dependencies": {
"Microsoft.AspNetCore.DataProtection": "5.0.8",
"Microsoft.Extensions.Caching.Memory": "5.0.0",
"Microsoft.Extensions.Logging": "5.0.0",
"Microsoft.Identity.Client": "4.42.0",
"System.Security.Cryptography.Xml": "6.0.1",
"System.Text.Encodings.Web": "5.0.1"
}
},
"Microsoft.IdentityModel.Abstractions": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "FHBdt4gOc6UhrCXvzai0W0/n9ZKjdm/glMSBT145/N4f2HEYNvxgH+GBdmN2rRL4p3IwOyLAUaWiN8Ofomg8EQ=="
},
"Microsoft.IdentityModel.JsonWebTokens": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "ov/c3pdHerzipMDMc4zfPAYLeRmHjpnAFXufSsvZWDs9SsZmyMpcnnXBXBOa8MPnoKDOFzUGocyMs9EsJFQT4w==",
"dependencies": {
"Microsoft.IdentityModel.Tokens": "6.20.0"
}
},
"Microsoft.IdentityModel.Logging": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "KQ8rcHvRO7bmByzO1VL8brSJQECpI6c7ktyQmGpF9YcxpkuMN2UqEkh7a2HnAHNksSsEq7T3CIXFF8p9OwLu5A==",
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "6.20.0"
}
},
"Microsoft.IdentityModel.LoggingExtensions": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "IcVgpXQW7w9xjimvoJFWavhUmI4aJXH71Wia5lMh72fLYZ3AnAmNtJjGW3Ue8bPYGHcvGum9dfJRHWA4XYHLiA==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "2.1.1",
"Microsoft.IdentityModel.Abstractions": "6.20.0"
}
},
"Microsoft.IdentityModel.Protocols": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "OSvIX92O69VZ8ONkDKf4/qBW3PsV09au3k9vD+4aSY2eLDD5fUvWlCZsUcZe6+L6e3qOVtk6h9+oBH77BlEKJg==",
"dependencies": {
"Microsoft.IdentityModel.Logging": "6.20.0",
"Microsoft.IdentityModel.Tokens": "6.20.0"
}
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "vWzemekJ3ZacLl6CPCgL08OKX7tvnPmEW+WuhUzhab6TTJfyv4nnW9soY8TazjnZN45JS20Z05UwhS9nzbhSJg==",
"dependencies": {
"Microsoft.IdentityModel.Protocols": "6.20.0",
"System.IdentityModel.Tokens.Jwt": "6.20.0"
}
},
"Microsoft.IdentityModel.Tokens": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "M0DEpe7298FTmISCjjzNHFwteYdFxYbjhR8TZmcKSlUCt3lfmIz8/RqzGH7hX6xmB2V8/7XkXpf7OXhvnoEfAg==",
"dependencies": {
"Microsoft.CSharp": "4.5.0",
"Microsoft.IdentityModel.Logging": "6.20.0",
"System.Security.Cryptography.Cng": "4.5.0"
}
},
"Microsoft.IdentityModel.Validators": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "Njrn9lnGdVq26CtChr+VrEg9OypvluhM6JP6vOQHBL8DhTrx6B37/mHr65C5ozSroxyhnqRTnXeIRB0CCdjW7w==",
"dependencies": {
"Microsoft.IdentityModel.Protocols": "6.20.0",
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.20.0",
"System.IdentityModel.Tokens.Jwt": "6.20.0"
}
},
"Microsoft.Net.Http.Headers": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "Nym2m4l2kb5jQRl5YlP1nAxneqpRfknFLy5PBKMYiC4kR/gDIQ4fi4rU9u7UdjEXMVgfWDIPpijx9YnSDEbOHw==",
"resolved": "2.1.1",
"contentHash": "lPNIphl8b2EuhOE9dMH6EZDmu7pS882O+HMi5BJNsigxHaWlBrYxZHFZgE18cyaPp6SSZcTkKkuzfjV/RRQKlA==",
"dependencies": {
"System.Buffers": "4.0.0",
"System.Collections": "4.0.11",
"System.Diagnostics.Contracts": "4.0.1",
"System.Globalization": "4.0.11",
"System.Linq": "4.1.0",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
"System.Text.Encoding": "4.0.11"
"Microsoft.Extensions.Primitives": "2.1.1",
"System.Buffers": "4.5.0"
}
},
"Microsoft.NETCore.Platforms": {
@ -535,6 +837,15 @@
"System.Runtime": "4.3.0"
}
},
"Microsoft.Win32.Registry": {
"type": "Transitive",
"resolved": "5.0.0",
"contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"Microsoft.Win32.SystemEvents": {
"type": "Transitive",
"resolved": "4.7.0",
@ -895,14 +1206,6 @@
"System.Text.Encoding": "4.3.0"
}
},
"System.Diagnostics.Contracts": {
"type": "Transitive",
"resolved": "4.0.1",
"contentHash": "HvQQjy712vnlpPxaloZYkuE78Gn353L0SJLJVeLcNASeg9c4qla2a1Xq8I7B3jZoDzKPtHTkyVO7AZ5tpeQGuA==",
"dependencies": {
"System.Runtime": "4.1.0"
}
},
"System.Diagnostics.Debug": {
"type": "Transitive",
"resolved": "4.3.0",
@ -915,8 +1218,19 @@
},
"System.Diagnostics.DiagnosticSource": {
"type": "Transitive",
"resolved": "4.6.0",
"contentHash": "mbBgoR0rRfl2uimsZ2avZY8g7Xnh1Mza0rJZLPcxqiMWlkGukjmRkuMJ/er+AhQuiRIh80CR/Hpeztr80seV5g=="
"resolved": "5.0.0",
"contentHash": "tCQTzPsGZh/A9LhhA6zrqCRV4hOHsK90/G7q3Khxmn6tnB1PuNU0cRaKANP2AWcF9bn0zsuOoZOSrHuJk6oNBA=="
},
"System.Diagnostics.PerformanceCounter": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "kE9szT4i3TYT9bDE/BPfzg9/BL6enMiZlcUmnUEBrhRtxWvurKoa8qhXkLTRhrxMzBqaDleWlRfIPE02tulU+w==",
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"Microsoft.Win32.Registry": "4.7.0",
"System.Configuration.ConfigurationManager": "4.7.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"System.Diagnostics.Tools": {
"type": "Transitive",
@ -969,6 +1283,11 @@
"System.Threading": "4.0.11"
}
},
"System.Formats.Asn1": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA=="
},
"System.Globalization": {
"type": "Transitive",
"resolved": "4.3.0",
@ -1003,6 +1322,15 @@
"System.Runtime.InteropServices": "4.3.0"
}
},
"System.IdentityModel.Tokens.Jwt": {
"type": "Transitive",
"resolved": "6.20.0",
"contentHash": "yallJBcQCF34rkf4Ebakou/gCT74XtlgvR8q3M96S1uP9X/XgLp9sjQ6wJRewYLeBYGgi4o5WSY/XaI9aQjRXw==",
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "6.20.0",
"Microsoft.IdentityModel.Tokens": "6.20.0"
}
},
"System.IO": {
"type": "Transitive",
"resolved": "4.3.0",
@ -1068,6 +1396,15 @@
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem.AccessControl": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "vMToiarpU81LR1/KZtnT7VDPvqAZfw9oOS5nY6pPP78nGYz3COLsQH3OfzbR+SjTgltd31R6KmKklz/zDpTmzw==",
"dependencies": {
"System.Security.AccessControl": "4.7.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"System.IO.FileSystem.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
@ -1114,8 +1451,8 @@
},
"System.Memory": {
"type": "Transitive",
"resolved": "4.5.4",
"contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
"resolved": "4.5.3",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
},
"System.Net.Http": {
"type": "Transitive",
@ -1174,17 +1511,6 @@
"System.Threading.Tasks": "4.3.0"
}
},
"System.Net.WebSockets": {
"type": "Transitive",
"resolved": "4.0.0",
"contentHash": "2KJo8hir6Edi9jnMDAMhiJoI691xRBmKcbNpwjrvpIMOCTYOtBpSsSEGBxBDV7PKbasJNaFp1+PZz1D7xS41Hg==",
"dependencies": {
"Microsoft.Win32.Primitives": "4.0.1",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime": "4.1.0",
"System.Threading.Tasks": "4.0.11"
}
},
"System.Numerics.Vectors": {
"type": "Transitive",
"resolved": "4.5.0",
@ -1251,6 +1577,11 @@
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Metadata": {
"type": "Transitive",
"resolved": "1.6.0",
"contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
},
"System.Reflection.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
@ -1385,12 +1716,8 @@
},
"System.Security.AccessControl": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Security.Principal.Windows": "4.7.0"
}
"resolved": "6.0.0",
"contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ=="
},
"System.Security.Claims": {
"type": "Transitive",
@ -1429,21 +1756,8 @@
},
"System.Security.Cryptography.Cng": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
"resolved": "4.5.0",
"contentHash": "WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A=="
},
"System.Security.Cryptography.Csp": {
"type": "Transitive",
@ -1504,6 +1818,14 @@
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Pkcs": {
"type": "Transitive",
"resolved": "6.0.1",
"contentHash": "ynmbW2GjIGg9K1wXmVIRs4IlyDolf0JXNpzFQ8JCVgwM+myUC2JeUggl2PwQig2PNVMegKmN1aAx7WPQ8tI3vA==",
"dependencies": {
"System.Formats.Asn1": "6.0.0"
}
},
"System.Security.Cryptography.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
@ -1555,6 +1877,15 @@
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Xml": {
"type": "Transitive",
"resolved": "6.0.1",
"contentHash": "5e5bI28T0x73AwTsbuFP4qSRzthmU2C0Gqgg3AZ3KTxmSyA+Uhk31puA3srdaeWaacVnHhLdJywCzqOiEpbO/w==",
"dependencies": {
"System.Security.AccessControl": "6.0.0",
"System.Security.Cryptography.Pkcs": "6.0.1"
}
},
"System.Security.Permissions": {
"type": "Transitive",
"resolved": "4.7.0",
@ -1574,8 +1905,8 @@
},
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ=="
"resolved": "5.0.0",
"contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
},
"System.Text.Encoding": {
"type": "Transitive",
@ -1600,17 +1931,8 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "4.0.0",
"contentHash": "TWZnuiJgPDAEEUfobD7njXvSVR2Toz+jvKWds6yL4oSztmKQfnWzucczjzA+6Dv1bktBdY71sZW1YN0X6m9chQ==",
"dependencies": {
"System.Diagnostics.Debug": "4.0.11",
"System.IO": "4.1.0",
"System.Reflection": "4.1.0",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime": "4.1.0",
"System.Runtime.Extensions": "4.1.0",
"System.Threading": "4.0.11"
}
"resolved": "5.0.1",
"contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ=="
},
"System.Text.Json": {
"type": "Transitive",