From f11e79de4bd067358fb0f12e412bcb60f20fbbdc Mon Sep 17 00:00:00 2001 From: Stas Date: Fri, 1 Apr 2022 13:20:08 -0700 Subject: [PATCH] Starting work... - add http client - add package lock - set namespace to Microsoft.OneFuzz.Service - add static class to get environment variables (#1736) Co-authored-by: stas --- .gitignore | 2 + src/ApiService/ApiService.sln | 21 +- src/ApiService/ApiService/ApiService.csproj | 18 +- .../ApiService/EnvironmentVariables.cs | 39 + src/ApiService/ApiService/HttpClient.cs | 67 ++ src/ApiService/ApiService/Program.cs | 23 +- .../ApiService/QueueNodeHearbeat.cs | 74 +- src/ApiService/ApiService/packages.lock.json | 977 ++++++++++++++++++ src/ApiService/Tests/Tests.csproj | 23 + src/ApiService/Tests/UnitTest1.cs | 13 + 10 files changed, 1199 insertions(+), 58 deletions(-) create mode 100644 src/ApiService/ApiService/EnvironmentVariables.cs create mode 100644 src/ApiService/ApiService/HttpClient.cs create mode 100644 src/ApiService/ApiService/packages.lock.json create mode 100644 src/ApiService/Tests/Tests.csproj create mode 100644 src/ApiService/Tests/UnitTest1.cs diff --git a/.gitignore b/.gitignore index 4681a9078..94f1c4eff 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,5 @@ # vim *.swp + +/.ionide/symbolCache.db diff --git a/src/ApiService/ApiService.sln b/src/ApiService/ApiService.sln index 2fdc96dbd..26a6c9999 100644 --- a/src/ApiService/ApiService.sln +++ b/src/ApiService/ApiService.sln @@ -1,22 +1,31 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32328.378 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ApiService", "ApiService/ApiService.csproj", "{D9112E8C-A539-4B06-B78D-B01A7D0B0555}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiService", "ApiService\ApiService.csproj", "{D9112E8C-A539-4B06-B78D-B01A7D0B0555}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{06C9FE9B-6DDD-45EC-B716-CB074512DAA9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D9112E8C-A539-4B06-B78D-B01A7D0B0555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D9112E8C-A539-4B06-B78D-B01A7D0B0555}.Debug|Any CPU.Build.0 = Debug|Any CPU {D9112E8C-A539-4B06-B78D-B01A7D0B0555}.Release|Any CPU.ActiveCfg = Release|Any CPU {D9112E8C-A539-4B06-B78D-B01A7D0B0555}.Release|Any CPU.Build.0 = Release|Any CPU + {06C9FE9B-6DDD-45EC-B716-CB074512DAA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06C9FE9B-6DDD-45EC-B716-CB074512DAA9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06C9FE9B-6DDD-45EC-B716-CB074512DAA9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06C9FE9B-6DDD-45EC-B716-CB074512DAA9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {390388A1-8F1C-4B89-93B4-68C69A329558} EndGlobalSection EndGlobal diff --git a/src/ApiService/ApiService/ApiService.csproj b/src/ApiService/ApiService/ApiService.csproj index 6e90a9fbb..9c18546e2 100644 --- a/src/ApiService/ApiService/ApiService.csproj +++ b/src/ApiService/ApiService/ApiService.csproj @@ -1,16 +1,32 @@ net6.0 - v3 + v4 + true Exe enable + + + + + + + + + + + + + + + diff --git a/src/ApiService/ApiService/EnvironmentVariables.cs b/src/ApiService/ApiService/EnvironmentVariables.cs new file mode 100644 index 000000000..35251b0f3 --- /dev/null +++ b/src/ApiService/ApiService/EnvironmentVariables.cs @@ -0,0 +1,39 @@ +using System; +namespace Microsoft.OneFuzz.Service; + +public static class EnvironmentVariables { + + public static class AppInsights { + public static string? AppId { get => Environment.GetEnvironmentVariable("APPINSIGHTS_APPID"); } + public static string? InstrumentationKey { get => Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY"); } + } + + public static class AzureSignalR { + public static string? ConnectionString { get => Environment.GetEnvironmentVariable("AzureSignalRConnectionString"); } + public static string? ServiceTransportType { get => Environment.GetEnvironmentVariable("AzureSignalRServiceTransportType"); } + } + + public static class AzureWebJob { + public static string? DisableHomePage { get => Environment.GetEnvironmentVariable("AzureWebJobsDisableHomepage"); } + public static string? Storage { get => Environment.GetEnvironmentVariable("AzureWebJobsStorage"); } + } + + public static class DiagnosticsAzureBlob { + public static string? ContainerSasUrl { get => Environment.GetEnvironmentVariable("DIAGNOSTICS_AZUREBLOBCONTAINERSASURL"); } + public static string? RetentionDays { get => Environment.GetEnvironmentVariable("DIAGNOSTICS_AZUREBLOBRETENTIONINDAYS"); } + } + + public static string? MultiTenantDomain { get => Environment.GetEnvironmentVariable("MULTI_TENANT_DOMAIN"); } + + public static class OneFuzz { + public static string? DataStorage { get => Environment.GetEnvironmentVariable("ONEFUZZ_DATA_STORAGE"); } + public static string? FuncStorage { get => Environment.GetEnvironmentVariable("ONEFUZZ_FUNC_STORAGE"); } + public static string? Instance { get => Environment.GetEnvironmentVariable("ONEFUZZ_INSTANCE"); } + public static string? InstanceName { get => Environment.GetEnvironmentVariable("ONEFUZZ_INSTANCE_NAME"); } + public static string? Keyvault { get => Environment.GetEnvironmentVariable("ONEFUZZ_KEYVAULT"); } + public static string? Monitor { get => Environment.GetEnvironmentVariable("ONEFUZZ_MONITOR"); } + public static string? Owner { get => Environment.GetEnvironmentVariable("ONEFUZZ_OWNER"); } + public static string? ResourceGroup { get => Environment.GetEnvironmentVariable("ONEFUZZ_RESOURCE_GROUP"); } + public static string? Telemetry { get => Environment.GetEnvironmentVariable("ONEFUZZ_TELEMETRY"); } + } +} \ No newline at end of file diff --git a/src/ApiService/ApiService/HttpClient.cs b/src/ApiService/ApiService/HttpClient.cs new file mode 100644 index 000000000..782fe3e8b --- /dev/null +++ b/src/ApiService/ApiService/HttpClient.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Threading.Tasks; +using System.Net.Http.Headers; + +namespace Microsoft.OneFuzz.Service; +using TokenType = String; +using AccessToken = String; + +public class Request { + private static HttpClient httpClient = new HttpClient(); + + Func>>? auth; + + public Request(Func>>? auth = null) { + this.auth = auth; + } + + private async Task Send(HttpMethod method, Uri url, HttpContent? content = null, IDictionary? headers = null) { + var request = new HttpRequestMessage(method: method, requestUri: url); + + if (auth is not null) { + Tuple token = await auth(); + request.Headers.Authorization = new AuthenticationHeaderValue(token.Item1, token.Item2); + } + + if (content is not null) { + request.Content = content; + } + + if (headers is not null) { + foreach(var v in headers) { + request.Headers.Add(v.Key, v.Value); + } + } + + return await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); + } + + public async Task Get(Uri url) { + return await Send(method: HttpMethod.Get, url: url); + } + public async Task Delete(Uri url) + { + return await Send(method: HttpMethod.Delete, url: url); + } + + public async Task Post(Uri url, String json, IDictionary? headers = null) { + using var b = new StringContent(json); + b.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); + return await Send(method: HttpMethod.Post, url: url, headers:headers); + } + + public async Task Put(Uri url, String json, IDictionary? headers = null) { + using var b = new StringContent(json); + b.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); + return await Send(method: HttpMethod.Put, url: url, headers: headers); + } + + public async Task Patch(Uri url, String json, IDictionary? headers = null) + { + using var b = new StringContent(json); + b.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); + return await Send(method: HttpMethod.Patch, url: url, headers: headers); + } +} diff --git a/src/ApiService/ApiService/Program.cs b/src/ApiService/ApiService/Program.cs index 7ba7e2a2a..cf0193920 100644 --- a/src/ApiService/ApiService/Program.cs +++ b/src/ApiService/ApiService/Program.cs @@ -3,17 +3,16 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Azure.Functions.Worker.Configuration; -namespace ApiService -{ - public class Program - { - public static void Main() - { - var host = new HostBuilder() - .ConfigureFunctionsWorkerDefaults() - .Build(); +namespace Microsoft.OneFuzz.Service; - host.Run(); - } +public class Program +{ + public static void Main() + { + var host = new HostBuilder() + .ConfigureFunctionsWorkerDefaults() + .Build(); + + host.Run(); } -} \ No newline at end of file +} diff --git a/src/ApiService/ApiService/QueueNodeHearbeat.cs b/src/ApiService/ApiService/QueueNodeHearbeat.cs index 407dd15ce..cf0a7f5d5 100644 --- a/src/ApiService/ApiService/QueueNodeHearbeat.cs +++ b/src/ApiService/ApiService/QueueNodeHearbeat.cs @@ -7,59 +7,55 @@ using Azure.Data.Tables; using System.Threading.Tasks; using Azure; +namespace Microsoft.OneFuzz.Service; -namespace ApiService + +enum HeartbeatType +{ + MachineAlive, + TaskAlive, +} + +record NodeHeartbeatEntry(string NodeId, Dictionary[] data); + + +public class QueueNodeHearbeat { - - - enum HeartbeatType + private (string, string) GetStorageAccountNameAndKey(string? accountId) { - MachineAlive, - TaskAlive, + //TableEntity + return ("test", "test"); } - record NodeHeartbeatEntry(string NodeId, Dictionary[] data); - - - public class QueueNodeHearbeat + private async Task GetStorageClient(string? table, string? accounId) { - - private (string, string) GetStorageAccountNameAndKey(string? accountId) + accounId ??= System.Environment.GetEnvironmentVariable("ONEFUZZ_FUNC_STORAGE"); + if (accounId == null) { - //TableEntity - return ("test", "test"); + throw new Exception("ONEFUZZ_FUNC_STORAGE environment variable not set"); } + var (name, key) = GetStorageAccountNameAndKey(accounId); + var tableClient = new TableServiceClient(new Uri(accounId), new TableSharedKeyCredential(name, key)); + await tableClient.CreateTableIfNotExistsAsync(table); + return tableClient; + } - private async Task GetStorageClient(string? table, string? accounId) - { - accounId ??= System.Environment.GetEnvironmentVariable("ONEFUZZ_FUNC_STORAGE"); - if (accounId == null) - { - throw new Exception("ONEFUZZ_FUNC_STORAGE environment variable not set"); - } - var (name, key) = GetStorageAccountNameAndKey(accounId); - var tableClient = new TableServiceClient(new Uri(accounId), new TableSharedKeyCredential(name, key)); - await tableClient.CreateTableIfNotExistsAsync(table); - return tableClient; - } + private readonly ILogger _logger; - private readonly ILogger _logger; + public QueueNodeHearbeat(ILoggerFactory loggerFactory) + { + _logger = loggerFactory.CreateLogger(); + } - public QueueNodeHearbeat(ILoggerFactory loggerFactory) - { - _logger = loggerFactory.CreateLogger(); - } - - [Function("QueueNodeHearbeat")] - public void Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string msg) - { - var hb = JsonSerializer.Deserialize(msg); - + [Function("QueueNodeHearbeat")] + public void Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string msg) + { + var hb = JsonSerializer.Deserialize(msg); + - _logger.LogInformation($"heartbeat: {msg}"); - } + _logger.LogInformation($"heartbeat: {msg}"); } } diff --git a/src/ApiService/ApiService/packages.lock.json b/src/ApiService/ApiService/packages.lock.json new file mode 100644 index 000000000..74edf76bc --- /dev/null +++ b/src/ApiService/ApiService/packages.lock.json @@ -0,0 +1,977 @@ +{ + "version": 1, + "dependencies": { + "net6.0": { + "Azure.Core": { + "type": "Direct", + "requested": "[1.23.0, )", + "resolved": "1.23.0", + "contentHash": "myulcGStD89NN7BUhAjkcfDhIvRj2UUwZHEgjB50pL3vb0LEunrtinxKqUGUuOheQVCHlILKLNoUeCThQ1iCOg==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.1.1", + "System.Diagnostics.DiagnosticSource": "4.6.0", + "System.Memory.Data": "1.0.2", + "System.Numerics.Vectors": "4.5.0", + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.7.2", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Azure.Data.Tables": { + "type": "Direct", + "requested": "[12.5.0, )", + "resolved": "12.5.0", + "contentHash": "XeIxPf+rF1NXkX3NJSB0ZTNgU233vyPXGmaFsR0lUVibtWP/lj+Qu1FcPxoslURcX0KC+UgTb226nqVdHjoweQ==", + "dependencies": { + "Azure.Core": "1.22.0", + "System.Text.Json": "4.7.2" + } + }, + "Azure.Identity": { + "type": "Direct", + "requested": "[1.5.0, )", + "resolved": "1.5.0", + "contentHash": "VfF88dqrgKXZNOS/y4XrX/jmIfP3pkY+hBUzBNpoKml1nR+QshX6XlXWyToLtWV80TDQ1CmUVCJksktDg5+j1w==", + "dependencies": { + "Azure.Core": "1.20.0", + "Microsoft.Identity.Client": "4.30.1", + "Microsoft.Identity.Client.Extensions.Msal": "2.18.4", + "System.Memory": "4.5.4", + "System.Security.Cryptography.ProtectedData": "4.5.0", + "System.Text.Json": "4.6.0", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Azure.Messaging.EventGrid": { + "type": "Direct", + "requested": "[4.9.0, )", + "resolved": "4.9.0", + "contentHash": "ooM1/ueb5pVIf+/BmS/SQKGW0LuP2Rn1Zc+RasCF0aMkJ5/kbc4ZXVrUd2YQlDaoeUOTJGSLs/VoGv0W1GiS5g==", + "dependencies": { + "Azure.Core": "1.22.0", + "System.Memory.Data": "1.0.2", + "System.Text.Json": "4.7.2" + } + }, + "Azure.ResourceManager": { + "type": "Direct", + "requested": "[1.0.0-beta.8, )", + "resolved": "1.0.0-beta.8", + "contentHash": "L8fYEV5kjP+BY1d9J7/hzQ/IHr1capJn9gkhzAEY4BPvMFTE9Aqsbb3p06r+iItcLP0y87eacQodfyPczADXVg==", + "dependencies": { + "Azure.Core": "1.22.0", + "System.Text.Json": "4.7.2" + } + }, + "Azure.ResourceManager.Compute": { + "type": "Direct", + "requested": "[1.0.0-beta.6, )", + "resolved": "1.0.0-beta.6", + "contentHash": "equl7PjMwhmFFj3qewcK+2kqbEQUM64elLan6jPIxRbHQkQ/QOm/mHRWuTerW0BdUvj48e+odB6gJc4wW0aZbQ==", + "dependencies": { + "Azure.Core": "1.22.0", + "Azure.ResourceManager": "1.0.0-beta.8", + "System.Text.Json": "4.7.2" + } + }, + "Azure.ResourceManager.Network": { + "type": "Direct", + "requested": "[1.0.0-beta.5, )", + "resolved": "1.0.0-beta.5", + "contentHash": "F7p/eZatJ+8hPfHR+98LgNJC+nBH4GBDtluLk+ubgIF84DZ9KMjRSkvyv4d6Y9k8jHh8qYRt4lUUMpdwseSutA==", + "dependencies": { + "Azure.Core": "1.21.0", + "Azure.ResourceManager": "1.0.0-beta.7", + "System.Text.Json": "4.6.0" + } + }, + "Azure.ResourceManager.Resources": { + "type": "Direct", + "requested": "[1.0.0-beta.6, )", + "resolved": "1.0.0-beta.6", + "contentHash": "tKGuoj5WXte2YZWSfYVertSr8zAjg1pRqoRZkRPfntzSqBrTx7BrspEh6iNZyJngW0L33LOlHcvCvvosz0WJGQ==", + "dependencies": { + "Azure.Core": "1.22.0", + "Azure.ResourceManager": "1.0.0-beta.8", + "System.Text.Json": "4.7.2" + } + }, + "Azure.ResourceManager.Storage": { + "type": "Direct", + "requested": "[1.0.0-beta.6, )", + "resolved": "1.0.0-beta.6", + "contentHash": "zsBSj+cfBAgYzWAD7fRbTqyA7cALUeCeE2Tk34og2ZathKUl0Ngriki53u0dMif2LTkfKrO0UiBgyiNaeU/ixw==", + "dependencies": { + "Azure.Core": "1.22.0", + "Azure.ResourceManager": "1.0.0-beta.8", + "System.Text.Json": "4.7.2" + } + }, + "Microsoft.Azure.Functions.Worker": { + "type": "Direct", + "requested": "[1.5.2, )", + "resolved": "1.5.2", + "contentHash": "a42hCpHj4hb/SddLfTcnf+Vm9pbHZ8jSrKqopCBIoq6KaWWz5aAiaVTE1gv8YJqQern7RP8Z5WSn6T4a0wJsfg==", + "dependencies": { + "Azure.Core": "1.10.0", + "Microsoft.Azure.Functions.Worker.Core": "1.3.1", + "Microsoft.Azure.Functions.Worker.Grpc": "1.3.0", + "Microsoft.Extensions.Hosting": "5.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Extensions.EventGrid": { + "type": "Direct", + "requested": "[2.1.0, )", + "resolved": "2.1.0", + "contentHash": "8Kjhxaj2gK2Bi5K5jiNAG/e9tTlRItFNCINj+kfUDMBbf5lsiZUBChyAQCxrnITeHKkwAtgXB7GBX4W1Xcoc0A==", + "dependencies": { + "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Extensions.Http": { + "type": "Direct", + "requested": "[3.0.13, )", + "resolved": "3.0.13", + "contentHash": "GX41psGbjLSPKuFnBcGGB7PAAdhfLsgxvGVsyGq/jQwgGwjAVRRx2UbSl35+imKwCPZdT5vGjq6YV1rgXIeEvA==", + "dependencies": { + "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Extensions.Storage": { + "type": "Direct", + "requested": "[4.0.4, )", + "resolved": "4.0.4", + "contentHash": "lg/sBDVPkXI0l1kHYbvyF1eA+gwaM3p/WgjX1nwVMyAkJpniDCNa6Rv/nxJwLvdWFzFLOuUp7ns0sxF1AjNuhg==", + "dependencies": { + "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Extensions.Timer": { + "type": "Direct", + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "8HvZaChaw40EKBfBew0XG132YhO6bEw0nznvey7gkhm9thUe6wkA2LXTXHXxcYefbx0rlh57WedSiJgKTG7MvQ==", + "dependencies": { + "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Sdk": { + "type": "Direct", + "requested": "[1.3.0, )", + "resolved": "1.3.0", + "contentHash": "g9oXOl9xr1O3alWItAiYLNu3BnXebLW51BRB06yuO86LPGRZewyJu88EwUdC2NU9wnIeE3/ObMuEAnRALZeuTQ==", + "dependencies": { + "Microsoft.Azure.Functions.Worker.Sdk.Analyzers": "1.1.0" + } + }, + "Microsoft.Extensions.Logging.ApplicationInsights": { + "type": "Direct", + "requested": "[2.20.0, )", + "resolved": "2.20.0", + "contentHash": "phuNUDeTlffkJi6zAsMQNOpijNOQ4Olda1WL2L+F33u4fqXmY+EGQnPg81rHW6dOXIYCQvrQUr2gVN5NNMvwKA==", + "dependencies": { + "Microsoft.ApplicationInsights": "2.20.0", + "Microsoft.Extensions.Logging": "2.1.1" + } + }, + "Microsoft.Graph": { + "type": "Direct", + "requested": "[4.20.0, )", + "resolved": "4.20.0", + "contentHash": "Pf8hdObmX3qF0AREu9e4dnk7inc3Pfw/sI/6l4RGTWDoORpP3Oyh0JoT/TJ+VIUaDk0W4fCUS0zSKhLpOr2UsQ==", + "dependencies": { + "Microsoft.Graph.Core": "2.0.8" + } + }, + "Microsoft.Identity.Client": { + "type": "Direct", + "requested": "[4.42.0, )", + "resolved": "4.42.0", + "contentHash": "BQeEI4mKDJaludUZwZXfmAs7y1Lhkbm81KDg4Q3JWY8tXi5S7vFFJ4+xcrZtEEuqtDnyhP+Yx0u+1PeOALuTGA==" + }, + "Microsoft.Identity.Web.TokenCache": { + "type": "Direct", + "requested": "[1.23.0, )", + "resolved": "1.23.0", + "contentHash": "hk4x8v0fjfjxsYwUtamuYczlZS9zyk+g8tlaPFnEPo7ldFJjf/w912faFPqcDJoC8Va5Ykyw1prdQouORAn9zg==", + "dependencies": { + "Microsoft.AspNetCore.DataProtection": "5.0.8", + "Microsoft.Extensions.Caching.Memory": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Identity.Client": "4.41.0", + "System.Text.Encodings.Web": "5.0.1" + } + }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Direct", + "requested": "[6.16.0, )", + "resolved": "6.16.0", + "contentHash": "QnZUawkmLkzEhwgvlqcm2YNAoRgz27zVY+2LzMBMWMcfFhl2Sv8aavZOeuFMofmYJsST9h7BilOn7MzFSUMihQ==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "6.16.0", + "Microsoft.IdentityModel.Tokens": "6.16.0" + } + }, + "Google.Protobuf": { + "type": "Transitive", + "resolved": "3.15.8", + "contentHash": "tA0S9QXJq+r3CjwBlcn5glEUrbdAxhPWO4yhq5+ycn6WW6+nsvqzO6Qf6NE9XWbEz/F2QSpBTxjdTI7SvVy7CQ==", + "dependencies": { + "System.Memory": "4.5.3", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "Grpc.Core.Api": { + "type": "Transitive", + "resolved": "2.37.0", + "contentHash": "ubqW2nTpiHyDudYGVXM+Vjh6WbgsI1fVQxsDK14/GnyPgiNMuNl8+GQcAYp5QPhAk5H4fjHJPI+KvbpVk8z6iQ==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "Grpc.Net.Client": { + "type": "Transitive", + "resolved": "2.37.0", + "contentHash": "oMDNXAPkBzfXljv/ZzlZSf22TEstBNI6je85/c3iztlFbbixTMLgi0sIu/uHtEKoEWUPr0nmBMvD+jtqKorGTg==", + "dependencies": { + "Grpc.Net.Common": "2.37.0", + "Microsoft.Extensions.Logging.Abstractions": "3.0.3" + } + }, + "Grpc.Net.ClientFactory": { + "type": "Transitive", + "resolved": "2.37.0", + "contentHash": "zyeFej1A36+s5K6+zDUirmDEGHEFnHapQisT7YsR9nQqKsw1uYqjtG1gSVSg/Zvk0KYeLHs5/URtTU71kS4APg==", + "dependencies": { + "Grpc.Net.Client": "2.37.0", + "Microsoft.Extensions.Http": "3.0.3" + } + }, + "Grpc.Net.Common": { + "type": "Transitive", + "resolved": "2.37.0", + "contentHash": "V7fZb+87qB6Jio6uWXDHkxI9WT+y4EFwicAHkzB2lm/9wJazD0V35HhQjxvoONsldObaUimjqd4b/XZ0G07sDQ==", + "dependencies": { + "Grpc.Core.Api": "2.37.0" + } + }, + "Microsoft.ApplicationInsights": { + "type": "Transitive", + "resolved": "2.20.0", + "contentHash": "mb+EC5j06Msn5HhKrhrsMAst6JxvYUnphQMGY2cixCabgGAO3q79Y8o/p1Zce1Azgd1IVkRKAMzAV4vDCbXOqA==", + "dependencies": { + "System.Diagnostics.DiagnosticSource": "5.0.0" + } + }, + "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.Azure.Functions.Worker.Core": { + "type": "Transitive", + "resolved": "1.3.1", + "contentHash": "BPx6MPCpxAOHEWqNvZaHcDiZWTyDUZXnYa6np3NqQ0oVq/mPPBYWm5EZfOHywaSkiV+yrePxIO/emochtRMbLA==", + "dependencies": { + "Azure.Core": "1.10.0", + "Microsoft.Extensions.Hosting": "5.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "9dPxxE6KdBXM4JEiwfs6W+DuZ+7UAE0Ea2pSmSTQ/e954HDVfcEcSyIopZujjK1jbwExSBbBQHwn6VrA2Dpx2A==" + }, + "Microsoft.Azure.Functions.Worker.Grpc": { + "type": "Transitive", + "resolved": "1.3.0", + "contentHash": "bxveZ9OKBPyzztl7tTClAAdw6PNjLiQ2fEboafAXcIF7+2igHwp/RlUILfXLrzgqrbWPkFfCRCpSJ3LIIHYaJQ==", + "dependencies": { + "Azure.Core": "1.10.0", + "Google.Protobuf": "3.15.8", + "Grpc.Net.Client": "2.37.0", + "Grpc.Net.ClientFactory": "2.37.0", + "Microsoft.Azure.Functions.Worker.Core": "1.2.0", + "Microsoft.Extensions.Hosting": "5.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0" + } + }, + "Microsoft.Azure.Functions.Worker.Sdk.Analyzers": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "J7AZ9iv/UCd4Di0c84h1P/Sa1aQr5uqO0EBUKwE0AZeWJ11dDfKAwxMiAxYOKR+giy31DWBnuFc4GKY3BQYUjg==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==" + }, + "Microsoft.Extensions.Caching.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==", + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Caching.Memory": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "/1qPCleFOkJe0O+xmFqCNLFYQZTJz965sVw8CUB/BQgsApBwzAUsL2BUkDvQW+geRUVTXUS9zLa0pBjC2VJ1gA==", + "dependencies": { + "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": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "LN322qEKHjuVEhhXueTUe7RNePooZmS8aGid5aK2woX3NPjSnONFyKUc6+JknOS6ce6h2tCLfKPTBXE3mN/6Ag==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==", + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "Of1Irt1+NzWO+yEYkuDh5TpT4On7LKl98Q9iLqCdOZps6XXEWDj3AKtmyvzJPVXZe4apmkJJIiDL7rR1yC+hjQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.CommandLine": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "OelM+VQdhZ0XMXsEQBq/bt3kFzD+EBGqR4TAgFDRAye0JfvHAaRi+3BxCRcwqUAwDhV0U0HieljBGHlTgYseRA==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "fqh6y6hAi0Z0fRsb4B/mP9OkKkSlifh5osa+N/YSQ+/S2a//+zYApZMUC1XeP9fdjlgZoPQoZ72Q2eLHyKLddQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "rRdspYKA18ViPOISwAihhCMbusHsARCOtDMwa23f+BGEdIjpKPlhs3LLjmKlxfhpGXBjIsS0JpXcChjRUN+PAw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Physical": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.Json": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "Pak8ymSUfdzPfBTLHxeOwcR32YDbuVfhnH2hkfOLnJNQd19ItlBdpMjIDY9C5O/nS2Sn9bzDMai0ZrvF7KyY/Q==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "5.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.Configuration.UserSecrets": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "+tK3seG68106lN277YWQvqmfyI/89w0uTu/5Gz5VYSUu5TI4mqwsaWLlSmT9Bl1yW/i1Nr06gHJxqaqB5NU9Tw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Configuration.Json": "5.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Physical": "5.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Physical": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "1rkd8UO2qf21biwO7X0hL9uHP7vtfmdv/NLvKgCRHkdz1XnW8zVQJXyEYiN68WYpExgtVWn55QF0qBzgfh1mGg==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.FileSystemGlobbing": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "ArliS8lGk8sWRtrWpqI8yUVYJpRruPjCDT+EIjrgkA/AAPRctlAkRISVZ334chAKktTLzD1+PK8F5IZpGedSqA==" + }, + "Microsoft.Extensions.Hosting": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "hiokSU1TOVfcqpQAnpiOzP2rE9p+niq92g5yeAnwlbSrUlIdIS6M8emCknZvhdOagQA9x5YWNwe1n0kFUwE0NQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Configuration.Binder": "5.0.0", + "Microsoft.Extensions.Configuration.CommandLine": "5.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "5.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "5.0.0", + "Microsoft.Extensions.Configuration.Json": "5.0.0", + "Microsoft.Extensions.Configuration.UserSecrets": "5.0.0", + "Microsoft.Extensions.DependencyInjection": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Physical": "5.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Configuration": "5.0.0", + "Microsoft.Extensions.Logging.Console": "5.0.0", + "Microsoft.Extensions.Logging.Debug": "5.0.0", + "Microsoft.Extensions.Logging.EventLog": "5.0.0", + "Microsoft.Extensions.Logging.EventSource": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + } + }, + "Microsoft.Extensions.Hosting.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.Http": { + "type": "Transitive", + "resolved": "3.0.3", + "contentHash": "dcyB8szIcSynjVZRuFgqkZpPgTc5zeRSj1HMXSmNqWbHYKiPYJl8ZQgBHz6wmZNSUUNGpCs5uxUg8DZHHDC1Ew==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.0.3", + "Microsoft.Extensions.Logging": "3.0.3", + "Microsoft.Extensions.Options": "3.0.3" + } + }, + "Microsoft.Extensions.Logging": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==", + "dependencies": { + "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": "5.0.0", + "contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w==" + }, + "Microsoft.Extensions.Logging.Configuration": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "N3/d0HeMRnBekadbZlmbp+In8EvNNkQHSdbtRzjrGVckdZWpYs5GNrAfaYqVplDFW0WUedSaFJ3khB50BWYGsw==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Configuration.Binder": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0" + } + }, + "Microsoft.Extensions.Logging.Console": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "jH0wbWhfvXjOVmCkbra4vbiovDtTUIWLQjCeJ7Xun3h4AHvwfzm7V7wlsXKs3tNnPrsCxZ9oaV0vUAgGY1JxOA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Configuration": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0" + } + }, + "Microsoft.Extensions.Logging.Debug": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "9dvt0xqRrClvhaPNpfyS39WxnW9G55l5lrV5ZX7IrEgwo4VwtmJKtoPiKVYKbhAuOBGUI5WY3hWLvF+PSbJp5A==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.Logging.EventLog": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "CYzsgF2lqgahGl/HuErsIDaZZ9ueN+MBjGfO/0jVDLPaXLaywxlGKFpDgXMaB053DRYZwD1H2Lb1I60mTXS3jg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "System.Diagnostics.EventLog": "5.0.0" + } + }, + "Microsoft.Extensions.Logging.EventSource": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "hF+D6PJkrM0qXcSEGs1BwZwgP8c0BRkj26P/5wmYTcHKOp52GRey/Z/YKRmRIHIrXxj9tz/JgIjU9oWmiJ5HMw==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Options.ConfigurationExtensions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "280RxNJqOeQqq47aJLy5D9LN61CAWeuRA83gPToQ8B9jl9SNdQ5EXjlfvF66zQI5AXMl+C/3hGnbtIEN+X3mqA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Configuration.Binder": "5.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==" + }, + "Microsoft.Graph.Core": { + "type": "Transitive", + "resolved": "2.0.8", + "contentHash": "CcsCgY1O+LQaKMJkQCpVZPmK6uiFFUu49MwqTxoTBYtFG2/NwyGAIpla5gct8jWlS0DBKXWAyRlIzKt/6UGIDQ==", + "dependencies": { + "Azure.Core": "1.22.0", + "Microsoft.Identity.Client": "4.41.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.15.1", + "System.Diagnostics.DiagnosticSource": "4.7.1", + "System.Security.Claims": "4.3.0", + "System.Text.Json": "6.0.2" + } + }, + "Microsoft.Identity.Client.Extensions.Msal": { + "type": "Transitive", + "resolved": "2.18.4", + "contentHash": "HpG4oLwhQsy0ce7OWq9iDdLtJKOvKRStIKoSEOeBMKuohfuOWNDyhg8fMAJkpG/kFeoe4J329fiMHcJmmB+FPw==", + "dependencies": { + "Microsoft.Identity.Client": "4.30.0", + "System.Security.Cryptography.ProtectedData": "4.5.0" + } + }, + "Microsoft.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "6.16.0", + "contentHash": "FJtXVXvjoza64VPFOPBxqnhe0yyQ5B/7A09+RpTXIzowr5+A4xcX42patsLrNGmFUvXZAHhS2u/6ojTzhYatpg==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "6.16.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "6.16.0", + "contentHash": "Fuo5SpYUpFRw90hBM3PDA1uQsrHmbIaxvwkldJcfi0O51gz/qjSFMe8136NFRoKA3NxZZScpz/47oFkRU2WA/A==" + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "6.15.1", + "contentHash": "6nHr+4yE8vj620Vy4L0pl7kmkvWc06wBrJ+AOo/gjqzu/UD/MYgySUqRGlZYrvvNmKkUWMw4hdn78MPCb4bstA==", + "dependencies": { + "Microsoft.IdentityModel.Logging": "6.15.1", + "Microsoft.IdentityModel.Tokens": "6.15.1" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "6.15.1", + "contentHash": "WwecgT/PNrytLNUWjkYtnnG2LXMAzkINSaZM+8dPPiEpOGz1bQDBWAenTSurYICxGoA1sOPriFXk+ocnQyprKw==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "6.15.1", + "System.IdentityModel.Tokens.Jwt": "6.15.1" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "6.16.0", + "contentHash": "dL7r4bdRbDG0RmyYGw9cpO/pA3GVaxV+lI1ConYuQuRiAxd1ONFlxHue1o8wR8+lEB972cekzfj45WSNaq3+xA==", + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.16.0", + "System.Security.Cryptography.Cng": "4.5.0" + } + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" + }, + "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": "5.0.0", + "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0" + } + }, + "System.Collections": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "tCQTzPsGZh/A9LhhA6zrqCRV4hOHsK90/G7q3Khxmn6tnB1PuNU0cRaKANP2AWcF9bn0zsuOoZOSrHuJk6oNBA==" + }, + "System.Diagnostics.EventLog": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "FHkCwUfsTs+/5tsK+c0egLfacUgbhvcwi3wUFWSEEArSXao343mYqcpOVVFMlcCkdNtjU4YwAWaKYwal6f02og==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0", + "Microsoft.Win32.Registry": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "5.0.0" + } + }, + "System.Formats.Asn1": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w==" + }, + "System.Globalization": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.IO": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" + }, + "System.Memory.Data": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==", + "dependencies": { + "System.Text.Encodings.Web": "4.7.2", + "System.Text.Json": "4.6.0" + } + }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + }, + "System.Reflection": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.ResourceManager": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" + }, + "System.Runtime.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Security.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.Security.Claims": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Security.Principal": "4.3.0" + } + }, + "System.Security.Cryptography.Cng": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", + "dependencies": { + "System.Formats.Asn1": "5.0.0" + } + }, + "System.Security.Cryptography.Pkcs": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "9TPLGjBCGKmNvG8pjwPeuYy0SMVmGZRwlTZvyPHDbYv/DRkoeumJdfumaaDNQzVGMEmbWtg07zUpSW9q70IlDQ==", + "dependencies": { + "System.Formats.Asn1": "5.0.0", + "System.Security.Cryptography.Cng": "5.0.0" + } + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "wLBKzFnDCxP12VL9ANydSYhk59fC4cvOr9ypYQLPnAj48NQIhqnjdD2yhP8yEKyBJEjERWS9DisKL7rX5eU25Q==" + }, + "System.Security.Cryptography.Xml": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "MYmkHtCW+paFmPGFDktnLdOeH3zUrNchbZNki87E1ejNSMm9enSRbJokmvFrsWUrDE4bRE1lVeAle01+t6SGhA==", + "dependencies": { + "System.Security.Cryptography.Pkcs": "5.0.0", + "System.Security.Permissions": "5.0.0" + } + }, + "System.Security.Permissions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "uE8juAhEkp7KDBCdjDIE3H9R1HJuEHqeqX8nLX9gmYKWwsqk3T5qZlPx8qle5DPKimC/Fy3AFTdV7HamgCh9qQ==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Windows.Extensions": "5.0.0" + } + }, + "System.Security.Principal": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Security.Principal.Windows": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==" + }, + "System.Text.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "6.0.2", + "contentHash": "0nE2gwXLn3PTBOPwORLqwuYvWB+Beomt9ZBX+6LmogMNKUvfD1SoDb/ycB1vBntT94rGaB/SvxEyeLu14H6aEg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" + } + }, + "System.Threading.Tasks": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==", + "dependencies": { + "System.Drawing.Common": "5.0.0" + } + } + } + } +} \ No newline at end of file diff --git a/src/ApiService/Tests/Tests.csproj b/src/ApiService/Tests/Tests.csproj new file mode 100644 index 000000000..9f77f5f61 --- /dev/null +++ b/src/ApiService/Tests/Tests.csproj @@ -0,0 +1,23 @@ + + + + net6.0 + enable + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + diff --git a/src/ApiService/Tests/UnitTest1.cs b/src/ApiService/Tests/UnitTest1.cs new file mode 100644 index 000000000..0fa554f60 --- /dev/null +++ b/src/ApiService/Tests/UnitTest1.cs @@ -0,0 +1,13 @@ +using Xunit; + +namespace Tests +{ + public class UnitTest1 + { + [Fact] + public void Test1() + { + + } + } +} \ No newline at end of file