From b3990e5e68c9d3a54eb3b8322074355df40e455b Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 21 Mar 2022 16:35:34 +0100 Subject: [PATCH 01/26] Add IFileProvider implementation --- .../AzureBlobDirectoryContents.cs | 47 +++++++++ .../AzureBlobFileProvider.cs | 96 +++++++++++++++++++ .../AzureBlobItemInfo.cs | 88 +++++++++++++++++ .../AzureBlobPrefixInfo.cs | 55 +++++++++++ 4 files changed, 286 insertions(+) create mode 100644 src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs create mode 100644 src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs create mode 100644 src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs create mode 100644 src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs new file mode 100644 index 0000000..88a98ac --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Microsoft.Extensions.FileProviders; + +namespace Umbraco.StorageProviders.AzureBlob +{ + /// + /// Represents a virtual hierarchy of Azure Blob Storage blobs. + /// + /// + public class AzureBlobDirectoryContents : IDirectoryContents + { + private readonly BlobContainerClient _containerClient; + private readonly IList _items; + + /// + public bool Exists { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The container client. + /// The items. + /// containerClient + /// or + /// items + public AzureBlobDirectoryContents(BlobContainerClient containerClient, IList items) + { + _containerClient = containerClient ?? throw new ArgumentNullException(nameof(containerClient)); + _items = items ?? throw new ArgumentNullException(nameof(items)); + + Exists = _items.Count > 0; + } + + /// + public IEnumerator GetEnumerator() + => _items.Select(x => x.IsPrefix + ? new AzureBlobPrefixInfo(x.Prefix) + : new AzureBlobItemInfo(_containerClient.GetBlobClient(x.Blob.Name), x.Blob.Properties)).GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + } +} diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs new file mode 100644 index 0000000..98a5fa7 --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using System.Net; +using Azure; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Primitives; +using Umbraco.Cms.Core; +using Umbraco.Extensions; +using Umbraco.StorageProviders.AzureBlob.IO; + +namespace Umbraco.StorageProviders.AzureBlob +{ + /// + /// Represents a read-only Azure Blob Storage file provider. + /// + /// + public class AzureBlobFileProvider : IFileProvider + { + private readonly BlobContainerClient _containerClient; + private readonly string? _containerRootPath; + + /// + /// Initializes a new instance of the class. + /// + /// The container client. + /// The container root path. + /// containerClient + public AzureBlobFileProvider(BlobContainerClient containerClient, string? containerRootPath = null) + { + _containerClient = containerClient ?? throw new ArgumentNullException(nameof(containerClient)); + _containerRootPath = containerRootPath?.Trim(Constants.CharArrays.ForwardSlash); + } + + /// + /// Initializes a new instance of the class. + /// + /// The options. + /// options + public AzureBlobFileProvider(AzureBlobFileSystemOptions options) + { + if (options is null) + { + throw new ArgumentNullException(nameof(options)); + } + + _containerClient = new BlobContainerClient(options.ConnectionString, options.ContainerName); + _containerRootPath = options.ContainerRootPath?.Trim(Constants.CharArrays.ForwardSlash); + } + + /// + public IDirectoryContents GetDirectoryContents(string subpath) + { + var path = GetFullPath(subpath); + + // Get all blobs and iterate to fetch all pages + var blobs = new List(); + foreach (var item in _containerClient.GetBlobsByHierarchy(delimiter: "/", prefix: path)) + { + blobs.Add(item); + } + + if (blobs.Count == 0) + { + return NotFoundDirectoryContents.Singleton; + } + + return new AzureBlobDirectoryContents(_containerClient, blobs); + } + + /// + public IFileInfo GetFileInfo(string subpath) + { + var path = GetFullPath(subpath); + var blobClient = _containerClient.GetBlobClient(path); + + BlobProperties properties; + try + { + properties = blobClient.GetProperties().Value; + } + catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.NotFound) + { + return new NotFoundFileInfo(AzureBlobItemInfo.ParseName(path)); + } + + return new AzureBlobItemInfo(blobClient, properties); + } + + /// + public IChangeToken Watch(string filter) => NullChangeToken.Singleton; + + private string GetFullPath(string subpath) => _containerRootPath + subpath.EnsureStartsWith('/'); + } +} diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs new file mode 100644 index 0000000..b48938a --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs @@ -0,0 +1,88 @@ +using System; +using System.IO; +using Azure.Storage.Blobs; +using Azure.Storage.Blobs.Models; +using Microsoft.Extensions.FileProviders; + +namespace Umbraco.StorageProviders.AzureBlob +{ + /// + /// Represents an Azure Blob Storage blob item. + /// + /// + public class AzureBlobItemInfo : IFileInfo + { + private readonly BlobClient _blobClient; + + /// + public bool Exists => true; + + /// + public bool IsDirectory => false; + + /// + public DateTimeOffset LastModified { get; } + + /// + public long Length { get; } + + /// + public string Name { get; } + + /// + public string PhysicalPath => null!; + + /// + /// Initializes a new instance of the class. + /// + /// The blob client. + /// blobClient + protected AzureBlobItemInfo(BlobClient blobClient) + { + _blobClient = blobClient ?? throw new ArgumentNullException(nameof(blobClient)); + + Name = ParseName(blobClient.Name); + } + + /// + /// Initializes a new instance of the class. + /// + /// The blob client. + /// The properties. + /// properties + public AzureBlobItemInfo(BlobClient blobClient, BlobProperties properties) + : this(blobClient) + { + if (properties == null) + { + throw new ArgumentNullException(nameof(properties)); + } + + LastModified = properties.LastModified; + Length = properties.ContentLength; + } + + /// + /// Initializes a new instance of the class. + /// + /// The blob client. + /// The properties. + /// properties + public AzureBlobItemInfo(BlobClient blobClient, BlobItemProperties properties) + : this(blobClient) + { + if (properties == null) + { + throw new ArgumentNullException(nameof(properties)); + } + + LastModified = properties.LastModified.GetValueOrDefault(); + Length = properties.ContentLength.GetValueOrDefault(-1); + } + + /// + public Stream CreateReadStream() => _blobClient.OpenRead(); + + internal static string ParseName(string path) => path.Substring(path.LastIndexOf('/') + 1); + } +} diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs new file mode 100644 index 0000000..0330a1a --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; +using Microsoft.Extensions.FileProviders; + +namespace Umbraco.StorageProviders.AzureBlob +{ + /// + /// Represents an Azure Blob Storage prefix. + /// + /// + public class AzureBlobPrefixInfo : IFileInfo + { + /// + public bool Exists => true; + + /// + public bool IsDirectory => true; + + /// + public DateTimeOffset LastModified => default; + + /// + public long Length => -1; + + /// + public string Name { get; } + + /// + public string PhysicalPath => null!; + + /// + /// Initializes a new instance of the class. + /// + /// The prefix. + public AzureBlobPrefixInfo(string prefix) + { + if (prefix == null) + { + throw new ArgumentNullException(nameof(prefix)); + } + + Name = ParseName(prefix); + } + + /// + public Stream CreateReadStream() => throw new InvalidOperationException(); + + private static string ParseName(string prefix) + { + var name = prefix.TrimEnd('/'); + + return name.Substring(name.LastIndexOf('/') + 1); + } + } +} From 21211b00814c61926759e9a73b66eaf747379544 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 21 Mar 2022 16:38:40 +0100 Subject: [PATCH 02/26] Implement IFileProviderFactory and remove custom middleware --- .../AzureBlobFileSystemMiddleware.cs | 385 ------------------ .../AzureBlobMediaFileSystemExtensions.cs | 40 -- .../IO/AzureBlobFileSystem.cs | 6 +- .../Umbraco.StorageProviders.AzureBlob.csproj | 2 +- 4 files changed, 6 insertions(+), 427 deletions(-) delete mode 100644 src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileSystemMiddleware.cs diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileSystemMiddleware.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileSystemMiddleware.cs deleted file mode 100644 index 01f85bb..0000000 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileSystemMiddleware.cs +++ /dev/null @@ -1,385 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Threading; -using System.Threading.Tasks; -using Azure; -using Azure.Storage.Blobs; -using Azure.Storage.Blobs.Models; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Options; -using Microsoft.Net.Http.Headers; -using Umbraco.Cms.Core.Hosting; -using Umbraco.StorageProviders.AzureBlob.IO; - -namespace Umbraco.StorageProviders.AzureBlob -{ - /// - /// The Azure Blob file system middleware. - /// - /// - public class AzureBlobFileSystemMiddleware : IMiddleware - { - private readonly string _name; - private readonly IAzureBlobFileSystemProvider _fileSystemProvider; - private string _rootPath; - private string _containerRootPath; - private readonly TimeSpan? _maxAge = TimeSpan.FromDays(7); - - /// - /// Creates a new instance of . - /// - /// The options. - /// The file system provider. - /// The hosting environment. - - public AzureBlobFileSystemMiddleware(IOptionsMonitor options, IAzureBlobFileSystemProvider fileSystemProvider, IHostingEnvironment hostingEnvironment) - : this(AzureBlobFileSystemOptions.MediaFileSystemName, options, fileSystemProvider, hostingEnvironment) - { } - - /// - /// Initializes a new instance of the class. - /// - /// The name. - /// The options. - /// The file system provider. - /// The hosting environment. - /// options - /// or - /// hostingEnvironment - /// or - /// name - /// or - /// fileSystemProvider - protected AzureBlobFileSystemMiddleware(string name, IOptionsMonitor options, IAzureBlobFileSystemProvider fileSystemProvider, IHostingEnvironment hostingEnvironment) - { - if (options == null) throw new ArgumentNullException(nameof(options)); - if (hostingEnvironment == null) throw new ArgumentNullException(nameof(hostingEnvironment)); - - _name = name ?? throw new ArgumentNullException(nameof(name)); - _fileSystemProvider = fileSystemProvider ?? throw new ArgumentNullException(nameof(fileSystemProvider)); - - var fileSystemOptions = options.Get(name); - _rootPath = hostingEnvironment.ToAbsolute(fileSystemOptions.VirtualPath); - _containerRootPath = fileSystemOptions.ContainerRootPath ?? _rootPath; - - options.OnChange((o, n) => OptionsOnChange(o, n, hostingEnvironment)); - } - - /// - public Task InvokeAsync(HttpContext context, RequestDelegate next) - { - if (context == null) throw new ArgumentNullException(nameof(context)); - if (next == null) throw new ArgumentNullException(nameof(next)); - - return HandleRequestAsync(context, next); - } - - private async Task HandleRequestAsync(HttpContext context, RequestDelegate next) - { - var request = context.Request; - var response = context.Response; - - if (!context.Request.Path.StartsWithSegments(_rootPath, StringComparison.InvariantCultureIgnoreCase)) - { - await next(context).ConfigureAwait(false); - return; - } - - string containerPath = $"{_containerRootPath.TrimEnd('/')}/{(request.Path.Value.Remove(0, _rootPath.Length)).TrimStart('/')}"; - var blob = _fileSystemProvider.GetFileSystem(_name).GetBlobClient(containerPath); - - var blobRequestConditions = GetAccessCondition(context.Request); - - Response properties; - var ignoreRange = false; - - try - { - properties = await blob.GetPropertiesAsync(blobRequestConditions, context.RequestAborted).ConfigureAwait(false); - } - catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.NotFound) - { - // the blob or file does not exist, let other middleware handle it - await next(context).ConfigureAwait(false); - return; - } - catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.PreconditionFailed) - { - // If-Range or If-Unmodified-Since is not met - // if the resource has been modified, we need to send the whole file back with a 200 OK - // a Content-Range header is needed with the new length - ignoreRange = true; - properties = await blob.GetPropertiesAsync().ConfigureAwait(false); - response.Headers.Append("Content-Range", $"bytes */{properties.Value.ContentLength}"); - } - catch (RequestFailedException ex) when (ex.Status == (int)HttpStatusCode.NotModified) - { - // If-None-Match or If-Modified-Since is not met - // we need to pass the status code back to the client - // so it knows it can reuse the cached data - response.StatusCode = (int)HttpStatusCode.NotModified; - return; - } - // for some reason we get an internal exception type with the message - // and not a request failed with status NotModified :( - catch (Exception ex) when (ex.Message == "The condition specified using HTTP conditional header(s) is not met.") - { - if (blobRequestConditions != null - && (blobRequestConditions.IfMatch.HasValue || blobRequestConditions.IfUnmodifiedSince.HasValue)) - { - // If-Range or If-Unmodified-Since is not met - // if the resource has been modified, we need to send the whole file back with a 200 OK - // a Content-Range header is needed with the new length - ignoreRange = true; - properties = await blob.GetPropertiesAsync().ConfigureAwait(false); - response.Headers.Append("Content-Range", $"bytes */{properties.Value.ContentLength}"); - } - else - { - // If-None-Match or If-Modified-Since is not met - // we need to pass the status code back to the client - // so it knows it can reuse the cached data - response.StatusCode = (int)HttpStatusCode.NotModified; - return; - } - } - catch (TaskCanceledException) - { - // client cancelled the request before it could finish, just ignore - return; - } - - var responseHeaders = response.GetTypedHeaders(); - - responseHeaders.CacheControl = - new CacheControlHeaderValue - { - Public = true, - MustRevalidate = true, - MaxAge = _maxAge, - }; - - responseHeaders.LastModified = properties.Value.LastModified; - responseHeaders.ETag = new EntityTagHeaderValue(properties.Value.ETag.ToString("H")); - responseHeaders.Append(HeaderNames.Vary, "Accept-Encoding"); - - var requestHeaders = request.GetTypedHeaders(); - - var rangeHeader = requestHeaders.Range; - - if (!ignoreRange && rangeHeader != null) - { - if (!ValidateRanges(rangeHeader.Ranges, properties.Value.ContentLength)) - { - // no ranges could be parsed - response.Clear(); - response.StatusCode = (int)HttpStatusCode.RequestedRangeNotSatisfiable; - responseHeaders.ContentRange = new ContentRangeHeaderValue(properties.Value.ContentLength); - return; - } - - if (rangeHeader.Ranges.Count == 1) - { - var range = rangeHeader.Ranges.First(); - var contentRange = GetRangeHeader(properties, range); - - response.StatusCode = (int)HttpStatusCode.PartialContent; - response.ContentType = properties.Value.ContentType; - responseHeaders.ContentRange = contentRange; - - await DownloadRangeToStreamAsync(blob, properties, response.Body, contentRange, context.RequestAborted).ConfigureAwait(false); - return; - } - - if (rangeHeader.Ranges.Count > 1) - { - // handle multipart ranges - var boundary = Guid.NewGuid().ToString(); - response.StatusCode = (int)HttpStatusCode.PartialContent; - response.ContentType = $"multipart/byteranges; boundary={boundary}"; - - foreach (var range in rangeHeader.Ranges) - { - var contentRange = GetRangeHeader(properties, range); - - await response.WriteAsync($"--{boundary}").ConfigureAwait(false); - await response.WriteAsync("\n").ConfigureAwait(false); - await response.WriteAsync($"{HeaderNames.ContentType}: {properties.Value.ContentType}").ConfigureAwait(false); - await response.WriteAsync("\n").ConfigureAwait(false); - await response.WriteAsync($"{HeaderNames.ContentRange}: {contentRange}").ConfigureAwait(false); - await response.WriteAsync("\n").ConfigureAwait(false); - await response.WriteAsync("\n").ConfigureAwait(false); - - await DownloadRangeToStreamAsync(blob, properties, response.Body, contentRange, context.RequestAborted).ConfigureAwait(false); - await response.WriteAsync("\n").ConfigureAwait(false); - } - - await response.WriteAsync($"--{boundary}--").ConfigureAwait(false); - await response.WriteAsync("\n").ConfigureAwait(false); - return; - } - } - response.StatusCode = (int)HttpStatusCode.OK; - response.ContentType = properties.Value.ContentType; - responseHeaders.ContentLength = properties.Value.ContentLength; - responseHeaders.Append(HeaderNames.AcceptRanges, "bytes"); - - await response.StartAsync().ConfigureAwait(false); - await DownloadRangeToStreamAsync(blob, response.Body, 0L, properties.Value.ContentLength, context.RequestAborted).ConfigureAwait(false); - } - - private static BlobRequestConditions? GetAccessCondition(HttpRequest request) - { - var range = request.Headers["Range"]; - if (string.IsNullOrEmpty(range)) - { - // etag - var ifNoneMatch = request.Headers["If-None-Match"]; - if (!string.IsNullOrEmpty(ifNoneMatch)) - { - return new BlobRequestConditions - { - IfNoneMatch = new ETag(ifNoneMatch) - }; - } - - var ifModifiedSince = request.Headers["If-Modified-Since"]; - if (!string.IsNullOrEmpty(ifModifiedSince)) - { - return new BlobRequestConditions - { - IfModifiedSince = DateTimeOffset.Parse(ifModifiedSince, CultureInfo.InvariantCulture) - }; - } - } - else - { - // handle If-Range header, it can be either an etag or a date - // see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Range and https://tools.ietf.org/html/rfc7233#section-3.2 - var ifRange = request.Headers["If-Range"]; - if (!string.IsNullOrEmpty(ifRange)) - { - var conditions = new BlobRequestConditions(); - - if (DateTimeOffset.TryParse(ifRange, out var date)) - { - conditions.IfUnmodifiedSince = date; - } - else - { - conditions.IfMatch = new ETag(ifRange); - } - } - - var ifUnmodifiedSince = request.Headers["If-Unmodified-Since"]; - if (!string.IsNullOrEmpty(ifUnmodifiedSince)) - { - return new BlobRequestConditions - { - IfUnmodifiedSince = DateTimeOffset.Parse(ifUnmodifiedSince, CultureInfo.InvariantCulture) - }; - } - } - - return null; - } - - private static bool ValidateRanges(ICollection ranges, long length) - { - if (ranges.Count == 0) - return false; - - foreach (var range in ranges) - { - if (range.From > range.To) - return false; - if (range.To >= length) - return false; - } - - return true; - } - - private static ContentRangeHeaderValue GetRangeHeader(BlobProperties properties, RangeItemHeaderValue range) - { - var length = properties.ContentLength - 1; - - long from; - long to; - if (range.To.HasValue) - { - if (range.From.HasValue) - { - to = Math.Min(range.To.Value, length); - from = range.From.Value; - } - else - { - to = length; - from = Math.Max(properties.ContentLength - range.To.Value, 0L); - } - } - else if (range.From.HasValue) - { - to = length; - from = range.From.Value; - } - else - { - to = length; - from = 0L; - } - - return new ContentRangeHeaderValue(from, to, properties.ContentLength); - } - - private static async Task DownloadRangeToStreamAsync(BlobClient blob, BlobProperties properties, - Stream outputStream, ContentRangeHeaderValue contentRange, CancellationToken cancellationToken) - { - var offset = contentRange.From.GetValueOrDefault(0L); - var length = properties.ContentLength; - - if (contentRange.To.HasValue && contentRange.From.HasValue) - { - length = contentRange.To.Value - contentRange.From.Value + 1; - } - else if (contentRange.To.HasValue) - { - length = contentRange.To.Value + 1; - } - else if (contentRange.From.HasValue) - { - length = properties.ContentLength - contentRange.From.Value + 1; - } - - await DownloadRangeToStreamAsync(blob, outputStream, offset, length, cancellationToken).ConfigureAwait(false); - } - - private static async Task DownloadRangeToStreamAsync(BlobClient blob, Stream outputStream, - long offset, long length, CancellationToken cancellationToken) - { - try - { - if (length == 0) return; - var response = await blob.DownloadAsync(new HttpRange(offset, length), cancellationToken: cancellationToken).ConfigureAwait(false); - await response.Value.Content.CopyToAsync(outputStream, cancellationToken).ConfigureAwait(false); - } - catch (TaskCanceledException) - { - // client cancelled the request before it could finish, just ignore - } - } - - private void OptionsOnChange(AzureBlobFileSystemOptions options, string name, IHostingEnvironment hostingEnvironment) - { - if (name != _name) return; - - _rootPath = hostingEnvironment.ToAbsolute(options.VirtualPath); - _containerRootPath = options.ContainerRootPath ?? _rootPath; - } - } -} diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs index ad3cd93..2d631b1 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs @@ -1,15 +1,11 @@ using System; -using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; using SixLabors.ImageSharp.Web.Caching; using SixLabors.ImageSharp.Web.Providers; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Infrastructure.DependencyInjection; -using Umbraco.Cms.Web.Common.ApplicationBuilder; using Umbraco.Extensions; -using Umbraco.StorageProviders.AzureBlob; using Umbraco.StorageProviders.AzureBlob.Imaging; using Umbraco.StorageProviders.AzureBlob.IO; @@ -56,8 +52,6 @@ public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder b options.VirtualPath = globalSettingsOptions.Value.UmbracoMediaPath; }); - builder.Services.TryAddSingleton(); - // ImageSharp image provider/cache builder.Services.Insert(0, ServiceDescriptor.Singleton()); if (useAzureBlobImageCache) @@ -156,39 +150,5 @@ public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder b return builder; } - - /// - /// Adds the . - /// - /// The . - /// - /// The . - /// - /// builder - public static IUmbracoApplicationBuilderContext UseAzureBlobMediaFileSystem(this IUmbracoApplicationBuilderContext builder) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - - UseAzureBlobMediaFileSystem(builder.AppBuilder); - - return builder; - } - - /// - /// Adds the . - /// - /// The . - /// - /// The . - /// - /// app - public static IApplicationBuilder UseAzureBlobMediaFileSystem(this IApplicationBuilder app) - { - if (app == null) throw new ArgumentNullException(nameof(app)); - - app.UseMiddleware(); - - return app; - } } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs index f69cc4e..ba8567c 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs @@ -8,6 +8,7 @@ using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.FileProviders; using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.IO; using Umbraco.Extensions; @@ -15,7 +16,7 @@ namespace Umbraco.StorageProviders.AzureBlob.IO { /// - public class AzureBlobFileSystem : IAzureBlobFileSystem + public class AzureBlobFileSystem : IAzureBlobFileSystem, IFileProviderFactory { private readonly BlobContainerClient _container; private readonly IContentTypeProvider _contentTypeProvider; @@ -323,5 +324,8 @@ public static Response CreateIfNotExists(AzureBlobFileSystemO return new BlobContainerClient(options.ConnectionString, options.ContainerName).CreateIfNotExists(accessType); } + + /// + public IFileProvider Create() => new AzureBlobFileProvider(_container, _containerRootPath); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj index 109ddb0..10efee6 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj +++ b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj @@ -8,7 +8,7 @@ - + From d34039a3e5e2b1cf8b8a0af60214521c77357dd7 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 21 Mar 2022 16:56:16 +0100 Subject: [PATCH 03/26] Remove AzureBlobFileSystemImageProvider --- .../AzureBlobMediaFileSystemExtensions.cs | 3 +- .../AzureBlobFileSystemImageProvider.cs | 123 ------------------ 2 files changed, 1 insertion(+), 125 deletions(-) delete mode 100644 src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageProvider.cs diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs index 2d631b1..acfdf40 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs @@ -52,8 +52,7 @@ public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder b options.VirtualPath = globalSettingsOptions.Value.UmbracoMediaPath; }); - // ImageSharp image provider/cache - builder.Services.Insert(0, ServiceDescriptor.Singleton()); + // ImageSharp image cache if (useAzureBlobImageCache) { builder.Services.AddUnique(); diff --git a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageProvider.cs deleted file mode 100644 index 4071cf9..0000000 --- a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageProvider.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Extensions; -using Microsoft.Extensions.Options; -using SixLabors.ImageSharp.Web; -using SixLabors.ImageSharp.Web.Providers; -using SixLabors.ImageSharp.Web.Resolvers; -using SixLabors.ImageSharp.Web.Resolvers.Azure; -using Umbraco.Cms.Core.Hosting; -using Umbraco.StorageProviders.AzureBlob.IO; - -namespace Umbraco.StorageProviders.AzureBlob.Imaging -{ - /// - public class AzureBlobFileSystemImageProvider : IImageProvider - { - private readonly string _name; - private readonly IAzureBlobFileSystemProvider _fileSystemProvider; - private string _rootPath; - private readonly FormatUtilities _formatUtilities; - - /// - /// A match function used by the resolver to identify itself as the correct resolver to use. - /// - private Func? _match; - - /// - /// Initializes a new instance of the class. - /// - /// The options. - /// The file system provider. - /// The hosting environment. - /// The format utilities. - public AzureBlobFileSystemImageProvider(IOptionsMonitor options, IAzureBlobFileSystemProvider fileSystemProvider, IHostingEnvironment hostingEnvironment, FormatUtilities formatUtilities) - : this(AzureBlobFileSystemOptions.MediaFileSystemName, options, fileSystemProvider, hostingEnvironment, formatUtilities) - { } - - /// - /// Creates a new instance of . - /// - /// The name. - /// The options. - /// The file system provider. - /// The hosting environment. - /// The format utilities. - /// optionsFactory - /// or - /// hostingEnvironment - /// or - /// name - /// or - /// fileSystemProvider - /// or - /// formatUtilities - protected AzureBlobFileSystemImageProvider(string name, IOptionsMonitor options, IAzureBlobFileSystemProvider fileSystemProvider, IHostingEnvironment hostingEnvironment, FormatUtilities formatUtilities) - { - if (options == null) throw new ArgumentNullException(nameof(options)); - if (hostingEnvironment == null) throw new ArgumentNullException(nameof(hostingEnvironment)); - - _name = name ?? throw new ArgumentNullException(nameof(name)); - _fileSystemProvider = fileSystemProvider ?? throw new ArgumentNullException(nameof(fileSystemProvider)); - _formatUtilities = formatUtilities ?? throw new ArgumentNullException(nameof(formatUtilities)); - - var fileSystemOptions = options.Get(name); - _rootPath = hostingEnvironment.ToAbsolute(fileSystemOptions.VirtualPath); - - options.OnChange((o, n) => OptionsOnChange(o, n, hostingEnvironment)); - } - - /// - public bool IsValidRequest(HttpContext context) - { - if (context == null) throw new ArgumentNullException(nameof(context)); - - return _formatUtilities.GetExtensionFromUri(context.Request.GetDisplayUrl()) != null; - } - - /// - public Task GetAsync(HttpContext context) - { - if (context == null) throw new ArgumentNullException(nameof(context)); - - return GetResolverAsync(context); - } - - private async Task GetResolverAsync(HttpContext context) - { - var blob = _fileSystemProvider - .GetFileSystem(_name) - .GetBlobClient(context.Request.Path); - - if (await blob.ExistsAsync().ConfigureAwait(false)) - return new AzureBlobStorageImageResolver(blob); - - return null; - } - - /// - public ProcessingBehavior ProcessingBehavior => ProcessingBehavior.CommandOnly; - - /// - public Func Match - { - get => this._match ?? IsMatch; - set => this._match = value; - } - - private bool IsMatch(HttpContext context) - { - if (context == null) throw new ArgumentNullException(nameof(context)); - - return context.Request.Path.StartsWithSegments(_rootPath, StringComparison.InvariantCultureIgnoreCase); - } - - private void OptionsOnChange(AzureBlobFileSystemOptions options, string name, IHostingEnvironment hostingEnvironment) - { - if (name != _name) return; - - _rootPath = hostingEnvironment.ToAbsolute(options.VirtualPath); - } - } -} From bcead5e099e7165123d75149ccfac0f2b7461643 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 21 Mar 2022 16:59:18 +0100 Subject: [PATCH 04/26] Fix IAzureBlobFileSystem instance creation --- .../IO/AzureBlobFileSystemProvider.cs | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs index 2b6fd2d..4d8a2a7 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.IO; -using Umbraco.Extensions; namespace Umbraco.StorageProviders.AzureBlob.IO { @@ -43,24 +42,17 @@ public IAzureBlobFileSystem GetFileSystem(string name) { if (name == null) throw new ArgumentNullException(nameof(name)); - return _fileSystems.GetOrAdd(name, CreateInstance); - } - - private IAzureBlobFileSystem CreateInstance(string name) - { - var options = _optionsMonitor.Get(name); + return _fileSystems.GetOrAdd(name, name => + { + var options = _optionsMonitor.Get(name); - return CreateInstance(options); - } - - private IAzureBlobFileSystem CreateInstance(AzureBlobFileSystemOptions options) - { - return new AzureBlobFileSystem(options, _hostingEnvironment, _ioHelper, _fileExtensionContentTypeProvider); + return new AzureBlobFileSystem(options, _hostingEnvironment, _ioHelper, _fileExtensionContentTypeProvider); + }); } private void OptionsOnChange(AzureBlobFileSystemOptions options, string name) { - _fileSystems.TryUpdate(name, _ => CreateInstance(options)); + _fileSystems.TryRemove(name, out _); } } } From 8a42b64f960fc012bee41125061d47180d926534 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 21 Mar 2022 16:59:54 +0100 Subject: [PATCH 05/26] Code/documentation cleanup --- .../IO/AzureBlobFileSystemOptions.cs | 2 +- .../IO/IAzureBlobFileSystem.cs | 8 +++++--- .../Imaging/AzureBlobFileSystemImageCache.cs | 8 +++++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs index 7ca49b6..bff8d34 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs @@ -27,7 +27,7 @@ public class AzureBlobFileSystemOptions /// /// The root path of the container. /// - public string ContainerRootPath { get; set; } = null!; + public string? ContainerRootPath { get; set; } /// /// The virtual path. diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/IAzureBlobFileSystem.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/IAzureBlobFileSystem.cs index 27325d8..e988899 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/IAzureBlobFileSystem.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/IAzureBlobFileSystem.cs @@ -4,15 +4,17 @@ namespace Umbraco.StorageProviders.AzureBlob.IO { /// - /// The Azure Blob File System. + /// Represents an Azure Blob Storage file system. /// public interface IAzureBlobFileSystem : IFileSystem { /// - /// Get the . + /// Get the . /// /// The relative path to the blob. - /// A + /// + /// A . + /// BlobClient GetBlobClient(string path); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs index ee51ce4..819e7e7 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs @@ -53,10 +53,12 @@ protected AzureBlobFileSystemImageCache(string name, IOptionsMonitor From d6778b82d3449f6ca0f545311bedb8836d290fcf Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 26 Aug 2021 17:05:31 +0200 Subject: [PATCH 06/26] Move provider-independent code to Umbraco.StorageProviders project --- Umbraco.StorageProviders.sln | 14 ++++++ icon.png | Bin 0 -> 2385 bytes src/Directory.Build.props | 25 ++++------ .../AzureBlobCdnMediaUrlProviderExtensions.cs | 47 ++++++++++++++++++ .../Umbraco.StorageProviders.AzureBlob.csproj | 6 ++- .../CdnMediaUrlProvider.cs | 5 +- .../CdnMediaUrlProviderOptions.cs | 2 +- .../CdnMediaUrlProviderExtensions.cs | 8 +-- .../Properties/AssemblyInfo.cs | 3 ++ .../Umbraco.StorageProviders.csproj | 12 +++++ 10 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 icon.png create mode 100644 src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs rename src/{Umbraco.StorageProviders.AzureBlob => Umbraco.StorageProviders}/CdnMediaUrlProvider.cs (93%) rename src/{Umbraco.StorageProviders.AzureBlob => Umbraco.StorageProviders}/CdnMediaUrlProviderOptions.cs (94%) rename src/{Umbraco.StorageProviders.AzureBlob => Umbraco.StorageProviders}/DependencyInjection/CdnMediaUrlProviderExtensions.cs (96%) create mode 100644 src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs create mode 100644 src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj diff --git a/Umbraco.StorageProviders.sln b/Umbraco.StorageProviders.sln index 4ecab82..0350f56 100644 --- a/Umbraco.StorageProviders.sln +++ b/Umbraco.StorageProviders.sln @@ -17,6 +17,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution README.md = README.md EndProjectSection EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.StorageProviders", "src\Umbraco.StorageProviders\Umbraco.StorageProviders.csproj", "{5EC38982-2C9A-4D8D-AAE2-743A690FCD71}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,18 @@ Global {99A3FCBE-FDC6-4580-BDB8-7D219C6D98C3}.Release|x64.Build.0 = Release|Any CPU {99A3FCBE-FDC6-4580-BDB8-7D219C6D98C3}.Release|x86.ActiveCfg = Release|Any CPU {99A3FCBE-FDC6-4580-BDB8-7D219C6D98C3}.Release|x86.Build.0 = Release|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Debug|x64.ActiveCfg = Debug|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Debug|x64.Build.0 = Debug|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Debug|x86.ActiveCfg = Debug|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Debug|x86.Build.0 = Debug|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Release|Any CPU.Build.0 = Release|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Release|x64.ActiveCfg = Release|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Release|x64.Build.0 = Release|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Release|x86.ActiveCfg = Release|Any CPU + {5EC38982-2C9A-4D8D-AAE2-743A690FCD71}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a701ed6f2207e3433364e133ab02fa625ec115 GIT binary patch literal 2385 zcmV-X39j~uP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2Iaf?b$(5kN8DMZR{5{vN5oWQ?CM%`9Gi0v~ zbqe)k3mm3k)EY4GIK1_XAx4`|S-E7B)kc^$>+H$uO~Q=P1{){2a;^bm7J*T1gNz&{ zLMNP;WbZR~Iy}Edn}l)E1r9x1k}?s7xdLzEvLhQq`mHXnPm(?NIUFUw5N1XPlB@6< zJM=j8d>vuP7*jb0f0y2VPwutCTyv2yY3uJ`8CwJMynV3pm|+L_qpU=y@AtxNbMTkc z?BBp!|1T)$4N(|_RQkZy>^qVRZWQK6hJKAFl*KO5=7>9i4||vT8Koc|h$CUd(*YeG z&UqM8aWL$|5vPNiW!N#|QfGImOJdyN4VN9jr3RKrHqP$!-3!C#Xh=nIOywBH3BwAO zFv8Xx?30{5uVxfOS1B;XeJHZyTjWbv)De`glT==DsQ=2GS@nv!zSBI-olXoDkd8!1B) zw$hT*XBW*505dsOr;=f0KmYU#yI93nr`eZ#nwhVlk$tl9D0^vnC7Wo(7=y&RQ3vYs zk2{>5Ygf`3i*u@BZAWPN??GJ1OY zSoQu^miEYYvWywTx~uoKa$P~74Ih5;HM@JVk1RtG+FCZj<-1ih-(s=L%Kh-qvy?E! zqzCetlJ~7JK|@*jDK=?VK3T>LV%?>nBNR9SozwHkGGW+eO;V=u#@~{fca<$!O(%rH zGIe%7A9|tK)`G0Acey4fkzA3 ziIYDF^#R~eeE*|^EOC;TEMo?-Zq(6#>LE_Gbh7DxFC@!^Blx>Ao9wOFeA)Th*kznao&K&2{xhcXuCq_=yryJ{;ktx7(AmZ?Z^9o+*@o z9v3`cE>vqcd+ri@e%b#?c{BOkvI?#%6iZ&&L(1#X?(|H@(Dya!p&rv$RSC5kzJn?8 zujk51c{BOc(sFj9Y2frjy!mb|DX&M^A7ogpvNxN0sK?BY4+*szzG-M@k1Z%8<;~>W zf0wbk`tw4ohL1KJCgt@A)4&ZKpjJ{3_4wK5Z-iP6hmN$dIgb~U@@5kK&%wiOLaT-x zwVssMBkX%>u>+c@hkB%9fZ79R*$ji8cqBw`kGevUyS&RAeM=%gO%F~8`9 zP^$sg;%R@2UKAK4MuSzgtwO7YvhtIpydL4@_gJV0LlGmsQ0%Qa!=}LIgpxOtr~`F{ zV$a^wr2J4EQ3rgnyIH8!fNv$5`+y*)KD?cMRWo=5R8)<$17zg_^+1oMU!D|dH3WRX z4pQDsVia1lf3OcIuV^9V^~k5dNSxrd!bYK11FixOjo~U#R5lVHfKE{M7+wZ9s|`Y} zhK6t3+5AO2NqIB*kA*u~{qc68RfC#$oRrriUk2gFrqBmNG3(RALal}~tryv|uT_xp zX7ZU=_psBTD-`Shca)UZBaD7G`hZudhk8t3IXD#dclWZD@9m3fY7Fasb9F8A`+J2} z4R5?tLzdBFAQX0bCsPmgIPdA5LhV4P5Fi;$Oc-LgL=57|C0~$b^vE|ud^;=~+YX~A zZaQ^AsMgSYx|7XcY}}CH66Z!CZT>Hc2~Br znRCrw4l(s=p95FM4^S!HU@LcTe?c>YTD=YSz zk{-h}*ozsJZ2zHiyzWq-?|D0Ozwt~|FeQda;7L(s*hx|3BTts_wLcuX!7xl!6_k9( z-dS^iEqZY`dvIP6yKmYy(ox!hj+I|nri?y1FZQs^b%$6Y*h1MDjxhfRrp58> z9Hv3Kk%JK=di)%vUiS?}3pm0ydmET*rm?wC9*iIooLdu&9E}Bu2CU9Hz*>nsU9@nv z?GitjG2D10bu@;E%~AC4ldDV{$- zd>qk5=h^=(W@{l-uG-hig3K6qjM4dEA_#ts z7FUOuTq2|V$xINqL?$>r_wxJ1F>$3<@q;a+^U;(BHVz|3Nmds|x_5|#I2}j*v$;_4 z`^9`0sr;NioE(V2wD2bI+orNw3^bHp8zy7()7kzAd_3(Qj~6fT?jab8X|_mipU20? z(-bh + - 1.1.0 - 1.1.0 - 1.1.0 - 1.1.0.0 - 9.0 en-US Umbraco Copyright © Umbraco 2022 Umbraco HQ https://github.com/umbraco/Umbraco.StorageProviders https://umbraco.com/dist/nuget/logo-small.png - https://opensource.org/licenses/MIT - false + icon.png + MIT umbraco storage - git - https://github.com/umbraco/Umbraco.StorageProviders + + + + - true - - true - - true snupkg + + + diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs new file mode 100644 index 0000000..bb4e930 --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs @@ -0,0 +1,47 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Umbraco.StorageProviders; +using Umbraco.StorageProviders.AzureBlob.IO; + +// ReSharper disable once CheckNamespace +// uses same namespace as Umbraco Core for easier discoverability +namespace Umbraco.Cms.Core.DependencyInjection +{ + /// + /// Extension methods to help registering a CDN media URL provider. + /// + public static class AzureBlobCdnMediaUrlProviderExtensions + { + /// + /// Registers and configures the . + /// + /// The . + /// + /// The . + /// + /// builder + public static IUmbracoBuilder AddAzureBlobCdnMediaUrlProvider(this IUmbracoBuilder builder) + { + if (builder == null) throw new ArgumentNullException(nameof(builder)); + + builder.AddCdnMediaUrlProvider(); + + builder.Services.AddOptions() + .BindConfiguration("Umbraco:Storage:AzureBlob:Media:Cdn") + .Configure>( + (options, factory) => + { + var mediaOptions = factory.Create(AzureBlobFileSystemOptions.MediaFileSystemName); + if (!string.IsNullOrEmpty(mediaOptions.ContainerName)) + { + options.Url = new Uri(options.Url, mediaOptions.ContainerName); + } + } + ) + .ValidateDataAnnotations(); + + return builder; + } + } +} diff --git a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj index 10efee6..fe181db 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj +++ b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj @@ -1,15 +1,17 @@  + 2.0.0 net5.0 enable AllEnabledByDefault true Azure Blob Storage file system provider for Umbraco CMS + umbraco storage azure blob - - + + diff --git a/src/Umbraco.StorageProviders.AzureBlob/CdnMediaUrlProvider.cs b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs similarity index 93% rename from src/Umbraco.StorageProviders.AzureBlob/CdnMediaUrlProvider.cs rename to src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs index 5c7c55d..dfdbc32 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/CdnMediaUrlProvider.cs +++ b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Routing; -namespace Umbraco.StorageProviders.AzureBlob +namespace Umbraco.StorageProviders { /// /// A that returns a CDN URL for a media item. @@ -22,8 +22,7 @@ public class CdnMediaUrlProvider : DefaultMediaUrlProvider /// The media path generators. /// The URI utility. /// options - public CdnMediaUrlProvider(IOptionsMonitor options, - MediaUrlGeneratorCollection mediaPathGenerators, UriUtility uriUtility) + public CdnMediaUrlProvider(IOptionsMonitor options, MediaUrlGeneratorCollection mediaPathGenerators, UriUtility uriUtility) : base(mediaPathGenerators, uriUtility) { if (options == null) throw new ArgumentNullException(nameof(options)); diff --git a/src/Umbraco.StorageProviders.AzureBlob/CdnMediaUrlProviderOptions.cs b/src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs similarity index 94% rename from src/Umbraco.StorageProviders.AzureBlob/CdnMediaUrlProviderOptions.cs rename to src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs index cf4e596..fd9f7c1 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/CdnMediaUrlProviderOptions.cs +++ b/src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs @@ -1,7 +1,7 @@ using System; using System.ComponentModel.DataAnnotations; -namespace Umbraco.StorageProviders.AzureBlob +namespace Umbraco.StorageProviders { /// /// The CDN media URL provider options. diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/CdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs similarity index 96% rename from src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/CdnMediaUrlProviderExtensions.cs rename to src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs index 007d97f..fc9fd53 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/CdnMediaUrlProviderExtensions.cs +++ b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs @@ -1,6 +1,6 @@ using System; using Microsoft.Extensions.DependencyInjection; -using Umbraco.StorageProviders.AzureBlob; +using Umbraco.StorageProviders; // ReSharper disable once CheckNamespace // uses same namespace as Umbraco Core for easier discoverability @@ -23,12 +23,12 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde { if (builder == null) throw new ArgumentNullException(nameof(builder)); + builder.MediaUrlProviders().Insert(); + builder.Services.AddOptions() - .BindConfiguration("Umbraco:Storage:AzureBlob:Media:Cdn") + .BindConfiguration("Umbraco:Storage:Media:Cdn") .ValidateDataAnnotations(); - builder.MediaUrlProviders().Insert(); - return builder; } diff --git a/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs b/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..55acad6 --- /dev/null +++ b/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System; + +[assembly:CLSCompliant(false)] diff --git a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj new file mode 100644 index 0000000..8c14bfd --- /dev/null +++ b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj @@ -0,0 +1,12 @@ + + + 2.0.0 + net5.0 + enable + AllEnabledByDefault + true + + + + + From 7b96a0fee7c7033514d05aacd15c14b986bedb5c Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 22 Mar 2022 19:51:13 +0100 Subject: [PATCH 07/26] Update CDN config section path and documentation --- README.md | 113 ++++++++++-------- .../AzureBlobCdnMediaUrlProviderExtensions.cs | 47 -------- .../CdnMediaUrlProviderExtensions.cs | 2 +- 3 files changed, 61 insertions(+), 101 deletions(-) delete mode 100644 src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs diff --git a/README.md b/README.md index 5bd013d..b8a29c3 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,13 @@ -# Umbraco.StorageProviders +# Umbraco storage providers This repository contains Umbraco storage providers that can replace the default physical file storage. -## Umbraco.StorageProviders.AzureBlob - -The Azure Blob Storage provider has an implementation of the Umbraco `IFileSystem` that connects to an Azure Blob Storage container. +## Umbraco.StorageProviders -It also has the following features: -- middleware for serving media files from the `/media` path -- ImageSharp image provider/cache -- a CDN media URL provider +This contains a CDN media URL provider. ### Usage -This provider can be added in the `Startup.cs` file: - ```csharp public void ConfigureServices(IServiceCollection services) { @@ -22,52 +15,70 @@ public void ConfigureServices(IServiceCollection services) .AddBackOffice() .AddWebsite() .AddComposers() - // Add the Azure Blob Storage file system, ImageSharp image provider/cache and middleware for Media: - .AddAzureBlobMediaFileSystem() - // Optionally add the CDN media URL provider: + // Add the CDN media URL provider: .AddCdnMediaUrlProvider() .Build(); } +``` -public void Configure(IApplicationBuilder app) +There're multiple ways to configure the CDN provider, it can be done in code: + +```csharp +.AddCdnMediaUrlProvider(options => { + options.Url = new Uri("https://cdn.example.com/"); +}); +``` + +In `appsettings.json`: + +```json { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); + "Umbraco": { + "Storage": { + "Cdn": { + "Url": "https://cdn.example.com/" + } } - - app.UseUmbraco() - .WithMiddleware(u => - { - u.UseBackOffice(); - u.UseWebsite(); - // Enables the Azure Blob Storage middleware for Media: - u.UseAzureBlobMediaFileSystem(); - - }) - .WithEndpoints(u => - { - u.UseInstallerEndpoints(); - u.UseBackOfficeEndpoints(); - u.UseWebsiteEndpoints(); - }); + } } ``` -There're multiple ways to configure the provider, it can be done in code: +Or by environment variables: -```csharp -services.AddUmbraco(_env, _config) +```sh +UMBRACO__STORAGE__CDN__URL= +``` - .AddAzureBlobMediaFileSystem(options => { - options.ConnectionString = ""; - options.ContainerName = ""; - }) +_Note: you still have to add the provider in the `Startup.cs` file when not configuring the options in code._ - .AddCdnMediaUrlProvider(options => { - options.Url = new Uri("https://my-cdn.example.com/"); - }); +## Umbraco.StorageProviders.AzureBlob +The Azure Blob Storage provider has an implementation of the Umbraco `IFileSystem` that connects to an Azure Blob Storage container. + +### Usage + +This provider can be added in the `Startup.cs` file: + +```csharp +public void ConfigureServices(IServiceCollection services) +{ + services.AddUmbraco(_env, _config) + .AddBackOffice() + .AddWebsite() + .AddComposers() + // Add the Azure Blob Storage file system + .AddAzureBlobMediaFileSystem() + .Build(); +} +``` + +There're multiple ways to configure the provider, it can be done in code: + +```csharp +.AddAzureBlobMediaFileSystem(options => { + options.ConnectionString = ""; + options.ContainerName = ""; +}) ``` In `appsettings.json`: @@ -79,10 +90,7 @@ In `appsettings.json`: "AzureBlob": { "Media": { "ConnectionString": "", - "ContainerName": "", - "Cdn": { - "Url": "" - } + "ContainerName": "" } } } @@ -95,22 +103,21 @@ Or by environment variables: ```sh UMBRACO__STORAGE__AZUREBLOB__MEDIA__CONNECTIONSTRING= UMBRACO__STORAGE__AZUREBLOB__MEDIA__CONTAINERNAME= -UMBRACO__STORAGE__AZUREBLOB__MEDIA__CDN__URL= ``` _Note: you still have to add the provider in the `Startup.cs` file when not configuring the options in code._ -## Using the file system provider - -Please refer to our documentation on [using custom file systems](https://our.umbraco.com/documentation/Extending/FileSystemProviders/). - -## Folder structure in the Azure Blob Storage container +### Folder structure in the Azure Blob Storage container The container name is expected to exist and uses the following folder structure: - `/media` - contains the Umbraco media, stored in the structure defined by the `IMediaPathScheme` registered in Umbraco (the default `UniqueMediaPathScheme` stores files with their original filename in 8 character directories, based on the content and property GUID identifier) - `/cache` - contains the ImageSharp image cache, stored as files with a filename defined by the `ICacheHash` registered in ImageSharp (the default `CacheHash` generates SHA256 hashes of the file contents and uses the first characters configured by the `Umbraco:CMS:Imaging:CachedNameLength` setting) Note that this is different than the behavior of other file system providers - i.e. https://github.com/umbraco-community/UmbracoFileSystemProviders.Azure that expect the media contents to be at the root level. +## Using the file system providers + +Please refer to our documentation on [using custom file systems](https://our.umbraco.com/documentation/Extending/FileSystemProviders/). + ## Bugs, issues and Pull Requests If you encounter a bug when using this client library you are welcome to open an issue in the issue tracker of this repository. We always welcome Pull Request and please feel free to open an issue before submitting a Pull Request to discuss what you want to submit. diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs deleted file mode 100644 index bb4e930..0000000 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobCdnMediaUrlProviderExtensions.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using Umbraco.StorageProviders; -using Umbraco.StorageProviders.AzureBlob.IO; - -// ReSharper disable once CheckNamespace -// uses same namespace as Umbraco Core for easier discoverability -namespace Umbraco.Cms.Core.DependencyInjection -{ - /// - /// Extension methods to help registering a CDN media URL provider. - /// - public static class AzureBlobCdnMediaUrlProviderExtensions - { - /// - /// Registers and configures the . - /// - /// The . - /// - /// The . - /// - /// builder - public static IUmbracoBuilder AddAzureBlobCdnMediaUrlProvider(this IUmbracoBuilder builder) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - - builder.AddCdnMediaUrlProvider(); - - builder.Services.AddOptions() - .BindConfiguration("Umbraco:Storage:AzureBlob:Media:Cdn") - .Configure>( - (options, factory) => - { - var mediaOptions = factory.Create(AzureBlobFileSystemOptions.MediaFileSystemName); - if (!string.IsNullOrEmpty(mediaOptions.ContainerName)) - { - options.Url = new Uri(options.Url, mediaOptions.ContainerName); - } - } - ) - .ValidateDataAnnotations(); - - return builder; - } - } -} diff --git a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs index fc9fd53..f306670 100644 --- a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs +++ b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs @@ -26,7 +26,7 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde builder.MediaUrlProviders().Insert(); builder.Services.AddOptions() - .BindConfiguration("Umbraco:Storage:Media:Cdn") + .BindConfiguration("Umbraco:Storage:Cdn") .ValidateDataAnnotations(); return builder; From 2303f8ba3c95f67330fbb0959f67670d51cf9b67 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 22 Mar 2022 20:03:25 +0100 Subject: [PATCH 08/26] Simplify build and versioning --- .github/workflows/prepare-release.yml | 53 + .github/workflows/publish-release.yml | 34 + .gitignore | 8 - NuGet.config | 8 - Umbraco.StorageProviders.sln | 2 +- azure-pipelines.yml | 140 +- build/build-bootstrap.ps1 | 97 - build/build.ps1 | 185 -- icon.png | Bin 0 -> 2385 bytes src/Directory.Build.props | 33 +- .../packages.lock.json | 1956 +++++++++++++++++ src/version.json | 16 + 12 files changed, 2113 insertions(+), 419 deletions(-) create mode 100644 .github/workflows/prepare-release.yml create mode 100644 .github/workflows/publish-release.yml delete mode 100644 NuGet.config delete mode 100644 build/build-bootstrap.ps1 delete mode 100644 build/build.ps1 create mode 100644 icon.png create mode 100644 src/Umbraco.StorageProviders.AzureBlob/packages.lock.json create mode 100644 src/version.json diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml new file mode 100644 index 0000000..76fe7e7 --- /dev/null +++ b/.github/workflows/prepare-release.yml @@ -0,0 +1,53 @@ +name: Prepare release + +on: + workflow_dispatch: + inputs: + tag: + description: 'The prerelease tag to apply on the release branch (if any). If not specified, any existing prerelease tag will be removed.' + required: false + default: '' + type: choice + options: + - '' + - 'beta' + - 'rc' + versionIncrement: + description: 'Specifies which part of the version on the current branch is incremented.' + required: true + default: 'minor' + type: choice + options: + - 'major' + - 'minor' + - 'build' + +env: + DOTNET_NOLOGO: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true + +jobs: + prepare-release: + name: Prepare release + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Configure git + run: | + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + + - name: Setup Nerdbank.GitVersioning + run: dotnet tool install --tool-path . nbgv + + - name: Prepare release + run: ./nbgv prepare-release ${{ github.event.inputs.tag }} -p src --versionIncrement ${{ github.event.inputs.versionIncrement }} + + - name: Push commit (and new branch) + run: git push --all diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml new file mode 100644 index 0000000..18a9a64 --- /dev/null +++ b/.github/workflows/publish-release.yml @@ -0,0 +1,34 @@ +name: Publish release + +on: + workflow_dispatch: + +env: + DOTNET_NOLOGO: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true + +jobs: + publish-release: + name: Publish release + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Configure git + run: | + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + + - name: Setup Nerdbank.GitVersioning + run: dotnet tool install --tool-path . nbgv + + - name: Tag release + run: ./nbgv tag -p src + + - name: Push git tags + run: git push --tags \ No newline at end of file diff --git a/.gitignore b/.gitignore index da45d7f..da0c597 100755 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,3 @@ -*.dll -*.exe -*.log -*.nupkg *.suo *.user @@ -10,7 +6,3 @@ .vscode/ [Bb]in/ [Oo]bj/ - -Build/temp -build.out/ -build.tmp/ \ No newline at end of file diff --git a/NuGet.config b/NuGet.config deleted file mode 100644 index 995ea4b..0000000 --- a/NuGet.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Umbraco.StorageProviders.sln b/Umbraco.StorageProviders.sln index 4ecab82..4087e7d 100644 --- a/Umbraco.StorageProviders.sln +++ b/Umbraco.StorageProviders.sln @@ -13,8 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution azure-pipelines.yml = azure-pipelines.yml src\Directory.Build.props = src\Directory.Build.props LICENSE = LICENSE - NuGet.config = NuGet.config README.md = README.md + src\version.json = src\version.json EndProjectSection EndProject Global diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b87886a..b646f53 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,108 +1,36 @@ variables: - buildConfiguration: Release - slnFilename: Umbraco.StorageProviders.sln -stages: - - stage: Artifacts - dependsOn: [] - jobs: - - job: Build_Artifacts - displayName: Build Artifacts - pool: - vmImage: windows-latest - steps: - - task: UseDotNet@2 - displayName: Use .Net Core sdk 5.x - inputs: - version: 5.x - - task: NuGetToolInstaller@1 - displayName: Use NuGet Latest - - task: NuGetCommand@2 - displayName: Restore NuGet Packages - inputs: - restoreSolution: $(slnFilename) - feedsToUse: config - - task: PowerShell@1 - displayName: Update Version and Artifact Name - inputs: - scriptType: inlineScript - inlineScript: > - Write-Host "Working folder: $pwd" - - $ubuild = build/build.ps1 -get -continue - - - $version = $ubuild.GetUmbracoVersion() - - $isRelease = [regex]::matches($env:BUILD_SOURCEBRANCH,"v\d+\/\d+.\d+.*") - - - if ($isRelease.Count -gt 0){ - $continuous = $version.Semver - Write-Host "##vso[build.addbuildtag]Release build" - } - else - { - $date = (Get-Date).ToString("yyyyMMdd") - $continuous = "$($version.release)-preview$date.$(Build.BuildId)" - $ubuild.SetUmbracoVersion($continuous) + solution: Umbraco.StorageProviders.sln + buildConfiguration: Release + NUGET_PACKAGES: '' + DOTNET_NOLOGO: true + DOTNET_GENERATE_ASPNET_CERTIFICATE: false + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - Write-Host "##vso[build.addbuildtag]Continuous build" - } - - Write-Host "##vso[build.updatebuildnumber]$continuous.$(Build.BuildId)" - - Write-Host "Building: $continuous" - - task: PowerShell@1 - displayName: Prepare Build - inputs: - scriptType: inlineScript - inlineScript: | - Write-Host "Working folder: $pwd" - $ubuild = build\build.ps1 -get - - $ubuild.PrepareBuild("vso") - - task: PowerShell@1 - displayName: Prepare Packages & Zip - inputs: - scriptType: inlineScript - inlineScript: | - Write-Host "Working folder: $pwd" - $ubuild = build\build.ps1 -get -continue - - $ubuild.CompileUmbracoStorageProviders() - $ubuild.PreparePackages() - - task: PowerShell@1 - displayName: Verify & Package NuGet - inputs: - scriptType: inlineScript - inlineScript: | - Write-Host "Working folder: $pwd" - $ubuild = build\build.ps1 -get -continue - - $ubuild.PackageNuGet() - - task: CopyFiles@2 - displayName: Copy NuPkg Files to Staging - inputs: - SourceFolder: build.out - Contents: '*.nupkg' - TargetFolder: $(build.artifactstagingdirectory) - CleanTargetFolder: true - - task: PublishBuildArtifacts@1 - displayName: Publish NuPkg Files - inputs: - PathtoPublish: $(build.artifactstagingdirectory) - ArtifactName: nupkg - - task: CopyFiles@2 - displayName: Copy Log Files to Staging - inputs: - SourceFolder: build.tmp - Contents: '*.log' - TargetFolder: $(build.artifactstagingdirectory) - CleanTargetFolder: true - condition: succeededOrFailed() - - task: PublishBuildArtifacts@1 - displayName: Publish Log Files - inputs: - PathtoPublish: $(build.artifactstagingdirectory) - ArtifactName: logs - condition: succeededOrFailed() \ No newline at end of file +stages: + - stage: Artifacts + jobs: + - job: Build + pool: + vmImage: windows-latest + steps: + - task: Cache@2 + displayName: Cache NuGet packages + inputs: + key: 'nuget | "$(Agent.OS)" | **/packages.lock.json' + path: '$(NUGET_PACKAGES)' + cacheHitVar: 'CACHE_RESTORED' + + - script: dotnet restore $(solution) --locked-mode + displayName: Restore NuGet packages + condition: ne(variables.CACHE_RESTORED, true) + + - script: dotnet build $(solution) -c $(buildConfiguration) -p:ContinuousIntegrationBuild=true --no-restore + displayName: Build + + - script: dotnet pack $(solution) -c $(buildConfiguration) -o $(Build.ArtifactStagingDirectory) --no-restore --no-build + displayName: Pack + + - task: PublishBuildArtifacts@1 + displayName: Publish NuGet packages + inputs: + ArtifactName: nupkg diff --git a/build/build-bootstrap.ps1 b/build/build-bootstrap.ps1 deleted file mode 100644 index f6776ba..0000000 --- a/build/build-bootstrap.ps1 +++ /dev/null @@ -1,97 +0,0 @@ - - # this script should be dot-sourced into the build.ps1 scripts - # right after the parameters declaration - # ie - # . "$PSScriptRoot\build-bootstrap.ps1" - - # THIS FILE IS DISTRIBUTED AS PART OF UMBRACO.BUILD - # DO NOT MODIFY IT - ALWAYS USED THE COMMON VERSION - - # ################################################################ - # BOOTSTRAP - # ################################################################ - - # reset errors - $error.Clear() - - # ensure we have temp folder for downloads - $scriptRoot = "$PSScriptRoot" - $scriptTemp = "$scriptRoot\temp" - if (-not (test-path $scriptTemp)) { mkdir $scriptTemp > $null } - - # get NuGet - $cache = 4 - $nuget = "$scriptTemp\nuget.exe" - # ensure the correct NuGet-source is used. This one is used by Umbraco - $nugetsourceUmbraco = "https://www.myget.org/F/umbracoprereleases/api/v3/index.json" - if (-not $local) - { - $source = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" - if ((test-path $nuget) -and ((ls $nuget).CreationTime -lt [DateTime]::Now.AddDays(-$cache))) - { - Remove-Item $nuget -force -errorAction SilentlyContinue > $null - } - if (-not (test-path $nuget)) - { - Write-Host "Download NuGet..." - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - Invoke-WebRequest $source -OutFile $nuget - if (-not $?) { throw "Failed to download NuGet." } - } - } - elseif (-not (test-path $nuget)) - { - throw "Failed to locate NuGet.exe." - } - - # NuGet notes - # As soon as we use -ConfigFile, NuGet uses that file, and only that file, and does not - # merge configuration from system level. See comments in NuGet.Client solution, class - # NuGet.Configuration.Settings, method LoadDefaultSettings. - # For NuGet to merge configurations, it needs to "find" the file in the current directory, - # or above. Which means we cannot really use -ConfigFile but instead have to have Umbraco's - # NuGet.config file at root, and always run NuGet.exe while at root or in a directory below - # root. - - $solutionRoot = "$scriptRoot\.." - $testPwd = [System.IO.Path]::GetFullPath($pwd.Path) + "\" - $testRoot = [System.IO.Path]::GetFullPath($solutionRoot) + "\" - if (-not $testPwd.ToLower().StartsWith($testRoot.ToLower())) - { - throw "Cannot run outside of the solution's root." - } - - # get the build system - if (-not $local) - { - $params = "-OutputDirectory", $scriptTemp, "-Verbosity", "quiet", "-PreRelease", "-Source", $nugetsourceUmbraco - - Write-Host "Executing: $params" - &$nuget install Umbraco.Build @params - if (-not $?) { throw "Failed to download Umbraco.Build." } - } - - # ensure we have the build system - $ubuildPath = ls "$scriptTemp\Umbraco.Build.*" | sort -property CreationTime -descending | select -first 1 - if (-not $ubuildPath) - { - throw "Failed to locate the build system." - } - - # boot the build system - # this creates $global:ubuild - return &"$ubuildPath\ps\Boot.ps1" - - # at that point the build.ps1 script must boot the build system - # eg - # $ubuild.Boot($ubuildPath.FullName, [System.IO.Path]::GetFullPath("$scriptRoot\.."), - # @{ Local = $local; With7Zip = $false; WithNode = $false }, - # @{ continue = $continue }) - # if (-not $?) { throw "Failed to boot the build system." } - # - # and it's good practice to report - # eg - # Write-Host "Umbraco.Whatever Build" - # Write-Host "Umbraco.Build v$($ubuild.BuildVersion)" - - # eof diff --git a/build/build.ps1 b/build/build.ps1 deleted file mode 100644 index 11034da..0000000 --- a/build/build.ps1 +++ /dev/null @@ -1,185 +0,0 @@ - - param ( - # get, don't execute - [Parameter(Mandatory=$false)] - [Alias("g")] - [switch] $get = $false, - - # run local, don't download, assume everything is ready - [Parameter(Mandatory=$false)] - [Alias("l")] - [Alias("loc")] - [switch] $local = $false, - - # keep the build directories, don't clear them - [Parameter(Mandatory=$false)] - [Alias("c")] - [Alias("cont")] - [switch] $continue = $false - ) - - # ################################################################ - # BOOTSTRAP - # ################################################################ - - # create and boot the buildsystem - $ubuild = &"$PSScriptRoot\build-bootstrap.ps1" - if (-not $?) { return } - $ubuild.Boot($PSScriptRoot, - @{ Local = $local; }, - @{ Continue = $continue }) - if ($ubuild.OnError()) { return } - - Write-Host "Umbraco StorageProviders Build" - Write-Host "Umbraco.Build v$($ubuild.BuildVersion)" - - # ################################################################ - # TASKS - # ################################################################ - - $ubuild.DefineMethod("CompileUmbracoStorageProviders", - { - $buildConfiguration = "Release" - - $src = "$($this.SolutionRoot)\src" - $log = "$($this.BuildTemp)\dotnet.build.umbraco.log" - - Write-Host "Compile Umbraco.StorageProviders.AzureBlob" - Write-Host "Logging to $log" - - &dotnet build "$src\Umbraco.StorageProviders.AzureBlob\Umbraco.StorageProviders.AzureBlob.csproj" ` - --configuration $buildConfiguration ` - --output "$($this.BuildTemp)\bin\\" ` - > $log - - # get files into WebApp\bin - &dotnet publish "$src\Umbraco.StorageProviders.AzureBlob\Umbraco.StorageProviders.AzureBlob.csproj" ` - --configuration Release --output "$($this.BuildTemp)\WebApp\bin\\" ` - > $log - - # remove extra files - $webAppBin = "$($this.BuildTemp)\WebApp\bin" - $excludeDirs = @("$($webAppBin)\refs","$($webAppBin)\runtimes","$($webAppBin)\Umbraco","$($webAppBin)\wwwroot") - $excludeFiles = @("$($webAppBin)\appsettings.*","$($webAppBin)\*.deps.json","$($webAppBin)\*.exe","$($webAppBin)\*.config","$($webAppBin)\*.runtimeconfig.json") - $this.RemoveDirectory($excludeDirs) - $this.RemoveFile($excludeFiles) - - if (-not $?) { throw "Failed to compile Umbraco.StorageProviders." } - - # /p:UmbracoBuild tells the csproj that we are building from PS, not VS - }) - - - $ubuild.DefineMethod("PreparePackages", - { - Write-Host "Prepare Packages" - - $src = "$($this.SolutionRoot)\src" - $tmp = "$($this.BuildTemp)" - $out = "$($this.BuildOutput)" - - $buildConfiguration = "Release" - - # cleanup build - Write-Host "Clean build" - $this.RemoveFile("$tmp\bin\*.dll.config") - - # cleanup WebApp - Write-Host "Cleanup WebApp" - $this.RemoveDirectory("$tmp\WebApp") - - # offset the modified timestamps on all umbraco dlls, as WebResources - # break if date is in the future, which, due to timezone offsets can happen. - Write-Host "Offset dlls timestamps" - Get-ChildItem -r "$tmp\*.dll" | ForEach-Object { - $_.CreationTime = $_.CreationTime.AddHours(-11) - $_.LastWriteTime = $_.LastWriteTime.AddHours(-11) - } - }) - - $ubuild.DefineMethod("PrepareBuild", - { - Write-Host "============ PrepareBuild ============" - - Write-host "Set environment" - $env:UMBRACO_VERSION=$this.Version.Semver.ToString() - $env:UMBRACO_RELEASE=$this.Version.Release - $env:UMBRACO_COMMENT=$this.Version.Comment - $env:UMBRACO_BUILD=$this.Version.Build - - if ($args -and $args[0] -eq "vso") - { - Write-host "Set VSO environment" - # set environment variable for VSO - # https://github.com/Microsoft/vsts-tasks/issues/375 - # https://github.com/Microsoft/vsts-tasks/blob/master/docs/authoring/commands.md - Write-Host ("##vso[task.setvariable variable=UMBRACO_VERSION;]$($this.Version.Semver.ToString())") - Write-Host ("##vso[task.setvariable variable=UMBRACO_RELEASE;]$($this.Version.Release)") - Write-Host ("##vso[task.setvariable variable=UMBRACO_COMMENT;]$($this.Version.Comment)") - Write-Host ("##vso[task.setvariable variable=UMBRACO_BUILD;]$($this.Version.Build)") - - Write-Host ("##vso[task.setvariable variable=UMBRACO_TMP;]$($this.SolutionRoot)\build.tmp") - } - }) - - $ubuild.DefineMethod("RestoreNuGet", - { - Write-Host "Restore NuGet" - Write-Host "Logging to $($this.BuildTemp)\nuget.restore.log" - &$this.BuildEnv.NuGet restore "$($this.SolutionRoot)\Umbraco.StorageProviders.sln" > "$($this.BuildTemp)\nuget.restore.log" - if (-not $?) { throw "Failed to restore NuGet packages." } - }) - - $ubuild.DefineMethod("PackageNuGet", - { - Write-Host "Create NuGet packages" - - $log = "$($this.BuildTemp)\dotnet.pack.umbraco.log" - Write-Host "Logging to $log" - - &dotnet pack "Umbraco.StorageProviders.sln" ` - --output "$($this.BuildOutput)" ` - --verbosity detailed ` - -c Release ` - -p:PackageVersion="$($this.Version.Semver.ToString())" > $log - - # run hook - if ($this.HasMethod("PostPackageNuGet")) - { - Write-Host "Run PostPackageNuGet hook" - $this.PostPackageNuGet(); - if (-not $?) { throw "Failed to run hook." } - } - }) - - $ubuild.DefineMethod("Build", - { - $error.Clear() - - # $this.PrepareBuild() - # if ($this.OnError()) { return } - $this.RestoreNuGet() - if ($this.OnError()) { return } - $this.CompileUmbracoStorageProviders() - if ($this.OnError()) { return } - $this.PreparePackages() - if ($this.OnError()) { return } - $this.PackageNuGet() - if ($this.OnError()) { return } - Write-Host "Done" - }) - - # ################################################################ - # RUN - # ################################################################ - - # configure - $ubuild.ReleaseBranches = @( "master" ) - - # run - if (-not $get) - { - $ubuild.Build() - if ($ubuild.OnError()) { return } - } - if ($get) { return $ubuild } diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a701ed6f2207e3433364e133ab02fa625ec115 GIT binary patch literal 2385 zcmV-X39j~uP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2Iaf?b$(5kN8DMZR{5{vN5oWQ?CM%`9Gi0v~ zbqe)k3mm3k)EY4GIK1_XAx4`|S-E7B)kc^$>+H$uO~Q=P1{){2a;^bm7J*T1gNz&{ zLMNP;WbZR~Iy}Edn}l)E1r9x1k}?s7xdLzEvLhQq`mHXnPm(?NIUFUw5N1XPlB@6< zJM=j8d>vuP7*jb0f0y2VPwutCTyv2yY3uJ`8CwJMynV3pm|+L_qpU=y@AtxNbMTkc z?BBp!|1T)$4N(|_RQkZy>^qVRZWQK6hJKAFl*KO5=7>9i4||vT8Koc|h$CUd(*YeG z&UqM8aWL$|5vPNiW!N#|QfGImOJdyN4VN9jr3RKrHqP$!-3!C#Xh=nIOywBH3BwAO zFv8Xx?30{5uVxfOS1B;XeJHZyTjWbv)De`glT==DsQ=2GS@nv!zSBI-olXoDkd8!1B) zw$hT*XBW*505dsOr;=f0KmYU#yI93nr`eZ#nwhVlk$tl9D0^vnC7Wo(7=y&RQ3vYs zk2{>5Ygf`3i*u@BZAWPN??GJ1OY zSoQu^miEYYvWywTx~uoKa$P~74Ih5;HM@JVk1RtG+FCZj<-1ih-(s=L%Kh-qvy?E! zqzCetlJ~7JK|@*jDK=?VK3T>LV%?>nBNR9SozwHkGGW+eO;V=u#@~{fca<$!O(%rH zGIe%7A9|tK)`G0Acey4fkzA3 ziIYDF^#R~eeE*|^EOC;TEMo?-Zq(6#>LE_Gbh7DxFC@!^Blx>Ao9wOFeA)Th*kznao&K&2{xhcXuCq_=yryJ{;ktx7(AmZ?Z^9o+*@o z9v3`cE>vqcd+ri@e%b#?c{BOkvI?#%6iZ&&L(1#X?(|H@(Dya!p&rv$RSC5kzJn?8 zujk51c{BOc(sFj9Y2frjy!mb|DX&M^A7ogpvNxN0sK?BY4+*szzG-M@k1Z%8<;~>W zf0wbk`tw4ohL1KJCgt@A)4&ZKpjJ{3_4wK5Z-iP6hmN$dIgb~U@@5kK&%wiOLaT-x zwVssMBkX%>u>+c@hkB%9fZ79R*$ji8cqBw`kGevUyS&RAeM=%gO%F~8`9 zP^$sg;%R@2UKAK4MuSzgtwO7YvhtIpydL4@_gJV0LlGmsQ0%Qa!=}LIgpxOtr~`F{ zV$a^wr2J4EQ3rgnyIH8!fNv$5`+y*)KD?cMRWo=5R8)<$17zg_^+1oMU!D|dH3WRX z4pQDsVia1lf3OcIuV^9V^~k5dNSxrd!bYK11FixOjo~U#R5lVHfKE{M7+wZ9s|`Y} zhK6t3+5AO2NqIB*kA*u~{qc68RfC#$oRrriUk2gFrqBmNG3(RALal}~tryv|uT_xp zX7ZU=_psBTD-`Shca)UZBaD7G`hZudhk8t3IXD#dclWZD@9m3fY7Fasb9F8A`+J2} z4R5?tLzdBFAQX0bCsPmgIPdA5LhV4P5Fi;$Oc-LgL=57|C0~$b^vE|ud^;=~+YX~A zZaQ^AsMgSYx|7XcY}}CH66Z!CZT>Hc2~Br znRCrw4l(s=p95FM4^S!HU@LcTe?c>YTD=YSz zk{-h}*ozsJZ2zHiyzWq-?|D0Ozwt~|FeQda;7L(s*hx|3BTts_wLcuX!7xl!6_k9( z-dS^iEqZY`dvIP6yKmYy(ox!hj+I|nri?y1FZQs^b%$6Y*h1MDjxhfRrp58> z9Hv3Kk%JK=di)%vUiS?}3pm0ydmET*rm?wC9*iIooLdu&9E}Bu2CU9Hz*>nsU9@nv z?GitjG2D10bu@;E%~AC4ldDV{$- zd>qk5=h^=(W@{l-uG-hig3K6qjM4dEA_#ts z7FUOuTq2|V$xINqL?$>r_wxJ1F>$3<@q;a+^U;(BHVz|3Nmds|x_5|#I2}j*v$;_4 z`^9`0sr;NioE(V2wD2bI+orNw3^bHp8zy7()7kzAd_3(Qj~6fT?jab8X|_mipU20? z(-bh - 1.1.0 - 1.1.0 - 1.1.0 - 1.1.0.0 - 9.0 en-US Umbraco Copyright © Umbraco 2022 Umbraco HQ https://github.com/umbraco/Umbraco.StorageProviders https://umbraco.com/dist/nuget/logo-small.png - https://opensource.org/licenses/MIT - false + icon.png + MIT umbraco storage - git - https://github.com/umbraco/Umbraco.StorageProviders + + + + - true - - true - - true snupkg + + + + + + + true + true + $(MSBuildThisFileDirectory) + + + + diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json new file mode 100644 index 0000000..9727fd5 --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -0,0 +1,1956 @@ +{ + "version": 1, + "dependencies": { + ".NETCoreApp,Version=v5.0": { + "Azure.Storage.Blobs": { + "type": "Direct", + "requested": "[12.11.0, )", + "resolved": "12.11.0", + "contentHash": "50eRjIhY7Q1JN7kT2MSawDKCcwSb7uRZUkz00P/BLjSg47gm2hxUYsnJPyvzCHntYMbOWzrvaVQTwYwXabaR5Q==", + "dependencies": { + "Azure.Storage.Common": "12.10.0", + "System.Text.Json": "4.7.2" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[1.1.1, )", + "resolved": "1.1.1", + "contentHash": "IaJGnOv/M7UQjRJks7B6p7pbPnOwisYGOIzqCz5ilGFTApZ3ktOR+6zJ12ZRPInulBmdAf1SrGdDG2MU8g6XTw==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "1.1.1", + "Microsoft.SourceLink.Common": "1.1.1" + } + }, + "Nerdbank.GitVersioning": { + "type": "Direct", + "requested": "[3.4.255, )", + "resolved": "3.4.255", + "contentHash": "7aJa6+VzdKNDVJqGIWGtvIDh2HsIx8DIDfUg4yWViXc798awhSohPMk1oiAZqSntnrKThKJtn4vAMRdsCj8dtg==" + }, + "SixLabors.ImageSharp.Web.Providers.Azure": { + "type": "Direct", + "requested": "[1.0.5, )", + "resolved": "1.0.5", + "contentHash": "gzgfO+ljx5FArEkyO+mVmZbDcp3FdIZv+JfV/C1jqK9QYLDtRFxYB/MTORwJArQ4YkUngcIpna83kpU54Cwjig==", + "dependencies": { + "Azure.Storage.Blobs": "12.10.0", + "SixLabors.ImageSharp.Web": "1.0.5" + } + }, + "Umbraco.Cms.Web.Common": { + "type": "Direct", + "requested": "[9.0.0, )", + "resolved": "9.0.0", + "contentHash": "cVB01y+wNx/iJPScHKg7MAiX71YVuBwZmpafHeYelcCUFgPRTNrfbPra4yN4vjFu6l/+xp7iBgl7blyGlS+evQ==", + "dependencies": { + "Dazinator.Extensions.FileProviders": "2.0.0", + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "5.0.10", + "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "5.0.10", + "MiniProfiler.AspNetCore.Mvc": "4.2.22", + "NETStandard.Library": "2.0.3", + "Serilog.AspNetCore": "4.1.0", + "SixLabors.ImageSharp.Web": "1.0.3", + "Smidge.InMemory": "4.0.0", + "Smidge.Nuglify": "4.0.0", + "Umbraco.Cms.Core": "9.0.0", + "Umbraco.Cms.Examine.Lucene": "9.0.0", + "Umbraco.Cms.Infrastructure": "9.0.0", + "Umbraco.Cms.PublishedCache.NuCache": "9.0.0" + } + }, + "Azure.Core": { + "type": "Transitive", + "resolved": "1.22.0", + "contentHash": "ze/xRCHSSDe5TIk5vBDbVrauW1EN7UIbnBvIBfMH8KSt/I9+/7yPAjTBDgNBk0IwG6WBV+BBHp4IUtS/PGAQwQ==", + "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.Storage.Common": { + "type": "Transitive", + "resolved": "12.10.0", + "contentHash": "vYkHGzUkdZTace/cDPZLG+Mh/EoPqQuGxDIBOau9D+XWoDPmuUFGk325aXplkFE4JFGpSwoytNYzk/qBCaiHqg==", + "dependencies": { + "Azure.Core": "1.22.0", + "System.IO.Hashing": "6.0.0" + } + }, + "CSharpTest.Net.Collections-NetStd2": { + "type": "Transitive", + "resolved": "14.906.1403.1084", + "contentHash": "g3QSH0PMiO+f2C6Za+uUvcdihnVs5IFbZ2cnKjCYA19l8en3fVe/Jl0qQS2te1xJzEOrY4ccen5/MY/QVoamcQ==" + }, + "Dazinator.Extensions.FileProviders": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Jb10uIvdGdaaOmEGUXeO1ssjp6YuvOuR87B5gLxGORFbroV1j7PDaVfEIgni7vV8KRcyAY5KvuMxgx6ADIEXNw==", + "dependencies": { + "DotNet.Glob": "3.1.0", + "Microsoft.AspNetCore.Hosting.Abstractions": "1.0.2", + "Microsoft.AspNetCore.Http.Abstractions": "1.0.2", + "Microsoft.Extensions.FileProviders.Abstractions": "1.0.1", + "NETStandard.Library": "1.6.1" + } + }, + "DotNet.Glob": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "i6x0hDsFWg6Ke2isaNAcHQ9ChxBvTJu2cSmBY+Jtjiv2W4q6y9QlA3JKYuZqJ573TAZmpAn65Qf3sRpjvZ1gmw==" + }, + "Examine": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "ImeTW/uf7kjK99uxaQzV8A30mZzU9tRYriINsF4wilyttrsluMtMMFeuNQJWvr8TZYxPwDOgfcpWc4wTfD4Ojg==", + "dependencies": { + "Examine.Core": "2.0.0", + "Examine.Lucene": "2.0.0", + "Microsoft.AspNetCore.DataProtection": "5.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + } + }, + "Examine.Core": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "vyZUEB4SKR5jNXFVJdr1ccUMFh9WlTaUQMyaNebf/xtBSoNYptlOTpLGMulQak5ABVKfhng4Y903zgWDdrg9mg==", + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + } + }, + "Examine.Lucene": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "XFOvBXqCfWKopWCco1iX/9bQeWdPHb03FFFCEYEzNv58EqGw2NaV7E9eXW0gmUOpKQ83ZiFUdC8NVICiwMvGLg==", + "dependencies": { + "Examine.Core": "2.0.0", + "Lucene.Net.QueryParser": "4.8.0-beta00014", + "Lucene.Net.Replicator": "4.8.0-beta00014", + "System.Threading": "4.3.0", + "System.Threading.AccessControl": "4.7.0" + } + }, + "HtmlAgilityPack": { + "type": "Transitive", + "resolved": "1.11.36", + "contentHash": "dCuPhd6Mcdz0oyaSidPqZZiaKcVaBnIqCQlvgJx7Qr5PJAjSatSIVPmuOwpMjbtR8mqoXyUbWVKxuairGGauJg==" + }, + "IPNetwork2": { + "type": "Transitive", + "resolved": "2.5.353", + "contentHash": "ISuwmWbkJtQcBjByTSm4LqzNJiXIMQjYjPHkaO2ymlm0ssKl25MODnJr7e9dgVBJFlzQlHsZAjrvD6lR3QNjvg==", + "dependencies": { + "System.Memory": "4.5.4" + } + }, + "J2N": { + "type": "Transitive", + "resolved": "2.0.0-beta-0012", + "contentHash": "QwXTVD41IYPmSBInJiGvv5c4X2P60p8B8JPuCMGiKuumw9kUv45jbX56Xx0bgYPWHXQVex3tV+NHHZ7cEidLFg==" + }, + "K4os.Compression.LZ4": { + "type": "Transitive", + "resolved": "1.2.12", + "contentHash": "2wk6ihxE027oJ3OMrEKC8DqAHKxiESxPYGRfsbvNr7cBrwluqDrIsvgW4xIFkR/g79CI/0F6tgUliwbcNMEe9w==", + "dependencies": { + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + } + }, + "Lucene.Net": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "3iNUYa9X7r90lGFAhaM+tfwoVSw9q5sf503vrxYXtST/+OvzEnnTWiAuLxkH8oyMX8sQFphfsAFYlTn/z4pRSA==", + "dependencies": { + "J2N": "2.0.0-beta-0012", + "Microsoft.Extensions.Configuration.Abstractions": "2.0.0" + } + }, + "Lucene.Net.Analysis.Common": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "JKlS1wIAouyqUJhuokBB/+yd6uJRXA+F9xNU7Gpbfji4ZwkR+a+Y3oV7AhhyG6M72z3X/PsYK1qCRdDzya4o+A==", + "dependencies": { + "Lucene.Net": "4.8.0-beta00014" + } + }, + "Lucene.Net.Facet": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "O5lDg0/WVjDyrxo/Ba5/eb5jPcFlJQA1MuUsSaItBFAu0gHA7CimJ7dUwEHvTIVdyAkJeLJ7fuNNVvoxhdTj2A==", + "dependencies": { + "Lucene.Net.Join": "4.8.0-beta00014", + "Lucene.Net.Queries": "4.8.0-beta00014" + } + }, + "Lucene.Net.Grouping": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "SW1PSChvHuq36LEUv6BQR4NmlqcCwUQUgG54hPsAYEIGOzSdkVtmi90X8LqVqmlaEzvYaJkr45gmF11kvUZs/g==", + "dependencies": { + "Lucene.Net": "4.8.0-beta00014", + "Lucene.Net.Queries": "4.8.0-beta00014" + } + }, + "Lucene.Net.Join": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "QQWCHoC5zv14DPvyij8wIgaSttS7vW+8hIZPtO+3eM5DfVz/x3aApJ49f1bMRfHmL8ChcbNn/vT7Xk02EpuGkQ==", + "dependencies": { + "Lucene.Net.Grouping": "4.8.0-beta00014" + } + }, + "Lucene.Net.Queries": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "9m8PykPZuDj/sxDFqfUqrCh1zFpXAAS/csxC5oIeaVy464YJSahSMxQppgXDOaDcEHGq5vxYlWEm7NsSHmYMMQ==", + "dependencies": { + "Lucene.Net": "4.8.0-beta00014" + } + }, + "Lucene.Net.QueryParser": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "jO6XRRBKpLB8QQ8nZvs9l3zHbMNIzMJunh37dR23V9AbbbpZQ5vHRUg086t/QMVLQikWAhqKFDmvDU16IjvPKA==", + "dependencies": { + "Lucene.Net.Analysis.Common": "4.8.0-beta00014", + "Lucene.Net.Queries": "4.8.0-beta00014", + "Lucene.Net.Sandbox": "4.8.0-beta00014" + } + }, + "Lucene.Net.Replicator": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "hz9ixwqYbAWS9tHAK8ho/ovnd6+3zWHEFQeYv5xExmNgo17InUHJMYik67hrBMuIzXnX7auu23NHDayfd8J9jQ==", + "dependencies": { + "J2N": "2.0.0-beta-0012", + "Lucene.Net": "4.8.0-beta00014", + "Lucene.Net.Facet": "4.8.0-beta00014", + "Newtonsoft.Json": "10.0.1" + } + }, + "Lucene.Net.Sandbox": { + "type": "Transitive", + "resolved": "4.8.0-beta00014", + "contentHash": "Mg22EHBi1Ls129ctmh78spPXvwGWNG4PRP+kePs9j3OvkKlXSv1ms4GeR0mcFdQW6Z4Nf6/eg2OZ9eJPlEbFDg==", + "dependencies": { + "Lucene.Net": "4.8.0-beta00014" + } + }, + "MailKit": { + "type": "Transitive", + "resolved": "2.15.0", + "contentHash": "9ihv6pRmjmBEAP4eXlDeo9srFQF9dVtYP1/jzj3I3BV9tBRk66NLdAF+8jkgUtauMKmns0yBvtfMFiBnNkHKDQ==", + "dependencies": { + "MimeKit": "2.15.0" + } + }, + "Markdown": { + "type": "Transitive", + "resolved": "2.2.1", + "contentHash": "A6veXuFP1n50RbmFNtTgfHxnHmwMsgFLSCgS1xWbg5L8n5N6HFEksTlXocZ0LsmGW4leBzeLJd+BY7+g83zFJA==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Runtime.Extensions": "4.1.0", + "System.Text.RegularExpressions": "4.1.0" + } + }, + "MessagePack": { + "type": "Transitive", + "resolved": "2.3.75", + "contentHash": "+b2grPmbMoPFNfHW5B3csTrGDkgbWuWHRuiRS5xtbUwHRivl0tIvAqZpN4Vao/cn/aQJAa8GYpATCN1DklOO3A==", + "dependencies": { + "MessagePack.Annotations": "2.3.75" + } + }, + "MessagePack.Annotations": { + "type": "Transitive", + "resolved": "2.3.75", + "contentHash": "kJHrbGe6H2ZM/sTAfcPGMmpUciydfDWLyewmwvZNPm0qCq1g3gNgF/6TlU1E0gb64SdccgWmAN/5vywRROM1Xw==" + }, + "Microsoft.AspNetCore.Cryptography.Internal": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "xqdkq+lsWeVBxGq0bwgQeT1inqdFErG/McEBNqFVw0hnNQKxWaGPuBDFc8JBQC82Qn6+V1utI3lWvFmUMGEc8Q==" + }, + "Microsoft.AspNetCore.Cryptography.KeyDerivation": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "iXsPFNrM6cVGx/zCkz88nDP/pUKn/ni13B6JQhLwOoqI+tsA1x6fVfPp0MKnQtx5AZngGzuNMx+AYR1ED9ZVeg==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.Internal": "5.0.10" + } + }, + "Microsoft.AspNetCore.DataProtection": { + "type": "Transitive", + "resolved": "5.0.5", + "contentHash": "fYCIRLS3Q7eokBwzlcaKQnCBLDFXqjnyJO9lqOX0/V9zvy/JiOfvwKSkm6v5QJuNpXZywb/DnAq5Pdb3woc3MQ==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.Internal": "5.0.5", + "Microsoft.AspNetCore.DataProtection.Abstractions": "5.0.5", + "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.5", + "contentHash": "k1DgnNSBG0lf9P+QDnU+FFeLI4b4hhw4iT+iw29XkcRaCGpcPwq7mLJUtz2Yqq/FRyEwlcteTJmdWEoJb0Fxag==" + }, + "Microsoft.AspNetCore.Hosting.Abstractions": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "CSVd9h1TdWDT2lt62C4FcgaF285J4O3MaOqTVvc7xP+3bFiwXcdp6qEd+u1CQrdJ+xJuslR+tvDW7vWQ/OH5Qw==", + "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": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "6ZtFh0huTlrUl72u9Vic0icCVIQiEx7ULFDx3P7BpOI97wjb0GAXf8B4m9uSpSGf0vqLEKFlkPbvXF0MXXEzhw==", + "dependencies": { + "Microsoft.AspNetCore.Http.Features": "1.0.2", + "Microsoft.Extensions.Configuration.Abstractions": "1.0.2" + } + }, + "Microsoft.AspNetCore.Http.Abstractions": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "peJqc7BgYwhTzOIfFHX3/esV6iOXf17Afekh6mCYuUD3aWyaBwQuWYaKLR+RnjBEWaSzpCDgfCMMp5Y3LUXsiA==", + "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": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "9l/Y/CO3q8tET3w+dDiByREH8lRtpd14cMevwMV5nw2a/avJ5qcE3VVIE5U5hesec2phTT6udQEgwjHmdRRbig==", + "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.AspNetCore.JsonPatch": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "mWblC4aXXHBwKqBOW1J9hF/TKLOyyiaBucoEiLFVgmAMLKe2yHFygmWD4mgvlLEr68w+BqO9RelGTrczZpImrg==", + "dependencies": { + "Microsoft.CSharp": "4.7.0", + "Newtonsoft.Json": "12.0.2" + } + }, + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "qAaZsKeOOJ8EfGPCAnnZqAQ7lnkj+UcglYcrxXvGbnThpV10cRHy7BruQYPpO/hEBtIUd6Ncp31LSK6LPQFHqA==", + "dependencies": { + "Microsoft.AspNetCore.JsonPatch": "5.0.10", + "Newtonsoft.Json": "12.0.2", + "Newtonsoft.Json.Bson": "1.0.2" + } + }, + "Microsoft.AspNetCore.Mvc.Razor.Extensions": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "cerFq1Dyff2CuSO3XiMYwjkuP/IC5X4L+vjt20+Dq8CSLtVa84+uFcNOcwuR8/ktJg0yIF5JfGz2/TkDQC9JhA==", + "dependencies": { + "Microsoft.AspNetCore.Razor.Language": "5.0.10", + "Microsoft.CodeAnalysis.Razor": "5.0.10" + } + }, + "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "dCh20wneVzFzvazH4RUd3fEiTdKEB5Kv6QKmnO/T8q/hY0FWAq64d/t9OV7+ib4Ozbnv1gtjXbp7ECydehKmcQ==", + "dependencies": { + "Microsoft.AspNetCore.Mvc.Razor.Extensions": "5.0.10", + "Microsoft.CodeAnalysis.Razor": "5.0.10", + "Microsoft.Extensions.DependencyModel": "5.0.0" + } + }, + "Microsoft.AspNetCore.Razor.Language": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "NyxE7aIzJ2N1qJ+Apy6olYYsoZyoI2Osai9y8AGeS5e+TLFuhqGaJpMzP38gyTmJUpszobLipmEOxXUfVx8m/Q==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "AT3HlgTjsqHnWpBHSNeR0KxbLZD7bztlZVj7I8vgeYG9SYqbeFGh0TM/KVtC6fg53nrWHl3VfZFvb5BiQFcY6Q==" + }, + "Microsoft.CodeAnalysis.Analyzers": { + "type": "Transitive", + "resolved": "3.3.2", + "contentHash": "7xt6zTlIEizUgEsYAIgm37EbdkiMmr6fP6J9pDoKEpiGM4pi32BCPGr/IczmSJI9Zzp0a6HOzpr9OvpMP+2veA==" + }, + "Microsoft.CodeAnalysis.Common": { + "type": "Transitive", + "resolved": "3.11.0", + "contentHash": "FDKSkRRXnaEWMa2ONkLMo0ZAt/uiV1XIXyodwKIgP1AMIKA7JJKXx/OwFVsvkkUT4BeobLwokoxFw70fICahNg==", + "dependencies": { + "Microsoft.CodeAnalysis.Analyzers": "3.3.2", + "System.Collections.Immutable": "5.0.0", + "System.Memory": "4.5.4", + "System.Reflection.Metadata": "5.0.0", + "System.Runtime.CompilerServices.Unsafe": "5.0.0", + "System.Text.Encoding.CodePages": "4.5.1", + "System.Threading.Tasks.Extensions": "4.5.4" + } + }, + "Microsoft.CodeAnalysis.CSharp": { + "type": "Transitive", + "resolved": "3.11.0", + "contentHash": "aDRRb7y/sXoJyDqFEQ3Il9jZxyUMHkShzZeCRjQf3SS84n2J0cTEi3TbwVZE9XJvAeMJhGfVVxwOdjYBg6ljmw==", + "dependencies": { + "Microsoft.CodeAnalysis.Common": "[3.11.0]" + } + }, + "Microsoft.CodeAnalysis.Razor": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "i3EyTEYcbF+ixwRJtnKaegDy/vaIm4KxN5V93DN/fMPFsZmWNDxawoIkIvSfJ6bm7BkcB+sRWj/uA0l0NiPuWA==", + "dependencies": { + "Microsoft.AspNetCore.Razor.Language": "5.0.10", + "Microsoft.CodeAnalysis.CSharp": "3.8.0", + "Microsoft.CodeAnalysis.Common": "3.8.0" + } + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "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.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.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.DependencyInjection": { + "type": "Transitive", + "resolved": "5.0.2", + "contentHash": "xzFW00AZEvOXM1OX+0+AYH5op/Hf3u//e6wszBd/rK72sypD+jx5CtsHxM4BVuFBEs8SajfO4QzSJtrQaHDr4A==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==" + }, + "Microsoft.Extensions.DependencyModel": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "umBECCoMC+sOUgm083yFr8SxTobUOcPFH4AXigdO2xJiszCHAnmeDl4qPphJt+oaJ/XIfV1wOjIts2nRnki61Q==" + }, + "Microsoft.Extensions.FileProviders.Abstractions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==", + "dependencies": { + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Composite": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "0IoXXfkgKpYJB1t2lC0jPXAxuaywRNc9y2Mq96ZZNKBthL38vusa2UK73+Bm6Kq/9a5xNHJS6NhsSN+i5TEtkA==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", + "Microsoft.Extensions.Primitives": "5.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Embedded": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "zQAy9wnaxNsc6vn7hQ4zRn5k+Aq5lWi9PK2TCs7qY6vCOpJ3mTOxyMdsW9oeJKtRoajXHzneuJyoIA3RB7uDyA==", + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "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.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": "5.0.0", + "contentHash": "kT1ijDKZuSUhBtYoC1sXrmVKP7mA08h9Xrsr4VrS/QOtiKCEtUTTd7dd3XI9dwAb46tZSak13q/zdIcr4jqbyg==", + "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.Identity.Core": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "WKl22APvpTy+wIqvUd1Gvp8FOs7nTHCZDMeMNNC6fDVfzVKWQF55vOJXbkw7dU70sC6GewE/zsqmwyJAHXgDJw==", + "dependencies": { + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "5.0.10", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + } + }, + "Microsoft.Extensions.Identity.Stores": { + "type": "Transitive", + "resolved": "5.0.10", + "contentHash": "fZDlK8G+jzV9ld0jiO2eQ5JQbOmpiND92gX7bP6rcTZ7YJHzIxCw7Hx8+yf4Ex9f6q7v2LJymkmsUz1k7o5nPg==", + "dependencies": { + "Microsoft.Extensions.Caching.Abstractions": "5.0.0", + "Microsoft.Extensions.Identity.Core": "5.0.10", + "Microsoft.Extensions.Logging": "5.0.0" + } + }, + "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.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.Options.DataAnnotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "f+A/GyRzXziU/2pTHQI1N/GNSqmHUqa3ewsAMa8tbmQDkTnE1srOzLvCUk3mxcZRH1tnfEO3tzvdrlMSImxR7g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==" + }, + "Microsoft.IO.RecyclableMemoryStream": { + "type": "Transitive", + "resolved": "2.1.3", + "contentHash": "h1hjJ7E0ZMTbutiUXmv07rs+cTST9+w+iDNZginmArfZr47GjHevwBQK/LBcAkHm+w+IHaBd9Lsuf5dv8DnDAg==" + }, + "Microsoft.NETCore.Platforms": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + }, + "Microsoft.NETCore.Targets": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "1.1.1", + "contentHash": "WMcGpWKrmJmzrNeuaEb23bEMnbtR/vLmvZtkAP5qWu7vQsY59GqfRJd65sFpBszbd2k/bQ8cs8eWawQKAabkVg==" + }, + "Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "fQnBHO9DgcmkC9dYSJoBqo6sH1VJwJprUHh8F3hbcRlxiQiBUuTntdk8tUwV490OqC2kQUrinGwZyQHTieuXRA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.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": "5.0.0", + "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0" + } + }, + "MimeKit": { + "type": "Transitive", + "resolved": "2.15.0", + "contentHash": "146As77LbmZezdSJ5W/2ZEQsZyqVSAM8yOjDjvsy6NpLmyqG8lgzmX6ps3P/fKzUN5Ey4hxwnAtH+KLlJW0CsQ==", + "dependencies": { + "Portable.BouncyCastle": "1.8.10", + "System.Buffers": "4.5.1", + "System.Reflection.TypeExtensions": "4.4.0", + "System.Security.Cryptography.Pkcs": "4.7.0", + "System.Text.Encoding.CodePages": "4.4.0" + } + }, + "MiniProfiler.AspNetCore": { + "type": "Transitive", + "resolved": "4.2.22", + "contentHash": "bBirB5d4Q0Bgx05Zg4yzXSmOHZQV4ZJhmxU3DGya4FZxNBwjaVHchqEKY0MJW5XLZo8axMAQm4yywgCvUlTymA==", + "dependencies": { + "MiniProfiler.Shared": "4.2.22", + "System.Text.Json": "4.6.0" + } + }, + "MiniProfiler.AspNetCore.Mvc": { + "type": "Transitive", + "resolved": "4.2.22", + "contentHash": "nzCEaZnh77U9jw+c/qu4CtwYUpHEf+FH1ZMbYKMzIXr8CNNPlypSR6AJEAwjo3bq9TIJIpBMZIaK3inRLUCg4g==", + "dependencies": { + "MiniProfiler.AspNetCore": "4.2.22" + } + }, + "MiniProfiler.Shared": { + "type": "Transitive", + "resolved": "4.2.22", + "contentHash": "OOA99Iu7FjFrdYaADcWL78KK9Kq6M+hfnZac5577aSrx0UYOM2apKlhBPKzoPtGPTRtQNKe4RK00u/FmahcU3g==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0", + "Newtonsoft.Json": "10.0.3", + "System.ComponentModel.Primitives": "4.3.0", + "System.Data.Common": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.4.1", + "System.Diagnostics.StackTrace": "4.3.0", + "System.Dynamic.Runtime": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Serialization.Primitives": "4.3.0", + "System.Threading.Tasks.Parallel": "4.3.0" + } + }, + "NCrontab": { + "type": "Transitive", + "resolved": "3.3.1", + "contentHash": "G3tzcIIgsiyZyVbHNPyn5+adaM9UjeVNgjrRsvXU7wo2sMhpvpQrir29dcjIND53H/fuTdgg9nI3SfFFg7barA==" + }, + "NETStandard.Library": { + "type": "Transitive", + "resolved": "2.0.3", + "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0" + } + }, + "Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.1", + "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==" + }, + "Newtonsoft.Json.Bson": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "QYFyxhaABwmq3p/21VrZNYvCg3DaEoN/wUuw5nmfAf0X3HLjgupwhkEWdgfb9nvGAUIv3osmZoD3kKl4jxEmYQ==", + "dependencies": { + "Newtonsoft.Json": "12.0.1" + } + }, + "NPoco": { + "type": "Transitive", + "resolved": "4.0.2", + "contentHash": "/IvVUgQ0VfqgTjUbuY99IQ9JSJwrK4H9tKgKjliAif+4PbPI04/TvY+uZ3fgo8PYTUSKo+AD8JlvOiFOTBe2hA==", + "dependencies": { + "System.Data.SqlClient": "4.5.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0" + } + }, + "NUglify": { + "type": "Transitive", + "resolved": "1.13.12", + "contentHash": "+13YE9UjnXx4+NKP+j1Axiz/QAMtK++ZtG61u9iiR2/WzPzr7EfBDOwj+xHNyTEMS9Emq/mCyWaBGjCABhC0HQ==" + }, + "Portable.BouncyCastle": { + "type": "Transitive", + "resolved": "1.8.10", + "contentHash": "XLhjNAwuVB9ynwn11l5K44eyozh8q6gFseTrlnLNttejimglX7+F9+vxh60LPjvA/DAt6fUdS43N3ah8K6eaWg==" + }, + "runtime.native.System": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", + "dependencies": { + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" + } + }, + "runtime.native.System.Net.Http": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "Nh0UPZx2Vifh8r+J+H2jxifZUD3sBrmolgiFWJd2yiNrxO0xTa6bAw3YwRn1VOiSen/tUXMS31ttNItCZ6lKuA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + } + }, + "runtime.native.System.Security.Cryptography": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "2CQK0jmO6Eu7ZeMgD+LOFbNJSXHFVQbCJJkEyEwowh1SCgYnrn9W9RykMfpeeVGw7h4IBvYikzpGUlmZTUafJw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1" + } + }, + "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==" + }, + "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==" + }, + "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==" + }, + "Serilog": { + "type": "Transitive", + "resolved": "2.10.0", + "contentHash": "+QX0hmf37a0/OZLxM3wL7V6/ADvC1XihXN4Kq/p6d8lCPfgkRdiuhbWlMaFjR9Av0dy5F0+MBeDmDdRZN/YwQA==" + }, + "Serilog.AspNetCore": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "qRdEkjX10VJ5Cb3B9q/Q/tv+0ntDxAIA1YbOmmNMlkha1TU0ckK5b73eBYMNNLMAU92ofrzOEuIJEc6Q+Q1Z2A==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Serilog": "2.10.0", + "Serilog.Extensions.Hosting": "4.1.2", + "Serilog.Formatting.Compact": "1.1.0", + "Serilog.Settings.Configuration": "3.1.0", + "Serilog.Sinks.Console": "3.1.1", + "Serilog.Sinks.Debug": "2.0.0", + "Serilog.Sinks.File": "4.1.0" + } + }, + "Serilog.Enrichers.Process": { + "type": "Transitive", + "resolved": "2.0.2", + "contentHash": "T9EjKKLsL6qC/3eOLUAKEPBLEqPDmt5BLXaQdPMaxJzuex+MeXA8DuAiPboUaftp3kbnCN4ZgZpDvs+Fa7OHuw==", + "dependencies": { + "Serilog": "2.3.0" + } + }, + "Serilog.Enrichers.Thread": { + "type": "Transitive", + "resolved": "3.1.0", + "contentHash": "85lWsGRJpRxvKT6j/H67no55SUBsBIvp556TKuBTGhjtoPeq+L7j/sDWbgAtvT0p7u7/phJyX6j35PQ4Vtqw0g==", + "dependencies": { + "Serilog": "2.3.0" + } + }, + "Serilog.Extensions.Hosting": { + "type": "Transitive", + "resolved": "4.1.2", + "contentHash": "nOpvvYgDoepae4FsXnyX4uSYLO+f+v7aRyNpA0pbpxjdkpw3FWZtfQDe2gnUmZGNYMLWnxMRCPJQ455U/dOUbQ==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8", + "Microsoft.Extensions.Hosting.Abstractions": "3.1.8", + "Microsoft.Extensions.Logging.Abstractions": "3.1.8", + "Serilog": "2.10.0", + "Serilog.Extensions.Logging": "3.0.1" + } + }, + "Serilog.Extensions.Logging": { + "type": "Transitive", + "resolved": "3.0.1", + "contentHash": "U0xbGoZuxJRjE3C5vlCfrf9a4xHTmbrCXKmaA14cHAqiT1Qir0rkV7Xss9GpPJR3MRYH19DFUUqZ9hvWeJrzdQ==", + "dependencies": { + "Microsoft.Extensions.Logging": "2.0.0", + "Serilog": "2.8.0" + } + }, + "Serilog.Filters.Expressions": { + "type": "Transitive", + "resolved": "2.1.0", + "contentHash": "e0ZaK+NWx6+j71xB5dRXohdreSeHgMJ9mp4giSp83/4UC8VsJWDH+CAT1YVXsyINAR9IQznXllnJ0e5j+BvwzA==", + "dependencies": { + "Serilog": "2.9.0", + "Superpower": "2.3.0" + } + }, + "Serilog.Formatting.Compact": { + "type": "Transitive", + "resolved": "1.1.0", + "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==", + "dependencies": { + "Serilog": "2.8.0" + } + }, + "Serilog.Formatting.Compact.Reader": { + "type": "Transitive", + "resolved": "1.0.5", + "contentHash": "PPqEBHc9YMtXBiEAxD4qd5oqsavmr1jzdjKC9ky50Ipf/qnSp2D2l/ZggSxZUW7jfCbJStxgwKYGsH0Bnk4BIw==", + "dependencies": { + "Newtonsoft.Json": "9.0.1", + "Serilog": "2.3.0" + } + }, + "Serilog.Settings.Configuration": { + "type": "Transitive", + "resolved": "3.2.0", + "contentHash": "yLWXbqMkXdmAUI7L/ru8fSx0Vo0cYlOpQcs0/vi13muZooLUBDYb9VHN+s5J0EGZ5IDzXIZLhybrEILE/2GMsQ==", + "dependencies": { + "Microsoft.Extensions.DependencyModel": "3.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "2.0.0", + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.Async": { + "type": "Transitive", + "resolved": "1.5.0", + "contentHash": "csHYIqAwI4Gy9oAhXYRwxGrQEAtBg3Ep7WaCzsnA1cZuBZjVAU0n7hWaJhItjO7hbLHh/9gRVxALCUB4Dv+gZw==", + "dependencies": { + "Serilog": "2.9.0" + } + }, + "Serilog.Sinks.Console": { + "type": "Transitive", + "resolved": "3.1.1", + "contentHash": "56mI5AqvyF/i/c2451nvV71kq370XOCE4Uu5qiaJ295sOhMb9q3BWwG7mWLOVSnmpWiq0SBT3SXfgRXGNP6vzA==", + "dependencies": { + "Serilog": "2.5.0", + "System.Console": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" + } + }, + "Serilog.Sinks.Debug": { + "type": "Transitive", + "resolved": "2.0.0", + "contentHash": "Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==", + "dependencies": { + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.File": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==", + "dependencies": { + "Serilog": "2.10.0" + } + }, + "Serilog.Sinks.Map": { + "type": "Transitive", + "resolved": "1.0.2", + "contentHash": "JbPBAeD5hxUQw8TZg3FlOnqVsSu1269nvqFm5DQ7hc+AmsB+hItl+zMSDphMbPJXjL8KdpMRSWNkGi7zTKRmCA==", + "dependencies": { + "Serilog": "2.8.0" + } + }, + "SixLabors.ImageSharp": { + "type": "Transitive", + "resolved": "1.0.4", + "contentHash": "H2rPiEr2ddBOltOuqRYhpLBAsQXDAhbzMMhhuksnBG2oefup1MXMchALe7yYkKJksNbtxbZHKeM6dn/68I75qw==" + }, + "SixLabors.ImageSharp.Web": { + "type": "Transitive", + "resolved": "1.0.5", + "contentHash": "FJv4G7P1Yn364/bjaxE2xiQAa9ZdEd4MwfQ2/Og3Q7911X0oWQk+JfnIF7zJGI/2uio66gSkx1UGeDURU6TOJQ==", + "dependencies": { + "Microsoft.IO.RecyclableMemoryStream": "2.1.3", + "SixLabors.ImageSharp": "1.0.4" + } + }, + "Smidge": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "zqvxAJDx5mg2ry95b6iO66tzA9jwG6Earc69cMDvorsieCkzWB1ankEgoSPszQL4VxGe31tXkA/2jAAtk9O8ig==", + "dependencies": { + "Smidge.Core": "4.0.0" + } + }, + "Smidge.Core": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "ZSdBqVYC29rvwaYl+rP8EO8YUYNhvf3PukEHnyirvidUaK3Oqw/NqBPkdlNASah4KjRa5xHU6Qr+E+9mMDiDPg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "5.0.0", + "Microsoft.Extensions.Configuration.Json": "5.0.0", + "Microsoft.Extensions.FileProviders.Composite": "5.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging.Abstractions": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0" + } + }, + "Smidge.InMemory": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "gBfl0m+koHy14S0+5wk5BZvqkBzxToJBI9Q0oGUuk9M51ZuKDMPCVCH3QkaOFQHTk0LkJHti660aPTeN5FTk4A==", + "dependencies": { + "Dazinator.Extensions.FileProviders": "2.0.0", + "Smidge.Core": "4.0.0", + "System.Text.Encodings.Web": "5.0.1" + } + }, + "Smidge.Nuglify": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "FL7IWeuf4UbbrBcVraFnAvEwYUStzlg/Bha6RDNLakqiHi+6V6qKXp8yVhyGrCkBK4XWxxLc5cGZFBO6eBkBFQ==", + "dependencies": { + "Nuglify": "1.13.12", + "Smidge": "4.0.0" + } + }, + "Superpower": { + "type": "Transitive", + "resolved": "2.3.0", + "contentHash": "L7ZLWjec5aPWWebsOKM6+8SdobSFMPJFIS8S8TT46oH2iELA70H95spRMeP1yPH9nDL/o+XYP29DPtVwVdzPeA==" + }, + "System.Buffers": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==" + }, + "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.Collections.Concurrent": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Collections.Immutable": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==" + }, + "System.ComponentModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "dMkqfy2el8A8/I76n2Hi1oBFEbG1SfxD2l5nhwXV3XjlnOmwxJlQbYpJH4W51odnU9sARCSAgv7S3CyAFMkpYg==" + }, + "System.ComponentModel.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==", + "dependencies": { + "System.ComponentModel": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Configuration.ConfigurationManager": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "aM7cbfEfVNlEEOj3DsZP+2g9NRwbkyiAv2isQEzw7pnkDg9ekCU2m1cdJLM02Uq691OaCS91tooaxcEn8d0q5w==", + "dependencies": { + "System.Security.Cryptography.ProtectedData": "5.0.0", + "System.Security.Permissions": "5.0.0" + } + }, + "System.Console": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, + "System.Data.Common": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "lm6E3T5u7BOuEH0u18JpbJHxBfOJPuCyl4Kg1RH10ktYLp5uEEE1xKrHW56/We4SnZpGAuCc9N0MJpSDhTHZGQ==", + "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.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Data.SqlClient": { + "type": "Transitive", + "resolved": "4.8.3", + "contentHash": "yERfVLXAY0QbylAgaGLByYN0hFxX28aeEQ0hUgJO+Ntn1AfmWl5HHUoYJA0Yl9HhIUUJHVaS/Sw/RLZr5aaC+A==", + "dependencies": { + "Microsoft.Win32.Registry": "4.7.0", + "System.Security.Principal.Windows": "4.7.0", + "runtime.native.System.Data.SqlClient.sni": "4.7.0" + } + }, + "System.Diagnostics.Debug": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.DiagnosticSource": { + "type": "Transitive", + "resolved": "4.6.0", + "contentHash": "mbBgoR0rRfl2uimsZ2avZY8g7Xnh1Mza0rJZLPcxqiMWlkGukjmRkuMJ/er+AhQuiRIh80CR/Hpeztr80seV5g==" + }, + "System.Diagnostics.StackTrace": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "BiHg0vgtd35/DM9jvtaC1eKRpWZxr0gcQd643ABG7GnvSlf5pOkY2uyd42mMOJoOmKvnpNj0F4tuoS1pacTwYw==", + "dependencies": { + "System.IO.FileSystem": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Metadata": "1.4.1", + "System.Runtime": "4.3.0" + } + }, + "System.Diagnostics.Tracing": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Drawing.Common": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "dependencies": { + "Microsoft.Win32.SystemEvents": "5.0.0" + } + }, + "System.Dynamic.Runtime": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "SNVi1E/vfWUAs/WYKhE9+qlS6KqK0YVhnlT0HQtr8pMIA8YX3lwy3uPMownDwdYISBdmAF/2holEIldVp85Wag==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.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.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "L1c6IqeQ88vuzC1P81JeHmHA8mxq8a18NUBNXnIY/BVb+TCyAaGIFbhpZt60h9FJNmisymoQkHEFSE9Vslja1Q==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Globalization": "4.0.11", + "System.Runtime": "4.1.0" + } + }, + "System.Globalization.Extensions": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "KKo23iKeOaIg61SSXwjANN7QYDr/3op3OWGGzDzz7mypx0Za0fZSeG0l6cco8Ntp8YMYkIQcAqlk8yhm5/Uhcg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Globalization": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.InteropServices": "4.1.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.IO.FileSystem": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.IO.FileSystem.AccessControl": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "SxHB3nuNrpptVk+vZ/F+7OHEpoHUIKKMl02bUmYHQr1r+glbZQxs7pRtsf4ENO29TVm2TH3AEeep2fJcy92oYw==", + "dependencies": { + "System.Security.AccessControl": "5.0.0", + "System.Security.Principal.Windows": "5.0.0" + } + }, + "System.IO.FileSystem.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.IO.Hashing": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g==", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4" + } + }, + "System.Linq": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, + "System.Linq.Expressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Linq": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Emit.Lightweight": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Reflection.TypeExtensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "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.Net.Primitives": { + "type": "Transitive", + "resolved": "4.0.11", + "contentHash": "hVvfl4405DRjA2408luZekbPhplJK03j2Y2lSfMlny7GHXlkByw1iLnc9mgKW0GdQn73vvMcWrWewAhylXA4Nw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "Microsoft.NETCore.Targets": "1.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Handles": "4.0.1" + } + }, + "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", + "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + }, + "System.ObjectModel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading": "4.3.0" + } + }, + "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.Emit": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", + "dependencies": { + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Emit.ILGeneration": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.ILGeneration": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Emit.Lightweight": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "a4OLB4IITxAXJeV74MDx49Oq2+PsF6Sml54XAFv+2RyWwtDBcabzoxiiJRhdhx+gaohLh4hEGCLQyBozXoQPqA==" + }, + "System.Reflection.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Metadata": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ==" + }, + "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.Reflection.TypeExtensions": { + "type": "Transitive", + "resolved": "4.4.0", + "contentHash": "dkmh/ySlwnXJp/1qYP9uyKkCK1CXR/REFzl7abHcArxBcV91mY2CgrrzSRA5Z/X4MevJWwXsklGRdR3A7K9zbg==" + }, + "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.Caching": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "30D6MkO8WF9jVGWZIP0hmCN8l9BTY4LCsAzLIe4xFSXzs+AjDotR7DpSmj27pFskDURzUvqYYY0ikModgBTxWw==", + "dependencies": { + "System.Configuration.ConfigurationManager": "5.0.0" + } + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==" + }, + "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.Runtime.Handles": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Runtime.InteropServices.RuntimeInformation": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0" + } + }, + "System.Runtime.Numerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "+XbKFuzdmLP3d1o9pdHu2nxjNr2OEPqGzKeegPLCUMM71a0t50A/rOcIRmGs9wR7a8KuHX6hYs/7/TymIGLNqg==", + "dependencies": { + "System.Globalization": "4.0.11", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0" + } + }, + "System.Runtime.Serialization.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==", + "dependencies": { + "System.Resources.ResourceManager": "4.3.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.0.1", + "contentHash": "4Jlp0OgJLS/Voj1kyFP6MJlIYp3crgfH8kNQk2p7+4JYfc1aAmh9PZyAMMbDhuoolGNtux9HqSOazsioRiDvCw==", + "dependencies": { + "System.Collections": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Security.Principal": "4.0.1" + } + }, + "System.Security.Cryptography.Algorithms": { + "type": "Transitive", + "resolved": "4.2.0", + "contentHash": "8JQFxbLVdrtIOKMDN38Fn0GWnqYZw/oMlwOUG/qz1jqChvyZlnUmu+0s7wLx7JYua/nAXoESpHA3iw11QFWhXg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "runtime.native.System.Security.Cryptography": "4.0.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.Csp": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "/i1Usuo4PgAqgbPNC0NjbO3jPW//BoBlTpcWFD1EHVbidH21y4c1ap5bbEMSGAXjAShhMH4abi/K8fILrnu4BQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "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.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "FbKgE5MbxSQMPcSVRgwM6bXN3GtyAh04NkV8E5zKCBE26X0vYW0UtTa2FIgkH33WVqBVxRgxljlVYumWtU+HcQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Collections.Concurrent": "4.0.12", + "System.Linq": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "runtime.native.System.Security.Cryptography": "4.0.0" + } + }, + "System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "HUG/zNUJwEiLkoURDixzkzZdB5yGA5pQhDP93ArOpDPQMteURIGERRNzzoJlmTreLBWr5lkFSjjMSk8ySEpQMw==", + "dependencies": { + "System.Collections": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "runtime.native.System.Security.Cryptography": "4.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.Primitives": { + "type": "Transitive", + "resolved": "4.0.0", + "contentHash": "Wkd7QryWYjkQclX0bngpntW5HSlMzeJU24UaLJQ7YTfI8ydAVAaU2J+HXLLABOVJlKTVvAeL0Aj39VeTe7L+oA==", + "dependencies": { + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Threading": "4.0.11", + "System.Threading.Tasks": "4.0.11" + } + }, + "System.Security.Cryptography.ProtectedData": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "HGxMSAFAPLNoxBvSfW08vHde0F9uh7BjASwu6JF9JnXuEPhCY3YUqURn0+bQV/4UWeaqymmrHWV+Aw9riQCtCA==" + }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.1.0", + "contentHash": "4HEfsQIKAhA1+ApNn729Gi09zh+lYWwyIuViihoMDWp1vQnEkL2ct7mAbhBlLYm+x/L4Rr/pyGge1lIY635e0w==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Diagnostics.Debug": "4.0.11", + "System.Globalization": "4.0.11", + "System.Globalization.Calendars": "4.0.1", + "System.IO": "4.1.0", + "System.IO.FileSystem": "4.0.1", + "System.IO.FileSystem.Primitives": "4.0.1", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Runtime.Numerics": "4.0.1", + "System.Security.Cryptography.Algorithms": "4.2.0", + "System.Security.Cryptography.Cng": "4.2.0", + "System.Security.Cryptography.Csp": "4.0.0", + "System.Security.Cryptography.Encoding": "4.0.0", + "System.Security.Cryptography.OpenSsl": "4.0.0", + "System.Security.Cryptography.Primitives": "4.0.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11", + "runtime.native.System": "4.0.0", + "runtime.native.System.Net.Http": "4.0.1", + "runtime.native.System.Security.Cryptography": "4.0.0" + } + }, + "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.0.1", + "contentHash": "On+SKhXY5rzxh/S8wlH1Rm0ogBlu7zyHNxeNBiXauNrhHRXAe9EuX8Yl5IOzLPGU5Z4kLWHMvORDOCG8iu9hww==", + "dependencies": { + "System.Runtime": "4.1.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.Encoding.CodePages": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "dependencies": { + "Microsoft.NETCore.Platforms": "2.1.2", + "System.Runtime.CompilerServices.Unsafe": "4.5.2" + } + }, + "System.Text.Encodings.Web": { + "type": "Transitive", + "resolved": "5.0.1", + "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==" + }, + "System.Text.Json": { + "type": "Transitive", + "resolved": "4.7.2", + "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" + }, + "System.Text.RegularExpressions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==", + "dependencies": { + "System.Runtime": "4.3.0" + } + }, + "System.Threading": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==", + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Threading.AccessControl": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "/fmzEf1UYrdCzfOIHVJ2cx3v9DHLLLMkUrodpzJGW17N+K+SSmBD8OA/BGmtfN1Ae0Ex3rBjQVufnIi5zKefuQ==", + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Security.Principal.Windows": "4.7.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.Dataflow": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "NBp0zSAMZp4muDje6XmbDfmkqw9+qsDCHp+YMEtnVgHEjQZ3Q7MzFTTp3eHqpExn4BwMrS7JkUVOTcVchig4Sw==" + }, + "System.Threading.Tasks.Extensions": { + "type": "Transitive", + "resolved": "4.5.4", + "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==" + }, + "System.Threading.Tasks.Parallel": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "cbjBNZHf/vQCfcdhzx7knsiygoCKgxL8mZOeocXZn5gWhCdzHIq6bYNKWX0LAJCWYP7bds4yBK8p06YkP0oa0g==", + "dependencies": { + "System.Collections.Concurrent": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Windows.Extensions": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==", + "dependencies": { + "System.Drawing.Common": "5.0.0" + } + }, + "Umbraco.Cms.Core": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "SatCo2CSvLiLHuP35NQx3nf47Z9dVaIUA5f+O6n3QvSPgT6iq5QXnRgqdnxaW/tArIw2oL12TQ5sEERnaKY+iw==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.FileProviders.Embedded": "5.0.10", + "Microsoft.Extensions.Hosting.Abstractions": "5.0.0", + "Microsoft.Extensions.Logging": "5.0.0", + "Microsoft.Extensions.Options": "5.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0", + "Microsoft.Extensions.Options.DataAnnotations": "5.0.0", + "System.ComponentModel.Annotations": "5.0.0", + "System.Reflection.Emit.Lightweight": "4.7.0", + "System.Runtime.Caching": "5.0.0" + } + }, + "Umbraco.Cms.Examine.Lucene": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "0hPy93JBNkFxUW7moQyzPZFMN3BlDeoF7GFivvxrBW6tAuyPAN2ufxv/dnG+/WX8sQwj86sGI3DEwPm9SAFSxQ==", + "dependencies": { + "Examine": "2.0.0", + "Umbraco.Cms.Core": "9.0.0", + "Umbraco.Cms.Infrastructure": "9.0.0" + } + }, + "Umbraco.Cms.Infrastructure": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "PuX142PqvEfOcAqVoR4qxn1Cp787qogEMiIXyAyNa6Z4ipQhb1Y+u7PtxwbferszozOBQ3WacVB5W0pi/OTd+Q==", + "dependencies": { + "Examine.Core": "2.0.0", + "HtmlAgilityPack": "1.11.36", + "IPNetwork2": "2.5.353", + "MailKit": "2.15.0", + "Markdown": "2.2.1", + "Microsoft.CSharp": "4.7.0", + "Microsoft.CodeAnalysis.CSharp": "3.11.0", + "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", + "Microsoft.Extensions.Configuration.Json": "5.0.0", + "Microsoft.Extensions.DependencyInjection": "5.0.2", + "Microsoft.Extensions.Http": "5.0.0", + "Microsoft.Extensions.Identity.Stores": "5.0.10", + "Microsoft.SourceLink.GitHub": "1.0.0", + "MiniProfiler.Shared": "4.2.22", + "NPoco": "4.0.2", + "Newtonsoft.Json": "13.0.1", + "Serilog": "2.10.0", + "Serilog.Enrichers.Process": "2.0.2", + "Serilog.Enrichers.Thread": "3.1.0", + "Serilog.Extensions.Hosting": "4.1.2", + "Serilog.Filters.Expressions": "2.1.0", + "Serilog.Formatting.Compact": "1.1.0", + "Serilog.Formatting.Compact.Reader": "1.0.5", + "Serilog.Settings.Configuration": "3.2.0", + "Serilog.Sinks.Async": "1.5.0", + "Serilog.Sinks.File": "5.0.0", + "Serilog.Sinks.Map": "1.0.2", + "SixLabors.ImageSharp": "1.0.3", + "System.Data.SqlClient": "4.8.3", + "System.IO.FileSystem.AccessControl": "5.0.0", + "System.Text.Encodings.Web": "5.0.1", + "System.Threading.Tasks.Dataflow": "5.0.0", + "Umbraco.Cms.Core": "9.0.0", + "ncrontab": "3.3.1" + } + }, + "Umbraco.Cms.PublishedCache.NuCache": { + "type": "Transitive", + "resolved": "9.0.0", + "contentHash": "PxjfrvaOlutVGbgqtIzaCu+8djqGServhmgHGG6yf/2eYwzB8ioomhORmIydMBJVWxIbmQ3EOqlD3AJA5pVApg==", + "dependencies": { + "CSharpTest.Net.Collections-NetStd2": "14.906.1403.1084", + "K4os.Compression.LZ4": "1.2.12", + "MessagePack": "2.3.75", + "Newtonsoft.Json": "13.0.1", + "Umbraco.Cms.Core": "9.0.0", + "Umbraco.Cms.Infrastructure": "9.0.0" + } + } + } + } +} \ No newline at end of file diff --git a/src/version.json b/src/version.json new file mode 100644 index 0000000..0a61cdd --- /dev/null +++ b/src/version.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", + "version": "1.2.0-alpha", + "publicReleaseRefSpec": [ + "^refs/tags/release-", + "^refs/tags/v" + ], + "cloudBuild": { + "buildNumber": { + "enabled": true + } + }, + "release": { + "branchName": "release/{version}" + } +} From 7ca48b5f41eabc19149c70fba94db38b035d8fa0 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 23 Mar 2022 12:07:13 +0100 Subject: [PATCH 09/26] Fix caching of NuGet packages caching (use explicit path, add restore keys and remove restore condition) --- azure-pipelines.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b646f53..90ee9c1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,7 +1,7 @@ variables: solution: Umbraco.StorageProviders.sln buildConfiguration: Release - NUGET_PACKAGES: '' + NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages DOTNET_NOLOGO: true DOTNET_GENERATE_ASPNET_CERTIFICATE: false DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true @@ -14,15 +14,16 @@ stages: vmImage: windows-latest steps: - task: Cache@2 - displayName: Cache NuGet packages inputs: key: 'nuget | "$(Agent.OS)" | **/packages.lock.json' - path: '$(NUGET_PACKAGES)' - cacheHitVar: 'CACHE_RESTORED' + restoreKeys: | + nuget | "$(Agent.OS)" + nuget + path: $(NUGET_PACKAGES) + displayName: Cache NuGet packages - script: dotnet restore $(solution) --locked-mode displayName: Restore NuGet packages - condition: ne(variables.CACHE_RESTORED, true) - script: dotnet build $(solution) -c $(buildConfiguration) -p:ContinuousIntegrationBuild=true --no-restore displayName: Build @@ -31,6 +32,6 @@ stages: displayName: Pack - task: PublishBuildArtifacts@1 - displayName: Publish NuGet packages inputs: ArtifactName: nupkg + displayName: Publish NuGet packages From a1018db8bf771fafb2da3ac6751d153827815918 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 23 Mar 2022 14:54:10 +0100 Subject: [PATCH 10/26] Add additional constructor to allow configuration using managed identities --- .editorconfig | 6 ++- .../IO/AzureBlobFileSystem.cs | 47 +++++++++++++------ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/.editorconfig b/.editorconfig index 57f4995..3186899 100755 --- a/.editorconfig +++ b/.editorconfig @@ -27,11 +27,13 @@ indent_size = 2 dotnet_style_predefined_type_for_locals_parameters_members = true:error dotnet_naming_rule.private_members_with_underscore.symbols = private_fields -dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore +dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore dotnet_naming_rule.private_members_with_underscore.severity = suggestion -dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_naming_symbols.private_fields.applicable_kinds = field dotnet_naming_symbols.private_fields.applicable_accessibilities = private dotnet_naming_style.prefix_underscore.capitalization = camel_case dotnet_naming_style.prefix_underscore.required_prefix = _ + +dotnet_diagnostic.CA1054.severity = suggestion diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs index ba8567c..85bf7c0 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs @@ -18,34 +18,51 @@ namespace Umbraco.StorageProviders.AzureBlob.IO /// public class AzureBlobFileSystem : IAzureBlobFileSystem, IFileProviderFactory { - private readonly BlobContainerClient _container; - private readonly IContentTypeProvider _contentTypeProvider; - private readonly IIOHelper _ioHelper; private readonly string _rootUrl; private readonly string _containerRootPath; + private readonly BlobContainerClient _container; + private readonly IIOHelper _ioHelper; + private readonly IContentTypeProvider _contentTypeProvider; /// - /// Creates a new instance of . + /// Creates a new instance of . /// - /// - /// - /// - /// - /// - public AzureBlobFileSystem(AzureBlobFileSystemOptions options, IHostingEnvironment hostingEnvironment, - IIOHelper ioHelper, IContentTypeProvider contentTypeProvider) + /// The options. + /// The hosting environment. + /// The I/O helper. + /// The content type provider. + public AzureBlobFileSystem(AzureBlobFileSystemOptions options, IHostingEnvironment hostingEnvironment, IIOHelper ioHelper, IContentTypeProvider contentTypeProvider) { if (options == null) throw new ArgumentNullException(nameof(options)); if (hostingEnvironment == null) throw new ArgumentNullException(nameof(hostingEnvironment)); + _rootUrl = EnsureUrlSeparatorChar(hostingEnvironment.ToAbsolute(options.VirtualPath)).TrimEnd('/'); + _containerRootPath = options.ContainerRootPath ?? _rootUrl; + _container = new BlobContainerClient(options.ConnectionString, options.ContainerName); _ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper)); _contentTypeProvider = contentTypeProvider ?? throw new ArgumentNullException(nameof(contentTypeProvider)); + } - _rootUrl = EnsureUrlSeparatorChar(hostingEnvironment.ToAbsolute(options.VirtualPath)).TrimEnd('/'); - _containerRootPath = options.ContainerRootPath ?? _rootUrl; + /// + /// Creates a new instance of . + /// + /// The root URL. + /// The blob container client. + /// The I/O helper. + /// The content type provider. + /// The container root path (uses the root URL if not set). + public AzureBlobFileSystem(string rootUrl, BlobContainerClient blobContainerClient, IIOHelper ioHelper, IContentTypeProvider contentTypeProvider, string? containerRootPath = null) + { + if (rootUrl is null) + { + throw new ArgumentNullException(nameof(rootUrl)); + } - var client = new BlobServiceClient(options.ConnectionString); - _container = client.GetBlobContainerClient(options.ContainerName); + _rootUrl = EnsureUrlSeparatorChar(rootUrl).TrimEnd('/'); + _containerRootPath = containerRootPath ?? _rootUrl; + _container = blobContainerClient ?? throw new ArgumentNullException(nameof(blobContainerClient)); + _ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper)); + _contentTypeProvider = contentTypeProvider ?? throw new ArgumentNullException(nameof(contentTypeProvider)); } /// From 9c141d041dd46a374e83f2a1fa5316ac4f947610 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 23 Mar 2022 15:12:05 +0100 Subject: [PATCH 11/26] Also add additional constructor on image cache --- .../Imaging/AzureBlobFileSystemImageCache.cs | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs index 819e7e7..d68233b 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs @@ -17,7 +17,6 @@ namespace Umbraco.StorageProviders.AzureBlob.Imaging public class AzureBlobFileSystemImageCache : IImageCache { private const string _cachePath = "cache/"; - private readonly string _name; private BlobContainerClient _container; /// @@ -33,19 +32,28 @@ public AzureBlobFileSystemImageCache(IOptionsMonitor /// /// The name. /// The options. - /// options - /// or - /// name protected AzureBlobFileSystemImageCache(string name, IOptionsMonitor options) { if (options == null) throw new ArgumentNullException(nameof(options)); - _name = name ?? throw new ArgumentNullException(nameof(name)); - var fileSystemOptions = options.Get(name); _container = new BlobContainerClient(fileSystemOptions.ConnectionString, fileSystemOptions.ContainerName); - options.OnChange(OptionsOnChange); + options.OnChange((options, changedName) => + { + if (changedName != name) return; + + _container = new BlobContainerClient(options.ConnectionString, options.ContainerName); + }); + } + + /// + /// Initializes a new instance of the class. + /// + /// The blob container client. + public AzureBlobFileSystemImageCache(BlobContainerClient blobContainerClient) + { + _container = blobContainerClient ?? throw new ArgumentNullException(nameof(blobContainerClient)); } /// @@ -68,12 +76,5 @@ public async Task SetAsync(string key, Stream stream, ImageCacheMetadata metadat await blob.UploadAsync(stream, metadata: metadata.ToDictionary()).ConfigureAwait(false); } - - private void OptionsOnChange(AzureBlobFileSystemOptions options, string name) - { - if (name != _name) return; - - _container = new BlobContainerClient(options.ConnectionString, options.ContainerName); - } } } From 2d4a0581fae5bdc6129d83688175e0953bd674c3 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Tue, 29 Mar 2022 14:17:56 +0200 Subject: [PATCH 12/26] Update icon.png include --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 6ab3321..cbce1df 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -11,7 +11,7 @@ umbraco storage - + From f5e2e40806f0009ec15736078345e370582f82d9 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 13 Apr 2022 22:53:49 +0200 Subject: [PATCH 13/26] Update to latest Umbraco v10 preview --- src/Directory.Build.props | 5 + .../Umbraco.StorageProviders.AzureBlob.csproj | 4 +- .../packages.lock.json | 668 +++++++++-------- .../Umbraco.StorageProviders.csproj | 5 +- .../packages.lock.json | 684 ++++++++++-------- 5 files changed, 790 insertions(+), 576 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index cbce1df..d554d8b 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -11,9 +11,14 @@ umbraco storage + + + https://www.myget.org/F/umbraconightly/api/v3/index.json + + true diff --git a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj index 74da904..12a6f04 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj +++ b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj @@ -1,6 +1,6 @@  - net5.0 + net6.0 enable AllEnabledByDefault true @@ -8,7 +8,7 @@ umbraco storage azure blob - + diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json index 4b4aa0a..caf2214 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -1,7 +1,7 @@ { "version": 1, "dependencies": { - ".NETCoreApp,Version=v5.0": { + "net6.0": { "Azure.Storage.Blobs": { "type": "Direct", "requested": "[12.11.0, )", @@ -40,23 +40,23 @@ }, "Umbraco.Cms.Web.Common": { "type": "Direct", - "requested": "[9.3.0, )", - "resolved": "9.3.0", - "contentHash": "SYlSlfd+Roz4dM1epw3bvj+/bpsz5su2KRkJ3ggBmzEnZNncG75Bt9G1CPtLMQaUqO9hz/tzEUoCV2BhEXzgcQ==", + "requested": "[10.0.0-preview20220405.88864, )", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "65m/PRDo4DJWfuldzVC3kVGdj3jx5ZWk/z9/989O8blqN8FJVOTl7zi+d+kTRVlWlB9LesO3ScuxDPL1gvJjGg==", "dependencies": { "Dazinator.Extensions.FileProviders": "2.0.0", - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "5.0.11", - "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "5.0.11", + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.0", + "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.0", "MiniProfiler.AspNetCore.Mvc": "4.2.22", "NETStandard.Library": "2.0.3", "Serilog.AspNetCore": "4.1.0", "SixLabors.ImageSharp.Web": "1.0.5", "Smidge.InMemory": "4.0.3", "Smidge.Nuglify": "4.0.3", - "Umbraco.Cms.Core": "9.3.0", - "Umbraco.Cms.Examine.Lucene": "9.3.0", - "Umbraco.Cms.Infrastructure": "9.3.0", - "Umbraco.Cms.PublishedCache.NuCache": "9.3.0" + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Examine.Lucene": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864", + "Umbraco.Cms.PublishedCache.NuCache": "10.0.0-preview20220405.88864" } }, "Azure.Core": { @@ -73,6 +73,20 @@ "System.Threading.Tasks.Extensions": "4.5.4" } }, + "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.Storage.Common": { "type": "Transitive", "resolved": "12.10.0", @@ -138,13 +152,13 @@ }, "HtmlAgilityPack": { "type": "Transitive", - "resolved": "1.11.37", - "contentHash": "HioktZJuMHVW7QTwVayHDoBL8dPL68vGRLFdQXYNuSJkVfhxn6xihcocUgbR+B1Lm/YesigUvWrdH0JY+PZ+0g==" + "resolved": "1.11.38", + "contentHash": "DC1j3GzU9lBp8hSXb9eYRHiJOUS5sxjBjme/4RTYjTXlgiFCOMXkIY+rmL+BtUss1pCwCN4LaVlZ/ci/fWY+lA==" }, "IPNetwork2": { "type": "Transitive", - "resolved": "2.5.362", - "contentHash": "5Hruh3ZDrULXRSjJ4uE6gpNkZhP1lFmiujsarPpyciYxSCuNa3Gt+VjoYJNKuZOor4t26iAmcbjXzCgLyjZYTw==" + "resolved": "2.5.366", + "contentHash": "cWR9CCOH+ZXUTt1CNqT4FI1AEeMEltXQcPDLelI3dg3TKlbzYGKAR737UQbkyW5+NV29TvhRRyPy8th2eqQJow==" }, "J2N": { "type": "Transitive", @@ -272,15 +286,15 @@ }, "Microsoft.AspNetCore.Cryptography.Internal": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "nXTx115zxvQtIV75oTXMnpljCHLPKW7sdisf4UIKe3hRpa9U5R53l+BHf9W7pxbbjd76/iYVTjXmS89yN9vF6w==" + "resolved": "6.0.0", + "contentHash": "ZWFBiHwkmipr+7t3MEPa7oB/iE8Kf5wvUptn9AXj7P7l/tGHEmRb1606Mlh/e2zkYwfjNGDH4Z5dUUlcnyccIw==" }, "Microsoft.AspNetCore.Cryptography.KeyDerivation": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "KRSJKv0xE1yIntsgy7T4M4zmjDEjg/KvdG55/1PBFBxFP3hyg3qtDPJhSw1GRT0Q3svjDYXsqqzvM6e4L8dZlA==", + "resolved": "6.0.0", + "contentHash": "CcYIcGn/zJFY0zq84V4r9Xd4aQn2/+8tsiRBYnhS/LVgWNDq7EsWxmLJ+bXWBBdpTHA+IKvXTag9YElFKFHWYQ==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.Internal": "5.0.11" + "Microsoft.AspNetCore.Cryptography.Internal": "6.0.0" } }, "Microsoft.AspNetCore.DataProtection": { @@ -349,46 +363,46 @@ }, "Microsoft.AspNetCore.JsonPatch": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "uBftjbW1fDnFVr/JTpdeeyp48C1hyzzsBDQ7sR4b3fvLp6eNLAAOBTZnPQMOs0EvUt66ttPeUKRuWZjpAHQu2Q==", + "resolved": "6.0.0", + "contentHash": "SUiwg0XQ5NtmnELHXSdX4mAwawFnAOwSx2Zz6NIhQnEN1tZDoAWEHc8dS/S7y8cE52+9bHj+XbYZuLGF7OrQPA==", "dependencies": { "Microsoft.CSharp": "4.7.0", - "Newtonsoft.Json": "12.0.2" + "Newtonsoft.Json": "13.0.1" } }, "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "Et5eJGuxtMSqYmHv3FYzLh8pf66RxSsDtw2Uy1ihDOvGSy4YKUBLW2Um+WlecLfMMrrq/QcW/asRPkCcLveiuA==", + "resolved": "6.0.0", + "contentHash": "YMwSWgBuwkVn9k4/2wWxfwEbx8T5Utj13UH/zmUm5lbkKcY+tJyt9w9P4rY5pO1XtCitoh1+L+Feqz9qxG/CvA==", "dependencies": { - "Microsoft.AspNetCore.JsonPatch": "5.0.11", - "Newtonsoft.Json": "12.0.2", + "Microsoft.AspNetCore.JsonPatch": "6.0.0", + "Newtonsoft.Json": "13.0.1", "Newtonsoft.Json.Bson": "1.0.2" } }, "Microsoft.AspNetCore.Mvc.Razor.Extensions": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "e4/WABGRm/0E1bAHbO79yPirom1qFYPLWErPBuNDz6A81jAyrBdv/gInbaf8CzW1H/J6aE9jhCIlECuclMCEng==", + "resolved": "6.0.0", + "contentHash": "M0h+ChPgydX2xY17agiphnAVa/Qh05RAP8eeuqGGhQKT10claRBlLNO6d2/oSV8zy0RLHzwLnNZm5xuC/gckGA==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "5.0.11", - "Microsoft.CodeAnalysis.Razor": "5.0.11" + "Microsoft.AspNetCore.Razor.Language": "6.0.0", + "Microsoft.CodeAnalysis.Razor": "6.0.0" } }, "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "gI1sX77mEovq2OQk45HeqOIsi0G3KGy9zLywj8Hgm9LEqTrhAcZxitmMq6RuzMxpZ3m9FtqrjTsWdhmCB5Ky0w==", + "resolved": "6.0.0", + "contentHash": "bf4kbla/8Qiu53MgFPz1u3H1ThoookPpFy+Ya9Q9p531wXK1pZ3tfz/Gtx8SKy41yz99jhZHTUM1QqLl7eJRgQ==", "dependencies": { - "Microsoft.AspNetCore.Mvc.Razor.Extensions": "5.0.11", - "Microsoft.CodeAnalysis.Razor": "5.0.11", - "Microsoft.Extensions.DependencyModel": "5.0.0" + "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.0", + "Microsoft.CodeAnalysis.Razor": "6.0.0", + "Microsoft.Extensions.DependencyModel": "6.0.0" } }, "Microsoft.AspNetCore.Razor.Language": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "gJ0fIwiAsGjE5JjtJ8VKG3dNvFCu1coLRZYh3217iAy4XEjKiIkKWaqmW5Ua8/OJ2P3U4gkT0BU8InIDSTS2LA==" + "resolved": "6.0.0", + "contentHash": "yCtBr1GSGzJrrp1NJUb4ltwFYMKHw/tJLnIDvg9g/FnkGIEzmE19tbCQqXARIJv5kdtBgsoVIdGLL+zmjxvM/A==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -407,8 +421,8 @@ }, "Microsoft.CodeAnalysis.Common": { "type": "Transitive", - "resolved": "3.11.0", - "contentHash": "FDKSkRRXnaEWMa2ONkLMo0ZAt/uiV1XIXyodwKIgP1AMIKA7JJKXx/OwFVsvkkUT4BeobLwokoxFw70fICahNg==", + "resolved": "4.0.1", + "contentHash": "SMREwaVD5SzatlWhh9aahQAtSWdb63NcE//f+bQzgHSECU6xtDtaxk0kwV+asdFfr6HtW38UeO6jvqdfzudg3w==", "dependencies": { "Microsoft.CodeAnalysis.Analyzers": "3.3.2", "System.Collections.Immutable": "5.0.0", @@ -421,20 +435,20 @@ }, "Microsoft.CodeAnalysis.CSharp": { "type": "Transitive", - "resolved": "3.11.0", - "contentHash": "aDRRb7y/sXoJyDqFEQ3Il9jZxyUMHkShzZeCRjQf3SS84n2J0cTEi3TbwVZE9XJvAeMJhGfVVxwOdjYBg6ljmw==", + "resolved": "4.0.1", + "contentHash": "Q9RxxydPpUElj/x1/qykDTUGsRoKbJG8H5XUSeMGmMu54fBiuX1xyanom9caa1oQfh5JIW1BgLxobSaWs4WyHQ==", "dependencies": { - "Microsoft.CodeAnalysis.Common": "[3.11.0]" + "Microsoft.CodeAnalysis.Common": "[4.0.1]" } }, "Microsoft.CodeAnalysis.Razor": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "+x0y8OMpssxZlizgFPj4Ehdq83n8hEAYtOv60/4NdNoC6CYGkQsuThfwGKEYkZpVzNz7Hm3D/IYiGW9Unj2lWA==", + "resolved": "6.0.0", + "contentHash": "uqdzuQXxD7XrJCbIbbwpI/LOv0PBJ9VIR0gdvANTHOfK5pjTaCir+XcwvYvBZ5BIzd0KGzyiamzlEWw1cK1q0w==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "5.0.11", - "Microsoft.CodeAnalysis.CSharp": "3.8.0", - "Microsoft.CodeAnalysis.Common": "3.8.0" + "Microsoft.AspNetCore.Razor.Language": "6.0.0", + "Microsoft.CodeAnalysis.CSharp": "4.0.0", + "Microsoft.CodeAnalysis.Common": "4.0.0" } }, "Microsoft.CSharp": { @@ -442,86 +456,119 @@ "resolved": "4.7.0", "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" }, + "Microsoft.Data.SqlClient": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "MUauWfCLsZQQMUR/wZhec5MH6+NTPmPp9i/OsjIMmIu2ICYUGOVm1x7RTqKxq19UWxXMSG03/O0FyXQJrpDs9A==", + "dependencies": { + "Azure.Identity": "1.3.0", + "Microsoft.Data.SqlClient.SNI.runtime": "3.0.0", + "Microsoft.Identity.Client": "4.22.0", + "Microsoft.IdentityModel.JsonWebTokens": "6.8.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.8.0", + "Microsoft.Win32.Registry": "4.7.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Diagnostics.DiagnosticSource": "4.7.0", + "System.Runtime.Caching": "4.7.0", + "System.Security.Principal.Windows": "4.7.0", + "System.Text.Encoding.CodePages": "4.7.0", + "System.Text.Encodings.Web": "4.7.2" + } + }, + "Microsoft.Data.SqlClient.SNI.runtime": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "n1sNyjJgu2pYWKgw3ZPikw3NiRvG4kt7Ya5MK8u77Rgj/1bTFqO/eDF4k5W9H5GXplMZCpKkNbp5kNBICgSB0w==" + }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==", + "resolved": "6.0.0", + "contentHash": "bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==", "dependencies": { - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "LN322qEKHjuVEhhXueTUe7RNePooZmS8aGid5aK2woX3NPjSnONFyKUc6+JknOS6ce6h2tCLfKPTBXE3mN/6Ag==", + "resolved": "6.0.0", + "contentHash": "tq2wXyh3fL17EMF2bXgRhU7JrbO3on93MRKYxzz4JzzvuGSA1l0W3GI9/tl8EO89TH+KWEymP7bcFway6z9fXg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==", + "resolved": "6.0.0", + "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Of1Irt1+NzWO+yEYkuDh5TpT4On7LKl98Q9iLqCdOZps6XXEWDj3AKtmyvzJPVXZe4apmkJJIiDL7rR1yC+hjQ==", + "resolved": "6.0.0", + "contentHash": "b3ErKzND8LIC7o08QAVlKfaEIYEvLJbtmVbFZVBRXeu9YkKfSSzLZfR1SUfQPBIy9mKLhEtJgGYImkcMNaKE0A==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "rRdspYKA18ViPOISwAihhCMbusHsARCOtDMwa23f+BGEdIjpKPlhs3LLjmKlxfhpGXBjIsS0JpXcChjRUN+PAw==", + "resolved": "6.0.0", + "contentHash": "V4Dth2cYMZpw3HhGw9XUDIijpI6gN+22LDt0AhufIgOppCUfpWX4483OmN+dFXRJkJLc8Tv0Q8QK+1ingT2+KQ==", "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": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Physical": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Pak8ymSUfdzPfBTLHxeOwcR32YDbuVfhnH2hkfOLnJNQd19ItlBdpMjIDY9C5O/nS2Sn9bzDMai0ZrvF7KyY/Q==", + "resolved": "6.0.0", + "contentHash": "GJGery6QytCzS/BxJ96klgG9in3uH26KcUBbiVG/coNDXCRq6LGVVlUT4vXq34KPuM+R2av+LeYdX9h4IZOCUg==", "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": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "System.Text.Json": "6.0.0" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "5.0.2", - "contentHash": "xzFW00AZEvOXM1OX+0+AYH5op/Hf3u//e6wszBd/rK72sypD+jx5CtsHxM4BVuFBEs8SajfO4QzSJtrQaHDr4A==", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==" + "resolved": "6.0.0", + "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "umBECCoMC+sOUgm083yFr8SxTobUOcPFH4AXigdO2xJiszCHAnmeDl4qPphJt+oaJ/XIfV1wOjIts2nRnki61Q==" + "resolved": "6.0.0", + "contentHash": "TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0", + "System.Text.Json": "6.0.0" + } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==", + "resolved": "6.0.0", + "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", "dependencies": { - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.FileProviders.Composite": { @@ -535,118 +582,178 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "xji3RrfNug5smkqOtz8Z0UqrDPfhvB61m/2UUO5GDmB4eRov2O1gZIHfnyOR9A0Og3nfBvaIBJEAzHE+N8hXjQ==", + "resolved": "6.0.0", + "contentHash": "9uQbDTqX1MidhoZFUSK1JItt74IapEadFDOIWAlBIKxr3O/ZEWLWkLYGlgUeP1Dkyog6/CB7h1EAU3xADYZ/lA==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "1rkd8UO2qf21biwO7X0hL9uHP7vtfmdv/NLvKgCRHkdz1XnW8zVQJXyEYiN68WYpExgtVWn55QF0qBzgfh1mGg==", + "resolved": "6.0.0", + "contentHash": "QvkL7l0nM8udt3gfyu0Vw8bbCXblxaKOl7c2oBfgGy4LCURRaL9XWZX1FWJrQc43oMokVneVxH38iz+bY1sbhg==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "5.0.0", - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ArliS8lGk8sWRtrWpqI8yUVYJpRruPjCDT+EIjrgkA/AAPRctlAkRISVZ334chAKktTLzD1+PK8F5IZpGedSqA==" + "resolved": "6.0.0", + "contentHash": "ip8jnL1aPiaPeKINCqaTEbvBFDmVx9dXQEBZ2HOBRXPD1eabGNqP/bKlsIcp7U2lGxiXd5xIhoFcmY8nM4Hdiw==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==", + "resolved": "6.0.0", + "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } }, "Microsoft.Extensions.Http": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "kT1ijDKZuSUhBtYoC1sXrmVKP7mA08h9Xrsr4VrS/QOtiKCEtUTTd7dd3XI9dwAb46tZSak13q/zdIcr4jqbyg==", + "resolved": "6.0.0", + "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==", "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.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Identity.Core": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "Z8rMFqOfdGltXoIqCab/3i8v8jHuaEoc9KPuiQmgwX6w0Zs+vg9gQ4w8fwrc97NXhInkOzU3ue0EOeuGNtdc4g==", + "resolved": "6.0.0", + "contentHash": "coWZViIBVb1szN3zMMa6KYP9KmJzOniwQ5tySbiFmVW6Nbdy1KuNDNzIKQcigmfqS4aLWVvNLGCFyDJWYskS8g==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.KeyDerivation": "5.0.11", - "Microsoft.Extensions.Logging": "5.0.0", - "Microsoft.Extensions.Options": "5.0.0" + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Identity.Stores": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "PZ5rdwgviEPeVoOX09g/No4+JjcHTDtbUy6M+9i/8qApRG5tUxcvJs9T0/GW6e37Vzo6Zq1WeiJW1mc12v+U1Q==", + "resolved": "6.0.0", + "contentHash": "3TniGyXEuFLQhJoiEReGD4HAdSKRxuQX5FDDg4GwFeeB36en4xQC5MVuWx1riiNwmh2eMtXq/wLdaJLd6JXIig==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "5.0.0", - "Microsoft.Extensions.Identity.Core": "5.0.11", - "Microsoft.Extensions.Logging": "5.0.0" + "Microsoft.Extensions.Caching.Abstractions": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==", + "resolved": "6.0.0", + "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "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.DependencyInjection": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "System.Diagnostics.DiagnosticSource": "6.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w==" + "resolved": "6.0.0", + "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==", + "resolved": "6.0.0", + "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "280RxNJqOeQqq47aJLy5D9LN61CAWeuRA83gPToQ8B9jl9SNdQ5EXjlfvF66zQI5AXMl+C/3hGnbtIEN+X3mqA==", + "resolved": "6.0.0", + "contentHash": "bXWINbTn0vC0FYc9GaQTISbxhQLAMrvtbuvD9N6JelEaIS/Pr62wUCinrq5bf1WRBGczt1v4wDhxFtVFNcMdUQ==", "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.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Binder": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Options.DataAnnotations": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "f+A/GyRzXziU/2pTHQI1N/GNSqmHUqa3ewsAMa8tbmQDkTnE1srOzLvCUk3mxcZRH1tnfEO3tzvdrlMSImxR7g==", + "resolved": "6.0.0", + "contentHash": "Fvs4plZYQT/iF/JsYwP/pppQRvQC211enBjCoIu/355M+aunlzSyzN/n3wPibyY76794MFLkLVT47JCBc3porg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "Microsoft.Extensions.Options": "5.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "System.ComponentModel.Annotations": "5.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==" + "resolved": "6.0.0", + "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Identity.Client": { + "type": "Transitive", + "resolved": "4.22.0", + "contentHash": "GlamU9rs8cSVIx9WSGv5QKpt66KkE+ImxNa/wNZZUJ3knt3PM98T9sOY8B7NcEfhw7NoxU2/0TSOcmnRSJQgqw==" + }, + "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.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "+7JIww64PkMt7NWFxoe4Y/joeF7TAtA/fQ0b2GFGcagzB59sKkTt/sMZWR6aSZht5YC7SdHi3W6yM1yylRGJCQ==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "6.8.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "Rfh/p4MaN4gkmhPxwbu8IjrmoDncGfHHPh1sTnc0AcM/Oc39/fzC9doKNWvUAjzFb8LqA6lgZyblTrIsX/wDXg==" + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "OJZx5nPdiH+MEkwCkbJrTAUiO/YzLe0VSswNlDxJsJD9bhOIdXHufh650pfm59YH1DNevp3/bXzukKrG57gA1w==", + "dependencies": { + "Microsoft.IdentityModel.Logging": "6.8.0", + "Microsoft.IdentityModel.Tokens": "6.8.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "X/PiV5l3nYYsodtrNMrNQIVlDmHpjQQ5w48E+o/D5H4es2+4niEyQf3l03chvZGWNzBRhfSstaXr25/Ye4AeYw==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "6.8.0", + "System.IdentityModel.Tokens.Jwt": "6.8.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "gTqzsGcmD13HgtNePPcuVHZ/NXWmyV+InJgalW/FhWpII1D7V1k0obIseGlWMeA4G+tZfeGMfXr0klnWbMR/mQ==", + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.8.0", + "System.Security.Cryptography.Cng": "4.5.0" + } }, "Microsoft.IO.RecyclableMemoryStream": { "type": "Transitive", @@ -655,8 +762,8 @@ }, "Microsoft.NETCore.Platforms": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + "resolved": "3.1.0", + "contentHash": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", @@ -679,11 +786,8 @@ }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0" - } + "resolved": "6.0.0", + "contentHash": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==" }, "MimeKit": { "type": "Transitive", @@ -760,12 +864,21 @@ }, "NPoco": { "type": "Transitive", - "resolved": "4.0.2", - "contentHash": "/IvVUgQ0VfqgTjUbuY99IQ9JSJwrK4H9tKgKjliAif+4PbPI04/TvY+uZ3fgo8PYTUSKo+AD8JlvOiFOTBe2hA==", + "resolved": "5.3.2", + "contentHash": "3eVBjurbeWT3hSC0/o7wMc+DBPOGMOL4H0boSPn/8URC/9ebzUkB+VDzWLqlQPXFLlFVjCcgh4pK/FhXoJ74yQ==", "dependencies": { - "System.Data.SqlClient": "4.5.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0" + "System.Linq.Async": "5.0.0", + "System.Reflection.Emit.Lightweight": "4.7.0" + } + }, + "NPoco.SqlServer": { + "type": "Transitive", + "resolved": "5.3.2", + "contentHash": "6lkQHcgvDgSfIq0oga7W91QpRU1Mdmm6NgqcT8mgOOyY92ftQaacAZgzMTl8CfhgMYsg0/xzRgqIGq37CnLTxg==", + "dependencies": { + "Microsoft.Data.SqlClient": "3.0.0", + "NPoco": "5.3.2", + "Polly": "7.2.2" } }, "NUglify": { @@ -773,6 +886,11 @@ "resolved": "1.13.12", "contentHash": "+13YE9UjnXx4+NKP+j1Axiz/QAMtK++ZtG61u9iiR2/WzPzr7EfBDOwj+xHNyTEMS9Emq/mCyWaBGjCABhC0HQ==" }, + "Polly": { + "type": "Transitive", + "resolved": "7.2.2", + "contentHash": "E6CeKyS513j7taKAq4q2MESDBvzuzWnR1rQ2Y2zqJvpiVtKMm699Aubb20MUPBDmb0Ov8PmcLHTCVFdCjoy2kA==" + }, "Portable.BouncyCastle": { "type": "Transitive", "resolved": "1.8.10", @@ -787,31 +905,6 @@ "Microsoft.NETCore.Targets": "1.1.0" } }, - "runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", - "dependencies": { - "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", - "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", - "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" - } - }, - "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==" - }, - "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==" - }, - "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==" - }, "Serilog": { "type": "Transitive", "resolved": "2.10.0", @@ -849,34 +942,33 @@ "Serilog": "2.3.0" } }, + "Serilog.Expressions": { + "type": "Transitive", + "resolved": "3.3.0", + "contentHash": "wKFAcFSdukSwVYK4LPhcWpY8YmEVTSGqmi3bjagHNw+9wdCseREqGdsYBBTWtkYcugwSHv3F9dtwuFKUM9T2BA==", + "dependencies": { + "Serilog": "2.10.0" + } + }, "Serilog.Extensions.Hosting": { "type": "Transitive", - "resolved": "4.1.2", - "contentHash": "nOpvvYgDoepae4FsXnyX4uSYLO+f+v7aRyNpA0pbpxjdkpw3FWZtfQDe2gnUmZGNYMLWnxMRCPJQ455U/dOUbQ==", + "resolved": "4.2.0", + "contentHash": "gT2keceCmPQR9EX0VpXQZvUgELdfE7yqJ7MOxBhm3WLCblcvRgswEOOTgok/DHObbM15A3V/DtF3VdVDQPIZzQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8", "Microsoft.Extensions.Hosting.Abstractions": "3.1.8", "Microsoft.Extensions.Logging.Abstractions": "3.1.8", "Serilog": "2.10.0", - "Serilog.Extensions.Logging": "3.0.1" + "Serilog.Extensions.Logging": "3.1.0" } }, "Serilog.Extensions.Logging": { "type": "Transitive", - "resolved": "3.0.1", - "contentHash": "U0xbGoZuxJRjE3C5vlCfrf9a4xHTmbrCXKmaA14cHAqiT1Qir0rkV7Xss9GpPJR3MRYH19DFUUqZ9hvWeJrzdQ==", + "resolved": "3.1.0", + "contentHash": "IWfem7wfrFbB3iw1OikqPFNPEzfayvDuN4WP7Ue1AVFskalMByeWk3QbtUXQR34SBkv1EbZ3AySHda/ErDgpcg==", "dependencies": { "Microsoft.Extensions.Logging": "2.0.0", - "Serilog": "2.8.0" - } - }, - "Serilog.Filters.Expressions": { - "type": "Transitive", - "resolved": "2.1.0", - "contentHash": "e0ZaK+NWx6+j71xB5dRXohdreSeHgMJ9mp4giSp83/4UC8VsJWDH+CAT1YVXsyINAR9IQznXllnJ0e5j+BvwzA==", - "dependencies": { - "Serilog": "2.9.0", - "Superpower": "2.3.0" + "Serilog": "2.9.0" } }, "Serilog.Formatting.Compact": { @@ -1004,11 +1096,6 @@ "Smidge": "4.0.3" } }, - "Superpower": { - "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "L7ZLWjec5aPWWebsOKM6+8SdobSFMPJFIS8S8TT46oH2iELA70H95spRMeP1yPH9nDL/o+XYP29DPtVwVdzPeA==" - }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", @@ -1071,11 +1158,11 @@ }, "System.Configuration.ConfigurationManager": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "aM7cbfEfVNlEEOj3DsZP+2g9NRwbkyiAv2isQEzw7pnkDg9ekCU2m1cdJLM02Uq691OaCS91tooaxcEn8d0q5w==", + "resolved": "6.0.0", + "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", "dependencies": { - "System.Security.Cryptography.ProtectedData": "5.0.0", - "System.Security.Permissions": "5.0.0" + "System.Security.Cryptography.ProtectedData": "6.0.0", + "System.Security.Permissions": "6.0.0" } }, "System.Console": { @@ -1105,16 +1192,6 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Data.SqlClient": { - "type": "Transitive", - "resolved": "4.8.3", - "contentHash": "yERfVLXAY0QbylAgaGLByYN0hFxX28aeEQ0hUgJO+Ntn1AfmWl5HHUoYJA0Yl9HhIUUJHVaS/Sw/RLZr5aaC+A==", - "dependencies": { - "Microsoft.Win32.Registry": "4.7.0", - "System.Security.Principal.Windows": "4.7.0", - "runtime.native.System.Data.SqlClient.sni": "4.7.0" - } - }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", @@ -1127,8 +1204,11 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "mbBgoR0rRfl2uimsZ2avZY8g7Xnh1Mza0rJZLPcxqiMWlkGukjmRkuMJ/er+AhQuiRIh80CR/Hpeztr80seV5g==" + "resolved": "6.0.0", + "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } }, "System.Diagnostics.StackTrace": { "type": "Transitive", @@ -1153,10 +1233,10 @@ }, "System.Drawing.Common": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "resolved": "6.0.0", + "contentHash": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", "dependencies": { - "Microsoft.Win32.SystemEvents": "5.0.0" + "Microsoft.Win32.SystemEvents": "6.0.0" } }, "System.Dynamic.Runtime": { @@ -1208,6 +1288,15 @@ "System.Runtime.InteropServices": "4.1.0" } }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "5tBCjAub2Bhd5qmcd0WhR5s354e4oLYa//kOWrkX+6/7ZbDDJjMTfwLSOiZ/MMpWdE4DWPLOfTLOq/juj9CKzA==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "6.8.0", + "Microsoft.IdentityModel.Tokens": "6.8.0" + } + }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", @@ -1255,11 +1344,7 @@ "System.IO.Hashing": { "type": "Transitive", "resolved": "6.0.0", - "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g==", - "dependencies": { - "System.Buffers": "4.5.1", - "System.Memory": "4.5.4" - } + "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g==" }, "System.IO.Pipelines": { "type": "Transitive", @@ -1278,6 +1363,11 @@ "System.Runtime.Extensions": "4.3.0" } }, + "System.Linq.Async": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==" + }, "System.Linq.Expressions": { "type": "Transitive", "resolved": "4.3.0", @@ -1426,16 +1516,16 @@ }, "System.Runtime.Caching": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "30D6MkO8WF9jVGWZIP0hmCN8l9BTY4LCsAzLIe4xFSXzs+AjDotR7DpSmj27pFskDURzUvqYYY0ikModgBTxWw==", + "resolved": "6.0.0", + "contentHash": "E0e03kUp5X2k+UAoVl6efmI7uU7JRBWi5EIdlQ7cr0NpBGjHG4fWII35PgsBY9T4fJQ8E4QPsL0rKksU9gcL5A==", "dependencies": { - "System.Configuration.ConfigurationManager": "5.0.0" + "System.Configuration.ConfigurationManager": "6.0.0" } }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==" + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, "System.Runtime.Extensions": { "type": "Transitive", @@ -1495,12 +1585,8 @@ }, "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" - } + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" }, "System.Security.Cryptography.Cng": { "type": "Transitive", @@ -1521,8 +1607,8 @@ }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "HGxMSAFAPLNoxBvSfW08vHde0F9uh7BjASwu6JF9JnXuEPhCY3YUqURn0+bQV/4UWeaqymmrHWV+Aw9riQCtCA==" + "resolved": "6.0.0", + "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==" }, "System.Security.Cryptography.Xml": { "type": "Transitive", @@ -1535,11 +1621,11 @@ }, "System.Security.Permissions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "uE8juAhEkp7KDBCdjDIE3H9R1HJuEHqeqX8nLX9gmYKWwsqk3T5qZlPx8qle5DPKimC/Fy3AFTdV7HamgCh9qQ==", + "resolved": "6.0.0", + "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Windows.Extensions": "5.0.0" + "System.Security.AccessControl": "6.0.0", + "System.Windows.Extensions": "6.0.0" } }, "System.Security.Principal.Windows": { @@ -1559,22 +1645,28 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "4.7.0", + "contentHash": "aeu4FlaUTemuT1qOd1MyU4T516QR4Fy+9yDbwWMPHOHy7U8FD6SgTzdZFO7gHcfAPHtECqInbwklVvUK4RHcNg==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "Microsoft.NETCore.Platforms": "3.1.0" } }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "5.0.1", - "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==" + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } }, "System.Text.Json": { "type": "Transitive", - "resolved": "4.7.2", - "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg==" + "resolved": "6.0.0", + "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" + } }, "System.Text.RegularExpressions": { "type": "Transitive", @@ -1614,8 +1706,8 @@ }, "System.Threading.Tasks.Dataflow": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "NBp0zSAMZp4muDje6XmbDfmkqw9+qsDCHp+YMEtnVgHEjQZ3Q7MzFTTp3eHqpExn4BwMrS7JkUVOTcVchig4Sw==" + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" }, "System.Threading.Tasks.Extensions": { "type": "Transitive", @@ -1639,66 +1731,65 @@ }, "System.Windows.Extensions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==", + "resolved": "6.0.0", + "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", "dependencies": { - "System.Drawing.Common": "5.0.0" + "System.Drawing.Common": "6.0.0" } }, "Umbraco.Cms.Core": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "uO0iy1YlFn8PIx5ZwhE1Tzy/UkV7J2I+pkrLJqjquJj3esl2bf7IC+PmlLb96BIYEjlS8f4SAMT7y3vRhjG5tg==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.FileProviders.Embedded": "5.0.11", - "Microsoft.Extensions.FileProviders.Physical": "5.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "5.0.0", - "Microsoft.Extensions.Logging": "5.0.0", - "Microsoft.Extensions.Options": "5.0.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0", - "Microsoft.Extensions.Options.DataAnnotations": "5.0.0", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "u5vmG6XnVBCpCaR86zNfYuP8Ze5Wly352EzEdUSY+FtKK6nWl9S/0udDnDbh5lKQ0EJ8+ID74aYZ2fL6HfhYAQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Embedded": "6.0.0", + "Microsoft.Extensions.FileProviders.Physical": "6.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", + "Microsoft.Extensions.Options.DataAnnotations": "6.0.0", "System.ComponentModel.Annotations": "5.0.0", "System.Reflection.Emit.Lightweight": "4.7.0", - "System.Runtime.Caching": "5.0.0" + "System.Runtime.Caching": "6.0.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "oCf8bmAZw5KjTGnIxEGPTGxTRvTO/o97ogy5FdLTOB/uwWlNepAQy/hXl7hSIooqhap7WpsUAaYkIQP/4nSwmw==", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "s4Txm5sVZzzVMeVWGQbJ2mq/0AvHXcbQ9Kv53mbABIGizFt53+rJBYl0gaayUg5k+Sbra/5bc2b6qfgLw3kJxw==", "dependencies": { "Examine": "2.0.1", - "Umbraco.Cms.Core": "9.3.0", - "Umbraco.Cms.Infrastructure": "9.3.0" + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "R+8ld2tkZWjgW4LGjnvt8F3jGNNUtbRRHxO4n77UNboU9kASf6XzRLJkBSU0X8sxwsnxVmyu6DQxK5wPLSENjQ==", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "/yB/HZgv0x5EuwZWUa+9etCIQdAUc6idmNdsk+/6BDfQRAl4rUUygJn/5qTAZLOzZDn3YBL6V2pqhGHvCiAe2Q==", "dependencies": { "Examine.Core": "2.0.1", - "HtmlAgilityPack": "1.11.37", - "IPNetwork2": "2.5.362", + "HtmlAgilityPack": "1.11.38", + "IPNetwork2": "2.5.366", "MailKit": "2.15.0", "Markdown": "2.2.1", "Microsoft.CSharp": "4.7.0", - "Microsoft.CodeAnalysis.CSharp": "3.11.0", - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.Configuration.Json": "5.0.0", - "Microsoft.Extensions.DependencyInjection": "5.0.2", - "Microsoft.Extensions.Http": "5.0.0", - "Microsoft.Extensions.Identity.Stores": "5.0.11", - "Microsoft.SourceLink.GitHub": "1.0.0", + "Microsoft.CodeAnalysis.CSharp": "4.0.1", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Json": "6.0.0", + "Microsoft.Extensions.DependencyInjection": "6.0.0", + "Microsoft.Extensions.Http": "6.0.0", + "Microsoft.Extensions.Identity.Stores": "6.0.0", "MiniProfiler.Shared": "4.2.22", - "NPoco": "4.0.2", + "NPoco.SqlServer": "5.3.2", "Newtonsoft.Json": "13.0.1", "Serilog": "2.10.0", "Serilog.Enrichers.Process": "2.0.2", "Serilog.Enrichers.Thread": "3.1.0", - "Serilog.Extensions.Hosting": "4.1.2", - "Serilog.Filters.Expressions": "2.1.0", + "Serilog.Expressions": "3.3.0", + "Serilog.Extensions.Hosting": "4.2.0", "Serilog.Formatting.Compact": "1.1.0", "Serilog.Formatting.Compact.Reader": "1.0.5", "Serilog.Settings.Configuration": "3.3.0", @@ -1706,31 +1797,30 @@ "Serilog.Sinks.File": "5.0.0", "Serilog.Sinks.Map": "1.0.2", "SixLabors.ImageSharp": "1.0.4", - "System.Data.SqlClient": "4.8.3", "System.IO.FileSystem.AccessControl": "5.0.0", - "System.Text.Encodings.Web": "5.0.1", - "System.Threading.Tasks.Dataflow": "5.0.0", - "Umbraco.Cms.Core": "9.3.0", + "System.Text.Encodings.Web": "6.0.0", + "System.Threading.Tasks.Dataflow": "6.0.0", + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", "ncrontab": "3.3.1" } }, "Umbraco.Cms.PublishedCache.NuCache": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "dGuSfmPS3s1/PlVZxI2jne9qjYpfvCW0cfcjREcY7SwmKx3OKqA/p/l40/esP9lE4JujrqbiBiVb1DG8sq2sbg==", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "174sloAV7Ur8RJ4gkzmodaN8NW6ZaRF4x/caiNGSWnExUFivVfHBe28wWgbyiLp7j8EaxXIptnNXoA1K/wIunA==", "dependencies": { "CSharpTest.Net.Collections-NetStd2": "14.906.1403.1084", "K4os.Compression.LZ4": "1.2.15", "MessagePack": "2.3.85", "Newtonsoft.Json": "13.0.1", - "Umbraco.Cms.Core": "9.3.0", - "Umbraco.Cms.Infrastructure": "9.3.0" + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" } }, "umbraco.storageproviders": { "type": "Project", "dependencies": { - "Umbraco.Cms.Web.Common": "9.3.0" + "Umbraco.Cms.Web.Common": "10.0.0-preview20220405.88864" } } } diff --git a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj index d58a0e9..6323bbb 100644 --- a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj +++ b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj @@ -1,12 +1,13 @@  - net5.0 + net6.0 + latest enable AllEnabledByDefault true Shared storage providers infrastructure for Umbraco CMS - + diff --git a/src/Umbraco.StorageProviders/packages.lock.json b/src/Umbraco.StorageProviders/packages.lock.json index 62bbd29..25837ba 100644 --- a/src/Umbraco.StorageProviders/packages.lock.json +++ b/src/Umbraco.StorageProviders/packages.lock.json @@ -1,7 +1,7 @@ { "version": 1, "dependencies": { - ".NETCoreApp,Version=v5.0": { + "net6.0": { "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[1.1.1, )", @@ -20,23 +20,51 @@ }, "Umbraco.Cms.Web.Common": { "type": "Direct", - "requested": "[9.3.0, )", - "resolved": "9.3.0", - "contentHash": "SYlSlfd+Roz4dM1epw3bvj+/bpsz5su2KRkJ3ggBmzEnZNncG75Bt9G1CPtLMQaUqO9hz/tzEUoCV2BhEXzgcQ==", + "requested": "[10.0.0-preview20220405.88864, )", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "65m/PRDo4DJWfuldzVC3kVGdj3jx5ZWk/z9/989O8blqN8FJVOTl7zi+d+kTRVlWlB9LesO3ScuxDPL1gvJjGg==", "dependencies": { "Dazinator.Extensions.FileProviders": "2.0.0", - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "5.0.11", - "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "5.0.11", + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.0", + "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.0", "MiniProfiler.AspNetCore.Mvc": "4.2.22", "NETStandard.Library": "2.0.3", "Serilog.AspNetCore": "4.1.0", "SixLabors.ImageSharp.Web": "1.0.5", "Smidge.InMemory": "4.0.3", "Smidge.Nuglify": "4.0.3", - "Umbraco.Cms.Core": "9.3.0", - "Umbraco.Cms.Examine.Lucene": "9.3.0", - "Umbraco.Cms.Infrastructure": "9.3.0", - "Umbraco.Cms.PublishedCache.NuCache": "9.3.0" + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Examine.Lucene": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864", + "Umbraco.Cms.PublishedCache.NuCache": "10.0.0-preview20220405.88864" + } + }, + "Azure.Core": { + "type": "Transitive", + "resolved": "1.6.0", + "contentHash": "kI4m2NsODPOrxo0OoKjk6B3ADbdovhDQIEmI4039upjjZKRaewVLx/Uz4DfRa/NtnIRZQPUALe1yvdHWAoRt4w==", + "dependencies": { + "Microsoft.Bcl.AsyncInterfaces": "1.0.0", + "System.Buffers": "4.5.0", + "System.Diagnostics.DiagnosticSource": "4.6.0", + "System.Memory": "4.5.3", + "System.Numerics.Vectors": "4.5.0", + "System.Text.Json": "4.6.0", + "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" } }, "CSharpTest.Net.Collections-NetStd2": { @@ -95,13 +123,13 @@ }, "HtmlAgilityPack": { "type": "Transitive", - "resolved": "1.11.37", - "contentHash": "HioktZJuMHVW7QTwVayHDoBL8dPL68vGRLFdQXYNuSJkVfhxn6xihcocUgbR+B1Lm/YesigUvWrdH0JY+PZ+0g==" + "resolved": "1.11.38", + "contentHash": "DC1j3GzU9lBp8hSXb9eYRHiJOUS5sxjBjme/4RTYjTXlgiFCOMXkIY+rmL+BtUss1pCwCN4LaVlZ/ci/fWY+lA==" }, "IPNetwork2": { "type": "Transitive", - "resolved": "2.5.362", - "contentHash": "5Hruh3ZDrULXRSjJ4uE6gpNkZhP1lFmiujsarPpyciYxSCuNa3Gt+VjoYJNKuZOor4t26iAmcbjXzCgLyjZYTw==" + "resolved": "2.5.366", + "contentHash": "cWR9CCOH+ZXUTt1CNqT4FI1AEeMEltXQcPDLelI3dg3TKlbzYGKAR737UQbkyW5+NV29TvhRRyPy8th2eqQJow==" }, "J2N": { "type": "Transitive", @@ -229,15 +257,15 @@ }, "Microsoft.AspNetCore.Cryptography.Internal": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "nXTx115zxvQtIV75oTXMnpljCHLPKW7sdisf4UIKe3hRpa9U5R53l+BHf9W7pxbbjd76/iYVTjXmS89yN9vF6w==" + "resolved": "6.0.0", + "contentHash": "ZWFBiHwkmipr+7t3MEPa7oB/iE8Kf5wvUptn9AXj7P7l/tGHEmRb1606Mlh/e2zkYwfjNGDH4Z5dUUlcnyccIw==" }, "Microsoft.AspNetCore.Cryptography.KeyDerivation": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "KRSJKv0xE1yIntsgy7T4M4zmjDEjg/KvdG55/1PBFBxFP3hyg3qtDPJhSw1GRT0Q3svjDYXsqqzvM6e4L8dZlA==", + "resolved": "6.0.0", + "contentHash": "CcYIcGn/zJFY0zq84V4r9Xd4aQn2/+8tsiRBYnhS/LVgWNDq7EsWxmLJ+bXWBBdpTHA+IKvXTag9YElFKFHWYQ==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.Internal": "5.0.11" + "Microsoft.AspNetCore.Cryptography.Internal": "6.0.0" } }, "Microsoft.AspNetCore.DataProtection": { @@ -306,46 +334,51 @@ }, "Microsoft.AspNetCore.JsonPatch": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "uBftjbW1fDnFVr/JTpdeeyp48C1hyzzsBDQ7sR4b3fvLp6eNLAAOBTZnPQMOs0EvUt66ttPeUKRuWZjpAHQu2Q==", + "resolved": "6.0.0", + "contentHash": "SUiwg0XQ5NtmnELHXSdX4mAwawFnAOwSx2Zz6NIhQnEN1tZDoAWEHc8dS/S7y8cE52+9bHj+XbYZuLGF7OrQPA==", "dependencies": { "Microsoft.CSharp": "4.7.0", - "Newtonsoft.Json": "12.0.2" + "Newtonsoft.Json": "13.0.1" } }, "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "Et5eJGuxtMSqYmHv3FYzLh8pf66RxSsDtw2Uy1ihDOvGSy4YKUBLW2Um+WlecLfMMrrq/QcW/asRPkCcLveiuA==", + "resolved": "6.0.0", + "contentHash": "YMwSWgBuwkVn9k4/2wWxfwEbx8T5Utj13UH/zmUm5lbkKcY+tJyt9w9P4rY5pO1XtCitoh1+L+Feqz9qxG/CvA==", "dependencies": { - "Microsoft.AspNetCore.JsonPatch": "5.0.11", - "Newtonsoft.Json": "12.0.2", + "Microsoft.AspNetCore.JsonPatch": "6.0.0", + "Newtonsoft.Json": "13.0.1", "Newtonsoft.Json.Bson": "1.0.2" } }, "Microsoft.AspNetCore.Mvc.Razor.Extensions": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "e4/WABGRm/0E1bAHbO79yPirom1qFYPLWErPBuNDz6A81jAyrBdv/gInbaf8CzW1H/J6aE9jhCIlECuclMCEng==", + "resolved": "6.0.0", + "contentHash": "M0h+ChPgydX2xY17agiphnAVa/Qh05RAP8eeuqGGhQKT10claRBlLNO6d2/oSV8zy0RLHzwLnNZm5xuC/gckGA==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "5.0.11", - "Microsoft.CodeAnalysis.Razor": "5.0.11" + "Microsoft.AspNetCore.Razor.Language": "6.0.0", + "Microsoft.CodeAnalysis.Razor": "6.0.0" } }, "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "gI1sX77mEovq2OQk45HeqOIsi0G3KGy9zLywj8Hgm9LEqTrhAcZxitmMq6RuzMxpZ3m9FtqrjTsWdhmCB5Ky0w==", + "resolved": "6.0.0", + "contentHash": "bf4kbla/8Qiu53MgFPz1u3H1ThoookPpFy+Ya9Q9p531wXK1pZ3tfz/Gtx8SKy41yz99jhZHTUM1QqLl7eJRgQ==", "dependencies": { - "Microsoft.AspNetCore.Mvc.Razor.Extensions": "5.0.11", - "Microsoft.CodeAnalysis.Razor": "5.0.11", - "Microsoft.Extensions.DependencyModel": "5.0.0" + "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.0", + "Microsoft.CodeAnalysis.Razor": "6.0.0", + "Microsoft.Extensions.DependencyModel": "6.0.0" } }, "Microsoft.AspNetCore.Razor.Language": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "gJ0fIwiAsGjE5JjtJ8VKG3dNvFCu1coLRZYh3217iAy4XEjKiIkKWaqmW5Ua8/OJ2P3U4gkT0BU8InIDSTS2LA==" + "resolved": "6.0.0", + "contentHash": "yCtBr1GSGzJrrp1NJUb4ltwFYMKHw/tJLnIDvg9g/FnkGIEzmE19tbCQqXARIJv5kdtBgsoVIdGLL+zmjxvM/A==" + }, + "Microsoft.Bcl.AsyncInterfaces": { + "type": "Transitive", + "resolved": "1.0.0", + "contentHash": "K63Y4hORbBcKLWH5wnKgzyn7TOfYzevIEwIedQHBIkmkEBA9SCqgvom+XTuE+fAFGvINGkhFItaZ2dvMGdT5iw==" }, "Microsoft.Build.Tasks.Git": { "type": "Transitive", @@ -359,8 +392,8 @@ }, "Microsoft.CodeAnalysis.Common": { "type": "Transitive", - "resolved": "3.11.0", - "contentHash": "FDKSkRRXnaEWMa2ONkLMo0ZAt/uiV1XIXyodwKIgP1AMIKA7JJKXx/OwFVsvkkUT4BeobLwokoxFw70fICahNg==", + "resolved": "4.0.1", + "contentHash": "SMREwaVD5SzatlWhh9aahQAtSWdb63NcE//f+bQzgHSECU6xtDtaxk0kwV+asdFfr6HtW38UeO6jvqdfzudg3w==", "dependencies": { "Microsoft.CodeAnalysis.Analyzers": "3.3.2", "System.Collections.Immutable": "5.0.0", @@ -373,20 +406,20 @@ }, "Microsoft.CodeAnalysis.CSharp": { "type": "Transitive", - "resolved": "3.11.0", - "contentHash": "aDRRb7y/sXoJyDqFEQ3Il9jZxyUMHkShzZeCRjQf3SS84n2J0cTEi3TbwVZE9XJvAeMJhGfVVxwOdjYBg6ljmw==", + "resolved": "4.0.1", + "contentHash": "Q9RxxydPpUElj/x1/qykDTUGsRoKbJG8H5XUSeMGmMu54fBiuX1xyanom9caa1oQfh5JIW1BgLxobSaWs4WyHQ==", "dependencies": { - "Microsoft.CodeAnalysis.Common": "[3.11.0]" + "Microsoft.CodeAnalysis.Common": "[4.0.1]" } }, "Microsoft.CodeAnalysis.Razor": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "+x0y8OMpssxZlizgFPj4Ehdq83n8hEAYtOv60/4NdNoC6CYGkQsuThfwGKEYkZpVzNz7Hm3D/IYiGW9Unj2lWA==", + "resolved": "6.0.0", + "contentHash": "uqdzuQXxD7XrJCbIbbwpI/LOv0PBJ9VIR0gdvANTHOfK5pjTaCir+XcwvYvBZ5BIzd0KGzyiamzlEWw1cK1q0w==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "5.0.11", - "Microsoft.CodeAnalysis.CSharp": "3.8.0", - "Microsoft.CodeAnalysis.Common": "3.8.0" + "Microsoft.AspNetCore.Razor.Language": "6.0.0", + "Microsoft.CodeAnalysis.CSharp": "4.0.0", + "Microsoft.CodeAnalysis.Common": "4.0.0" } }, "Microsoft.CSharp": { @@ -394,86 +427,119 @@ "resolved": "4.7.0", "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" }, + "Microsoft.Data.SqlClient": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "MUauWfCLsZQQMUR/wZhec5MH6+NTPmPp9i/OsjIMmIu2ICYUGOVm1x7RTqKxq19UWxXMSG03/O0FyXQJrpDs9A==", + "dependencies": { + "Azure.Identity": "1.3.0", + "Microsoft.Data.SqlClient.SNI.runtime": "3.0.0", + "Microsoft.Identity.Client": "4.22.0", + "Microsoft.IdentityModel.JsonWebTokens": "6.8.0", + "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.8.0", + "Microsoft.Win32.Registry": "4.7.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Diagnostics.DiagnosticSource": "4.7.0", + "System.Runtime.Caching": "4.7.0", + "System.Security.Principal.Windows": "4.7.0", + "System.Text.Encoding.CodePages": "4.7.0", + "System.Text.Encodings.Web": "4.7.2" + } + }, + "Microsoft.Data.SqlClient.SNI.runtime": { + "type": "Transitive", + "resolved": "3.0.0", + "contentHash": "n1sNyjJgu2pYWKgw3ZPikw3NiRvG4kt7Ya5MK8u77Rgj/1bTFqO/eDF4k5W9H5GXplMZCpKkNbp5kNBICgSB0w==" + }, "Microsoft.Extensions.Caching.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==", + "resolved": "6.0.0", + "contentHash": "bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==", "dependencies": { - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "LN322qEKHjuVEhhXueTUe7RNePooZmS8aGid5aK2woX3NPjSnONFyKUc6+JknOS6ce6h2tCLfKPTBXE3mN/6Ag==", + "resolved": "6.0.0", + "contentHash": "tq2wXyh3fL17EMF2bXgRhU7JrbO3on93MRKYxzz4JzzvuGSA1l0W3GI9/tl8EO89TH+KWEymP7bcFway6z9fXg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==", + "resolved": "6.0.0", + "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Of1Irt1+NzWO+yEYkuDh5TpT4On7LKl98Q9iLqCdOZps6XXEWDj3AKtmyvzJPVXZe4apmkJJIiDL7rR1yC+hjQ==", + "resolved": "6.0.0", + "contentHash": "b3ErKzND8LIC7o08QAVlKfaEIYEvLJbtmVbFZVBRXeu9YkKfSSzLZfR1SUfQPBIy9mKLhEtJgGYImkcMNaKE0A==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "rRdspYKA18ViPOISwAihhCMbusHsARCOtDMwa23f+BGEdIjpKPlhs3LLjmKlxfhpGXBjIsS0JpXcChjRUN+PAw==", + "resolved": "6.0.0", + "contentHash": "V4Dth2cYMZpw3HhGw9XUDIijpI6gN+22LDt0AhufIgOppCUfpWX4483OmN+dFXRJkJLc8Tv0Q8QK+1ingT2+KQ==", "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": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Physical": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Pak8ymSUfdzPfBTLHxeOwcR32YDbuVfhnH2hkfOLnJNQd19ItlBdpMjIDY9C5O/nS2Sn9bzDMai0ZrvF7KyY/Q==", + "resolved": "6.0.0", + "contentHash": "GJGery6QytCzS/BxJ96klgG9in3uH26KcUBbiVG/coNDXCRq6LGVVlUT4vXq34KPuM+R2av+LeYdX9h4IZOCUg==", "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": "6.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "System.Text.Json": "6.0.0" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "5.0.2", - "contentHash": "xzFW00AZEvOXM1OX+0+AYH5op/Hf3u//e6wszBd/rK72sypD+jx5CtsHxM4BVuFBEs8SajfO4QzSJtrQaHDr4A==", + "resolved": "6.0.0", + "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "System.Runtime.CompilerServices.Unsafe": "6.0.0" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA==" + "resolved": "6.0.0", + "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==" }, "Microsoft.Extensions.DependencyModel": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "umBECCoMC+sOUgm083yFr8SxTobUOcPFH4AXigdO2xJiszCHAnmeDl4qPphJt+oaJ/XIfV1wOjIts2nRnki61Q==" + "resolved": "6.0.0", + "contentHash": "TD5QHg98m3+QhgEV1YVoNMl5KtBw/4rjfxLHO0e/YV9bPUBDKntApP4xdrVtGgCeQZHVfC2EXIGsdpRNrr87Pg==", + "dependencies": { + "System.Buffers": "4.5.1", + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0", + "System.Text.Json": "6.0.0" + } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==", + "resolved": "6.0.0", + "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==", "dependencies": { - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.FileProviders.Composite": { @@ -487,118 +553,178 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "xji3RrfNug5smkqOtz8Z0UqrDPfhvB61m/2UUO5GDmB4eRov2O1gZIHfnyOR9A0Og3nfBvaIBJEAzHE+N8hXjQ==", + "resolved": "6.0.0", + "contentHash": "9uQbDTqX1MidhoZFUSK1JItt74IapEadFDOIWAlBIKxr3O/ZEWLWkLYGlgUeP1Dkyog6/CB7h1EAU3xADYZ/lA==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "1rkd8UO2qf21biwO7X0hL9uHP7vtfmdv/NLvKgCRHkdz1XnW8zVQJXyEYiN68WYpExgtVWn55QF0qBzgfh1mGg==", + "resolved": "6.0.0", + "contentHash": "QvkL7l0nM8udt3gfyu0Vw8bbCXblxaKOl7c2oBfgGy4LCURRaL9XWZX1FWJrQc43oMokVneVxH38iz+bY1sbhg==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0", - "Microsoft.Extensions.FileSystemGlobbing": "5.0.0", - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ArliS8lGk8sWRtrWpqI8yUVYJpRruPjCDT+EIjrgkA/AAPRctlAkRISVZ334chAKktTLzD1+PK8F5IZpGedSqA==" + "resolved": "6.0.0", + "contentHash": "ip8jnL1aPiaPeKINCqaTEbvBFDmVx9dXQEBZ2HOBRXPD1eabGNqP/bKlsIcp7U2lGxiXd5xIhoFcmY8nM4Hdiw==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==", + "resolved": "6.0.0", + "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0" + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } }, "Microsoft.Extensions.Http": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "kT1ijDKZuSUhBtYoC1sXrmVKP7mA08h9Xrsr4VrS/QOtiKCEtUTTd7dd3XI9dwAb46tZSak13q/zdIcr4jqbyg==", + "resolved": "6.0.0", + "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==", "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.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Identity.Core": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "Z8rMFqOfdGltXoIqCab/3i8v8jHuaEoc9KPuiQmgwX6w0Zs+vg9gQ4w8fwrc97NXhInkOzU3ue0EOeuGNtdc4g==", + "resolved": "6.0.0", + "contentHash": "coWZViIBVb1szN3zMMa6KYP9KmJzOniwQ5tySbiFmVW6Nbdy1KuNDNzIKQcigmfqS4aLWVvNLGCFyDJWYskS8g==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.KeyDerivation": "5.0.11", - "Microsoft.Extensions.Logging": "5.0.0", - "Microsoft.Extensions.Options": "5.0.0" + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Identity.Stores": { "type": "Transitive", - "resolved": "5.0.11", - "contentHash": "PZ5rdwgviEPeVoOX09g/No4+JjcHTDtbUy6M+9i/8qApRG5tUxcvJs9T0/GW6e37Vzo6Zq1WeiJW1mc12v+U1Q==", + "resolved": "6.0.0", + "contentHash": "3TniGyXEuFLQhJoiEReGD4HAdSKRxuQX5FDDg4GwFeeB36en4xQC5MVuWx1riiNwmh2eMtXq/wLdaJLd6JXIig==", "dependencies": { - "Microsoft.Extensions.Caching.Abstractions": "5.0.0", - "Microsoft.Extensions.Identity.Core": "5.0.11", - "Microsoft.Extensions.Logging": "5.0.0" + "Microsoft.Extensions.Caching.Abstractions": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==", + "resolved": "6.0.0", + "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==", "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.DependencyInjection": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "System.Diagnostics.DiagnosticSource": "6.0.0" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w==" + "resolved": "6.0.0", + "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==" }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==", + "resolved": "6.0.0", + "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "Microsoft.Extensions.Primitives": "5.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "280RxNJqOeQqq47aJLy5D9LN61CAWeuRA83gPToQ8B9jl9SNdQ5EXjlfvF66zQI5AXMl+C/3hGnbtIEN+X3mqA==", + "resolved": "6.0.0", + "contentHash": "bXWINbTn0vC0FYc9GaQTISbxhQLAMrvtbuvD9N6JelEaIS/Pr62wUCinrq5bf1WRBGczt1v4wDhxFtVFNcMdUQ==", "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.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Binder": "6.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "Microsoft.Extensions.Primitives": "6.0.0" } }, "Microsoft.Extensions.Options.DataAnnotations": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "f+A/GyRzXziU/2pTHQI1N/GNSqmHUqa3ewsAMa8tbmQDkTnE1srOzLvCUk3mxcZRH1tnfEO3tzvdrlMSImxR7g==", + "resolved": "6.0.0", + "contentHash": "Fvs4plZYQT/iF/JsYwP/pppQRvQC211enBjCoIu/355M+aunlzSyzN/n3wPibyY76794MFLkLVT47JCBc3porg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0", - "Microsoft.Extensions.Options": "5.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "System.ComponentModel.Annotations": "5.0.0" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "cI/VWn9G1fghXrNDagX9nYaaB/nokkZn0HYAawGaELQrl8InSezfe9OnfPZLcJq3esXxygh3hkq2c3qoV3SDyQ==" + "resolved": "6.0.0", + "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } + }, + "Microsoft.Identity.Client": { + "type": "Transitive", + "resolved": "4.22.0", + "contentHash": "GlamU9rs8cSVIx9WSGv5QKpt66KkE+ImxNa/wNZZUJ3knt3PM98T9sOY8B7NcEfhw7NoxU2/0TSOcmnRSJQgqw==" + }, + "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.IdentityModel.JsonWebTokens": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "+7JIww64PkMt7NWFxoe4Y/joeF7TAtA/fQ0b2GFGcagzB59sKkTt/sMZWR6aSZht5YC7SdHi3W6yM1yylRGJCQ==", + "dependencies": { + "Microsoft.IdentityModel.Tokens": "6.8.0" + } + }, + "Microsoft.IdentityModel.Logging": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "Rfh/p4MaN4gkmhPxwbu8IjrmoDncGfHHPh1sTnc0AcM/Oc39/fzC9doKNWvUAjzFb8LqA6lgZyblTrIsX/wDXg==" + }, + "Microsoft.IdentityModel.Protocols": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "OJZx5nPdiH+MEkwCkbJrTAUiO/YzLe0VSswNlDxJsJD9bhOIdXHufh650pfm59YH1DNevp3/bXzukKrG57gA1w==", + "dependencies": { + "Microsoft.IdentityModel.Logging": "6.8.0", + "Microsoft.IdentityModel.Tokens": "6.8.0" + } + }, + "Microsoft.IdentityModel.Protocols.OpenIdConnect": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "X/PiV5l3nYYsodtrNMrNQIVlDmHpjQQ5w48E+o/D5H4es2+4niEyQf3l03chvZGWNzBRhfSstaXr25/Ye4AeYw==", + "dependencies": { + "Microsoft.IdentityModel.Protocols": "6.8.0", + "System.IdentityModel.Tokens.Jwt": "6.8.0" + } + }, + "Microsoft.IdentityModel.Tokens": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "gTqzsGcmD13HgtNePPcuVHZ/NXWmyV+InJgalW/FhWpII1D7V1k0obIseGlWMeA4G+tZfeGMfXr0klnWbMR/mQ==", + "dependencies": { + "Microsoft.CSharp": "4.5.0", + "Microsoft.IdentityModel.Logging": "6.8.0", + "System.Security.Cryptography.Cng": "4.5.0" + } }, "Microsoft.IO.RecyclableMemoryStream": { "type": "Transitive", @@ -607,8 +733,8 @@ }, "Microsoft.NETCore.Platforms": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" + "resolved": "3.1.0", + "contentHash": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", @@ -631,11 +757,8 @@ }, "Microsoft.Win32.SystemEvents": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", - "dependencies": { - "Microsoft.NETCore.Platforms": "5.0.0" - } + "resolved": "6.0.0", + "contentHash": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==" }, "MimeKit": { "type": "Transitive", @@ -712,12 +835,21 @@ }, "NPoco": { "type": "Transitive", - "resolved": "4.0.2", - "contentHash": "/IvVUgQ0VfqgTjUbuY99IQ9JSJwrK4H9tKgKjliAif+4PbPI04/TvY+uZ3fgo8PYTUSKo+AD8JlvOiFOTBe2hA==", + "resolved": "5.3.2", + "contentHash": "3eVBjurbeWT3hSC0/o7wMc+DBPOGMOL4H0boSPn/8URC/9ebzUkB+VDzWLqlQPXFLlFVjCcgh4pK/FhXoJ74yQ==", "dependencies": { - "System.Data.SqlClient": "4.5.0", - "System.Reflection.Emit": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0" + "System.Linq.Async": "5.0.0", + "System.Reflection.Emit.Lightweight": "4.7.0" + } + }, + "NPoco.SqlServer": { + "type": "Transitive", + "resolved": "5.3.2", + "contentHash": "6lkQHcgvDgSfIq0oga7W91QpRU1Mdmm6NgqcT8mgOOyY92ftQaacAZgzMTl8CfhgMYsg0/xzRgqIGq37CnLTxg==", + "dependencies": { + "Microsoft.Data.SqlClient": "3.0.0", + "NPoco": "5.3.2", + "Polly": "7.2.2" } }, "NUglify": { @@ -725,6 +857,11 @@ "resolved": "1.13.12", "contentHash": "+13YE9UjnXx4+NKP+j1Axiz/QAMtK++ZtG61u9iiR2/WzPzr7EfBDOwj+xHNyTEMS9Emq/mCyWaBGjCABhC0HQ==" }, + "Polly": { + "type": "Transitive", + "resolved": "7.2.2", + "contentHash": "E6CeKyS513j7taKAq4q2MESDBvzuzWnR1rQ2Y2zqJvpiVtKMm699Aubb20MUPBDmb0Ov8PmcLHTCVFdCjoy2kA==" + }, "Portable.BouncyCastle": { "type": "Transitive", "resolved": "1.8.10", @@ -739,31 +876,6 @@ "Microsoft.NETCore.Targets": "1.1.0" } }, - "runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", - "dependencies": { - "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", - "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", - "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" - } - }, - "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==" - }, - "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==" - }, - "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": { - "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==" - }, "Serilog": { "type": "Transitive", "resolved": "2.10.0", @@ -801,34 +913,33 @@ "Serilog": "2.3.0" } }, + "Serilog.Expressions": { + "type": "Transitive", + "resolved": "3.3.0", + "contentHash": "wKFAcFSdukSwVYK4LPhcWpY8YmEVTSGqmi3bjagHNw+9wdCseREqGdsYBBTWtkYcugwSHv3F9dtwuFKUM9T2BA==", + "dependencies": { + "Serilog": "2.10.0" + } + }, "Serilog.Extensions.Hosting": { "type": "Transitive", - "resolved": "4.1.2", - "contentHash": "nOpvvYgDoepae4FsXnyX4uSYLO+f+v7aRyNpA0pbpxjdkpw3FWZtfQDe2gnUmZGNYMLWnxMRCPJQ455U/dOUbQ==", + "resolved": "4.2.0", + "contentHash": "gT2keceCmPQR9EX0VpXQZvUgELdfE7yqJ7MOxBhm3WLCblcvRgswEOOTgok/DHObbM15A3V/DtF3VdVDQPIZzQ==", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8", "Microsoft.Extensions.Hosting.Abstractions": "3.1.8", "Microsoft.Extensions.Logging.Abstractions": "3.1.8", "Serilog": "2.10.0", - "Serilog.Extensions.Logging": "3.0.1" + "Serilog.Extensions.Logging": "3.1.0" } }, "Serilog.Extensions.Logging": { "type": "Transitive", - "resolved": "3.0.1", - "contentHash": "U0xbGoZuxJRjE3C5vlCfrf9a4xHTmbrCXKmaA14cHAqiT1Qir0rkV7Xss9GpPJR3MRYH19DFUUqZ9hvWeJrzdQ==", + "resolved": "3.1.0", + "contentHash": "IWfem7wfrFbB3iw1OikqPFNPEzfayvDuN4WP7Ue1AVFskalMByeWk3QbtUXQR34SBkv1EbZ3AySHda/ErDgpcg==", "dependencies": { "Microsoft.Extensions.Logging": "2.0.0", - "Serilog": "2.8.0" - } - }, - "Serilog.Filters.Expressions": { - "type": "Transitive", - "resolved": "2.1.0", - "contentHash": "e0ZaK+NWx6+j71xB5dRXohdreSeHgMJ9mp4giSp83/4UC8VsJWDH+CAT1YVXsyINAR9IQznXllnJ0e5j+BvwzA==", - "dependencies": { - "Serilog": "2.9.0", - "Superpower": "2.3.0" + "Serilog": "2.9.0" } }, "Serilog.Formatting.Compact": { @@ -956,11 +1067,6 @@ "Smidge": "4.0.3" } }, - "Superpower": { - "type": "Transitive", - "resolved": "2.3.0", - "contentHash": "L7ZLWjec5aPWWebsOKM6+8SdobSFMPJFIS8S8TT46oH2iELA70H95spRMeP1yPH9nDL/o+XYP29DPtVwVdzPeA==" - }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", @@ -1023,11 +1129,11 @@ }, "System.Configuration.ConfigurationManager": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "aM7cbfEfVNlEEOj3DsZP+2g9NRwbkyiAv2isQEzw7pnkDg9ekCU2m1cdJLM02Uq691OaCS91tooaxcEn8d0q5w==", + "resolved": "6.0.0", + "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==", "dependencies": { - "System.Security.Cryptography.ProtectedData": "5.0.0", - "System.Security.Permissions": "5.0.0" + "System.Security.Cryptography.ProtectedData": "6.0.0", + "System.Security.Permissions": "6.0.0" } }, "System.Console": { @@ -1057,16 +1163,6 @@ "System.Threading.Tasks": "4.3.0" } }, - "System.Data.SqlClient": { - "type": "Transitive", - "resolved": "4.8.3", - "contentHash": "yERfVLXAY0QbylAgaGLByYN0hFxX28aeEQ0hUgJO+Ntn1AfmWl5HHUoYJA0Yl9HhIUUJHVaS/Sw/RLZr5aaC+A==", - "dependencies": { - "Microsoft.Win32.Registry": "4.7.0", - "System.Security.Principal.Windows": "4.7.0", - "runtime.native.System.Data.SqlClient.sni": "4.7.0" - } - }, "System.Diagnostics.Debug": { "type": "Transitive", "resolved": "4.3.0", @@ -1079,8 +1175,11 @@ }, "System.Diagnostics.DiagnosticSource": { "type": "Transitive", - "resolved": "4.4.1", - "contentHash": "U/KcC19fyLsPN1GLmeU2zQq15MMVcPwMOYPADVo1+WIoJpvMHxrzvl+BLLZwTEZSneGwaPFZ0aWr0nJ7B7LSdA==" + "resolved": "6.0.0", + "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } }, "System.Diagnostics.StackTrace": { "type": "Transitive", @@ -1105,10 +1204,10 @@ }, "System.Drawing.Common": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==", + "resolved": "6.0.0", + "contentHash": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==", "dependencies": { - "Microsoft.Win32.SystemEvents": "5.0.0" + "Microsoft.Win32.SystemEvents": "6.0.0" } }, "System.Dynamic.Runtime": { @@ -1160,6 +1259,15 @@ "System.Runtime.InteropServices": "4.1.0" } }, + "System.IdentityModel.Tokens.Jwt": { + "type": "Transitive", + "resolved": "6.8.0", + "contentHash": "5tBCjAub2Bhd5qmcd0WhR5s354e4oLYa//kOWrkX+6/7ZbDDJjMTfwLSOiZ/MMpWdE4DWPLOfTLOq/juj9CKzA==", + "dependencies": { + "Microsoft.IdentityModel.JsonWebTokens": "6.8.0", + "Microsoft.IdentityModel.Tokens": "6.8.0" + } + }, "System.IO": { "type": "Transitive", "resolved": "4.3.0", @@ -1221,6 +1329,11 @@ "System.Runtime.Extensions": "4.3.0" } }, + "System.Linq.Async": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "cPtIuuH8TIjVHSi2ewwReWGW1PfChPE0LxPIDlfwVcLuTM9GANFTXiMB7k3aC4sk3f0cQU25LNKzx+jZMxijqw==" + }, "System.Linq.Expressions": { "type": "Transitive", "resolved": "4.3.0", @@ -1250,6 +1363,11 @@ "resolved": "4.5.4", "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" }, + "System.Numerics.Vectors": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==" + }, "System.ObjectModel": { "type": "Transitive", "resolved": "4.3.0", @@ -1355,16 +1473,16 @@ }, "System.Runtime.Caching": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "30D6MkO8WF9jVGWZIP0hmCN8l9BTY4LCsAzLIe4xFSXzs+AjDotR7DpSmj27pFskDURzUvqYYY0ikModgBTxWw==", + "resolved": "6.0.0", + "contentHash": "E0e03kUp5X2k+UAoVl6efmI7uU7JRBWi5EIdlQ7cr0NpBGjHG4fWII35PgsBY9T4fJQ8E4QPsL0rKksU9gcL5A==", "dependencies": { - "System.Configuration.ConfigurationManager": "5.0.0" + "System.Configuration.ConfigurationManager": "6.0.0" } }, "System.Runtime.CompilerServices.Unsafe": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==" + "resolved": "6.0.0", + "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" }, "System.Runtime.Extensions": { "type": "Transitive", @@ -1424,12 +1542,8 @@ }, "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" - } + "resolved": "6.0.0", + "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" }, "System.Security.Cryptography.Cng": { "type": "Transitive", @@ -1450,8 +1564,8 @@ }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "HGxMSAFAPLNoxBvSfW08vHde0F9uh7BjASwu6JF9JnXuEPhCY3YUqURn0+bQV/4UWeaqymmrHWV+Aw9riQCtCA==" + "resolved": "6.0.0", + "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==" }, "System.Security.Cryptography.Xml": { "type": "Transitive", @@ -1464,11 +1578,11 @@ }, "System.Security.Permissions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "uE8juAhEkp7KDBCdjDIE3H9R1HJuEHqeqX8nLX9gmYKWwsqk3T5qZlPx8qle5DPKimC/Fy3AFTdV7HamgCh9qQ==", + "resolved": "6.0.0", + "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==", "dependencies": { - "System.Security.AccessControl": "5.0.0", - "System.Windows.Extensions": "5.0.0" + "System.Security.AccessControl": "6.0.0", + "System.Windows.Extensions": "6.0.0" } }, "System.Security.Principal.Windows": { @@ -1488,22 +1602,28 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.5.1", - "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==", + "resolved": "4.7.0", + "contentHash": "aeu4FlaUTemuT1qOd1MyU4T516QR4Fy+9yDbwWMPHOHy7U8FD6SgTzdZFO7gHcfAPHtECqInbwklVvUK4RHcNg==", "dependencies": { - "Microsoft.NETCore.Platforms": "2.1.2", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" + "Microsoft.NETCore.Platforms": "3.1.0" } }, "System.Text.Encodings.Web": { "type": "Transitive", - "resolved": "5.0.1", - "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==" + "resolved": "6.0.0", + "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + } }, "System.Text.Json": { "type": "Transitive", - "resolved": "4.6.0", - "contentHash": "4F8Xe+JIkVoDJ8hDAZ7HqLkjctN/6WItJIzQaifBwClC7wmoLSda/Sv2i6i1kycqDb3hWF4JCVbpAweyOKHEUA==" + "resolved": "6.0.0", + "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0", + "System.Text.Encodings.Web": "6.0.0" + } }, "System.Text.RegularExpressions": { "type": "Transitive", @@ -1543,8 +1663,8 @@ }, "System.Threading.Tasks.Dataflow": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "NBp0zSAMZp4muDje6XmbDfmkqw9+qsDCHp+YMEtnVgHEjQZ3Q7MzFTTp3eHqpExn4BwMrS7JkUVOTcVchig4Sw==" + "resolved": "6.0.0", + "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" }, "System.Threading.Tasks.Extensions": { "type": "Transitive", @@ -1568,66 +1688,65 @@ }, "System.Windows.Extensions": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==", + "resolved": "6.0.0", + "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==", "dependencies": { - "System.Drawing.Common": "5.0.0" + "System.Drawing.Common": "6.0.0" } }, "Umbraco.Cms.Core": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "uO0iy1YlFn8PIx5ZwhE1Tzy/UkV7J2I+pkrLJqjquJj3esl2bf7IC+PmlLb96BIYEjlS8f4SAMT7y3vRhjG5tg==", - "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.FileProviders.Embedded": "5.0.11", - "Microsoft.Extensions.FileProviders.Physical": "5.0.0", - "Microsoft.Extensions.Hosting.Abstractions": "5.0.0", - "Microsoft.Extensions.Logging": "5.0.0", - "Microsoft.Extensions.Options": "5.0.0", - "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0", - "Microsoft.Extensions.Options.DataAnnotations": "5.0.0", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "u5vmG6XnVBCpCaR86zNfYuP8Ze5Wly352EzEdUSY+FtKK6nWl9S/0udDnDbh5lKQ0EJ8+ID74aYZ2fL6HfhYAQ==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.FileProviders.Embedded": "6.0.0", + "Microsoft.Extensions.FileProviders.Physical": "6.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Logging": "6.0.0", + "Microsoft.Extensions.Options": "6.0.0", + "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", + "Microsoft.Extensions.Options.DataAnnotations": "6.0.0", "System.ComponentModel.Annotations": "5.0.0", "System.Reflection.Emit.Lightweight": "4.7.0", - "System.Runtime.Caching": "5.0.0" + "System.Runtime.Caching": "6.0.0" } }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "oCf8bmAZw5KjTGnIxEGPTGxTRvTO/o97ogy5FdLTOB/uwWlNepAQy/hXl7hSIooqhap7WpsUAaYkIQP/4nSwmw==", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "s4Txm5sVZzzVMeVWGQbJ2mq/0AvHXcbQ9Kv53mbABIGizFt53+rJBYl0gaayUg5k+Sbra/5bc2b6qfgLw3kJxw==", "dependencies": { "Examine": "2.0.1", - "Umbraco.Cms.Core": "9.3.0", - "Umbraco.Cms.Infrastructure": "9.3.0" + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "R+8ld2tkZWjgW4LGjnvt8F3jGNNUtbRRHxO4n77UNboU9kASf6XzRLJkBSU0X8sxwsnxVmyu6DQxK5wPLSENjQ==", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "/yB/HZgv0x5EuwZWUa+9etCIQdAUc6idmNdsk+/6BDfQRAl4rUUygJn/5qTAZLOzZDn3YBL6V2pqhGHvCiAe2Q==", "dependencies": { "Examine.Core": "2.0.1", - "HtmlAgilityPack": "1.11.37", - "IPNetwork2": "2.5.362", + "HtmlAgilityPack": "1.11.38", + "IPNetwork2": "2.5.366", "MailKit": "2.15.0", "Markdown": "2.2.1", "Microsoft.CSharp": "4.7.0", - "Microsoft.CodeAnalysis.CSharp": "3.11.0", - "Microsoft.Extensions.Configuration.Abstractions": "5.0.0", - "Microsoft.Extensions.Configuration.Json": "5.0.0", - "Microsoft.Extensions.DependencyInjection": "5.0.2", - "Microsoft.Extensions.Http": "5.0.0", - "Microsoft.Extensions.Identity.Stores": "5.0.11", - "Microsoft.SourceLink.GitHub": "1.0.0", + "Microsoft.CodeAnalysis.CSharp": "4.0.1", + "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", + "Microsoft.Extensions.Configuration.Json": "6.0.0", + "Microsoft.Extensions.DependencyInjection": "6.0.0", + "Microsoft.Extensions.Http": "6.0.0", + "Microsoft.Extensions.Identity.Stores": "6.0.0", "MiniProfiler.Shared": "4.2.22", - "NPoco": "4.0.2", + "NPoco.SqlServer": "5.3.2", "Newtonsoft.Json": "13.0.1", "Serilog": "2.10.0", "Serilog.Enrichers.Process": "2.0.2", "Serilog.Enrichers.Thread": "3.1.0", - "Serilog.Extensions.Hosting": "4.1.2", - "Serilog.Filters.Expressions": "2.1.0", + "Serilog.Expressions": "3.3.0", + "Serilog.Extensions.Hosting": "4.2.0", "Serilog.Formatting.Compact": "1.1.0", "Serilog.Formatting.Compact.Reader": "1.0.5", "Serilog.Settings.Configuration": "3.3.0", @@ -1635,25 +1754,24 @@ "Serilog.Sinks.File": "5.0.0", "Serilog.Sinks.Map": "1.0.2", "SixLabors.ImageSharp": "1.0.4", - "System.Data.SqlClient": "4.8.3", "System.IO.FileSystem.AccessControl": "5.0.0", - "System.Text.Encodings.Web": "5.0.1", - "System.Threading.Tasks.Dataflow": "5.0.0", - "Umbraco.Cms.Core": "9.3.0", + "System.Text.Encodings.Web": "6.0.0", + "System.Threading.Tasks.Dataflow": "6.0.0", + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", "ncrontab": "3.3.1" } }, "Umbraco.Cms.PublishedCache.NuCache": { "type": "Transitive", - "resolved": "9.3.0", - "contentHash": "dGuSfmPS3s1/PlVZxI2jne9qjYpfvCW0cfcjREcY7SwmKx3OKqA/p/l40/esP9lE4JujrqbiBiVb1DG8sq2sbg==", + "resolved": "10.0.0-preview20220405.88864", + "contentHash": "174sloAV7Ur8RJ4gkzmodaN8NW6ZaRF4x/caiNGSWnExUFivVfHBe28wWgbyiLp7j8EaxXIptnNXoA1K/wIunA==", "dependencies": { "CSharpTest.Net.Collections-NetStd2": "14.906.1403.1084", "K4os.Compression.LZ4": "1.2.15", "MessagePack": "2.3.85", "Newtonsoft.Json": "13.0.1", - "Umbraco.Cms.Core": "9.3.0", - "Umbraco.Cms.Infrastructure": "9.3.0" + "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" } } } From 87cca72bad32f91b1771cedc15083bae2f94f586 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 13 Apr 2022 22:54:27 +0200 Subject: [PATCH 14/26] Add comment about CLSCompliantAttribute --- .../Properties/AssemblyInfo.cs | 3 ++- src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/Properties/AssemblyInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/Properties/AssemblyInfo.cs index 55acad6..0e22017 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Properties/AssemblyInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/Properties/AssemblyInfo.cs @@ -1,3 +1,4 @@ using System; -[assembly:CLSCompliant(false)] +// This assembly exposes types that are not CLS-compliant +[assembly: CLSCompliant(false)] diff --git a/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs b/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs index 55acad6..0e22017 100644 --- a/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs +++ b/src/Umbraco.StorageProviders/Properties/AssemblyInfo.cs @@ -1,3 +1,4 @@ using System; -[assembly:CLSCompliant(false)] +// This assembly exposes types that are not CLS-compliant +[assembly: CLSCompliant(false)] From 77e2dc0b61d6a6e1bf174adeb32397b4ba7f8b31 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 13 Apr 2022 23:07:02 +0200 Subject: [PATCH 15/26] Remove redundant code and calls in DI extension methods --- .../AzureBlobFileSystemExtensions.cs | 97 ++++++---------- .../AzureBlobMediaFileSystemExtensions.cs | 109 ++++-------------- .../CdnMediaUrlProviderExtensions.cs | 70 +++++------ 3 files changed, 90 insertions(+), 186 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs index 96f72c9..87bb965 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs @@ -1,6 +1,7 @@ using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; using Umbraco.StorageProviders.AzureBlob.IO; // ReSharper disable once CheckNamespace @@ -12,13 +13,28 @@ namespace Umbraco.Cms.Core.DependencyInjection /// public static class AzureBlobFileSystemExtensions { + internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, string name, Action>? configure = null) + { + ArgumentNullException.ThrowIfNull(builder); + ArgumentNullException.ThrowIfNull(name); + + builder.Services.TryAddSingleton(); + + var optionsBuilder = builder.Services.AddOptions(name) + .BindConfiguration($"Umbraco:Storage:AzureBlob:{name}") + .ValidateDataAnnotations(); + + configure?.Invoke(optionsBuilder); + + return builder; + } + /// /// Registers a in the , with it's configuration /// loaded from Umbraco:Storage:AzureBlob:{name} where {name} is the value of the parameter. /// /// The . /// The name of the file system. - /// The path to map the filesystem to. /// /// The . /// @@ -26,22 +42,8 @@ public static class AzureBlobFileSystemExtensions /// or /// name /// Value cannot be null or whitespace. - path - public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, string path) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (name == null) throw new ArgumentNullException(nameof(name)); - if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(path)); - - builder.Services.TryAddSingleton(); - - builder.Services - .AddOptions(name) - .BindConfiguration($"Umbraco:Storage:AzureBlob:{name}") - .Configure(options => options.VirtualPath = path) - .ValidateDataAnnotations(); - - return builder; - } + public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name) + => builder.AddInternal(name); /// /// Registers a in the , with it's configuration @@ -49,32 +51,12 @@ public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builde /// /// The . /// The name of the file system. - /// The path to map the filesystem to. /// An action used to configure the . /// /// The . /// - /// builder - /// or - /// name - /// or - /// configure - /// Value cannot be null or whitespace. - path - public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, string path, Action configure) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (name == null) throw new ArgumentNullException(nameof(name)); - if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(path)); - if (configure == null) throw new ArgumentNullException(nameof(configure)); - - AddAzureBlobFileSystem(builder, name, path); - - builder.Services - .AddOptions(name) - .Configure(configure); - - return builder; - } + public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action configure) + => builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure)); /// /// Registers a in the , with it's configuration @@ -82,31 +64,26 @@ public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builde /// /// The . /// The name of the file system. - /// The path to map the filesystem to. /// An action used to configure the . /// /// The . /// - /// builder - /// or - /// name - /// or - /// configure - /// Value cannot be null or whitespace. - path - public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, string path, Action configure) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (name == null) throw new ArgumentNullException(nameof(name)); - if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("Value cannot be null or whitespace.", nameof(path)); - if (configure == null) throw new ArgumentNullException(nameof(configure)); - - AddAzureBlobFileSystem(builder, name, path); - - builder.Services - .AddOptions(name) - .Configure(configure); + public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action configure) + => builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure)); - return builder; - } + /// + /// Registers a in the , with it's configuration + /// loaded from Umbraco:Storage:AzureBlob:{name} where {name} is the value of the parameter. + /// + /// A dependency used by the configure action. + /// The . + /// The name of the file system. + /// An action used to configure the . + /// + /// The . + /// + public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action configure) + where TDep : class + => builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure)); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs index acfdf40..da0f5f4 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs @@ -2,7 +2,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using SixLabors.ImageSharp.Web.Caching; -using SixLabors.ImageSharp.Web.Providers; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Infrastructure.DependencyInjection; using Umbraco.Extensions; @@ -18,39 +17,15 @@ namespace Umbraco.Cms.Core.DependencyInjection /// public static class AzureBlobMediaFileSystemExtensions { - /// - /// Registers an and it's dependencies configured for media. - /// - /// The . - /// - /// The . - /// - /// - /// This will also configure the ImageSharp.Web middleware to use Azure Blob Storage to retrieve the original and cache the processed images. - /// - /// builder - public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder) - => builder.AddAzureBlobMediaFileSystem(true); - - /// - /// Registers an and it's dependencies configured for media. - /// - /// The . - /// If set to true also configures Azure Blob Storage for the image cache. - /// - /// The . - /// - /// builder - public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache) + internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action>? configure = null) { - if (builder == null) throw new ArgumentNullException(nameof(builder)); + ArgumentNullException.ThrowIfNull(builder); - builder.AddAzureBlobFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName, "~/media", - (options, provider) => - { - var globalSettingsOptions = provider.GetRequiredService>(); - options.VirtualPath = globalSettingsOptions.Value.UmbracoMediaPath; - }); + builder.AddInternal(AzureBlobFileSystemOptions.MediaFileSystemName, optionsBuilder => + { + optionsBuilder.Configure>((options, globalSettings) => options.VirtualPath = globalSettings.Value.UmbracoMediaPath); + configure?.Invoke(optionsBuilder); + }); // ImageSharp image cache if (useAzureBlobImageCache) @@ -58,96 +33,58 @@ public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder b builder.Services.AddUnique(); } - builder.SetMediaFileSystem(provider => provider.GetRequiredService() - .GetFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName)); + builder.SetMediaFileSystem(provider => provider.GetRequiredService().GetFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName)); return builder; } /// - /// Registers a and it's dependencies configured for media. + /// Registers an and it's dependencies configured for media. /// /// The . - /// An action used to configure the . + /// If set to true also configures Azure Blob Storage for the image cache. /// /// The . /// - /// - /// This will also configure the ImageSharp.Web middleware to use Azure Blob Storage to retrieve the original and cache the processed images. - /// - /// builder - /// or - /// configure - public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action configure) - => builder.AddAzureBlobMediaFileSystem(true, configure); + public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache = true) + => builder.AddInternal(useAzureBlobImageCache); /// /// Registers a and it's dependencies configured for media. /// /// The . - /// If set to true also configures Azure Blob Storage for the image cache. /// An action used to configure the . + /// If set to true also configures Azure Blob Storage for the image cache. /// /// The . /// - /// builder - /// or - /// configure - public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action configure) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (configure == null) throw new ArgumentNullException(nameof(configure)); - - AddAzureBlobMediaFileSystem(builder, useAzureBlobImageCache); - - builder.Services - .AddOptions(AzureBlobFileSystemOptions.MediaFileSystemName) - .Configure(configure); - - return builder; - } + public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action configure, bool useAzureBlobImageCache = true) + => builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure)); /// /// Registers a and it's dependencies configured for media. /// /// The . /// An action used to configure the . + /// If set to true also configures Azure Blob Storage for the image cache. /// /// The . /// - /// - /// This will also configure the ImageSharp.Web middleware to use Azure Blob Storage to retrieve the original and cache the processed images. - /// - /// builder - /// or - /// configure - public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action configure) - => builder.AddAzureBlobMediaFileSystem(true, configure); + public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, Action configure, bool useAzureBlobImageCache = true) + => builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure)); /// /// Registers a and it's dependencies configured for media. /// + /// A dependency used by the configure action. /// The . - /// If set to true also configures Azure Blob Storage for the image cache. /// An action used to configure the . + /// If set to true also configures Azure Blob Storage for the image cache. /// /// The . /// - /// builder - /// or - /// configure - public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action configure) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (configure == null) throw new ArgumentNullException(nameof(configure)); - - AddAzureBlobMediaFileSystem(builder, useAzureBlobImageCache); - - builder.Services - .AddOptions(AzureBlobFileSystemOptions.MediaFileSystemName) - .Configure(configure); - - return builder; - } + public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, Action configure, bool useAzureBlobImageCache = true) + where TDep : class + => builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure)); } } diff --git a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs index f306670..1fac339 100644 --- a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs +++ b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs @@ -1,5 +1,6 @@ using System; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Umbraco.StorageProviders; // ReSharper disable once CheckNamespace @@ -11,27 +12,31 @@ namespace Umbraco.Cms.Core.DependencyInjection /// public static class CdnMediaUrlProviderExtensions { - /// - /// Registers and configures the . - /// - /// The . - /// - /// The . - /// - /// builder - public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder) + internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, Action>? configure = null) { - if (builder == null) throw new ArgumentNullException(nameof(builder)); + ArgumentNullException.ThrowIfNull(builder); builder.MediaUrlProviders().Insert(); - builder.Services.AddOptions() + var optionsBuilder = builder.Services.AddOptions() .BindConfiguration("Umbraco:Storage:Cdn") .ValidateDataAnnotations(); + configure?.Invoke(optionsBuilder); + return builder; } + /// + /// Registers and configures the . + /// + /// The . + /// + /// The . + /// + public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder) + => builder.AddInternal(); + /// /// Registers and configures the . /// @@ -40,22 +45,8 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde /// /// The . /// - /// builder - /// or - /// configure public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder, Action configure) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (configure == null) throw new ArgumentNullException(nameof(configure)); - - AddCdnMediaUrlProvider(builder); - - builder.Services - .AddOptions() - .Configure(configure); - - return builder; - } + => builder.AddInternal(optionsBuilder => optionsBuilder.Configure(configure)); /// /// Registers and configures the . @@ -65,21 +56,20 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde /// /// The . /// - /// builder - /// or - /// configure public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder, Action configure) - { - if (builder == null) throw new ArgumentNullException(nameof(builder)); - if (configure == null) throw new ArgumentNullException(nameof(configure)); - - AddCdnMediaUrlProvider(builder); + => builder.AddInternal(optionsBuilder => optionsBuilder.Configure(configure)); - builder.Services - .AddOptions() - .Configure(configure); - - return builder; - } + /// + /// Registers and configures the . + /// + /// A dependency used by the configure action. + /// The . + /// An action used to configure the . + /// + /// The . + /// + public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder, Action configure) + where TDep : class + => builder.AddInternal(optionsBuilder => optionsBuilder.Configure(configure)); } } From 01bb12f98f977b79064e9141fb8c6724848b704f Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 13 Apr 2022 23:09:49 +0200 Subject: [PATCH 16/26] Ensure RemoveMediaFromPath also removes customized media path --- .../CdnMediaUrlProvider.cs | 54 +++++++++++++------ .../CdnMediaUrlProviderOptions.cs | 6 +-- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs index dfdbc32..5750880 100644 --- a/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs +++ b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs @@ -1,5 +1,7 @@ using System; using Microsoft.Extensions.Options; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.PropertyEditors; using Umbraco.Cms.Core.Routing; @@ -10,48 +12,66 @@ namespace Umbraco.StorageProviders /// A that returns a CDN URL for a media item. /// /// - public class CdnMediaUrlProvider : DefaultMediaUrlProvider + public sealed class CdnMediaUrlProvider : DefaultMediaUrlProvider { - private bool _removeMediaFromPath; private Uri _cdnUrl; + private bool _removeMediaFromPath; + private string _mediaPath; /// /// Creates a new instance of . /// /// The options. + /// The global settings. + /// The hosting environment. /// The media path generators. /// The URI utility. /// options - public CdnMediaUrlProvider(IOptionsMonitor options, MediaUrlGeneratorCollection mediaPathGenerators, UriUtility uriUtility) + public CdnMediaUrlProvider(IOptionsMonitor options, IOptionsMonitor globalSettings, IHostingEnvironment hostingEnvironment, MediaUrlGeneratorCollection mediaPathGenerators, UriUtility uriUtility) : base(mediaPathGenerators, uriUtility) { - if (options == null) throw new ArgumentNullException(nameof(options)); + ArgumentNullException.ThrowIfNull(options); + ArgumentNullException.ThrowIfNull(globalSettings); + ArgumentNullException.ThrowIfNull(hostingEnvironment); _cdnUrl = options.CurrentValue.Url; _removeMediaFromPath = options.CurrentValue.RemoveMediaFromPath; + _mediaPath = hostingEnvironment.ToAbsolute(globalSettings.CurrentValue.UmbracoMediaPath).TrimEnd('/'); + + options.OnChange((options, name) => + { + if (name == Options.DefaultName) + { + _removeMediaFromPath = options.RemoveMediaFromPath; + _cdnUrl = options.Url; + } + }); - options.OnChange(OptionsOnChange); + globalSettings.OnChange((options, name) => + { + if (name == Options.DefaultName) + { + _mediaPath = hostingEnvironment.ToAbsolute(options.UmbracoMediaPath).TrimEnd('/'); + } + }); } /// public override UrlInfo? GetMediaUrl(IPublishedContent content, string propertyAlias, UrlMode mode, string culture, Uri current) { var mediaUrl = base.GetMediaUrl(content, propertyAlias, UrlMode.Relative, culture, current); - if (mediaUrl == null) return null; - - return mediaUrl.IsUrl switch + if (mediaUrl?.IsUrl == true) { - false => mediaUrl, - _ => UrlInfo.Url($"{_cdnUrl}/{mediaUrl.Text[(_removeMediaFromPath ? "/media/" : "/").Length..]}", culture) - }; - } + string url = mediaUrl.Text; + if (_removeMediaFromPath && url.StartsWith(_mediaPath, StringComparison.OrdinalIgnoreCase)) + { + url = url[_mediaPath.Length..]; + } - private void OptionsOnChange(CdnMediaUrlProviderOptions options, string name) - { - if (name != Options.DefaultName) return; + return UrlInfo.Url(_cdnUrl + url, culture); + } - _removeMediaFromPath = options.RemoveMediaFromPath; - _cdnUrl = options.Url; + return mediaUrl; } } } diff --git a/src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs b/src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs index fd9f7c1..703de01 100644 --- a/src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs +++ b/src/Umbraco.StorageProviders/CdnMediaUrlProviderOptions.cs @@ -6,7 +6,7 @@ namespace Umbraco.StorageProviders /// /// The CDN media URL provider options. /// - public class CdnMediaUrlProviderOptions + public sealed class CdnMediaUrlProviderOptions { /// /// Gets or sets the CDN media root URL. @@ -18,10 +18,10 @@ public class CdnMediaUrlProviderOptions public Uri Url { get; set; } = null!; /// - /// Gets or sets a value indicating whether to remove /media/ from the path, defaults to true. + /// Gets or sets a value indicating whether to remove the from the path, defaults to true. /// /// - /// true if /media/ needs to be removed from the path; otherwise, false. + /// true if the media path needs to be removed from the path; otherwise, false. /// public bool RemoveMediaFromPath { get; set; } = true; } From 016f849dbbacf7083bd0213ffd61ce4a3863d178 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 13 Apr 2022 23:12:42 +0200 Subject: [PATCH 17/26] Code cleanup (seal classes, parameter null checking, expression bodies) --- .../AzureBlobDirectoryContents.cs | 8 +- .../AzureBlobFileProvider.cs | 24 +--- .../AzureBlobItemInfo.cs | 14 +- .../AzureBlobPrefixInfo.cs | 7 +- .../IO/AzureBlobFileSystem.cs | 126 ++++++++++-------- .../IO/AzureBlobFileSystemOptions.cs | 2 +- .../IO/AzureBlobFileSystemProvider.cs | 8 +- .../Imaging/AzureBlobFileSystemImageCache.cs | 26 ++-- 8 files changed, 102 insertions(+), 113 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs index 88a98ac..c3aef93 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs @@ -12,10 +12,10 @@ namespace Umbraco.StorageProviders.AzureBlob /// Represents a virtual hierarchy of Azure Blob Storage blobs. /// /// - public class AzureBlobDirectoryContents : IDirectoryContents + public sealed class AzureBlobDirectoryContents : IDirectoryContents { private readonly BlobContainerClient _containerClient; - private readonly IList _items; + private readonly IReadOnlyCollection _items; /// public bool Exists { get; } @@ -28,12 +28,12 @@ public class AzureBlobDirectoryContents : IDirectoryContents /// containerClient /// or /// items - public AzureBlobDirectoryContents(BlobContainerClient containerClient, IList items) + public AzureBlobDirectoryContents(BlobContainerClient containerClient, IReadOnlyCollection items) { _containerClient = containerClient ?? throw new ArgumentNullException(nameof(containerClient)); _items = items ?? throw new ArgumentNullException(nameof(items)); - Exists = _items.Count > 0; + Exists = items.Count > 0; } /// diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs index 98a5fa7..cc91b13 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs @@ -1,5 +1,5 @@ using System; -using System.Collections.Generic; +using System.Linq; using System.Net; using Azure; using Azure.Storage.Blobs; @@ -16,7 +16,7 @@ namespace Umbraco.StorageProviders.AzureBlob /// Represents a read-only Azure Blob Storage file provider. /// /// - public class AzureBlobFileProvider : IFileProvider + public sealed class AzureBlobFileProvider : IFileProvider { private readonly BlobContainerClient _containerClient; private readonly string? _containerRootPath; @@ -40,10 +40,7 @@ public AzureBlobFileProvider(BlobContainerClient containerClient, string? contai /// options public AzureBlobFileProvider(AzureBlobFileSystemOptions options) { - if (options is null) - { - throw new ArgumentNullException(nameof(options)); - } + ArgumentNullException.ThrowIfNull(options); _containerClient = new BlobContainerClient(options.ConnectionString, options.ContainerName); _containerRootPath = options.ContainerRootPath?.Trim(Constants.CharArrays.ForwardSlash); @@ -55,18 +52,11 @@ public IDirectoryContents GetDirectoryContents(string subpath) var path = GetFullPath(subpath); // Get all blobs and iterate to fetch all pages - var blobs = new List(); - foreach (var item in _containerClient.GetBlobsByHierarchy(delimiter: "/", prefix: path)) - { - blobs.Add(item); - } - - if (blobs.Count == 0) - { - return NotFoundDirectoryContents.Singleton; - } + var blobs = _containerClient.GetBlobsByHierarchy(delimiter: "/", prefix: path).ToList(); - return new AzureBlobDirectoryContents(_containerClient, blobs); + return blobs.Count == 0 + ? NotFoundDirectoryContents.Singleton + : new AzureBlobDirectoryContents(_containerClient, blobs); } /// diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs index b48938a..b4b9ecd 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs @@ -10,7 +10,7 @@ namespace Umbraco.StorageProviders.AzureBlob /// Represents an Azure Blob Storage blob item. /// /// - public class AzureBlobItemInfo : IFileInfo + public sealed class AzureBlobItemInfo : IFileInfo { private readonly BlobClient _blobClient; @@ -37,7 +37,7 @@ public class AzureBlobItemInfo : IFileInfo /// /// The blob client. /// blobClient - protected AzureBlobItemInfo(BlobClient blobClient) + private AzureBlobItemInfo(BlobClient blobClient) { _blobClient = blobClient ?? throw new ArgumentNullException(nameof(blobClient)); @@ -53,10 +53,7 @@ protected AzureBlobItemInfo(BlobClient blobClient) public AzureBlobItemInfo(BlobClient blobClient, BlobProperties properties) : this(blobClient) { - if (properties == null) - { - throw new ArgumentNullException(nameof(properties)); - } + ArgumentNullException.ThrowIfNull(properties); LastModified = properties.LastModified; Length = properties.ContentLength; @@ -71,10 +68,7 @@ public AzureBlobItemInfo(BlobClient blobClient, BlobProperties properties) public AzureBlobItemInfo(BlobClient blobClient, BlobItemProperties properties) : this(blobClient) { - if (properties == null) - { - throw new ArgumentNullException(nameof(properties)); - } + ArgumentNullException.ThrowIfNull(properties); LastModified = properties.LastModified.GetValueOrDefault(); Length = properties.ContentLength.GetValueOrDefault(-1); diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs index 0330a1a..406c98e 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs @@ -8,7 +8,7 @@ namespace Umbraco.StorageProviders.AzureBlob /// Represents an Azure Blob Storage prefix. /// /// - public class AzureBlobPrefixInfo : IFileInfo + public sealed class AzureBlobPrefixInfo : IFileInfo { /// public bool Exists => true; @@ -34,10 +34,7 @@ public class AzureBlobPrefixInfo : IFileInfo /// The prefix. public AzureBlobPrefixInfo(string prefix) { - if (prefix == null) - { - throw new ArgumentNullException(nameof(prefix)); - } + ArgumentNullException.ThrowIfNull(prefix); Name = ParseName(prefix); } diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs index 85bf7c0..e344242 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs @@ -16,7 +16,7 @@ namespace Umbraco.StorageProviders.AzureBlob.IO { /// - public class AzureBlobFileSystem : IAzureBlobFileSystem, IFileProviderFactory + public sealed class AzureBlobFileSystem : IAzureBlobFileSystem, IFileProviderFactory { private readonly string _rootUrl; private readonly string _containerRootPath; @@ -33,8 +33,8 @@ public class AzureBlobFileSystem : IAzureBlobFileSystem, IFileProviderFactory /// The content type provider. public AzureBlobFileSystem(AzureBlobFileSystemOptions options, IHostingEnvironment hostingEnvironment, IIOHelper ioHelper, IContentTypeProvider contentTypeProvider) { - if (options == null) throw new ArgumentNullException(nameof(options)); - if (hostingEnvironment == null) throw new ArgumentNullException(nameof(hostingEnvironment)); + ArgumentNullException.ThrowIfNull(options); + ArgumentNullException.ThrowIfNull(hostingEnvironment); _rootUrl = EnsureUrlSeparatorChar(hostingEnvironment.ToAbsolute(options.VirtualPath)).TrimEnd('/'); _containerRootPath = options.ContainerRootPath ?? _rootUrl; @@ -53,10 +53,7 @@ public AzureBlobFileSystem(AzureBlobFileSystemOptions options, IHostingEnvironme /// The container root path (uses the root URL if not set). public AzureBlobFileSystem(string rootUrl, BlobContainerClient blobContainerClient, IIOHelper ioHelper, IContentTypeProvider contentTypeProvider, string? containerRootPath = null) { - if (rootUrl is null) - { - throw new ArgumentNullException(nameof(rootUrl)); - } + ArgumentNullException.ThrowIfNull(rootUrl); _rootUrl = EnsureUrlSeparatorChar(rootUrl).TrimEnd('/'); _containerRootPath = containerRootPath ?? _rootUrl; @@ -68,7 +65,7 @@ public AzureBlobFileSystem(string rootUrl, BlobContainerClient blobContainerClie /// public IEnumerable GetDirectories(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return ListBlobs(GetDirectoryPath(path)) .Where(x => x.IsPrefix) @@ -78,7 +75,7 @@ public IEnumerable GetDirectories(string path) /// public void DeleteDirectory(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); DeleteDirectory(path, true); } @@ -86,18 +83,25 @@ public void DeleteDirectory(string path) /// public void DeleteDirectory(string path, bool recursive) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); foreach (var blob in ListBlobs(GetDirectoryPath(path))) + { if (blob.IsPrefix) + { DeleteDirectory(blob.Prefix, true); - else if (blob.IsBlob) _container.GetBlobClient(blob.Blob.Name).DeleteIfExists(); + } + else if (blob.IsBlob) + { + _container.GetBlobClient(blob.Blob.Name).DeleteIfExists(); + } + } } /// public bool DirectoryExists(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetBlobClient(GetDirectoryPath(path)).Exists(); } @@ -105,8 +109,8 @@ public bool DirectoryExists(string path) /// public void AddFile(string path, Stream stream) { - if (path == null) throw new ArgumentNullException(nameof(path)); - if (stream == null) throw new ArgumentNullException(nameof(stream)); + ArgumentNullException.ThrowIfNull(path); + ArgumentNullException.ThrowIfNull(stream); AddFile(path, stream, true); } @@ -114,50 +118,64 @@ public void AddFile(string path, Stream stream) /// public void AddFile(string path, Stream stream, bool overrideIfExists) { - if (path == null) throw new ArgumentNullException(nameof(path)); - if (stream == null) throw new ArgumentNullException(nameof(stream)); + ArgumentNullException.ThrowIfNull(path); + ArgumentNullException.ThrowIfNull(stream); var blob = GetBlobClient(path); if (!overrideIfExists && blob.Exists()) + { throw new InvalidOperationException($"A file at path '{path}' already exists"); + } var headers = new BlobHttpHeaders(); + if (_contentTypeProvider.TryGetContentType(path, out var contentType)) + { + headers.ContentType = contentType; + } - if (_contentTypeProvider.TryGetContentType(path, out var contentType)) headers.ContentType = contentType; + var conditions = overrideIfExists ? null : new BlobRequestConditions + { + IfNoneMatch = ETag.All + }; - blob.Upload(stream, headers, - conditions: overrideIfExists ? null : new BlobRequestConditions { IfNoneMatch = ETag.All }); + blob.Upload(stream, headers, conditions: conditions); } /// public void AddFile(string path, string physicalPath, bool overrideIfExists = true, bool copy = false) { - if (path == null) throw new ArgumentNullException(nameof(path)); - if (physicalPath == null) throw new ArgumentNullException(nameof(physicalPath)); + ArgumentNullException.ThrowIfNull(path); + ArgumentNullException.ThrowIfNull(physicalPath); var destinationBlob = GetBlobClient(path); if (!overrideIfExists && destinationBlob.Exists()) + { throw new InvalidOperationException($"A file at path '{path}' already exists"); + } var sourceBlob = GetBlobClient(physicalPath); - - var copyFromUriOperation = destinationBlob.StartCopyFromUri(sourceBlob.Uri, - destinationConditions: overrideIfExists - ? null - : new BlobRequestConditions { IfNoneMatch = ETag.All }); - + var destinationConditions = overrideIfExists ? null : new BlobRequestConditions + { + IfNoneMatch = ETag.All + }; + var copyFromUriOperation = destinationBlob.StartCopyFromUri(sourceBlob.Uri, destinationConditions: destinationConditions); if (copyFromUriOperation?.HasCompleted == false) + { Task.Run(async () => await copyFromUriOperation.WaitForCompletionAsync().ConfigureAwait(false)) .GetAwaiter() .GetResult(); + } - if (!copy) sourceBlob.DeleteIfExists(); + if (!copy) + { + sourceBlob.DeleteIfExists(); + } } /// public IEnumerable GetFiles(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetFiles(path, null); } @@ -165,13 +183,9 @@ public IEnumerable GetFiles(string path) /// public IEnumerable GetFiles(string path, string? filter) { - if (path == null) throw new ArgumentNullException(nameof(path)); - if (filter == null) throw new ArgumentNullException(nameof(filter)); - - var files = ListBlobs(GetDirectoryPath(path)) - .Where(x => x.IsBlob) - .Select(x => x.Blob.Name); + ArgumentNullException.ThrowIfNull(path); + var files = ListBlobs(GetDirectoryPath(path)).Where(x => x.IsBlob).Select(x => x.Blob.Name); if (!string.IsNullOrEmpty(filter) && filter != "*.*") { // TODO: Might be better to use a globbing library @@ -185,7 +199,7 @@ public IEnumerable GetFiles(string path, string? filter) /// public Stream OpenFile(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetBlobClient(path).OpenRead(); } @@ -193,7 +207,7 @@ public Stream OpenFile(string path) /// public void DeleteFile(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); GetBlobClient(path).DeleteIfExists(); } @@ -201,18 +215,16 @@ public void DeleteFile(string path) /// public bool FileExists(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetBlobClient(path).Exists(); } /// - [SuppressMessage("Design", - "CA1054: Change the type of parameter 'fullPathOrUrl' of method 'AzureBlobFileSystem.GetRelativePath(string)' from 'string' to 'System.Uri', or provide an overload to 'AzureBlobFileSystem.GetRelativePath(string)' that allows 'fullPathOrUrl' to be passed as a 'System.Uri' object", - Justification = "Interface implementation")] + [SuppressMessage("Design", "CA1054: Change the type of parameter 'fullPathOrUrl' of method 'AzureBlobFileSystem.GetRelativePath(string)' from 'string' to 'System.Uri', or provide an overload to 'AzureBlobFileSystem.GetRelativePath(string)' that allows 'fullPathOrUrl' to be passed as a 'System.Uri' object", Justification = "Interface implementation")] public string GetRelativePath(string fullPathOrUrl) { - if (fullPathOrUrl == null) throw new ArgumentNullException(nameof(fullPathOrUrl)); + ArgumentNullException.ThrowIfNull(fullPathOrUrl); // test url var path = EnsureUrlSeparatorChar(fullPathOrUrl); // ensure url separator char @@ -220,7 +232,9 @@ public string GetRelativePath(string fullPathOrUrl) // if it starts with the root url, strip it and trim the starting slash to make it relative // eg "/Media/1234/img.jpg" => "1234/img.jpg" if (_ioHelper.PathStartsWith(path, _rootUrl, '/')) + { path = path[_rootUrl.Length..].TrimStart('/'); + } // unchanged - what else? return path; @@ -229,19 +243,17 @@ public string GetRelativePath(string fullPathOrUrl) /// public string GetFullPath(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); path = EnsureUrlSeparatorChar(path); return (_ioHelper.PathStartsWith(path, _rootUrl, '/') ? path : $"{_rootUrl}/{path}").Trim('/'); } /// - [SuppressMessage("Design", - "CA1055: Change the return type of method 'AzureBlobFileSystem.GetUrl(string)' from 'string' to 'System.Uri'", - Justification = "Interface implementation")] + [SuppressMessage("Design", "CA1055: Change the return type of method 'AzureBlobFileSystem.GetUrl(string)' from 'string' to 'System.Uri'", Justification = "Interface implementation")] public string GetUrl(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return $"{_rootUrl}/{EnsureUrlSeparatorChar(path).Trim('/')}"; } @@ -249,7 +261,7 @@ public string GetUrl(string path) /// public DateTimeOffset GetLastModified(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetBlobClient(path).GetProperties().Value.LastModified; } @@ -257,7 +269,7 @@ public DateTimeOffset GetLastModified(string path) /// public DateTimeOffset GetCreated(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetBlobClient(path).GetProperties().Value.CreatedOn; } @@ -265,7 +277,7 @@ public DateTimeOffset GetCreated(string path) /// public long GetSize(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return GetBlobClient(path).GetProperties().Value.ContentLength; } @@ -273,7 +285,7 @@ public long GetSize(string path) /// public BlobClient GetBlobClient(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return _container.GetBlobClient(GetBlobPath(path)); } @@ -283,29 +295,30 @@ public BlobClient GetBlobClient(string path) private static string EnsureUrlSeparatorChar(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return path.Replace("\\", "/", StringComparison.InvariantCultureIgnoreCase); } private string GetDirectoryPath(string fullPathOrUrl) { - if (fullPathOrUrl == null) throw new ArgumentNullException(nameof(fullPathOrUrl)); + ArgumentNullException.ThrowIfNull(fullPathOrUrl); var path = GetFullPath(fullPathOrUrl); + return path.Length == 0 ? path : path.EnsureEndsWith('/'); } private IEnumerable ListBlobs(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); return _container.GetBlobsByHierarchy(prefix: path); } private string GetBlobPath(string path) { - if (path == null) throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path); path = EnsureUrlSeparatorChar(path); @@ -320,6 +333,7 @@ private string GetBlobPath(string path) } path = $"{_containerRootPath}/{path.TrimStart('/')}"; + return path.Trim('/'); } @@ -337,7 +351,7 @@ private string GetBlobPath(string path) /// options public static Response CreateIfNotExists(AzureBlobFileSystemOptions options, PublicAccessType accessType = PublicAccessType.None) { - if (options == null) throw new ArgumentNullException(nameof(options)); + ArgumentNullException.ThrowIfNull(options); return new BlobContainerClient(options.ConnectionString, options.ContainerName).CreateIfNotExists(accessType); } diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs index bff8d34..b4c80b1 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs @@ -5,7 +5,7 @@ namespace Umbraco.StorageProviders.AzureBlob.IO /// /// The Azure Blob File System Options. /// - public class AzureBlobFileSystemOptions + public sealed class AzureBlobFileSystemOptions { /// /// The media filesystem name. diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs index 4d8a2a7..a07ccee 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs @@ -8,7 +8,7 @@ namespace Umbraco.StorageProviders.AzureBlob.IO { /// - public class AzureBlobFileSystemProvider : IAzureBlobFileSystemProvider + public sealed class AzureBlobFileSystemProvider : IAzureBlobFileSystemProvider { private readonly ConcurrentDictionary _fileSystems = new(); private readonly IOptionsMonitor _optionsMonitor; @@ -40,7 +40,7 @@ public AzureBlobFileSystemProvider(IOptionsMonitor o /// public IAzureBlobFileSystem GetFileSystem(string name) { - if (name == null) throw new ArgumentNullException(nameof(name)); + ArgumentNullException.ThrowIfNull(name); return _fileSystems.GetOrAdd(name, name => { @@ -51,8 +51,6 @@ public IAzureBlobFileSystem GetFileSystem(string name) } private void OptionsOnChange(AzureBlobFileSystemOptions options, string name) - { - _fileSystems.TryRemove(name, out _); - } + => _fileSystems.TryRemove(name, out _); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs index d68233b..667a262 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs @@ -14,7 +14,7 @@ namespace Umbraco.StorageProviders.AzureBlob.Imaging /// /// Implements an Azure Blob Storage based cache storing files in a cache subfolder. /// - public class AzureBlobFileSystemImageCache : IImageCache + public sealed class AzureBlobFileSystemImageCache : IImageCache { private const string _cachePath = "cache/"; private BlobContainerClient _container; @@ -32,18 +32,19 @@ public AzureBlobFileSystemImageCache(IOptionsMonitor /// /// The name. /// The options. - protected AzureBlobFileSystemImageCache(string name, IOptionsMonitor options) + public AzureBlobFileSystemImageCache(string name, IOptionsMonitor options) { - if (options == null) throw new ArgumentNullException(nameof(options)); + ArgumentNullException.ThrowIfNull(options); var fileSystemOptions = options.Get(name); _container = new BlobContainerClient(fileSystemOptions.ConnectionString, fileSystemOptions.ContainerName); options.OnChange((options, changedName) => { - if (changedName != name) return; - - _container = new BlobContainerClient(options.ConnectionString, options.ContainerName); + if (changedName == name) + { + _container = new BlobContainerClient(options.ConnectionString, options.ContainerName); + } }); } @@ -52,21 +53,16 @@ protected AzureBlobFileSystemImageCache(string name, IOptionsMonitor /// The blob container client. public AzureBlobFileSystemImageCache(BlobContainerClient blobContainerClient) - { - _container = blobContainerClient ?? throw new ArgumentNullException(nameof(blobContainerClient)); - } + => _container = blobContainerClient ?? throw new ArgumentNullException(nameof(blobContainerClient)); /// public async Task GetAsync(string key) { var blob = _container.GetBlobClient(_cachePath + key); - if (!await blob.ExistsAsync().ConfigureAwait(false)) - { - return null; - } - - return new AzureBlobStorageCacheResolver(blob); + return !await blob.ExistsAsync().ConfigureAwait(false) + ? null + : new AzureBlobStorageCacheResolver(blob); } /// From 2be5ee6216c6a36de2984d8f9b251d19df9a10fa Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Apr 2022 11:27:16 +0200 Subject: [PATCH 18/26] Change AnalysisMode to .NET 6 value for all --- src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs | 2 +- src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs | 2 +- .../Umbraco.StorageProviders.AzureBlob.csproj | 2 +- src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs index b4b9ecd..42b3972 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs @@ -77,6 +77,6 @@ public AzureBlobItemInfo(BlobClient blobClient, BlobItemProperties properties) /// public Stream CreateReadStream() => _blobClient.OpenRead(); - internal static string ParseName(string path) => path.Substring(path.LastIndexOf('/') + 1); + internal static string ParseName(string path) => path[(path.LastIndexOf('/') + 1)..]; } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs index 406c98e..efd0d7e 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs @@ -46,7 +46,7 @@ private static string ParseName(string prefix) { var name = prefix.TrimEnd('/'); - return name.Substring(name.LastIndexOf('/') + 1); + return name[(name.LastIndexOf('/') + 1)..]; } } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj index 12a6f04..a3ae06a 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj +++ b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj @@ -2,7 +2,7 @@ net6.0 enable - AllEnabledByDefault + All true Azure Blob Storage provider for Umbraco CMS umbraco storage azure blob diff --git a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj index 6323bbb..9b66590 100644 --- a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj +++ b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj @@ -1,9 +1,8 @@  net6.0 - latest enable - AllEnabledByDefault + All true Shared storage providers infrastructure for Umbraco CMS From dc2b1e29a0808e7484a1c8a50316c791457ff5bc Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Apr 2022 15:40:29 +0200 Subject: [PATCH 19/26] Install PublicApiAnalyzers and update editorconfig --- .editorconfig | 99 ++++++++++++++++--- src/Directory.Build.props | 4 + .../PublicAPI.Shipped.txt | 89 +++++++++++++++++ .../PublicAPI.Unshipped.txt | 1 + .../packages.lock.json | 6 ++ .../PublicAPI.Shipped.txt | 15 +++ .../PublicAPI.Unshipped.txt | 1 + .../packages.lock.json | 6 ++ 8 files changed, 205 insertions(+), 16 deletions(-) create mode 100644 src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt create mode 100644 src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt create mode 100644 src/Umbraco.StorageProviders/PublicAPI.Shipped.txt create mode 100644 src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt diff --git a/.editorconfig b/.editorconfig index 3186899..0b8aab0 100755 --- a/.editorconfig +++ b/.editorconfig @@ -1,21 +1,55 @@ -# editorconfig.org - -# top-most EditorConfig file root = true -# Default settings: -# A newline ending every file -# Use 4 spaces as indentation [*] insert_final_newline = true end_of_line = lf indent_style = space indent_size = 4 - -# Trim trailing whitespace, limited support. -# https://github.com/editorconfig/editorconfig/wiki/Property-research:-Trim-trailing-spaces trim_trailing_whitespace = true +csharp_indent_braces = false +csharp_indent_case_contents = true +csharp_indent_labels = one_less_than_current +csharp_prefer_braces = true:warning +csharp_prefer_simple_default_expression = true:suggestion +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_static_local_function = true:suggestion +csharp_space_around_binary_operators = before_and_after +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent +csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent +csharp_style_conditional_delegate_call = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_constructors = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_expression_bodied_methods = true:silent +csharp_style_expression_bodied_operators = true:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_namespace_declarations = block_scoped:silent +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_prefer_null_check_over_type_check = true:suggestion +csharp_style_prefer_pattern_matching = true:silent +csharp_style_prefer_range_operator = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_throw_expression = true:suggestion +csharp_style_unused_value_assignment_preference = discard_variable:suggestion +csharp_style_unused_value_expression_statement_preference = discard_variable:silent +csharp_style_var_elsewhere = false:silent +csharp_style_var_for_built_in_types = false:silent +csharp_style_var_when_type_is_apparent = false:silent +csharp_using_directive_placement = outside_namespace:silent + [*.md] insert_final_newline = false trim_trailing_whitespace = false @@ -24,16 +58,49 @@ trim_trailing_whitespace = false indent_size = 2 [*.{cs,vb}] -dotnet_style_predefined_type_for_locals_parameters_members = true:error +tab_width = 4 -dotnet_naming_rule.private_members_with_underscore.symbols = private_fields -dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore +dotnet_code_quality_unused_parameters = all:suggestion dotnet_naming_rule.private_members_with_underscore.severity = suggestion - -dotnet_naming_symbols.private_fields.applicable_kinds = field -dotnet_naming_symbols.private_fields.applicable_accessibilities = private - +dotnet_naming_rule.private_members_with_underscore.style = prefix_underscore +dotnet_naming_rule.private_members_with_underscore.symbols = private_fields dotnet_naming_style.prefix_underscore.capitalization = camel_case dotnet_naming_style.prefix_underscore.required_prefix = _ +dotnet_naming_symbols.private_fields.applicable_accessibilities = private +dotnet_naming_symbols.private_fields.applicable_kinds = field +dotnet_style_allow_multiple_blank_lines_experimental = true:silent +dotnet_style_allow_statement_immediately_after_block_experimental = true:silent +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_namespace_match_folder = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_object_initializer = true:suggestion +dotnet_style_operator_placement_when_wrapping = beginning_of_line +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +dotnet_style_predefined_type_for_locals_parameters_members = true:error +dotnet_style_predefined_type_for_member_access = true:silent +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_prefer_compound_assignment = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion +dotnet_style_prefer_inferred_tuple_names = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_prefer_simplified_interpolation = true:suggestion +dotnet_style_qualification_for_event = false:silent +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_readonly_field = true:suggestion +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +# CA1054: URI parameters should not be strings dotnet_diagnostic.CA1054.severity = suggestion + +# RS0048: Missing shipped or unshipped public API file +dotnet_public_api_analyzer.require_api_files = true diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d554d8b..6fa6fcf 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -15,6 +15,10 @@ + + + + https://www.myget.org/F/umbraconightly/api/v3/index.json diff --git a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt new file mode 100644 index 0000000..36c020f --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt @@ -0,0 +1,89 @@ +#nullable enable +const Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.MediaFileSystemName = "Media" -> string! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobMediaFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobMediaFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.CreateIfNotExists(Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions! options, Azure.Storage.Blobs.Models.PublicAccessType accessType = Azure.Storage.Blobs.Models.PublicAccessType.None) -> Azure.Response! +Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions +Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions +Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents +Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents.AzureBlobDirectoryContents(Azure.Storage.Blobs.BlobContainerClient! containerClient, System.Collections.Generic.IReadOnlyCollection! items) -> void +Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents.Exists.get -> bool +Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents.GetEnumerator() -> System.Collections.Generic.IEnumerator! +Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider +Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.AzureBlobFileProvider(Azure.Storage.Blobs.BlobContainerClient! containerClient, string? containerRootPath = null) -> void +Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.AzureBlobFileProvider(Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions! options) -> void +Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.GetDirectoryContents(string! subpath) -> Microsoft.Extensions.FileProviders.IDirectoryContents! +Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.GetFileInfo(string! subpath) -> Microsoft.Extensions.FileProviders.IFileInfo! +Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.Watch(string! filter) -> Microsoft.Extensions.Primitives.IChangeToken! +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.AzureBlobItemInfo(Azure.Storage.Blobs.BlobClient! blobClient, Azure.Storage.Blobs.Models.BlobItemProperties! properties) -> void +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.AzureBlobItemInfo(Azure.Storage.Blobs.BlobClient! blobClient, Azure.Storage.Blobs.Models.BlobProperties! properties) -> void +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.CreateReadStream() -> System.IO.Stream! +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.Exists.get -> bool +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.IsDirectory.get -> bool +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.LastModified.get -> System.DateTimeOffset +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.Length.get -> long +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.Name.get -> string! +Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.PhysicalPath.get -> string! +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.AzureBlobPrefixInfo(string! prefix) -> void +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.CreateReadStream() -> System.IO.Stream! +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.Exists.get -> bool +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.IsDirectory.get -> bool +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.LastModified.get -> System.DateTimeOffset +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.Length.get -> long +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.Name.get -> string! +Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.PhysicalPath.get -> string! +Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache +Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.AzureBlobFileSystemImageCache(Azure.Storage.Blobs.BlobContainerClient! blobContainerClient) -> void +Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.AzureBlobFileSystemImageCache(Microsoft.Extensions.Options.IOptionsMonitor! options) -> void +Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.AzureBlobFileSystemImageCache(string! name, Microsoft.Extensions.Options.IOptionsMonitor! options) -> void +Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.GetAsync(string! key) -> System.Threading.Tasks.Task! +Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.SetAsync(string! key, System.IO.Stream! stream, SixLabors.ImageSharp.Web.ImageCacheMetadata metadata) -> System.Threading.Tasks.Task! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AddFile(string! path, string! physicalPath, bool overrideIfExists = true, bool copy = false) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AddFile(string! path, System.IO.Stream! stream) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AddFile(string! path, System.IO.Stream! stream, bool overrideIfExists) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AzureBlobFileSystem(string! rootUrl, Azure.Storage.Blobs.BlobContainerClient! blobContainerClient, Umbraco.Cms.Core.IO.IIOHelper! ioHelper, Microsoft.AspNetCore.StaticFiles.IContentTypeProvider! contentTypeProvider, string? containerRootPath = null) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AzureBlobFileSystem(Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions! options, Umbraco.Cms.Core.Hosting.IHostingEnvironment! hostingEnvironment, Umbraco.Cms.Core.IO.IIOHelper! ioHelper, Microsoft.AspNetCore.StaticFiles.IContentTypeProvider! contentTypeProvider) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.CanAddPhysical.get -> bool +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.Create() -> Microsoft.Extensions.FileProviders.IFileProvider! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DeleteDirectory(string! path) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DeleteDirectory(string! path, bool recursive) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DeleteFile(string! path) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DirectoryExists(string! path) -> bool +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.FileExists(string! path) -> bool +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetBlobClient(string! path) -> Azure.Storage.Blobs.BlobClient! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetCreated(string! path) -> System.DateTimeOffset +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetDirectories(string! path) -> System.Collections.Generic.IEnumerable! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFiles(string! path) -> System.Collections.Generic.IEnumerable! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFiles(string! path, string? filter) -> System.Collections.Generic.IEnumerable! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFullPath(string! path) -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetLastModified(string! path) -> System.DateTimeOffset +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetRelativePath(string! fullPathOrUrl) -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetSize(string! path) -> long +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetUrl(string! path) -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.OpenFile(string! path) -> System.IO.Stream! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.AzureBlobFileSystemOptions() -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ConnectionString.get -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ConnectionString.set -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerName.get -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerName.set -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerRootPath.get -> string? +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerRootPath.set -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.VirtualPath.get -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.VirtualPath.set -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemProvider +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemProvider.AzureBlobFileSystemProvider(Microsoft.Extensions.Options.IOptionsMonitor! optionsMonitor, Umbraco.Cms.Core.Hosting.IHostingEnvironment! hostingEnvironment, Umbraco.Cms.Core.IO.IIOHelper! ioHelper) -> void +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemProvider.GetFileSystem(string! name) -> Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem! +Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem +Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem.GetBlobClient(string! path) -> Azure.Storage.Blobs.BlobClient! +Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystemProvider +Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystemProvider.GetFileSystem(string! name) -> Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem! diff --git a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..ab058de --- /dev/null +++ b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json index caf2214..8264cca 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -12,6 +12,12 @@ "System.Text.Json": "4.7.2" } }, + "Microsoft.CodeAnalysis.PublicApiAnalyzers": { + "type": "Direct", + "requested": "[3.3.3, )", + "resolved": "3.3.3", + "contentHash": "DWLeZtw2jszmzAh/MZXVo/Dy8fD9vcRaCIRZTaf2ppqaug8BGIV81dQdZfaYFlNuw7FyuZLVC5SZPZsCcePZhQ==" + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[1.1.1, )", diff --git a/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt b/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt new file mode 100644 index 0000000..d7fe34e --- /dev/null +++ b/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt @@ -0,0 +1,15 @@ +#nullable enable +override Umbraco.StorageProviders.CdnMediaUrlProvider.GetMediaUrl(Umbraco.Cms.Core.Models.PublishedContent.IPublishedContent! content, string! propertyAlias, Umbraco.Cms.Core.Models.PublishedContent.UrlMode mode, string! culture, System.Uri! current) -> Umbraco.Cms.Core.Routing.UrlInfo? +static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! +Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions +Umbraco.StorageProviders.CdnMediaUrlProvider +Umbraco.StorageProviders.CdnMediaUrlProvider.CdnMediaUrlProvider(Microsoft.Extensions.Options.IOptionsMonitor! options, Microsoft.Extensions.Options.IOptionsMonitor! globalSettings, Umbraco.Cms.Core.Hosting.IHostingEnvironment! hostingEnvironment, Umbraco.Cms.Core.PropertyEditors.MediaUrlGeneratorCollection! mediaPathGenerators, Umbraco.Cms.Core.Routing.UriUtility! uriUtility) -> void +Umbraco.StorageProviders.CdnMediaUrlProviderOptions +Umbraco.StorageProviders.CdnMediaUrlProviderOptions.CdnMediaUrlProviderOptions() -> void +Umbraco.StorageProviders.CdnMediaUrlProviderOptions.RemoveMediaFromPath.get -> bool +Umbraco.StorageProviders.CdnMediaUrlProviderOptions.RemoveMediaFromPath.set -> void +Umbraco.StorageProviders.CdnMediaUrlProviderOptions.Url.get -> System.Uri! +Umbraco.StorageProviders.CdnMediaUrlProviderOptions.Url.set -> void diff --git a/src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt b/src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt new file mode 100644 index 0000000..ab058de --- /dev/null +++ b/src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Umbraco.StorageProviders/packages.lock.json b/src/Umbraco.StorageProviders/packages.lock.json index 25837ba..a538f73 100644 --- a/src/Umbraco.StorageProviders/packages.lock.json +++ b/src/Umbraco.StorageProviders/packages.lock.json @@ -2,6 +2,12 @@ "version": 1, "dependencies": { "net6.0": { + "Microsoft.CodeAnalysis.PublicApiAnalyzers": { + "type": "Direct", + "requested": "[3.3.3, )", + "resolved": "3.3.3", + "contentHash": "DWLeZtw2jszmzAh/MZXVo/Dy8fD9vcRaCIRZTaf2ppqaug8BGIV81dQdZfaYFlNuw7FyuZLVC5SZPZsCcePZhQ==" + }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[1.1.1, )", From ce61fbf95270355fe1184870bb64d0b899b2bfe6 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Thu, 14 Apr 2022 15:44:07 +0200 Subject: [PATCH 20/26] Install StyleCop.Analyzers and update code styling/documentation --- .editorconfig | 21 ++++ src/Directory.Build.props | 1 + .../AzureBlobDirectoryContents.cs | 12 +-- .../AzureBlobFileProvider.cs | 4 +- .../AzureBlobItemInfo.cs | 73 +++++++------- .../AzureBlobPrefixInfo.cs | 23 ++--- .../AzureBlobFileSystemExtensions.cs | 57 ++++++----- .../AzureBlobMediaFileSystemExtensions.cs | 58 ++++++----- .../IO/AzureBlobFileSystem.cs | 96 +++++++++++-------- .../IO/AzureBlobFileSystemOptions.cs | 10 +- .../IO/AzureBlobFileSystemProvider.cs | 18 ++-- .../Imaging/AzureBlobFileSystemImageCache.cs | 7 +- .../packages.lock.json | 14 +++ .../CdnMediaUrlProvider.cs | 6 +- .../CdnMediaUrlProviderExtensions.cs | 45 +++++---- .../packages.lock.json | 14 +++ 16 files changed, 288 insertions(+), 171 deletions(-) mode change 100755 => 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig old mode 100755 new mode 100644 index 0b8aab0..7e9afe4 --- a/.editorconfig +++ b/.editorconfig @@ -102,5 +102,26 @@ dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent # CA1054: URI parameters should not be strings dotnet_diagnostic.CA1054.severity = suggestion +# CA1055: URI-like return values should not be strings +dotnet_diagnostic.CA1055.severity = none + # RS0048: Missing shipped or unshipped public API file dotnet_public_api_analyzer.require_api_files = true + +# SA1101: Prefix local calls with this +dotnet_diagnostic.SA1101.severity = none + +# SA1309: Field names should not begin with underscore +dotnet_diagnostic.SA1309.severity = none + +# SA1413: Use trailing comma in multi-line initializers +dotnet_diagnostic.SA1413.severity = none + +# SA1502: Element should not be on a single line +dotnet_diagnostic.SA1502.severity = none + +# SA1625: Element documentation should not be copied and pasted +dotnet_diagnostic.SA1625.severity = none + +# SA1633: File should have header +dotnet_diagnostic.SA1633.severity = none diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 6fa6fcf..67228e4 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -17,6 +17,7 @@ + diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs index c3aef93..e20c7c9 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobDirectoryContents.cs @@ -17,17 +17,13 @@ public sealed class AzureBlobDirectoryContents : IDirectoryContents private readonly BlobContainerClient _containerClient; private readonly IReadOnlyCollection _items; - /// - public bool Exists { get; } - /// /// Initializes a new instance of the class. /// /// The container client. /// The items. - /// containerClient - /// or - /// items + /// is null. + /// is null. public AzureBlobDirectoryContents(BlobContainerClient containerClient, IReadOnlyCollection items) { _containerClient = containerClient ?? throw new ArgumentNullException(nameof(containerClient)); @@ -36,12 +32,16 @@ public AzureBlobDirectoryContents(BlobContainerClient containerClient, IReadOnly Exists = items.Count > 0; } + /// + public bool Exists { get; } + /// public IEnumerator GetEnumerator() => _items.Select(x => x.IsPrefix ? new AzureBlobPrefixInfo(x.Prefix) : new AzureBlobItemInfo(_containerClient.GetBlobClient(x.Blob.Name), x.Blob.Properties)).GetEnumerator(); + /// IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs index cc91b13..87722ea 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobFileProvider.cs @@ -26,7 +26,7 @@ public sealed class AzureBlobFileProvider : IFileProvider /// /// The container client. /// The container root path. - /// containerClient + /// is null. public AzureBlobFileProvider(BlobContainerClient containerClient, string? containerRootPath = null) { _containerClient = containerClient ?? throw new ArgumentNullException(nameof(containerClient)); @@ -37,7 +37,7 @@ public AzureBlobFileProvider(BlobContainerClient containerClient, string? contai /// Initializes a new instance of the class. /// /// The options. - /// options + /// is null. public AzureBlobFileProvider(AzureBlobFileSystemOptions options) { ArgumentNullException.ThrowIfNull(options); diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs index 42b3972..4c1abcd 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobItemInfo.cs @@ -14,42 +14,13 @@ public sealed class AzureBlobItemInfo : IFileInfo { private readonly BlobClient _blobClient; - /// - public bool Exists => true; - - /// - public bool IsDirectory => false; - - /// - public DateTimeOffset LastModified { get; } - - /// - public long Length { get; } - - /// - public string Name { get; } - - /// - public string PhysicalPath => null!; - - /// - /// Initializes a new instance of the class. - /// - /// The blob client. - /// blobClient - private AzureBlobItemInfo(BlobClient blobClient) - { - _blobClient = blobClient ?? throw new ArgumentNullException(nameof(blobClient)); - - Name = ParseName(blobClient.Name); - } - /// /// Initializes a new instance of the class. /// /// The blob client. /// The properties. - /// properties + /// is null. + /// is null. public AzureBlobItemInfo(BlobClient blobClient, BlobProperties properties) : this(blobClient) { @@ -64,7 +35,8 @@ public AzureBlobItemInfo(BlobClient blobClient, BlobProperties properties) /// /// The blob client. /// The properties. - /// properties + /// is null. + /// is null. public AzureBlobItemInfo(BlobClient blobClient, BlobItemProperties properties) : this(blobClient) { @@ -74,9 +46,46 @@ public AzureBlobItemInfo(BlobClient blobClient, BlobItemProperties properties) Length = properties.ContentLength.GetValueOrDefault(-1); } + /// + /// Initializes a new instance of the class. + /// + /// The blob client. + /// is null. + private AzureBlobItemInfo(BlobClient blobClient) + { + _blobClient = blobClient ?? throw new ArgumentNullException(nameof(blobClient)); + + Name = ParseName(blobClient.Name); + } + + /// + public bool Exists => true; + + /// + public bool IsDirectory => false; + + /// + public DateTimeOffset LastModified { get; } + + /// + public long Length { get; } + + /// + public string Name { get; } + + /// + public string PhysicalPath => null!; + /// public Stream CreateReadStream() => _blobClient.OpenRead(); + /// + /// Parses the name from the file path. + /// + /// The file path. + /// + /// The name. + /// internal static string ParseName(string path) => path[(path.LastIndexOf('/') + 1)..]; } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs index efd0d7e..a19388b 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/AzureBlobPrefixInfo.cs @@ -10,6 +10,18 @@ namespace Umbraco.StorageProviders.AzureBlob /// public sealed class AzureBlobPrefixInfo : IFileInfo { + /// + /// Initializes a new instance of the class. + /// + /// The prefix. + /// is null. + public AzureBlobPrefixInfo(string prefix) + { + ArgumentNullException.ThrowIfNull(prefix); + + Name = ParseName(prefix); + } + /// public bool Exists => true; @@ -28,17 +40,6 @@ public sealed class AzureBlobPrefixInfo : IFileInfo /// public string PhysicalPath => null!; - /// - /// Initializes a new instance of the class. - /// - /// The prefix. - public AzureBlobPrefixInfo(string prefix) - { - ArgumentNullException.ThrowIfNull(prefix); - - Name = ParseName(prefix); - } - /// public Stream CreateReadStream() => throw new InvalidOperationException(); diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs index 87bb965..a25c4cd 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobFileSystemExtensions.cs @@ -4,8 +4,6 @@ using Microsoft.Extensions.Options; using Umbraco.StorageProviders.AzureBlob.IO; -// ReSharper disable once CheckNamespace -// uses same namespace as Umbraco Core for easier discoverability namespace Umbraco.Cms.Core.DependencyInjection { /// @@ -13,22 +11,6 @@ namespace Umbraco.Cms.Core.DependencyInjection /// public static class AzureBlobFileSystemExtensions { - internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, string name, Action>? configure = null) - { - ArgumentNullException.ThrowIfNull(builder); - ArgumentNullException.ThrowIfNull(name); - - builder.Services.TryAddSingleton(); - - var optionsBuilder = builder.Services.AddOptions(name) - .BindConfiguration($"Umbraco:Storage:AzureBlob:{name}") - .ValidateDataAnnotations(); - - configure?.Invoke(optionsBuilder); - - return builder; - } - /// /// Registers a in the , with it's configuration /// loaded from Umbraco:Storage:AzureBlob:{name} where {name} is the value of the parameter. @@ -38,10 +20,7 @@ internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, string /// /// The . /// - /// builder - /// or - /// name - /// Value cannot be null or whitespace. - path + /// is null. public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name) => builder.AddInternal(name); @@ -55,6 +34,8 @@ public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builde /// /// The . /// + /// is null. + /// is null. public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action configure) => builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure)); @@ -68,6 +49,8 @@ public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builde /// /// The . /// + /// is null. + /// is null. public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action configure) => builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure)); @@ -82,8 +65,38 @@ public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builde /// /// The . /// + /// is null. + /// is null. public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, string name, Action configure) where TDep : class => builder.AddInternal(name, optionsBuilder => optionsBuilder.Configure(configure)); + + /// + /// Registers a in the , with it's configuration + /// loaded from Umbraco:Storage:AzureBlob:{name} where {name} is the value of the parameter. + /// + /// The . + /// The name of the file system. + /// An action used to configure the . + /// + /// The . + /// + /// is null. + /// is null. + internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, string name, Action>? configure = null) + { + ArgumentNullException.ThrowIfNull(builder); + ArgumentNullException.ThrowIfNull(name); + + builder.Services.TryAddSingleton(); + + var optionsBuilder = builder.Services.AddOptions(name) + .BindConfiguration($"Umbraco:Storage:AzureBlob:{name}") + .ValidateDataAnnotations(); + + configure?.Invoke(optionsBuilder); + + return builder; + } } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs index da0f5f4..7640131 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/DependencyInjection/AzureBlobMediaFileSystemExtensions.cs @@ -8,8 +8,6 @@ using Umbraco.StorageProviders.AzureBlob.Imaging; using Umbraco.StorageProviders.AzureBlob.IO; -// ReSharper disable once CheckNamespace -// uses same namespace as Umbraco Core for easier discoverability namespace Umbraco.Cms.Core.DependencyInjection { /// @@ -17,27 +15,6 @@ namespace Umbraco.Cms.Core.DependencyInjection /// public static class AzureBlobMediaFileSystemExtensions { - internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action>? configure = null) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.AddInternal(AzureBlobFileSystemOptions.MediaFileSystemName, optionsBuilder => - { - optionsBuilder.Configure>((options, globalSettings) => options.VirtualPath = globalSettings.Value.UmbracoMediaPath); - configure?.Invoke(optionsBuilder); - }); - - // ImageSharp image cache - if (useAzureBlobImageCache) - { - builder.Services.AddUnique(); - } - - builder.SetMediaFileSystem(provider => provider.GetRequiredService().GetFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName)); - - return builder; - } - /// /// Registers an and it's dependencies configured for media. /// @@ -46,6 +23,7 @@ internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, bool u /// /// The . /// + /// is null. public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, bool useAzureBlobImageCache = true) => builder.AddInternal(useAzureBlobImageCache); @@ -58,6 +36,7 @@ public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder b /// /// The . /// + /// is null. public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder builder, Action configure, bool useAzureBlobImageCache = true) => builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure)); @@ -70,6 +49,7 @@ public static IUmbracoBuilder AddAzureBlobMediaFileSystem(this IUmbracoBuilder b /// /// The . /// + /// is null. public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, Action configure, bool useAzureBlobImageCache = true) => builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure)); @@ -83,8 +63,40 @@ public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builde /// /// The . /// + /// is null. public static IUmbracoBuilder AddAzureBlobFileSystem(this IUmbracoBuilder builder, Action configure, bool useAzureBlobImageCache = true) where TDep : class => builder.AddInternal(useAzureBlobImageCache, x => x.Configure(configure)); + + /// + /// Registers a and it's dependencies configured for media. + /// + /// The . + /// If set to true also configures Azure Blob Storage for the image cache. + /// An action used to configure the . + /// + /// The . + /// + /// is null. + internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, bool useAzureBlobImageCache, Action>? configure = null) + { + ArgumentNullException.ThrowIfNull(builder); + + builder.AddInternal(AzureBlobFileSystemOptions.MediaFileSystemName, optionsBuilder => + { + optionsBuilder.Configure>((options, globalSettings) => options.VirtualPath = globalSettings.Value.UmbracoMediaPath); + configure?.Invoke(optionsBuilder); + }); + + // ImageSharp image cache + if (useAzureBlobImageCache) + { + builder.Services.AddUnique(); + } + + builder.SetMediaFileSystem(provider => provider.GetRequiredService().GetFileSystem(AzureBlobFileSystemOptions.MediaFileSystemName)); + + return builder; + } } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs index e344242..ca7e867 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs @@ -25,12 +25,16 @@ public sealed class AzureBlobFileSystem : IAzureBlobFileSystem, IFileProviderFac private readonly IContentTypeProvider _contentTypeProvider; /// - /// Creates a new instance of . + /// Initializes a new instance of the class. /// /// The options. /// The hosting environment. /// The I/O helper. /// The content type provider. + /// is null. + /// is null. + /// is null. + /// is null. public AzureBlobFileSystem(AzureBlobFileSystemOptions options, IHostingEnvironment hostingEnvironment, IIOHelper ioHelper, IContentTypeProvider contentTypeProvider) { ArgumentNullException.ThrowIfNull(options); @@ -44,13 +48,17 @@ public AzureBlobFileSystem(AzureBlobFileSystemOptions options, IHostingEnvironme } /// - /// Creates a new instance of . + /// Initializes a new instance of the class. /// /// The root URL. /// The blob container client. /// The I/O helper. /// The content type provider. /// The container root path (uses the root URL if not set). + /// is null. + /// is null. + /// is null. + /// is null. public AzureBlobFileSystem(string rootUrl, BlobContainerClient blobContainerClient, IIOHelper ioHelper, IContentTypeProvider contentTypeProvider, string? containerRootPath = null) { ArgumentNullException.ThrowIfNull(rootUrl); @@ -63,6 +71,29 @@ public AzureBlobFileSystem(string rootUrl, BlobContainerClient blobContainerClie } /// + public bool CanAddPhysical => false; + + /// + /// Creates a new container under the specified account if a container with the same name does not already exist. + /// + /// The Azure Blob Storage file system options. + /// Optionally specifies whether data in the container may be accessed publicly and the level of access. + /// specifies full public read access for container and blob data. Clients can enumerate blobs within the container via anonymous request, but cannot enumerate containers within the storage account. + /// specifies public read access for blobs. Blob data within this container can be read via anonymous request, but container data is not available. Clients cannot enumerate blobs within the container via anonymous request. + /// specifies that the container data is private to the account owner. + /// + /// If the container does not already exist, a describing the newly created container. If the container already exists, . + /// + /// is null. + public static Response CreateIfNotExists(AzureBlobFileSystemOptions options, PublicAccessType accessType = PublicAccessType.None) + { + ArgumentNullException.ThrowIfNull(options); + + return new BlobContainerClient(options.ConnectionString, options.ContainerName).CreateIfNotExists(accessType); + } + + /// + /// is null. public IEnumerable GetDirectories(string path) { ArgumentNullException.ThrowIfNull(path); @@ -73,6 +104,7 @@ public IEnumerable GetDirectories(string path) } /// + /// is null. public void DeleteDirectory(string path) { ArgumentNullException.ThrowIfNull(path); @@ -81,6 +113,7 @@ public void DeleteDirectory(string path) } /// + /// is null. public void DeleteDirectory(string path, bool recursive) { ArgumentNullException.ThrowIfNull(path); @@ -99,6 +132,7 @@ public void DeleteDirectory(string path, bool recursive) } /// + /// is null. public bool DirectoryExists(string path) { ArgumentNullException.ThrowIfNull(path); @@ -107,6 +141,8 @@ public bool DirectoryExists(string path) } /// + /// is null. + /// is null. public void AddFile(string path, Stream stream) { ArgumentNullException.ThrowIfNull(path); @@ -116,6 +152,8 @@ public void AddFile(string path, Stream stream) } /// + /// is null. + /// is null. public void AddFile(string path, Stream stream, bool overrideIfExists) { ArgumentNullException.ThrowIfNull(path); @@ -142,6 +180,8 @@ public void AddFile(string path, Stream stream, bool overrideIfExists) } /// + /// is null. + /// is null. public void AddFile(string path, string physicalPath, bool overrideIfExists = true, bool copy = false) { ArgumentNullException.ThrowIfNull(path); @@ -173,6 +213,7 @@ public void AddFile(string path, string physicalPath, bool overrideIfExists = tr } /// + /// is null. public IEnumerable GetFiles(string path) { ArgumentNullException.ThrowIfNull(path); @@ -181,6 +222,7 @@ public IEnumerable GetFiles(string path) } /// + /// is null. public IEnumerable GetFiles(string path, string? filter) { ArgumentNullException.ThrowIfNull(path); @@ -197,6 +239,7 @@ public IEnumerable GetFiles(string path, string? filter) } /// + /// is null. public Stream OpenFile(string path) { ArgumentNullException.ThrowIfNull(path); @@ -205,6 +248,7 @@ public Stream OpenFile(string path) } /// + /// is null. public void DeleteFile(string path) { ArgumentNullException.ThrowIfNull(path); @@ -213,6 +257,7 @@ public void DeleteFile(string path) } /// + /// is null. public bool FileExists(string path) { ArgumentNullException.ThrowIfNull(path); @@ -221,7 +266,7 @@ public bool FileExists(string path) } /// - [SuppressMessage("Design", "CA1054: Change the type of parameter 'fullPathOrUrl' of method 'AzureBlobFileSystem.GetRelativePath(string)' from 'string' to 'System.Uri', or provide an overload to 'AzureBlobFileSystem.GetRelativePath(string)' that allows 'fullPathOrUrl' to be passed as a 'System.Uri' object", Justification = "Interface implementation")] + /// is null. public string GetRelativePath(string fullPathOrUrl) { ArgumentNullException.ThrowIfNull(fullPathOrUrl); @@ -241,6 +286,7 @@ public string GetRelativePath(string fullPathOrUrl) } /// + /// is null. public string GetFullPath(string path) { ArgumentNullException.ThrowIfNull(path); @@ -250,7 +296,7 @@ public string GetFullPath(string path) } /// - [SuppressMessage("Design", "CA1055: Change the return type of method 'AzureBlobFileSystem.GetUrl(string)' from 'string' to 'System.Uri'", Justification = "Interface implementation")] + /// is null. public string GetUrl(string path) { ArgumentNullException.ThrowIfNull(path); @@ -259,6 +305,7 @@ public string GetUrl(string path) } /// + /// is null. public DateTimeOffset GetLastModified(string path) { ArgumentNullException.ThrowIfNull(path); @@ -267,6 +314,7 @@ public DateTimeOffset GetLastModified(string path) } /// + /// is null. public DateTimeOffset GetCreated(string path) { ArgumentNullException.ThrowIfNull(path); @@ -275,6 +323,7 @@ public DateTimeOffset GetCreated(string path) } /// + /// is null. public long GetSize(string path) { ArgumentNullException.ThrowIfNull(path); @@ -283,6 +332,7 @@ public long GetSize(string path) } /// + /// is null. public BlobClient GetBlobClient(string path) { ArgumentNullException.ThrowIfNull(path); @@ -291,19 +341,13 @@ public BlobClient GetBlobClient(string path) } /// - public bool CanAddPhysical => false; + public IFileProvider Create() => new AzureBlobFileProvider(_container, _containerRootPath); private static string EnsureUrlSeparatorChar(string path) - { - ArgumentNullException.ThrowIfNull(path); - - return path.Replace("\\", "/", StringComparison.InvariantCultureIgnoreCase); - } + => path.Replace("\\", "/", StringComparison.InvariantCultureIgnoreCase); private string GetDirectoryPath(string fullPathOrUrl) { - ArgumentNullException.ThrowIfNull(fullPathOrUrl); - var path = GetFullPath(fullPathOrUrl); return path.Length == 0 ? path : path.EnsureEndsWith('/'); @@ -311,15 +355,11 @@ private string GetDirectoryPath(string fullPathOrUrl) private IEnumerable ListBlobs(string path) { - ArgumentNullException.ThrowIfNull(path); - return _container.GetBlobsByHierarchy(prefix: path); } private string GetBlobPath(string path) { - ArgumentNullException.ThrowIfNull(path); - path = EnsureUrlSeparatorChar(path); if (_ioHelper.PathStartsWith(path, _containerRootPath, '/')) @@ -333,30 +373,8 @@ private string GetBlobPath(string path) } path = $"{_containerRootPath}/{path.TrimStart('/')}"; - - return path.Trim('/'); - } - /// - /// Creates a new container under the specified account if a container with the same name does not already exist. - /// - /// The Azure Blob Storage file system options. - /// Optionally specifies whether data in the container may be accessed publicly and the level of access. - /// specifies full public read access for container and blob data. Clients can enumerate blobs within the container via anonymous request, but cannot enumerate containers within the storage account. - /// specifies public read access for blobs. Blob data within this container can be read via anonymous request, but container data is not available. Clients cannot enumerate blobs within the container via anonymous request. - /// specifies that the container data is private to the account owner. - /// - /// If the container does not already exist, a describing the newly created container. If the container already exists, . - /// - /// options - public static Response CreateIfNotExists(AzureBlobFileSystemOptions options, PublicAccessType accessType = PublicAccessType.None) - { - ArgumentNullException.ThrowIfNull(options); - - return new BlobContainerClient(options.ConnectionString, options.ContainerName).CreateIfNotExists(accessType); + return path.Trim('/'); } - - /// - public IFileProvider Create() => new AzureBlobFileProvider(_container, _containerRootPath); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs index b4c80b1..db6f851 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemOptions.cs @@ -3,7 +3,7 @@ namespace Umbraco.StorageProviders.AzureBlob.IO { /// - /// The Azure Blob File System Options. + /// The Azure Blob File System options. /// public sealed class AzureBlobFileSystemOptions { @@ -13,24 +13,24 @@ public sealed class AzureBlobFileSystemOptions public const string MediaFileSystemName = "Media"; /// - /// The storage account connection string. + /// Gets or sets the storage account connection string. /// [Required] public string ConnectionString { get; set; } = null!; /// - /// The container name. + /// Gets or sets the container name. /// [Required] public string ContainerName { get; set; } = null!; /// - /// The root path of the container. + /// Gets or sets the root path of the container. /// public string? ContainerRootPath { get; set; } /// - /// The virtual path. + /// Gets or sets the virtual path. /// [Required] public string VirtualPath { get; set; } = null!; diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs index a07ccee..670c503 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystemProvider.cs @@ -17,27 +17,26 @@ public sealed class AzureBlobFileSystemProvider : IAzureBlobFileSystemProvider private readonly FileExtensionContentTypeProvider _fileExtensionContentTypeProvider; /// - /// Creates a new instance of . + /// Initializes a new instance of the class. /// /// The options monitor. /// The hosting environment. /// The IO helper. - /// optionsMonitor - /// or - /// hostingEnvironment - /// or - /// ioHelper + /// is null. + /// is null. + /// is null. public AzureBlobFileSystemProvider(IOptionsMonitor optionsMonitor, IHostingEnvironment hostingEnvironment, IIOHelper ioHelper) { _optionsMonitor = optionsMonitor ?? throw new ArgumentNullException(nameof(optionsMonitor)); _hostingEnvironment = hostingEnvironment ?? throw new ArgumentNullException(nameof(hostingEnvironment)); _ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper)); - _fileExtensionContentTypeProvider = new FileExtensionContentTypeProvider(); - _optionsMonitor.OnChange(OptionsOnChange); + + _optionsMonitor.OnChange((options, name) => _fileSystems.TryRemove(name, out _)); } /// + /// is null. public IAzureBlobFileSystem GetFileSystem(string name) { ArgumentNullException.ThrowIfNull(name); @@ -49,8 +48,5 @@ public IAzureBlobFileSystem GetFileSystem(string name) return new AzureBlobFileSystem(options, _hostingEnvironment, _ioHelper, _fileExtensionContentTypeProvider); }); } - - private void OptionsOnChange(AzureBlobFileSystemOptions options, string name) - => _fileSystems.TryRemove(name, out _); } } diff --git a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs index 667a262..7b495c2 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/Imaging/AzureBlobFileSystemImageCache.cs @@ -23,17 +23,21 @@ public sealed class AzureBlobFileSystemImageCache : IImageCache /// Initializes a new instance of the class. /// /// The options. + /// is null. public AzureBlobFileSystemImageCache(IOptionsMonitor options) : this(AzureBlobFileSystemOptions.MediaFileSystemName, options) { } /// - /// Creates a new instance of . + /// Initializes a new instance of the class. /// /// The name. /// The options. + /// is null. + /// is null. public AzureBlobFileSystemImageCache(string name, IOptionsMonitor options) { + ArgumentNullException.ThrowIfNull(name); ArgumentNullException.ThrowIfNull(options); var fileSystemOptions = options.Get(name); @@ -52,6 +56,7 @@ public AzureBlobFileSystemImageCache(string name, IOptionsMonitor class. /// /// The blob container client. + /// is null. public AzureBlobFileSystemImageCache(BlobContainerClient blobContainerClient) => _container = blobContainerClient ?? throw new ArgumentNullException(nameof(blobContainerClient)); diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json index 8264cca..c84e880 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -44,6 +44,15 @@ "SixLabors.ImageSharp.Web": "1.0.5" } }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.406, )", + "resolved": "1.2.0-beta.406", + "contentHash": "YbsYoczQPZyz+4nmQ7bBiU9uQkk7Q2KUizQWEv01S4/ImCdJFiHvJfm8HAINNS0cvSLOA7xM9Y+KWQ2FOYjgkA==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.406" + } + }, "Umbraco.Cms.Web.Common": { "type": "Direct", "requested": "[10.0.0-preview20220405.88864, )", @@ -1102,6 +1111,11 @@ "Smidge": "4.0.3" } }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.406", + "contentHash": "FclNdBR81ynIo9l1QNlo+l0I/PaFIYaPQPlMram8XVIMh6G6G43KTa1aCxfwTj13uKlAJS/LhLy6KjOPOeAU4w==" + }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", diff --git a/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs index 5750880..1ffc1d0 100644 --- a/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs +++ b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs @@ -19,14 +19,16 @@ public sealed class CdnMediaUrlProvider : DefaultMediaUrlProvider private string _mediaPath; /// - /// Creates a new instance of . + /// Initializes a new instance of the class. /// /// The options. /// The global settings. /// The hosting environment. /// The media path generators. /// The URI utility. - /// options + /// is null. + /// is null. + /// is null. public CdnMediaUrlProvider(IOptionsMonitor options, IOptionsMonitor globalSettings, IHostingEnvironment hostingEnvironment, MediaUrlGeneratorCollection mediaPathGenerators, UriUtility uriUtility) : base(mediaPathGenerators, uriUtility) { diff --git a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs index 1fac339..5a4a16f 100644 --- a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs +++ b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs @@ -3,8 +3,6 @@ using Microsoft.Extensions.Options; using Umbraco.StorageProviders; -// ReSharper disable once CheckNamespace -// uses same namespace as Umbraco Core for easier discoverability namespace Umbraco.Cms.Core.DependencyInjection { /// @@ -12,21 +10,6 @@ namespace Umbraco.Cms.Core.DependencyInjection /// public static class CdnMediaUrlProviderExtensions { - internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, Action>? configure = null) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.MediaUrlProviders().Insert(); - - var optionsBuilder = builder.Services.AddOptions() - .BindConfiguration("Umbraco:Storage:Cdn") - .ValidateDataAnnotations(); - - configure?.Invoke(optionsBuilder); - - return builder; - } - /// /// Registers and configures the . /// @@ -34,6 +17,7 @@ internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, Action /// /// The . /// + /// is null. public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder) => builder.AddInternal(); @@ -45,6 +29,7 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde /// /// The . /// + /// is null. public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder, Action configure) => builder.AddInternal(optionsBuilder => optionsBuilder.Configure(configure)); @@ -56,6 +41,7 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde /// /// The . /// + /// is null. public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder, Action configure) => builder.AddInternal(optionsBuilder => optionsBuilder.Configure(configure)); @@ -68,8 +54,33 @@ public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builde /// /// The . /// + /// is null. public static IUmbracoBuilder AddCdnMediaUrlProvider(this IUmbracoBuilder builder, Action configure) where TDep : class => builder.AddInternal(optionsBuilder => optionsBuilder.Configure(configure)); + + /// + /// Registers and configures the . + /// + /// The . + /// An action used to configure the . + /// + /// The . + /// + /// is null. + internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, Action>? configure = null) + { + ArgumentNullException.ThrowIfNull(builder); + + builder.MediaUrlProviders().Insert(); + + var optionsBuilder = builder.Services.AddOptions() + .BindConfiguration("Umbraco:Storage:Cdn") + .ValidateDataAnnotations(); + + configure?.Invoke(optionsBuilder); + + return builder; + } } } diff --git a/src/Umbraco.StorageProviders/packages.lock.json b/src/Umbraco.StorageProviders/packages.lock.json index a538f73..997cc4b 100644 --- a/src/Umbraco.StorageProviders/packages.lock.json +++ b/src/Umbraco.StorageProviders/packages.lock.json @@ -24,6 +24,15 @@ "resolved": "3.4.255", "contentHash": "7aJa6+VzdKNDVJqGIWGtvIDh2HsIx8DIDfUg4yWViXc798awhSohPMk1oiAZqSntnrKThKJtn4vAMRdsCj8dtg==" }, + "StyleCop.Analyzers": { + "type": "Direct", + "requested": "[1.2.0-beta.406, )", + "resolved": "1.2.0-beta.406", + "contentHash": "YbsYoczQPZyz+4nmQ7bBiU9uQkk7Q2KUizQWEv01S4/ImCdJFiHvJfm8HAINNS0cvSLOA7xM9Y+KWQ2FOYjgkA==", + "dependencies": { + "StyleCop.Analyzers.Unstable": "1.2.0.406" + } + }, "Umbraco.Cms.Web.Common": { "type": "Direct", "requested": "[10.0.0-preview20220405.88864, )", @@ -1073,6 +1082,11 @@ "Smidge": "4.0.3" } }, + "StyleCop.Analyzers.Unstable": { + "type": "Transitive", + "resolved": "1.2.0.406", + "contentHash": "FclNdBR81ynIo9l1QNlo+l0I/PaFIYaPQPlMram8XVIMh6G6G43KTa1aCxfwTj13uKlAJS/LhLy6KjOPOeAU4w==" + }, "System.Buffers": { "type": "Transitive", "resolved": "4.5.1", From fd349a48b3e864c29b49b489ab9660b91399dff7 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 9 May 2022 13:52:33 +0200 Subject: [PATCH 21/26] Update dependency versions and fix nullability issues --- src/Directory.Build.props | 5 +- .../IO/AzureBlobFileSystem.cs | 2 +- .../PublicAPI.Shipped.txt | 2 +- .../Umbraco.StorageProviders.AzureBlob.csproj | 6 +- .../packages.lock.json | 899 +++++++++++++----- .../CdnMediaUrlProvider.cs | 2 +- .../CdnMediaUrlProviderExtensions.cs | 2 +- .../PublicAPI.Shipped.txt | 2 +- .../Umbraco.StorageProviders.csproj | 2 +- .../packages.lock.json | 871 +++++++++++++---- 10 files changed, 1358 insertions(+), 435 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 67228e4..8af3b61 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -17,7 +17,7 @@ - + @@ -41,8 +41,5 @@ true $(MSBuildThisFileDirectory) - - - diff --git a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs index ca7e867..e3bb84f 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs +++ b/src/Umbraco.StorageProviders.AzureBlob/IO/AzureBlobFileSystem.cs @@ -297,7 +297,7 @@ public string GetFullPath(string path) /// /// is null. - public string GetUrl(string path) + public string GetUrl(string? path) { ArgumentNullException.ThrowIfNull(path); diff --git a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt index 36c020f..f769948 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt +++ b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt @@ -68,7 +68,7 @@ Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFullPath(string! pa Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetLastModified(string! path) -> System.DateTimeOffset Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetRelativePath(string! fullPathOrUrl) -> string! Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetSize(string! path) -> long -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetUrl(string! path) -> string! +Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetUrl(string? path) -> string! Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.OpenFile(string! path) -> System.IO.Stream! Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.AzureBlobFileSystemOptions() -> void diff --git a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj index a3ae06a..25725c6 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj +++ b/src/Umbraco.StorageProviders.AzureBlob/Umbraco.StorageProviders.AzureBlob.csproj @@ -8,9 +8,9 @@ umbraco storage azure blob - - - + + + diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json index c84e880..f596d76 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -4,11 +4,11 @@ "net6.0": { "Azure.Storage.Blobs": { "type": "Direct", - "requested": "[12.11.0, )", - "resolved": "12.11.0", - "contentHash": "50eRjIhY7Q1JN7kT2MSawDKCcwSb7uRZUkz00P/BLjSg47gm2hxUYsnJPyvzCHntYMbOWzrvaVQTwYwXabaR5Q==", + "requested": "[12.12.0, )", + "resolved": "12.12.0", + "contentHash": "DYirbNIkP2KeCz+/7AP9Un8GkrmSfHSSE+J0k4pyIlI5d8wVWndZj5Pp74rNsgjE/jDRdr3dIhJHPQwHE4ifAg==", "dependencies": { - "Azure.Storage.Common": "12.10.0", + "Azure.Storage.Common": "12.11.0", "System.Text.Json": "4.7.2" } }, @@ -28,56 +28,49 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, - "Nerdbank.GitVersioning": { - "type": "Direct", - "requested": "[3.4.255, )", - "resolved": "3.4.255", - "contentHash": "7aJa6+VzdKNDVJqGIWGtvIDh2HsIx8DIDfUg4yWViXc798awhSohPMk1oiAZqSntnrKThKJtn4vAMRdsCj8dtg==" - }, "SixLabors.ImageSharp.Web.Providers.Azure": { "type": "Direct", - "requested": "[1.0.5, )", - "resolved": "1.0.5", - "contentHash": "gzgfO+ljx5FArEkyO+mVmZbDcp3FdIZv+JfV/C1jqK9QYLDtRFxYB/MTORwJArQ4YkUngcIpna83kpU54Cwjig==", + "requested": "[2.0.0, )", + "resolved": "2.0.0", + "contentHash": "P6fi6fAv3IBR+hoxXQfE3C8GZdSsRiPuxxxAGI01EXBwUzW1qB1W3XhR0AP+Uokxni3iXB7dr7xxEEd3iNeBXg==", "dependencies": { "Azure.Storage.Blobs": "12.10.0", - "SixLabors.ImageSharp.Web": "1.0.5" + "SixLabors.ImageSharp.Web": "2.0.0" } }, "StyleCop.Analyzers": { "type": "Direct", - "requested": "[1.2.0-beta.406, )", - "resolved": "1.2.0-beta.406", - "contentHash": "YbsYoczQPZyz+4nmQ7bBiU9uQkk7Q2KUizQWEv01S4/ImCdJFiHvJfm8HAINNS0cvSLOA7xM9Y+KWQ2FOYjgkA==", + "requested": "[1.2.0-beta.435, )", + "resolved": "1.2.0-beta.435", + "contentHash": "TADk7vdGXtfTnYCV7GyleaaRTQjfoSfZXprQrVMm7cSJtJbFc1QIbWPyLvrgrfGdfHbGmUPvaN4ODKNxg2jgPQ==", "dependencies": { - "StyleCop.Analyzers.Unstable": "1.2.0.406" + "StyleCop.Analyzers.Unstable": "1.2.0.435" } }, "Umbraco.Cms.Web.Common": { "type": "Direct", - "requested": "[10.0.0-preview20220405.88864, )", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "65m/PRDo4DJWfuldzVC3kVGdj3jx5ZWk/z9/989O8blqN8FJVOTl7zi+d+kTRVlWlB9LesO3ScuxDPL1gvJjGg==", + "requested": "[10.0.0-rc1, )", + "resolved": "10.0.0-rc1", + "contentHash": "wcV+OmlPhF0pCTZgt9r6an1Jb0iaY8q61wdu3eSBMT7QT/YMK5Noew+eURhyK4Zc9NOIzBzV7ZCHGst0ptw40g==", "dependencies": { "Dazinator.Extensions.FileProviders": "2.0.0", - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.0", - "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.0", + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.4", + "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.4", "MiniProfiler.AspNetCore.Mvc": "4.2.22", - "NETStandard.Library": "2.0.3", - "Serilog.AspNetCore": "4.1.0", - "SixLabors.ImageSharp.Web": "1.0.5", - "Smidge.InMemory": "4.0.3", - "Smidge.Nuglify": "4.0.3", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Examine.Lucene": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864", - "Umbraco.Cms.PublishedCache.NuCache": "10.0.0-preview20220405.88864" + "Serilog.AspNetCore": "5.0.0", + "SixLabors.ImageSharp.Web": "2.0.0", + "Smidge.InMemory": "4.0.4", + "Smidge.Nuglify": "4.0.4", + "Umbraco.Cms.Core": "10.0.0-rc1", + "Umbraco.Cms.Examine.Lucene": "10.0.0-rc1", + "Umbraco.Cms.Infrastructure": "10.0.0-rc1", + "Umbraco.Cms.PublishedCache.NuCache": "10.0.0-rc1" } }, "Azure.Core": { "type": "Transitive", - "resolved": "1.22.0", - "contentHash": "ze/xRCHSSDe5TIk5vBDbVrauW1EN7UIbnBvIBfMH8KSt/I9+/7yPAjTBDgNBk0IwG6WBV+BBHp4IUtS/PGAQwQ==", + "resolved": "1.24.0", + "contentHash": "+/qI1j2oU1S4/nvxb2k/wDsol00iGf1AyJX5g3epV7eOpQEP/2xcgh/cxgKMeFgn3U2fmgSiBnQZdkV+l5y0Uw==", "dependencies": { "Microsoft.Bcl.AsyncInterfaces": "1.1.1", "System.Diagnostics.DiagnosticSource": "4.6.0", @@ -104,10 +97,10 @@ }, "Azure.Storage.Common": { "type": "Transitive", - "resolved": "12.10.0", - "contentHash": "vYkHGzUkdZTace/cDPZLG+Mh/EoPqQuGxDIBOau9D+XWoDPmuUFGk325aXplkFE4JFGpSwoytNYzk/qBCaiHqg==", + "resolved": "12.11.0", + "contentHash": "BPZ1JwYvehHGoTSXhXfAmwtFYejJghE6dkKvpZtPIL0DulzSIJdll9OZI+h5W+3wLYK0yn5hc1r6mvId0q4npA==", "dependencies": { - "Azure.Core": "1.22.0", + "Azure.Core": "1.24.0", "System.IO.Hashing": "6.0.0" } }, @@ -135,19 +128,19 @@ }, "Examine": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "4P9HSuIU7xQc+t4R4qQeos0vsyrIYFhlB7KyybYBipkvENbRVdrGSFYxjTjBgCMyawxtvSJrV1FZeYdJemp6bA==", + "resolved": "3.0.0-beta.9", + "contentHash": "BB5BwjzxKwP34EFdDQQWBQAgDjsZk61YaGQml1vR71DxdD6cA0Dk4ripUzM9Od9Zq4YWTjD/MjDsnt6qefeGoQ==", "dependencies": { - "Examine.Core": "2.0.1", - "Examine.Lucene": "2.0.1", + "Examine.Core": "3.0.0-beta.9", + "Examine.Lucene": "3.0.0-beta.9", "Microsoft.AspNetCore.DataProtection": "5.0.5", "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" } }, "Examine.Core": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "IbGVviYpQTMZGvpt1JuefzDxShJACUvtUNeo50LKTVgrc4eCkRi2jmT9FnTUi+YhLrNhBRmruVtYQ5lj7x3rzQ==", + "resolved": "3.0.0-beta.9", + "contentHash": "hBk8ZCFD+Bv0NzBuHyAW5UD+V3OWoiyqf756U++819TT5wzziP4OYT34450ulIjZ40Rr9wPySWA31xkXJ1CfVQ==", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "5.0.0", "Microsoft.Extensions.Options": "5.0.0" @@ -155,125 +148,122 @@ }, "Examine.Lucene": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "WFHZlnbmSw3hlE6UCNxKwswxqcqvZH7Lyp+N7RWjZVnwiDueznadCjXfMvByZNi4ELQWBwdt/9FR4+srN1Kz4w==", + "resolved": "3.0.0-beta.9", + "contentHash": "0yEd0LMtUqL9GKdDaRUu+MmDc1HKa4bUOzpEQa6fbdXHN8ITDDmrefZCWAc4OvplWO7DHi/OSS5lALqzsy91wg==", "dependencies": { - "Examine.Core": "2.0.1", - "Lucene.Net.QueryParser": "4.8.0-beta00014", - "Lucene.Net.Replicator": "4.8.0-beta00014", + "Examine.Core": "3.0.0-beta.9", + "Lucene.Net.QueryParser": "4.8.0-beta00016", + "Lucene.Net.Replicator": "4.8.0-beta00016", "System.Threading": "4.3.0", "System.Threading.AccessControl": "4.7.0" } }, "HtmlAgilityPack": { "type": "Transitive", - "resolved": "1.11.38", - "contentHash": "DC1j3GzU9lBp8hSXb9eYRHiJOUS5sxjBjme/4RTYjTXlgiFCOMXkIY+rmL+BtUss1pCwCN4LaVlZ/ci/fWY+lA==" + "resolved": "1.11.42", + "contentHash": "LDc1bEfF14EY2DZzak4xvzWvbpNXK3vi1u0KQbBpLUN4+cx/VrvXhgCAMSJhSU5vz0oMfW9JZIR20vj/PkDHPA==" }, "IPNetwork2": { "type": "Transitive", - "resolved": "2.5.366", - "contentHash": "cWR9CCOH+ZXUTt1CNqT4FI1AEeMEltXQcPDLelI3dg3TKlbzYGKAR737UQbkyW5+NV29TvhRRyPy8th2eqQJow==" + "resolved": "2.5.407", + "contentHash": "EqjBifFaKVzBCxV9aRHuOswCKj9p+E8KxCVuWni/0NIMNSa5thLf3kiQkyEZ7giHNMnT4jBgsf2kqEkmifRSPQ==" }, "J2N": { "type": "Transitive", - "resolved": "2.0.0-beta-0012", - "contentHash": "QwXTVD41IYPmSBInJiGvv5c4X2P60p8B8JPuCMGiKuumw9kUv45jbX56Xx0bgYPWHXQVex3tV+NHHZ7cEidLFg==" + "resolved": "2.0.0", + "contentHash": "M5bwDajAARZiyqupU+rHQJnsVLxNBOHJ8vKYHd8LcLIb1FgLfzzcJvc31Qo5Xz/GEHFjDF9ScjKL/ks/zRTXuA==" }, "K4os.Compression.LZ4": { "type": "Transitive", - "resolved": "1.2.15", - "contentHash": "aCuJEi64ptq0iovQa+WqqMsRJKn+51Qd6plIAa0c6SiM8vgl/IybXaN63LvmO9KJmE6AeHYeundISm2ryFfzAw==", - "dependencies": { - "System.Memory": "4.5.4" - } + "resolved": "1.2.16", + "contentHash": "XLNQWNayxeMgd1gv0s6kZywM11kww7rTzu3nPGh8fQNblHGbFt79LC1Sk1/QQ8DIJb2Qfl2p+WlLIOWCSuyi8w==" }, "Lucene.Net": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "3iNUYa9X7r90lGFAhaM+tfwoVSw9q5sf503vrxYXtST/+OvzEnnTWiAuLxkH8oyMX8sQFphfsAFYlTn/z4pRSA==", + "resolved": "4.8.0-beta00016", + "contentHash": "DCtUbE/NIrisNI7hRwU+UKS3Cr6S2vH1XB9wvEHHI3anu5OUpX1Fkr/PDC7oFCaol/QCvzVLbLZVizAT1aTLpA==", "dependencies": { - "J2N": "2.0.0-beta-0012", + "J2N": "2.0.0", "Microsoft.Extensions.Configuration.Abstractions": "2.0.0" } }, "Lucene.Net.Analysis.Common": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "JKlS1wIAouyqUJhuokBB/+yd6uJRXA+F9xNU7Gpbfji4ZwkR+a+Y3oV7AhhyG6M72z3X/PsYK1qCRdDzya4o+A==", + "resolved": "4.8.0-beta00016", + "contentHash": "7pjEAIliWdih6E3I0hCE8hKcKKRx1LLzeQBslF1fhvzE1Sal4NyHd8RFJHV1Z+yHlBw4gCyyVIDZADiIoyqwxg==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016" } }, "Lucene.Net.Facet": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "O5lDg0/WVjDyrxo/Ba5/eb5jPcFlJQA1MuUsSaItBFAu0gHA7CimJ7dUwEHvTIVdyAkJeLJ7fuNNVvoxhdTj2A==", + "resolved": "4.8.0-beta00016", + "contentHash": "O1MrRfhb9BMfRQHooyEFrkgNwYbTEbK/AkKhz26sy+xO+zAldJ8YKS/IsydHsE+frklIAWT0jyv0c3Dh9qBXSA==", "dependencies": { - "Lucene.Net.Join": "4.8.0-beta00014", - "Lucene.Net.Queries": "4.8.0-beta00014" + "Lucene.Net.Join": "4.8.0-beta00016", + "Lucene.Net.Queries": "4.8.0-beta00016" } }, "Lucene.Net.Grouping": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "SW1PSChvHuq36LEUv6BQR4NmlqcCwUQUgG54hPsAYEIGOzSdkVtmi90X8LqVqmlaEzvYaJkr45gmF11kvUZs/g==", + "resolved": "4.8.0-beta00016", + "contentHash": "y7QSEYfSnz7gEJS30xHsf8P0oMIreGGO08qC+UzKre29IAoUXdLLE2+vUfByGkcPuoGMIpZVBP51P6O647grBg==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014", - "Lucene.Net.Queries": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016", + "Lucene.Net.Queries": "4.8.0-beta00016" } }, "Lucene.Net.Join": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "QQWCHoC5zv14DPvyij8wIgaSttS7vW+8hIZPtO+3eM5DfVz/x3aApJ49f1bMRfHmL8ChcbNn/vT7Xk02EpuGkQ==", + "resolved": "4.8.0-beta00016", + "contentHash": "trUiWhV3QPgW4TNPrEP29AsTXE29ACR5+Vz22xjbPtFTwyXMozl95NELVG5aUVMTqdwyMhJ9Lj82QeoHDnN0jw==", "dependencies": { - "Lucene.Net.Grouping": "4.8.0-beta00014" + "Lucene.Net.Grouping": "4.8.0-beta00016" } }, "Lucene.Net.Queries": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "9m8PykPZuDj/sxDFqfUqrCh1zFpXAAS/csxC5oIeaVy464YJSahSMxQppgXDOaDcEHGq5vxYlWEm7NsSHmYMMQ==", + "resolved": "4.8.0-beta00016", + "contentHash": "XBzdMDlan68V2ZlhAlP8Fd+Xx2Le8ec7cEN1kFF45Sipa3Q8L/tilJfwS9VHvMTvGkwPM/yj62eGbfGBgIMR8Q==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016" } }, "Lucene.Net.QueryParser": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "jO6XRRBKpLB8QQ8nZvs9l3zHbMNIzMJunh37dR23V9AbbbpZQ5vHRUg086t/QMVLQikWAhqKFDmvDU16IjvPKA==", + "resolved": "4.8.0-beta00016", + "contentHash": "5dVvjXmzPaK8GD/eblJopTJMQmO6c6fvVPfBIOw46+jyZR+yESkUnWF1LtLoLXZQNrl4Dx8LKdes5G1QAM7eGA==", "dependencies": { - "Lucene.Net.Analysis.Common": "4.8.0-beta00014", - "Lucene.Net.Queries": "4.8.0-beta00014", - "Lucene.Net.Sandbox": "4.8.0-beta00014" + "Lucene.Net.Analysis.Common": "4.8.0-beta00016", + "Lucene.Net.Queries": "4.8.0-beta00016", + "Lucene.Net.Sandbox": "4.8.0-beta00016" } }, "Lucene.Net.Replicator": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "hz9ixwqYbAWS9tHAK8ho/ovnd6+3zWHEFQeYv5xExmNgo17InUHJMYik67hrBMuIzXnX7auu23NHDayfd8J9jQ==", + "resolved": "4.8.0-beta00016", + "contentHash": "BP007m7TtHfOFNGoipn1Y3kgHir0yvDfyCW9g7P6PQIo7nNkyyHuEK9slVEkPhLq+21Q2EnnHl7jMGeh0aK2eA==", "dependencies": { - "J2N": "2.0.0-beta-0012", - "Lucene.Net": "4.8.0-beta00014", - "Lucene.Net.Facet": "4.8.0-beta00014", + "J2N": "2.0.0", + "Lucene.Net": "4.8.0-beta00016", + "Lucene.Net.Facet": "4.8.0-beta00016", "Newtonsoft.Json": "10.0.1" } }, "Lucene.Net.Sandbox": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "Mg22EHBi1Ls129ctmh78spPXvwGWNG4PRP+kePs9j3OvkKlXSv1ms4GeR0mcFdQW6Z4Nf6/eg2OZ9eJPlEbFDg==", + "resolved": "4.8.0-beta00016", + "contentHash": "wMsRZtbNx0wvX3mtNjpOwQmKx3Ij4UGHWIYHbvnzMWlPUTgtOpYSj02REL4hOxI71WBZylpGB5EWfQ2eEld63g==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016" } }, "MailKit": { "type": "Transitive", - "resolved": "2.15.0", - "contentHash": "9ihv6pRmjmBEAP4eXlDeo9srFQF9dVtYP1/jzj3I3BV9tBRk66NLdAF+8jkgUtauMKmns0yBvtfMFiBnNkHKDQ==", + "resolved": "3.2.0", + "contentHash": "5MTpTqmjqT7HPvYbP3HozRZMth5vSaT0ReN0iM3rAM4CgLI/R1qqtLDDNWGnFFIlcNzeJkZQRJJMkv8cgzWBbA==", "dependencies": { - "MimeKit": "2.15.0" + "MimeKit": "3.2.0" } }, "Markdown": { @@ -301,15 +291,15 @@ }, "Microsoft.AspNetCore.Cryptography.Internal": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "ZWFBiHwkmipr+7t3MEPa7oB/iE8Kf5wvUptn9AXj7P7l/tGHEmRb1606Mlh/e2zkYwfjNGDH4Z5dUUlcnyccIw==" + "resolved": "6.0.4", + "contentHash": "/0FX1OqckMmXAAlsHgBFNymTZuq4nuAOMhiwm6e8CEMi2aOjnMYwiMc7mtvpGTAO0O4C0zwx+iaChxDgvqit2A==" }, "Microsoft.AspNetCore.Cryptography.KeyDerivation": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "CcYIcGn/zJFY0zq84V4r9Xd4aQn2/+8tsiRBYnhS/LVgWNDq7EsWxmLJ+bXWBBdpTHA+IKvXTag9YElFKFHWYQ==", + "resolved": "6.0.4", + "contentHash": "1Lbwrxg/HRY/nbrkcrB3EUXUYQN8Tkw7Ktgb6/2on2P7ybT5aM59H05gk+OBC8ZTBxwdle9e1tyT3wxEYKw5xw==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.Internal": "6.0.0" + "Microsoft.AspNetCore.Cryptography.Internal": "6.0.4" } }, "Microsoft.AspNetCore.DataProtection": { @@ -378,8 +368,8 @@ }, "Microsoft.AspNetCore.JsonPatch": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "SUiwg0XQ5NtmnELHXSdX4mAwawFnAOwSx2Zz6NIhQnEN1tZDoAWEHc8dS/S7y8cE52+9bHj+XbYZuLGF7OrQPA==", + "resolved": "6.0.4", + "contentHash": "BDI7P53vCNqB35poKWUUeUZxr46/g/h6CyHYrU2byICC1/oGdX7iZ2naG3X8VeZcmdC1YBkbXb5LXLtutHSq1Q==", "dependencies": { "Microsoft.CSharp": "4.7.0", "Newtonsoft.Json": "13.0.1" @@ -387,37 +377,37 @@ }, "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "YMwSWgBuwkVn9k4/2wWxfwEbx8T5Utj13UH/zmUm5lbkKcY+tJyt9w9P4rY5pO1XtCitoh1+L+Feqz9qxG/CvA==", + "resolved": "6.0.4", + "contentHash": "RQGy4kX3dkvcz0v84+sl6xmOYhpA3CFgylNiAPFxi36JLp4uU5SEvbbLo6u+d4tHbyGkaLe8RzKLJmnRdckZ9A==", "dependencies": { - "Microsoft.AspNetCore.JsonPatch": "6.0.0", + "Microsoft.AspNetCore.JsonPatch": "6.0.4", "Newtonsoft.Json": "13.0.1", "Newtonsoft.Json.Bson": "1.0.2" } }, "Microsoft.AspNetCore.Mvc.Razor.Extensions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "M0h+ChPgydX2xY17agiphnAVa/Qh05RAP8eeuqGGhQKT10claRBlLNO6d2/oSV8zy0RLHzwLnNZm5xuC/gckGA==", + "resolved": "6.0.4", + "contentHash": "LNHMPXJkxoqAJrDTHHNekUstkJVxBqu3eJcu3lSjH3iPQw38hBzWPFUieP4MgC31C3ssabULaD2PB1WeOl058Q==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "6.0.0", - "Microsoft.CodeAnalysis.Razor": "6.0.0" + "Microsoft.AspNetCore.Razor.Language": "6.0.4", + "Microsoft.CodeAnalysis.Razor": "6.0.4" } }, "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "bf4kbla/8Qiu53MgFPz1u3H1ThoookPpFy+Ya9Q9p531wXK1pZ3tfz/Gtx8SKy41yz99jhZHTUM1QqLl7eJRgQ==", + "resolved": "6.0.4", + "contentHash": "9fd1xCNfJbuJPinj0o98IpjUsCeuyvGke7sfkagaN5nxhyfr1qYYcGO0Irf/0gNcUWVZHAu3e7XY6iXIhHs/Yw==", "dependencies": { - "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.0", - "Microsoft.CodeAnalysis.Razor": "6.0.0", + "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.4", + "Microsoft.CodeAnalysis.Razor": "6.0.4", "Microsoft.Extensions.DependencyModel": "6.0.0" } }, "Microsoft.AspNetCore.Razor.Language": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "yCtBr1GSGzJrrp1NJUb4ltwFYMKHw/tJLnIDvg9g/FnkGIEzmE19tbCQqXARIJv5kdtBgsoVIdGLL+zmjxvM/A==" + "resolved": "6.0.4", + "contentHash": "pUBOF/SNk4/6eoK5M75cfqdQwZdlKRNGjzidO6MIuqnsgFIN5qiC7POYImgWv++0yoGyOpdNjnAHBQua7mLXVQ==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -458,10 +448,10 @@ }, "Microsoft.CodeAnalysis.Razor": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "uqdzuQXxD7XrJCbIbbwpI/LOv0PBJ9VIR0gdvANTHOfK5pjTaCir+XcwvYvBZ5BIzd0KGzyiamzlEWw1cK1q0w==", + "resolved": "6.0.4", + "contentHash": "OO9M3idcJCCjXOnShNyGTZkP2dofRlRqDNhSmA1boJtW1MSXMWwpyj3Z8DXVP0BLkMXqFQ0zFMEVMX5Eys57jw==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "6.0.0", + "Microsoft.AspNetCore.Razor.Language": "6.0.4", "Microsoft.CodeAnalysis.CSharp": "4.0.0", "Microsoft.CodeAnalysis.Common": "4.0.0" } @@ -597,8 +587,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "9uQbDTqX1MidhoZFUSK1JItt74IapEadFDOIWAlBIKxr3O/ZEWLWkLYGlgUeP1Dkyog6/CB7h1EAU3xADYZ/lA==", + "resolved": "6.0.4", + "contentHash": "Ydzdq2WxGzKpQUUD4CxEDU+m2HPxR573IrQMk3pzsf3QCg5X06Td1hFRuK8+Tv0xZaLup71yQnbKN2AvNTjAYQ==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -641,21 +631,21 @@ }, "Microsoft.Extensions.Identity.Core": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "coWZViIBVb1szN3zMMa6KYP9KmJzOniwQ5tySbiFmVW6Nbdy1KuNDNzIKQcigmfqS4aLWVvNLGCFyDJWYskS8g==", + "resolved": "6.0.4", + "contentHash": "8vBsyGkA8ZI3lZvm1nf+9ynRC/TzPD+UtbdgTlKk+cz+AW5I41LrK8f/adGej5uXgprOA2DMjZw33vZG6vyXxA==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.0", + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.4", "Microsoft.Extensions.Logging": "6.0.0", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Identity.Stores": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "3TniGyXEuFLQhJoiEReGD4HAdSKRxuQX5FDDg4GwFeeB36en4xQC5MVuWx1riiNwmh2eMtXq/wLdaJLd6JXIig==", + "resolved": "6.0.4", + "contentHash": "linRCnWBfnqg8qjrd9u/KMISy8O4a6X/GRhpHXU0ar654YQw9LJ/Ht+psx8QLqSX5EsCBbBCZzuamatH2FWIyQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "6.0.0", - "Microsoft.Extensions.Identity.Core": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.4", "Microsoft.Extensions.Logging": "6.0.0" } }, @@ -772,13 +762,13 @@ }, "Microsoft.IO.RecyclableMemoryStream": { "type": "Transitive", - "resolved": "2.1.3", - "contentHash": "h1hjJ7E0ZMTbutiUXmv07rs+cTST9+w+iDNZginmArfZr47GjHevwBQK/LBcAkHm+w+IHaBd9Lsuf5dv8DnDAg==" + "resolved": "2.2.0", + "contentHash": "uyjY/cqomw1irT4L7lDeg4sJ36MsjHg3wKqpGrBAdzvZaxo85yMF+sAA9RIzTV92fDxuUzjqksMqA0+SNMkMgA==" }, "Microsoft.NETCore.Platforms": { "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==" + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", @@ -790,6 +780,16 @@ "resolved": "1.1.1", "contentHash": "WMcGpWKrmJmzrNeuaEb23bEMnbtR/vLmvZtkAP5qWu7vQsY59GqfRJd65sFpBszbd2k/bQ8cs8eWawQKAabkVg==" }, + "Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", @@ -806,14 +806,11 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "2.15.0", - "contentHash": "146As77LbmZezdSJ5W/2ZEQsZyqVSAM8yOjDjvsy6NpLmyqG8lgzmX6ps3P/fKzUN5Ey4hxwnAtH+KLlJW0CsQ==", + "resolved": "3.2.0", + "contentHash": "l9YHMBhBUwY7qQHUp8fw0EvjcbmhN4Iggz6MdjqIShBf42+0nJTa5gu0kuupCOPuiARc9ZaS9c9f0gKz4OnxKw==", "dependencies": { - "Portable.BouncyCastle": "1.8.10", - "System.Buffers": "4.5.1", - "System.Reflection.TypeExtensions": "4.4.0", - "System.Security.Cryptography.Pkcs": "4.7.0", - "System.Text.Encoding.CodePages": "4.4.0" + "Portable.BouncyCastle": "1.9.0", + "System.Security.Cryptography.Pkcs": "6.0.0" } }, "MiniProfiler.AspNetCore": { @@ -858,10 +855,53 @@ }, "NETStandard.Library": { "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "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.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "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.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" } }, "Newtonsoft.Json": { @@ -908,8 +948,23 @@ }, "Portable.BouncyCastle": { "type": "Transitive", - "resolved": "1.8.10", - "contentHash": "XLhjNAwuVB9ynwn11l5K44eyozh8q6gFseTrlnLNttejimglX7+F9+vxh60LPjvA/DAt6fUdS43N3ah8K6eaWg==" + "resolved": "1.9.0", + "contentHash": "eZZBCABzVOek+id9Xy04HhmgykF0wZg9wpByzrWN7q8qEI0Qen9b7tfd7w8VA3dOeesumMG7C5ZPy0jk7PSRHw==" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.native.System": { "type": "Transitive", @@ -920,6 +975,89 @@ "Microsoft.NETCore.Targets": "1.1.0" } }, + "runtime.native.System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" + }, "Serilog": { "type": "Transitive", "resolved": "2.10.0", @@ -927,18 +1065,18 @@ }, "Serilog.AspNetCore": { "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "qRdEkjX10VJ5Cb3B9q/Q/tv+0ntDxAIA1YbOmmNMlkha1TU0ckK5b73eBYMNNLMAU92ofrzOEuIJEc6Q+Q1Z2A==", + "resolved": "5.0.0", + "contentHash": "/JO/txIxRR61x1UXQAgUzG2Sx05o1QHCkokVBWrKzmAoDu+p5EtCAj7L/TVVg7Ezhh3GPiZ0JI9OJCmRO9tSRw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "5.0.0", "Microsoft.Extensions.Logging": "5.0.0", "Serilog": "2.10.0", - "Serilog.Extensions.Hosting": "4.1.2", + "Serilog.Extensions.Hosting": "4.2.0", "Serilog.Formatting.Compact": "1.1.0", - "Serilog.Settings.Configuration": "3.1.0", - "Serilog.Sinks.Console": "3.1.1", + "Serilog.Settings.Configuration": "3.3.0", + "Serilog.Sinks.Console": "4.0.1", "Serilog.Sinks.Debug": "2.0.0", - "Serilog.Sinks.File": "4.1.0" + "Serilog.Sinks.File": "5.0.0" } }, "Serilog.Enrichers.Process": { @@ -1023,13 +1161,10 @@ }, "Serilog.Sinks.Console": { "type": "Transitive", - "resolved": "3.1.1", - "contentHash": "56mI5AqvyF/i/c2451nvV71kq370XOCE4Uu5qiaJ295sOhMb9q3BWwG7mWLOVSnmpWiq0SBT3SXfgRXGNP6vzA==", + "resolved": "4.0.1", + "contentHash": "apLOvSJQLlIbKlbx+Y2UDHSP05kJsV7mou+fvJoRGs/iR+jC22r8cuFVMjjfVxz/AD4B2UCltFhE1naRLXwKNw==", "dependencies": { - "Serilog": "2.5.0", - "System.Console": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" + "Serilog": "2.10.0" } }, "Serilog.Sinks.Debug": { @@ -1058,30 +1193,34 @@ }, "SixLabors.ImageSharp": { "type": "Transitive", - "resolved": "1.0.4", - "contentHash": "H2rPiEr2ddBOltOuqRYhpLBAsQXDAhbzMMhhuksnBG2oefup1MXMchALe7yYkKJksNbtxbZHKeM6dn/68I75qw==" + "resolved": "2.1.1", + "contentHash": "oNHMT8+yUR9dyuU2r7fwsXvvS4OnfCs9N5i2y2p9iBxp3nvEZbe/hZWrOGfD7MX2lxOAlWzlhzj0q2uFwP8avg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "5.0.0", + "System.Text.Encoding.CodePages": "5.0.0" + } }, "SixLabors.ImageSharp.Web": { "type": "Transitive", - "resolved": "1.0.5", - "contentHash": "FJv4G7P1Yn364/bjaxE2xiQAa9ZdEd4MwfQ2/Og3Q7911X0oWQk+JfnIF7zJGI/2uio66gSkx1UGeDURU6TOJQ==", + "resolved": "2.0.0", + "contentHash": "4sTDmj38Ab/HOHituh9ks1q1MTuX6leBtbDOe9RJ5zyiWHXDn79BWdJ8fTYzFAsAl0KeOh4Gh0RNRftnYmABZg==", "dependencies": { - "Microsoft.IO.RecyclableMemoryStream": "2.1.3", - "SixLabors.ImageSharp": "1.0.4" + "Microsoft.IO.RecyclableMemoryStream": "2.2.0", + "SixLabors.ImageSharp": "2.1.1" } }, "Smidge": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "03UbGTGpe2VIyWVljVXH47vrHxTBrxqenE15JpKdrHsWDLDzWfarhKC7HVl/gSRKm6TypFLRt93AnhcszKAp1Q==", + "resolved": "4.0.4", + "contentHash": "o1Y1xLzQBdxhajMP3trhfRHwYnElZpAWfWPAaCCbpKd2sQqwX/J4KtxLnQdASo98pQVzWDKW3d7Dt0v5/NU/6g==", "dependencies": { - "Smidge.Core": "4.0.3" + "Smidge.Core": "4.0.4" } }, "Smidge.Core": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "gny2iKmHB7mmRay44X0Et6tvBkXmd/sSkUA4JJsHiPuyYGrv8GdHPoBJZQcCPS7PensbvNu2KQr1WcAMSFv0rQ==", + "resolved": "4.0.4", + "contentHash": "JFYGvMyfHGuVX4GOosDePsY31eZtefZseg2yQss1Vbc73B12SHeL9IbuE/Sdioi/GDXV2T5AILL8LIY6hzWJ1w==", "dependencies": { "Microsoft.AspNetCore.Http.Features": "5.0.0", "Microsoft.Extensions.Configuration": "5.0.0", @@ -1094,27 +1233,35 @@ }, "Smidge.InMemory": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "DmXqCc3onAldR7dvSu5U+Hld16lai8x65HpDgKeNt9hNfsPtdu5dBh2SLqJG0QrpDAdTyifA9Xpa5tMw3sxxfA==", + "resolved": "4.0.4", + "contentHash": "1Ve1ySrwZNmpjkJecAesiktVZn1uOLcZ3qNGLZ/7HzssdtzN1QP967M1iU9Zg+3h2BD3/ifQmNPk/uKJ0Vmb/w==", "dependencies": { "Dazinator.Extensions.FileProviders": "2.0.0", - "Smidge.Core": "4.0.3", + "Smidge.Core": "4.0.4", "System.Text.Encodings.Web": "5.0.1" } }, "Smidge.Nuglify": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "A3lHDlGDS6QPkDDb/QyZFq10+NiuaNOPlo52XTq3euSvUyKjikfJ8zC35NceRiUuJiRK785WJD0BNgipkAa37w==", + "resolved": "4.0.4", + "contentHash": "E1NoWmWVCFpLizNWh8ow81fy4z9nQE0UvYTc8gkzHGtVRrPsfHJYF7l/p+VZuryfyvD9er2NkS6LmQnv8M17Iw==", "dependencies": { "Nuglify": "1.13.12", - "Smidge": "4.0.3" + "Smidge": "4.0.4" } }, "StyleCop.Analyzers.Unstable": { "type": "Transitive", - "resolved": "1.2.0.406", - "contentHash": "FclNdBR81ynIo9l1QNlo+l0I/PaFIYaPQPlMram8XVIMh6G6G43KTa1aCxfwTj13uKlAJS/LhLy6KjOPOeAU4w==" + "resolved": "1.2.0.435", + "contentHash": "ouwPWZxbOV3SmCZxIRqHvljkSzkCyi1tDoMzQtDb/bRP8ctASV/iRJr+A2Gdj0QLaLmWnqTWDrH82/iP+X80Lg==" + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "dependencies": { + "System.Runtime": "4.3.0" + } }, "System.Buffers": { "type": "Transitive", @@ -1241,6 +1388,16 @@ "System.Runtime": "4.3.0" } }, + "System.Diagnostics.Tools": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", @@ -1282,8 +1439,8 @@ }, "System.Formats.Asn1": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w==" + "resolved": "6.0.0", + "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA==" }, "System.Globalization": { "type": "Transitive", @@ -1295,17 +1452,28 @@ "System.Runtime": "4.3.0" } }, + "System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, "System.Globalization.Extensions": { "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "KKo23iKeOaIg61SSXwjANN7QYDr/3op3OWGGzDzz7mypx0Za0fZSeG0l6cco8Ntp8YMYkIQcAqlk8yhm5/Uhcg==", + "resolved": "4.3.0", + "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "System.Globalization": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Runtime.InteropServices": "4.1.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" } }, "System.IdentityModel.Tokens.Jwt": { @@ -1329,6 +1497,44 @@ "System.Threading.Tasks": "4.3.0" } }, + "System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "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.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", @@ -1426,6 +1632,63 @@ "System.Text.Json": "4.6.0" } }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "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.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, "System.Numerics.Vectors": { "type": "Transitive", "resolved": "4.5.0", @@ -1510,8 +1773,12 @@ }, "System.Reflection.TypeExtensions": { "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "dkmh/ySlwnXJp/1qYP9uyKkCK1CXR/REFzl7abHcArxBcV91mY2CgrrzSRA5Z/X4MevJWwXsklGRdR3A7K9zbg==" + "resolved": "4.3.0", + "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } }, "System.Resources.ResourceManager": { "type": "Transitive", @@ -1594,6 +1861,17 @@ "runtime.native.System": "4.3.0" } }, + "System.Runtime.Numerics": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, "System.Runtime.Serialization.Primitives": { "type": "Transitive", "resolved": "4.3.0", @@ -1608,21 +1886,111 @@ "resolved": "6.0.0", "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" }, + "System.Security.Cryptography.Algorithms": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "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.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, "System.Security.Cryptography.Cng": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", + "resolved": "4.5.0", + "contentHash": "WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==" + }, + "System.Security.Cryptography.Csp": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { - "System.Formats.Asn1": "5.0.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "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", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "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.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "dependencies": { + "System.Collections": "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.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "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", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "9TPLGjBCGKmNvG8pjwPeuYy0SMVmGZRwlTZvyPHDbYv/DRkoeumJdfumaaDNQzVGMEmbWtg07zUpSW9q70IlDQ==", + "resolved": "6.0.0", + "contentHash": "elM3x+xSRhzQysiqo85SbidJJ2YbZlnvmh+53TuSZHsD7dNuuEWser+9EFtY+rYupBwkq2avc6ZCO3/6qACgmg==", "dependencies": { - "System.Formats.Asn1": "5.0.0", - "System.Security.Cryptography.Cng": "5.0.0" + "System.Formats.Asn1": "6.0.0" + } + }, + "System.Security.Cryptography.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", + "dependencies": { + "System.Diagnostics.Debug": "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.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" } }, "System.Security.Cryptography.ProtectedData": { @@ -1630,6 +1998,38 @@ "resolved": "6.0.0", "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==" }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "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.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, "System.Security.Cryptography.Xml": { "type": "Transitive", "resolved": "5.0.0", @@ -1665,10 +2065,21 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "aeu4FlaUTemuT1qOd1MyU4T516QR4Fy+9yDbwWMPHOHy7U8FD6SgTzdZFO7gHcfAPHtECqInbwklVvUK4RHcNg==", + "resolved": "5.0.0", + "contentHash": "NyscU59xX6Uo91qvhOs2Ccho3AR2TnZPomo1Z0K6YpyztBPM/A5VbkzOO19sy3A3i1TtEnTxA7bCe3Us+r5MWg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "5.0.0" + } + }, + "System.Text.Encoding.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", "dependencies": { - "Microsoft.NETCore.Platforms": "3.1.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0" } }, "System.Text.Encodings.Web": { @@ -1749,6 +2160,16 @@ "System.Threading.Tasks": "4.3.0" } }, + "System.Threading.Timer": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "6.0.0", @@ -1757,15 +2178,57 @@ "System.Drawing.Common": "6.0.0" } }, + "System.Xml.ReaderWriter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, "Umbraco.Cms.Core": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "u5vmG6XnVBCpCaR86zNfYuP8Ze5Wly352EzEdUSY+FtKK6nWl9S/0udDnDbh5lKQ0EJ8+ID74aYZ2fL6HfhYAQ==", + "resolved": "10.0.0-rc1", + "contentHash": "kFQ/Z+q1ZJli7sYUNgQnv89VluuXWQcvLUu9X9mWA+6hk9v4pVHNzFNVTzcqSuEIMAcMtowSHZWtJqJxDA6CRA==", "dependencies": { "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.0", + "Microsoft.Extensions.FileProviders.Embedded": "6.0.4", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.4", "Microsoft.Extensions.Logging": "6.0.0", "Microsoft.Extensions.Options": "6.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", @@ -1777,23 +2240,23 @@ }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "s4Txm5sVZzzVMeVWGQbJ2mq/0AvHXcbQ9Kv53mbABIGizFt53+rJBYl0gaayUg5k+Sbra/5bc2b6qfgLw3kJxw==", + "resolved": "10.0.0-rc1", + "contentHash": "oL3rnv5fFMlZtF35G9kci80n7BEeYHh/sMrYYrQju76xAt23EuZvc2WFHPkGzUx1SZxCRB/LYvjyFqbnCtd7rw==", "dependencies": { - "Examine": "2.0.1", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" + "Examine": "3.0.0-beta.9", + "Umbraco.Cms.Core": "10.0.0-rc1", + "Umbraco.Cms.Infrastructure": "10.0.0-rc1" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "/yB/HZgv0x5EuwZWUa+9etCIQdAUc6idmNdsk+/6BDfQRAl4rUUygJn/5qTAZLOzZDn3YBL6V2pqhGHvCiAe2Q==", + "resolved": "10.0.0-rc1", + "contentHash": "8fwyXkQ4TAqLILFmZOGkXxC6FO2kPaIgYAwPpBOMYuKHVcZSU83B1AKSCQNBjTT4ZHWe3EvC7xNBeD1iByvGQg==", "dependencies": { - "Examine.Core": "2.0.1", - "HtmlAgilityPack": "1.11.38", - "IPNetwork2": "2.5.366", - "MailKit": "2.15.0", + "Examine.Core": "3.0.0-beta.9", + "HtmlAgilityPack": "1.11.42", + "IPNetwork2": "2.5.407", + "MailKit": "3.2.0", "Markdown": "2.2.1", "Microsoft.CSharp": "4.7.0", "Microsoft.CodeAnalysis.CSharp": "4.0.1", @@ -1801,7 +2264,7 @@ "Microsoft.Extensions.Configuration.Json": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.0", "Microsoft.Extensions.Http": "6.0.0", - "Microsoft.Extensions.Identity.Stores": "6.0.0", + "Microsoft.Extensions.Identity.Stores": "6.0.4", "MiniProfiler.Shared": "4.2.22", "NPoco.SqlServer": "5.3.2", "Newtonsoft.Json": "13.0.1", @@ -1816,31 +2279,31 @@ "Serilog.Sinks.Async": "1.5.0", "Serilog.Sinks.File": "5.0.0", "Serilog.Sinks.Map": "1.0.2", - "SixLabors.ImageSharp": "1.0.4", + "SixLabors.ImageSharp": "2.1.1", "System.IO.FileSystem.AccessControl": "5.0.0", "System.Text.Encodings.Web": "6.0.0", "System.Threading.Tasks.Dataflow": "6.0.0", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Core": "10.0.0-rc1", "ncrontab": "3.3.1" } }, "Umbraco.Cms.PublishedCache.NuCache": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "174sloAV7Ur8RJ4gkzmodaN8NW6ZaRF4x/caiNGSWnExUFivVfHBe28wWgbyiLp7j8EaxXIptnNXoA1K/wIunA==", + "resolved": "10.0.0-rc1", + "contentHash": "qeOLycefK35h0cCMZqmn8p7Zq9ZvXRHhWqf5vLNJuWOPYGKFTesNF24b7Cl65N3xmbuVEISuE6rM6jnb2hx3JQ==", "dependencies": { "CSharpTest.Net.Collections-NetStd2": "14.906.1403.1084", - "K4os.Compression.LZ4": "1.2.15", + "K4os.Compression.LZ4": "1.2.16", "MessagePack": "2.3.85", "Newtonsoft.Json": "13.0.1", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" + "Umbraco.Cms.Core": "10.0.0-rc1", + "Umbraco.Cms.Infrastructure": "10.0.0-rc1" } }, "umbraco.storageproviders": { "type": "Project", "dependencies": { - "Umbraco.Cms.Web.Common": "10.0.0-preview20220405.88864" + "Umbraco.Cms.Web.Common": "10.0.0-rc1" } } } diff --git a/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs index 1ffc1d0..45097a1 100644 --- a/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs +++ b/src/Umbraco.StorageProviders/CdnMediaUrlProvider.cs @@ -59,7 +59,7 @@ public CdnMediaUrlProvider(IOptionsMonitor options, } /// - public override UrlInfo? GetMediaUrl(IPublishedContent content, string propertyAlias, UrlMode mode, string culture, Uri current) + public override UrlInfo? GetMediaUrl(IPublishedContent content, string propertyAlias, UrlMode mode, string? culture, Uri current) { var mediaUrl = base.GetMediaUrl(content, propertyAlias, UrlMode.Relative, culture, current); if (mediaUrl?.IsUrl == true) diff --git a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs index 5a4a16f..737e287 100644 --- a/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs +++ b/src/Umbraco.StorageProviders/DependencyInjection/CdnMediaUrlProviderExtensions.cs @@ -72,7 +72,7 @@ internal static IUmbracoBuilder AddInternal(this IUmbracoBuilder builder, Action { ArgumentNullException.ThrowIfNull(builder); - builder.MediaUrlProviders().Insert(); + builder.MediaUrlProviders()?.Insert(); var optionsBuilder = builder.Services.AddOptions() .BindConfiguration("Umbraco:Storage:Cdn") diff --git a/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt b/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt index d7fe34e..7f32c19 100644 --- a/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt +++ b/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt @@ -1,5 +1,5 @@ #nullable enable -override Umbraco.StorageProviders.CdnMediaUrlProvider.GetMediaUrl(Umbraco.Cms.Core.Models.PublishedContent.IPublishedContent! content, string! propertyAlias, Umbraco.Cms.Core.Models.PublishedContent.UrlMode mode, string! culture, System.Uri! current) -> Umbraco.Cms.Core.Routing.UrlInfo? +override Umbraco.StorageProviders.CdnMediaUrlProvider.GetMediaUrl(Umbraco.Cms.Core.Models.PublishedContent.IPublishedContent! content, string! propertyAlias, Umbraco.Cms.Core.Models.PublishedContent.UrlMode mode, string? culture, System.Uri! current) -> Umbraco.Cms.Core.Routing.UrlInfo? static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! diff --git a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj index 9b66590..24edcd1 100644 --- a/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj +++ b/src/Umbraco.StorageProviders/Umbraco.StorageProviders.csproj @@ -7,6 +7,6 @@ Shared storage providers infrastructure for Umbraco CMS - + diff --git a/src/Umbraco.StorageProviders/packages.lock.json b/src/Umbraco.StorageProviders/packages.lock.json index 997cc4b..1711a03 100644 --- a/src/Umbraco.StorageProviders/packages.lock.json +++ b/src/Umbraco.StorageProviders/packages.lock.json @@ -18,40 +18,33 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, - "Nerdbank.GitVersioning": { - "type": "Direct", - "requested": "[3.4.255, )", - "resolved": "3.4.255", - "contentHash": "7aJa6+VzdKNDVJqGIWGtvIDh2HsIx8DIDfUg4yWViXc798awhSohPMk1oiAZqSntnrKThKJtn4vAMRdsCj8dtg==" - }, "StyleCop.Analyzers": { "type": "Direct", - "requested": "[1.2.0-beta.406, )", - "resolved": "1.2.0-beta.406", - "contentHash": "YbsYoczQPZyz+4nmQ7bBiU9uQkk7Q2KUizQWEv01S4/ImCdJFiHvJfm8HAINNS0cvSLOA7xM9Y+KWQ2FOYjgkA==", + "requested": "[1.2.0-beta.435, )", + "resolved": "1.2.0-beta.435", + "contentHash": "TADk7vdGXtfTnYCV7GyleaaRTQjfoSfZXprQrVMm7cSJtJbFc1QIbWPyLvrgrfGdfHbGmUPvaN4ODKNxg2jgPQ==", "dependencies": { - "StyleCop.Analyzers.Unstable": "1.2.0.406" + "StyleCop.Analyzers.Unstable": "1.2.0.435" } }, "Umbraco.Cms.Web.Common": { "type": "Direct", - "requested": "[10.0.0-preview20220405.88864, )", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "65m/PRDo4DJWfuldzVC3kVGdj3jx5ZWk/z9/989O8blqN8FJVOTl7zi+d+kTRVlWlB9LesO3ScuxDPL1gvJjGg==", + "requested": "[10.0.0-rc1, )", + "resolved": "10.0.0-rc1", + "contentHash": "wcV+OmlPhF0pCTZgt9r6an1Jb0iaY8q61wdu3eSBMT7QT/YMK5Noew+eURhyK4Zc9NOIzBzV7ZCHGst0ptw40g==", "dependencies": { "Dazinator.Extensions.FileProviders": "2.0.0", - "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.0", - "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.0", + "Microsoft.AspNetCore.Mvc.NewtonsoftJson": "6.0.4", + "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": "6.0.4", "MiniProfiler.AspNetCore.Mvc": "4.2.22", - "NETStandard.Library": "2.0.3", - "Serilog.AspNetCore": "4.1.0", - "SixLabors.ImageSharp.Web": "1.0.5", - "Smidge.InMemory": "4.0.3", - "Smidge.Nuglify": "4.0.3", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Examine.Lucene": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864", - "Umbraco.Cms.PublishedCache.NuCache": "10.0.0-preview20220405.88864" + "Serilog.AspNetCore": "5.0.0", + "SixLabors.ImageSharp.Web": "2.0.0", + "Smidge.InMemory": "4.0.4", + "Smidge.Nuglify": "4.0.4", + "Umbraco.Cms.Core": "10.0.0-rc1", + "Umbraco.Cms.Examine.Lucene": "10.0.0-rc1", + "Umbraco.Cms.Infrastructure": "10.0.0-rc1", + "Umbraco.Cms.PublishedCache.NuCache": "10.0.0-rc1" } }, "Azure.Core": { @@ -106,19 +99,19 @@ }, "Examine": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "4P9HSuIU7xQc+t4R4qQeos0vsyrIYFhlB7KyybYBipkvENbRVdrGSFYxjTjBgCMyawxtvSJrV1FZeYdJemp6bA==", + "resolved": "3.0.0-beta.9", + "contentHash": "BB5BwjzxKwP34EFdDQQWBQAgDjsZk61YaGQml1vR71DxdD6cA0Dk4ripUzM9Od9Zq4YWTjD/MjDsnt6qefeGoQ==", "dependencies": { - "Examine.Core": "2.0.1", - "Examine.Lucene": "2.0.1", + "Examine.Core": "3.0.0-beta.9", + "Examine.Lucene": "3.0.0-beta.9", "Microsoft.AspNetCore.DataProtection": "5.0.5", "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0" } }, "Examine.Core": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "IbGVviYpQTMZGvpt1JuefzDxShJACUvtUNeo50LKTVgrc4eCkRi2jmT9FnTUi+YhLrNhBRmruVtYQ5lj7x3rzQ==", + "resolved": "3.0.0-beta.9", + "contentHash": "hBk8ZCFD+Bv0NzBuHyAW5UD+V3OWoiyqf756U++819TT5wzziP4OYT34450ulIjZ40Rr9wPySWA31xkXJ1CfVQ==", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "5.0.0", "Microsoft.Extensions.Options": "5.0.0" @@ -126,125 +119,122 @@ }, "Examine.Lucene": { "type": "Transitive", - "resolved": "2.0.1", - "contentHash": "WFHZlnbmSw3hlE6UCNxKwswxqcqvZH7Lyp+N7RWjZVnwiDueznadCjXfMvByZNi4ELQWBwdt/9FR4+srN1Kz4w==", + "resolved": "3.0.0-beta.9", + "contentHash": "0yEd0LMtUqL9GKdDaRUu+MmDc1HKa4bUOzpEQa6fbdXHN8ITDDmrefZCWAc4OvplWO7DHi/OSS5lALqzsy91wg==", "dependencies": { - "Examine.Core": "2.0.1", - "Lucene.Net.QueryParser": "4.8.0-beta00014", - "Lucene.Net.Replicator": "4.8.0-beta00014", + "Examine.Core": "3.0.0-beta.9", + "Lucene.Net.QueryParser": "4.8.0-beta00016", + "Lucene.Net.Replicator": "4.8.0-beta00016", "System.Threading": "4.3.0", "System.Threading.AccessControl": "4.7.0" } }, "HtmlAgilityPack": { "type": "Transitive", - "resolved": "1.11.38", - "contentHash": "DC1j3GzU9lBp8hSXb9eYRHiJOUS5sxjBjme/4RTYjTXlgiFCOMXkIY+rmL+BtUss1pCwCN4LaVlZ/ci/fWY+lA==" + "resolved": "1.11.42", + "contentHash": "LDc1bEfF14EY2DZzak4xvzWvbpNXK3vi1u0KQbBpLUN4+cx/VrvXhgCAMSJhSU5vz0oMfW9JZIR20vj/PkDHPA==" }, "IPNetwork2": { "type": "Transitive", - "resolved": "2.5.366", - "contentHash": "cWR9CCOH+ZXUTt1CNqT4FI1AEeMEltXQcPDLelI3dg3TKlbzYGKAR737UQbkyW5+NV29TvhRRyPy8th2eqQJow==" + "resolved": "2.5.407", + "contentHash": "EqjBifFaKVzBCxV9aRHuOswCKj9p+E8KxCVuWni/0NIMNSa5thLf3kiQkyEZ7giHNMnT4jBgsf2kqEkmifRSPQ==" }, "J2N": { "type": "Transitive", - "resolved": "2.0.0-beta-0012", - "contentHash": "QwXTVD41IYPmSBInJiGvv5c4X2P60p8B8JPuCMGiKuumw9kUv45jbX56Xx0bgYPWHXQVex3tV+NHHZ7cEidLFg==" + "resolved": "2.0.0", + "contentHash": "M5bwDajAARZiyqupU+rHQJnsVLxNBOHJ8vKYHd8LcLIb1FgLfzzcJvc31Qo5Xz/GEHFjDF9ScjKL/ks/zRTXuA==" }, "K4os.Compression.LZ4": { "type": "Transitive", - "resolved": "1.2.15", - "contentHash": "aCuJEi64ptq0iovQa+WqqMsRJKn+51Qd6plIAa0c6SiM8vgl/IybXaN63LvmO9KJmE6AeHYeundISm2ryFfzAw==", - "dependencies": { - "System.Memory": "4.5.4" - } + "resolved": "1.2.16", + "contentHash": "XLNQWNayxeMgd1gv0s6kZywM11kww7rTzu3nPGh8fQNblHGbFt79LC1Sk1/QQ8DIJb2Qfl2p+WlLIOWCSuyi8w==" }, "Lucene.Net": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "3iNUYa9X7r90lGFAhaM+tfwoVSw9q5sf503vrxYXtST/+OvzEnnTWiAuLxkH8oyMX8sQFphfsAFYlTn/z4pRSA==", + "resolved": "4.8.0-beta00016", + "contentHash": "DCtUbE/NIrisNI7hRwU+UKS3Cr6S2vH1XB9wvEHHI3anu5OUpX1Fkr/PDC7oFCaol/QCvzVLbLZVizAT1aTLpA==", "dependencies": { - "J2N": "2.0.0-beta-0012", + "J2N": "2.0.0", "Microsoft.Extensions.Configuration.Abstractions": "2.0.0" } }, "Lucene.Net.Analysis.Common": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "JKlS1wIAouyqUJhuokBB/+yd6uJRXA+F9xNU7Gpbfji4ZwkR+a+Y3oV7AhhyG6M72z3X/PsYK1qCRdDzya4o+A==", + "resolved": "4.8.0-beta00016", + "contentHash": "7pjEAIliWdih6E3I0hCE8hKcKKRx1LLzeQBslF1fhvzE1Sal4NyHd8RFJHV1Z+yHlBw4gCyyVIDZADiIoyqwxg==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016" } }, "Lucene.Net.Facet": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "O5lDg0/WVjDyrxo/Ba5/eb5jPcFlJQA1MuUsSaItBFAu0gHA7CimJ7dUwEHvTIVdyAkJeLJ7fuNNVvoxhdTj2A==", + "resolved": "4.8.0-beta00016", + "contentHash": "O1MrRfhb9BMfRQHooyEFrkgNwYbTEbK/AkKhz26sy+xO+zAldJ8YKS/IsydHsE+frklIAWT0jyv0c3Dh9qBXSA==", "dependencies": { - "Lucene.Net.Join": "4.8.0-beta00014", - "Lucene.Net.Queries": "4.8.0-beta00014" + "Lucene.Net.Join": "4.8.0-beta00016", + "Lucene.Net.Queries": "4.8.0-beta00016" } }, "Lucene.Net.Grouping": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "SW1PSChvHuq36LEUv6BQR4NmlqcCwUQUgG54hPsAYEIGOzSdkVtmi90X8LqVqmlaEzvYaJkr45gmF11kvUZs/g==", + "resolved": "4.8.0-beta00016", + "contentHash": "y7QSEYfSnz7gEJS30xHsf8P0oMIreGGO08qC+UzKre29IAoUXdLLE2+vUfByGkcPuoGMIpZVBP51P6O647grBg==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014", - "Lucene.Net.Queries": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016", + "Lucene.Net.Queries": "4.8.0-beta00016" } }, "Lucene.Net.Join": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "QQWCHoC5zv14DPvyij8wIgaSttS7vW+8hIZPtO+3eM5DfVz/x3aApJ49f1bMRfHmL8ChcbNn/vT7Xk02EpuGkQ==", + "resolved": "4.8.0-beta00016", + "contentHash": "trUiWhV3QPgW4TNPrEP29AsTXE29ACR5+Vz22xjbPtFTwyXMozl95NELVG5aUVMTqdwyMhJ9Lj82QeoHDnN0jw==", "dependencies": { - "Lucene.Net.Grouping": "4.8.0-beta00014" + "Lucene.Net.Grouping": "4.8.0-beta00016" } }, "Lucene.Net.Queries": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "9m8PykPZuDj/sxDFqfUqrCh1zFpXAAS/csxC5oIeaVy464YJSahSMxQppgXDOaDcEHGq5vxYlWEm7NsSHmYMMQ==", + "resolved": "4.8.0-beta00016", + "contentHash": "XBzdMDlan68V2ZlhAlP8Fd+Xx2Le8ec7cEN1kFF45Sipa3Q8L/tilJfwS9VHvMTvGkwPM/yj62eGbfGBgIMR8Q==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016" } }, "Lucene.Net.QueryParser": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "jO6XRRBKpLB8QQ8nZvs9l3zHbMNIzMJunh37dR23V9AbbbpZQ5vHRUg086t/QMVLQikWAhqKFDmvDU16IjvPKA==", + "resolved": "4.8.0-beta00016", + "contentHash": "5dVvjXmzPaK8GD/eblJopTJMQmO6c6fvVPfBIOw46+jyZR+yESkUnWF1LtLoLXZQNrl4Dx8LKdes5G1QAM7eGA==", "dependencies": { - "Lucene.Net.Analysis.Common": "4.8.0-beta00014", - "Lucene.Net.Queries": "4.8.0-beta00014", - "Lucene.Net.Sandbox": "4.8.0-beta00014" + "Lucene.Net.Analysis.Common": "4.8.0-beta00016", + "Lucene.Net.Queries": "4.8.0-beta00016", + "Lucene.Net.Sandbox": "4.8.0-beta00016" } }, "Lucene.Net.Replicator": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "hz9ixwqYbAWS9tHAK8ho/ovnd6+3zWHEFQeYv5xExmNgo17InUHJMYik67hrBMuIzXnX7auu23NHDayfd8J9jQ==", + "resolved": "4.8.0-beta00016", + "contentHash": "BP007m7TtHfOFNGoipn1Y3kgHir0yvDfyCW9g7P6PQIo7nNkyyHuEK9slVEkPhLq+21Q2EnnHl7jMGeh0aK2eA==", "dependencies": { - "J2N": "2.0.0-beta-0012", - "Lucene.Net": "4.8.0-beta00014", - "Lucene.Net.Facet": "4.8.0-beta00014", + "J2N": "2.0.0", + "Lucene.Net": "4.8.0-beta00016", + "Lucene.Net.Facet": "4.8.0-beta00016", "Newtonsoft.Json": "10.0.1" } }, "Lucene.Net.Sandbox": { "type": "Transitive", - "resolved": "4.8.0-beta00014", - "contentHash": "Mg22EHBi1Ls129ctmh78spPXvwGWNG4PRP+kePs9j3OvkKlXSv1ms4GeR0mcFdQW6Z4Nf6/eg2OZ9eJPlEbFDg==", + "resolved": "4.8.0-beta00016", + "contentHash": "wMsRZtbNx0wvX3mtNjpOwQmKx3Ij4UGHWIYHbvnzMWlPUTgtOpYSj02REL4hOxI71WBZylpGB5EWfQ2eEld63g==", "dependencies": { - "Lucene.Net": "4.8.0-beta00014" + "Lucene.Net": "4.8.0-beta00016" } }, "MailKit": { "type": "Transitive", - "resolved": "2.15.0", - "contentHash": "9ihv6pRmjmBEAP4eXlDeo9srFQF9dVtYP1/jzj3I3BV9tBRk66NLdAF+8jkgUtauMKmns0yBvtfMFiBnNkHKDQ==", + "resolved": "3.2.0", + "contentHash": "5MTpTqmjqT7HPvYbP3HozRZMth5vSaT0ReN0iM3rAM4CgLI/R1qqtLDDNWGnFFIlcNzeJkZQRJJMkv8cgzWBbA==", "dependencies": { - "MimeKit": "2.15.0" + "MimeKit": "3.2.0" } }, "Markdown": { @@ -272,15 +262,15 @@ }, "Microsoft.AspNetCore.Cryptography.Internal": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "ZWFBiHwkmipr+7t3MEPa7oB/iE8Kf5wvUptn9AXj7P7l/tGHEmRb1606Mlh/e2zkYwfjNGDH4Z5dUUlcnyccIw==" + "resolved": "6.0.4", + "contentHash": "/0FX1OqckMmXAAlsHgBFNymTZuq4nuAOMhiwm6e8CEMi2aOjnMYwiMc7mtvpGTAO0O4C0zwx+iaChxDgvqit2A==" }, "Microsoft.AspNetCore.Cryptography.KeyDerivation": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "CcYIcGn/zJFY0zq84V4r9Xd4aQn2/+8tsiRBYnhS/LVgWNDq7EsWxmLJ+bXWBBdpTHA+IKvXTag9YElFKFHWYQ==", + "resolved": "6.0.4", + "contentHash": "1Lbwrxg/HRY/nbrkcrB3EUXUYQN8Tkw7Ktgb6/2on2P7ybT5aM59H05gk+OBC8ZTBxwdle9e1tyT3wxEYKw5xw==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.Internal": "6.0.0" + "Microsoft.AspNetCore.Cryptography.Internal": "6.0.4" } }, "Microsoft.AspNetCore.DataProtection": { @@ -349,8 +339,8 @@ }, "Microsoft.AspNetCore.JsonPatch": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "SUiwg0XQ5NtmnELHXSdX4mAwawFnAOwSx2Zz6NIhQnEN1tZDoAWEHc8dS/S7y8cE52+9bHj+XbYZuLGF7OrQPA==", + "resolved": "6.0.4", + "contentHash": "BDI7P53vCNqB35poKWUUeUZxr46/g/h6CyHYrU2byICC1/oGdX7iZ2naG3X8VeZcmdC1YBkbXb5LXLtutHSq1Q==", "dependencies": { "Microsoft.CSharp": "4.7.0", "Newtonsoft.Json": "13.0.1" @@ -358,37 +348,37 @@ }, "Microsoft.AspNetCore.Mvc.NewtonsoftJson": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "YMwSWgBuwkVn9k4/2wWxfwEbx8T5Utj13UH/zmUm5lbkKcY+tJyt9w9P4rY5pO1XtCitoh1+L+Feqz9qxG/CvA==", + "resolved": "6.0.4", + "contentHash": "RQGy4kX3dkvcz0v84+sl6xmOYhpA3CFgylNiAPFxi36JLp4uU5SEvbbLo6u+d4tHbyGkaLe8RzKLJmnRdckZ9A==", "dependencies": { - "Microsoft.AspNetCore.JsonPatch": "6.0.0", + "Microsoft.AspNetCore.JsonPatch": "6.0.4", "Newtonsoft.Json": "13.0.1", "Newtonsoft.Json.Bson": "1.0.2" } }, "Microsoft.AspNetCore.Mvc.Razor.Extensions": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "M0h+ChPgydX2xY17agiphnAVa/Qh05RAP8eeuqGGhQKT10claRBlLNO6d2/oSV8zy0RLHzwLnNZm5xuC/gckGA==", + "resolved": "6.0.4", + "contentHash": "LNHMPXJkxoqAJrDTHHNekUstkJVxBqu3eJcu3lSjH3iPQw38hBzWPFUieP4MgC31C3ssabULaD2PB1WeOl058Q==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "6.0.0", - "Microsoft.CodeAnalysis.Razor": "6.0.0" + "Microsoft.AspNetCore.Razor.Language": "6.0.4", + "Microsoft.CodeAnalysis.Razor": "6.0.4" } }, "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "bf4kbla/8Qiu53MgFPz1u3H1ThoookPpFy+Ya9Q9p531wXK1pZ3tfz/Gtx8SKy41yz99jhZHTUM1QqLl7eJRgQ==", + "resolved": "6.0.4", + "contentHash": "9fd1xCNfJbuJPinj0o98IpjUsCeuyvGke7sfkagaN5nxhyfr1qYYcGO0Irf/0gNcUWVZHAu3e7XY6iXIhHs/Yw==", "dependencies": { - "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.0", - "Microsoft.CodeAnalysis.Razor": "6.0.0", + "Microsoft.AspNetCore.Mvc.Razor.Extensions": "6.0.4", + "Microsoft.CodeAnalysis.Razor": "6.0.4", "Microsoft.Extensions.DependencyModel": "6.0.0" } }, "Microsoft.AspNetCore.Razor.Language": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "yCtBr1GSGzJrrp1NJUb4ltwFYMKHw/tJLnIDvg9g/FnkGIEzmE19tbCQqXARIJv5kdtBgsoVIdGLL+zmjxvM/A==" + "resolved": "6.0.4", + "contentHash": "pUBOF/SNk4/6eoK5M75cfqdQwZdlKRNGjzidO6MIuqnsgFIN5qiC7POYImgWv++0yoGyOpdNjnAHBQua7mLXVQ==" }, "Microsoft.Bcl.AsyncInterfaces": { "type": "Transitive", @@ -429,10 +419,10 @@ }, "Microsoft.CodeAnalysis.Razor": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "uqdzuQXxD7XrJCbIbbwpI/LOv0PBJ9VIR0gdvANTHOfK5pjTaCir+XcwvYvBZ5BIzd0KGzyiamzlEWw1cK1q0w==", + "resolved": "6.0.4", + "contentHash": "OO9M3idcJCCjXOnShNyGTZkP2dofRlRqDNhSmA1boJtW1MSXMWwpyj3Z8DXVP0BLkMXqFQ0zFMEVMX5Eys57jw==", "dependencies": { - "Microsoft.AspNetCore.Razor.Language": "6.0.0", + "Microsoft.AspNetCore.Razor.Language": "6.0.4", "Microsoft.CodeAnalysis.CSharp": "4.0.0", "Microsoft.CodeAnalysis.Common": "4.0.0" } @@ -568,8 +558,8 @@ }, "Microsoft.Extensions.FileProviders.Embedded": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "9uQbDTqX1MidhoZFUSK1JItt74IapEadFDOIWAlBIKxr3O/ZEWLWkLYGlgUeP1Dkyog6/CB7h1EAU3xADYZ/lA==", + "resolved": "6.0.4", + "contentHash": "Ydzdq2WxGzKpQUUD4CxEDU+m2HPxR573IrQMk3pzsf3QCg5X06Td1hFRuK8+Tv0xZaLup71yQnbKN2AvNTjAYQ==", "dependencies": { "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0" } @@ -612,21 +602,21 @@ }, "Microsoft.Extensions.Identity.Core": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "coWZViIBVb1szN3zMMa6KYP9KmJzOniwQ5tySbiFmVW6Nbdy1KuNDNzIKQcigmfqS4aLWVvNLGCFyDJWYskS8g==", + "resolved": "6.0.4", + "contentHash": "8vBsyGkA8ZI3lZvm1nf+9ynRC/TzPD+UtbdgTlKk+cz+AW5I41LrK8f/adGej5uXgprOA2DMjZw33vZG6vyXxA==", "dependencies": { - "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.0", + "Microsoft.AspNetCore.Cryptography.KeyDerivation": "6.0.4", "Microsoft.Extensions.Logging": "6.0.0", "Microsoft.Extensions.Options": "6.0.0" } }, "Microsoft.Extensions.Identity.Stores": { "type": "Transitive", - "resolved": "6.0.0", - "contentHash": "3TniGyXEuFLQhJoiEReGD4HAdSKRxuQX5FDDg4GwFeeB36en4xQC5MVuWx1riiNwmh2eMtXq/wLdaJLd6JXIig==", + "resolved": "6.0.4", + "contentHash": "linRCnWBfnqg8qjrd9u/KMISy8O4a6X/GRhpHXU0ar654YQw9LJ/Ht+psx8QLqSX5EsCBbBCZzuamatH2FWIyQ==", "dependencies": { "Microsoft.Extensions.Caching.Abstractions": "6.0.0", - "Microsoft.Extensions.Identity.Core": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.4", "Microsoft.Extensions.Logging": "6.0.0" } }, @@ -743,13 +733,13 @@ }, "Microsoft.IO.RecyclableMemoryStream": { "type": "Transitive", - "resolved": "2.1.3", - "contentHash": "h1hjJ7E0ZMTbutiUXmv07rs+cTST9+w+iDNZginmArfZr47GjHevwBQK/LBcAkHm+w+IHaBd9Lsuf5dv8DnDAg==" + "resolved": "2.2.0", + "contentHash": "uyjY/cqomw1irT4L7lDeg4sJ36MsjHg3wKqpGrBAdzvZaxo85yMF+sAA9RIzTV92fDxuUzjqksMqA0+SNMkMgA==" }, "Microsoft.NETCore.Platforms": { "type": "Transitive", - "resolved": "3.1.0", - "contentHash": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==" + "resolved": "5.0.0", + "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==" }, "Microsoft.NETCore.Targets": { "type": "Transitive", @@ -761,6 +751,16 @@ "resolved": "1.1.1", "contentHash": "WMcGpWKrmJmzrNeuaEb23bEMnbtR/vLmvZtkAP5qWu7vQsY59GqfRJd65sFpBszbd2k/bQ8cs8eWawQKAabkVg==" }, + "Microsoft.Win32.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, "Microsoft.Win32.Registry": { "type": "Transitive", "resolved": "5.0.0", @@ -777,14 +777,11 @@ }, "MimeKit": { "type": "Transitive", - "resolved": "2.15.0", - "contentHash": "146As77LbmZezdSJ5W/2ZEQsZyqVSAM8yOjDjvsy6NpLmyqG8lgzmX6ps3P/fKzUN5Ey4hxwnAtH+KLlJW0CsQ==", + "resolved": "3.2.0", + "contentHash": "l9YHMBhBUwY7qQHUp8fw0EvjcbmhN4Iggz6MdjqIShBf42+0nJTa5gu0kuupCOPuiARc9ZaS9c9f0gKz4OnxKw==", "dependencies": { - "Portable.BouncyCastle": "1.8.10", - "System.Buffers": "4.5.1", - "System.Reflection.TypeExtensions": "4.4.0", - "System.Security.Cryptography.Pkcs": "4.7.0", - "System.Text.Encoding.CodePages": "4.4.0" + "Portable.BouncyCastle": "1.9.0", + "System.Security.Cryptography.Pkcs": "6.0.0" } }, "MiniProfiler.AspNetCore": { @@ -829,10 +826,53 @@ }, "NETStandard.Library": { "type": "Transitive", - "resolved": "2.0.3", - "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==", + "resolved": "1.6.1", + "contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.Win32.Primitives": "4.3.0", + "System.AppContext": "4.3.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Console": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.Compression.ZipFile": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Linq": "4.3.0", + "System.Linq.Expressions": "4.3.0", + "System.Net.Http": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Net.Sockets": "4.3.0", + "System.ObjectModel": "4.3.0", + "System.Reflection": "4.3.0", + "System.Reflection.Extensions": "4.3.0", + "System.Reflection.Primitives": "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.Runtime.InteropServices.RuntimeInformation": "4.3.0", + "System.Runtime.Numerics": "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.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Timer": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0", + "System.Xml.XDocument": "4.3.0" } }, "Newtonsoft.Json": { @@ -879,8 +919,23 @@ }, "Portable.BouncyCastle": { "type": "Transitive", - "resolved": "1.8.10", - "contentHash": "XLhjNAwuVB9ynwn11l5K44eyozh8q6gFseTrlnLNttejimglX7+F9+vxh60LPjvA/DAt6fUdS43N3ah8K6eaWg==" + "resolved": "1.9.0", + "contentHash": "eZZBCABzVOek+id9Xy04HhmgykF0wZg9wpByzrWN7q8qEI0Qen9b7tfd7w8VA3dOeesumMG7C5ZPy0jk7PSRHw==" + }, + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==" + }, + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA==" + }, + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw==" }, "runtime.native.System": { "type": "Transitive", @@ -891,6 +946,89 @@ "Microsoft.NETCore.Targets": "1.1.0" } }, + "runtime.native.System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==", + "dependencies": { + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0" + } + }, + "runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==", + "dependencies": { + "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0", + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A==" + }, + "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ==" + }, + "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g==" + }, + "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg==" + }, + "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ==" + }, + "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A==" + }, + "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg==" + }, "Serilog": { "type": "Transitive", "resolved": "2.10.0", @@ -898,18 +1036,18 @@ }, "Serilog.AspNetCore": { "type": "Transitive", - "resolved": "4.1.0", - "contentHash": "qRdEkjX10VJ5Cb3B9q/Q/tv+0ntDxAIA1YbOmmNMlkha1TU0ckK5b73eBYMNNLMAU92ofrzOEuIJEc6Q+Q1Z2A==", + "resolved": "5.0.0", + "contentHash": "/JO/txIxRR61x1UXQAgUzG2Sx05o1QHCkokVBWrKzmAoDu+p5EtCAj7L/TVVg7Ezhh3GPiZ0JI9OJCmRO9tSRw==", "dependencies": { "Microsoft.Extensions.DependencyInjection": "5.0.0", "Microsoft.Extensions.Logging": "5.0.0", "Serilog": "2.10.0", - "Serilog.Extensions.Hosting": "4.1.2", + "Serilog.Extensions.Hosting": "4.2.0", "Serilog.Formatting.Compact": "1.1.0", - "Serilog.Settings.Configuration": "3.1.0", - "Serilog.Sinks.Console": "3.1.1", + "Serilog.Settings.Configuration": "3.3.0", + "Serilog.Sinks.Console": "4.0.1", "Serilog.Sinks.Debug": "2.0.0", - "Serilog.Sinks.File": "4.1.0" + "Serilog.Sinks.File": "5.0.0" } }, "Serilog.Enrichers.Process": { @@ -994,13 +1132,10 @@ }, "Serilog.Sinks.Console": { "type": "Transitive", - "resolved": "3.1.1", - "contentHash": "56mI5AqvyF/i/c2451nvV71kq370XOCE4Uu5qiaJ295sOhMb9q3BWwG7mWLOVSnmpWiq0SBT3SXfgRXGNP6vzA==", + "resolved": "4.0.1", + "contentHash": "apLOvSJQLlIbKlbx+Y2UDHSP05kJsV7mou+fvJoRGs/iR+jC22r8cuFVMjjfVxz/AD4B2UCltFhE1naRLXwKNw==", "dependencies": { - "Serilog": "2.5.0", - "System.Console": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0" + "Serilog": "2.10.0" } }, "Serilog.Sinks.Debug": { @@ -1029,30 +1164,34 @@ }, "SixLabors.ImageSharp": { "type": "Transitive", - "resolved": "1.0.4", - "contentHash": "H2rPiEr2ddBOltOuqRYhpLBAsQXDAhbzMMhhuksnBG2oefup1MXMchALe7yYkKJksNbtxbZHKeM6dn/68I75qw==" + "resolved": "2.1.1", + "contentHash": "oNHMT8+yUR9dyuU2r7fwsXvvS4OnfCs9N5i2y2p9iBxp3nvEZbe/hZWrOGfD7MX2lxOAlWzlhzj0q2uFwP8avg==", + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "5.0.0", + "System.Text.Encoding.CodePages": "5.0.0" + } }, "SixLabors.ImageSharp.Web": { "type": "Transitive", - "resolved": "1.0.5", - "contentHash": "FJv4G7P1Yn364/bjaxE2xiQAa9ZdEd4MwfQ2/Og3Q7911X0oWQk+JfnIF7zJGI/2uio66gSkx1UGeDURU6TOJQ==", + "resolved": "2.0.0", + "contentHash": "4sTDmj38Ab/HOHituh9ks1q1MTuX6leBtbDOe9RJ5zyiWHXDn79BWdJ8fTYzFAsAl0KeOh4Gh0RNRftnYmABZg==", "dependencies": { - "Microsoft.IO.RecyclableMemoryStream": "2.1.3", - "SixLabors.ImageSharp": "1.0.4" + "Microsoft.IO.RecyclableMemoryStream": "2.2.0", + "SixLabors.ImageSharp": "2.1.1" } }, "Smidge": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "03UbGTGpe2VIyWVljVXH47vrHxTBrxqenE15JpKdrHsWDLDzWfarhKC7HVl/gSRKm6TypFLRt93AnhcszKAp1Q==", + "resolved": "4.0.4", + "contentHash": "o1Y1xLzQBdxhajMP3trhfRHwYnElZpAWfWPAaCCbpKd2sQqwX/J4KtxLnQdASo98pQVzWDKW3d7Dt0v5/NU/6g==", "dependencies": { - "Smidge.Core": "4.0.3" + "Smidge.Core": "4.0.4" } }, "Smidge.Core": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "gny2iKmHB7mmRay44X0Et6tvBkXmd/sSkUA4JJsHiPuyYGrv8GdHPoBJZQcCPS7PensbvNu2KQr1WcAMSFv0rQ==", + "resolved": "4.0.4", + "contentHash": "JFYGvMyfHGuVX4GOosDePsY31eZtefZseg2yQss1Vbc73B12SHeL9IbuE/Sdioi/GDXV2T5AILL8LIY6hzWJ1w==", "dependencies": { "Microsoft.AspNetCore.Http.Features": "5.0.0", "Microsoft.Extensions.Configuration": "5.0.0", @@ -1065,27 +1204,35 @@ }, "Smidge.InMemory": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "DmXqCc3onAldR7dvSu5U+Hld16lai8x65HpDgKeNt9hNfsPtdu5dBh2SLqJG0QrpDAdTyifA9Xpa5tMw3sxxfA==", + "resolved": "4.0.4", + "contentHash": "1Ve1ySrwZNmpjkJecAesiktVZn1uOLcZ3qNGLZ/7HzssdtzN1QP967M1iU9Zg+3h2BD3/ifQmNPk/uKJ0Vmb/w==", "dependencies": { "Dazinator.Extensions.FileProviders": "2.0.0", - "Smidge.Core": "4.0.3", + "Smidge.Core": "4.0.4", "System.Text.Encodings.Web": "5.0.1" } }, "Smidge.Nuglify": { "type": "Transitive", - "resolved": "4.0.3", - "contentHash": "A3lHDlGDS6QPkDDb/QyZFq10+NiuaNOPlo52XTq3euSvUyKjikfJ8zC35NceRiUuJiRK785WJD0BNgipkAa37w==", + "resolved": "4.0.4", + "contentHash": "E1NoWmWVCFpLizNWh8ow81fy4z9nQE0UvYTc8gkzHGtVRrPsfHJYF7l/p+VZuryfyvD9er2NkS6LmQnv8M17Iw==", "dependencies": { "Nuglify": "1.13.12", - "Smidge": "4.0.3" + "Smidge": "4.0.4" } }, "StyleCop.Analyzers.Unstable": { "type": "Transitive", - "resolved": "1.2.0.406", - "contentHash": "FclNdBR81ynIo9l1QNlo+l0I/PaFIYaPQPlMram8XVIMh6G6G43KTa1aCxfwTj13uKlAJS/LhLy6KjOPOeAU4w==" + "resolved": "1.2.0.435", + "contentHash": "ouwPWZxbOV3SmCZxIRqHvljkSzkCyi1tDoMzQtDb/bRP8ctASV/iRJr+A2Gdj0QLaLmWnqTWDrH82/iP+X80Lg==" + }, + "System.AppContext": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==", + "dependencies": { + "System.Runtime": "4.3.0" + } }, "System.Buffers": { "type": "Transitive", @@ -1212,6 +1359,16 @@ "System.Runtime": "4.3.0" } }, + "System.Diagnostics.Tools": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, "System.Diagnostics.Tracing": { "type": "Transitive", "resolved": "4.3.0", @@ -1253,8 +1410,8 @@ }, "System.Formats.Asn1": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w==" + "resolved": "6.0.0", + "contentHash": "T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA==" }, "System.Globalization": { "type": "Transitive", @@ -1266,17 +1423,28 @@ "System.Runtime": "4.3.0" } }, + "System.Globalization.Calendars": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Runtime": "4.3.0" + } + }, "System.Globalization.Extensions": { "type": "Transitive", - "resolved": "4.0.1", - "contentHash": "KKo23iKeOaIg61SSXwjANN7QYDr/3op3OWGGzDzz7mypx0Za0fZSeG0l6cco8Ntp8YMYkIQcAqlk8yhm5/Uhcg==", + "resolved": "4.3.0", + "contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==", "dependencies": { - "Microsoft.NETCore.Platforms": "1.0.1", - "System.Globalization": "4.0.11", - "System.Resources.ResourceManager": "4.0.1", - "System.Runtime": "4.1.0", - "System.Runtime.Extensions": "4.1.0", - "System.Runtime.InteropServices": "4.1.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" } }, "System.IdentityModel.Tokens.Jwt": { @@ -1300,6 +1468,44 @@ "System.Threading.Tasks": "4.3.0" } }, + "System.IO.Compression": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Buffers": "4.3.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "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.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.IO.Compression": "4.3.0" + } + }, + "System.IO.Compression.ZipFile": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==", + "dependencies": { + "System.Buffers": "4.3.0", + "System.IO": "4.3.0", + "System.IO.Compression": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0" + } + }, "System.IO.FileSystem": { "type": "Transitive", "resolved": "4.3.0", @@ -1383,6 +1589,63 @@ "resolved": "4.5.4", "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" }, + "System.Net.Http": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.DiagnosticSource": "4.3.0", + "System.Diagnostics.Tracing": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Extensions": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.Net.Primitives": "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.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Security.Cryptography.X509Certificates": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Net.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Net.Sockets": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Net.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, "System.Numerics.Vectors": { "type": "Transitive", "resolved": "4.5.0", @@ -1467,8 +1730,12 @@ }, "System.Reflection.TypeExtensions": { "type": "Transitive", - "resolved": "4.4.0", - "contentHash": "dkmh/ySlwnXJp/1qYP9uyKkCK1CXR/REFzl7abHcArxBcV91mY2CgrrzSRA5Z/X4MevJWwXsklGRdR3A7K9zbg==" + "resolved": "4.3.0", + "contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==", + "dependencies": { + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } }, "System.Resources.ResourceManager": { "type": "Transitive", @@ -1551,6 +1818,17 @@ "runtime.native.System": "4.3.0" } }, + "System.Runtime.Numerics": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==", + "dependencies": { + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0" + } + }, "System.Runtime.Serialization.Primitives": { "type": "Transitive", "resolved": "4.3.0", @@ -1565,21 +1843,111 @@ "resolved": "6.0.0", "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==" }, + "System.Security.Cryptography.Algorithms": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "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.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.Apple": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, "System.Security.Cryptography.Cng": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==", + "resolved": "4.5.0", + "contentHash": "WG3r7EyjUe9CMPFSs6bty5doUqT+q9pbI80hlNzo2SkPkZ4VTuZkGWjpp77JB8+uaL4DFPRdBsAY+DX3dBK92A==" + }, + "System.Security.Cryptography.Csp": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==", "dependencies": { - "System.Formats.Asn1": "5.0.0" + "Microsoft.NETCore.Platforms": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection": "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", + "System.Threading": "4.3.0" + } + }, + "System.Security.Cryptography.Encoding": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Collections.Concurrent": "4.3.0", + "System.Linq": "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.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, + "System.Security.Cryptography.OpenSsl": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==", + "dependencies": { + "System.Collections": "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.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Runtime.Numerics": "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", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" } }, "System.Security.Cryptography.Pkcs": { "type": "Transitive", - "resolved": "5.0.0", - "contentHash": "9TPLGjBCGKmNvG8pjwPeuYy0SMVmGZRwlTZvyPHDbYv/DRkoeumJdfumaaDNQzVGMEmbWtg07zUpSW9q70IlDQ==", + "resolved": "6.0.0", + "contentHash": "elM3x+xSRhzQysiqo85SbidJJ2YbZlnvmh+53TuSZHsD7dNuuEWser+9EFtY+rYupBwkq2avc6ZCO3/6qACgmg==", + "dependencies": { + "System.Formats.Asn1": "6.0.0" + } + }, + "System.Security.Cryptography.Primitives": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==", "dependencies": { - "System.Formats.Asn1": "5.0.0", - "System.Security.Cryptography.Cng": "5.0.0" + "System.Diagnostics.Debug": "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.Threading": "4.3.0", + "System.Threading.Tasks": "4.3.0" } }, "System.Security.Cryptography.ProtectedData": { @@ -1587,6 +1955,38 @@ "resolved": "6.0.0", "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==" }, + "System.Security.Cryptography.X509Certificates": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.Globalization.Calendars": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "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.Runtime.Numerics": "4.3.0", + "System.Security.Cryptography.Algorithms": "4.3.0", + "System.Security.Cryptography.Cng": "4.3.0", + "System.Security.Cryptography.Csp": "4.3.0", + "System.Security.Cryptography.Encoding": "4.3.0", + "System.Security.Cryptography.OpenSsl": "4.3.0", + "System.Security.Cryptography.Primitives": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "runtime.native.System": "4.3.0", + "runtime.native.System.Net.Http": "4.3.0", + "runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0" + } + }, "System.Security.Cryptography.Xml": { "type": "Transitive", "resolved": "5.0.0", @@ -1622,10 +2022,21 @@ }, "System.Text.Encoding.CodePages": { "type": "Transitive", - "resolved": "4.7.0", - "contentHash": "aeu4FlaUTemuT1qOd1MyU4T516QR4Fy+9yDbwWMPHOHy7U8FD6SgTzdZFO7gHcfAPHtECqInbwklVvUK4RHcNg==", + "resolved": "5.0.0", + "contentHash": "NyscU59xX6Uo91qvhOs2Ccho3AR2TnZPomo1Z0K6YpyztBPM/A5VbkzOO19sy3A3i1TtEnTxA7bCe3Us+r5MWg==", "dependencies": { - "Microsoft.NETCore.Platforms": "3.1.0" + "Microsoft.NETCore.Platforms": "5.0.0" + } + }, + "System.Text.Encoding.Extensions": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==", + "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.Text.Encodings.Web": { @@ -1706,6 +2117,16 @@ "System.Threading.Tasks": "4.3.0" } }, + "System.Threading.Timer": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, "System.Windows.Extensions": { "type": "Transitive", "resolved": "6.0.0", @@ -1714,15 +2135,57 @@ "System.Drawing.Common": "6.0.0" } }, + "System.Xml.ReaderWriter": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.IO.FileSystem": "4.3.0", + "System.IO.FileSystem.Primitives": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Text.Encoding.Extensions": "4.3.0", + "System.Text.RegularExpressions": "4.3.0", + "System.Threading.Tasks": "4.3.0", + "System.Threading.Tasks.Extensions": "4.3.0" + } + }, + "System.Xml.XDocument": { + "type": "Transitive", + "resolved": "4.3.0", + "contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==", + "dependencies": { + "System.Collections": "4.3.0", + "System.Diagnostics.Debug": "4.3.0", + "System.Diagnostics.Tools": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.3.0", + "System.Xml.ReaderWriter": "4.3.0" + } + }, "Umbraco.Cms.Core": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "u5vmG6XnVBCpCaR86zNfYuP8Ze5Wly352EzEdUSY+FtKK6nWl9S/0udDnDbh5lKQ0EJ8+ID74aYZ2fL6HfhYAQ==", + "resolved": "10.0.0-rc1", + "contentHash": "kFQ/Z+q1ZJli7sYUNgQnv89VluuXWQcvLUu9X9mWA+6hk9v4pVHNzFNVTzcqSuEIMAcMtowSHZWtJqJxDA6CRA==", "dependencies": { "Microsoft.Extensions.Configuration.Abstractions": "6.0.0", - "Microsoft.Extensions.FileProviders.Embedded": "6.0.0", + "Microsoft.Extensions.FileProviders.Embedded": "6.0.4", "Microsoft.Extensions.FileProviders.Physical": "6.0.0", "Microsoft.Extensions.Hosting.Abstractions": "6.0.0", + "Microsoft.Extensions.Identity.Core": "6.0.4", "Microsoft.Extensions.Logging": "6.0.0", "Microsoft.Extensions.Options": "6.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions": "6.0.0", @@ -1734,23 +2197,23 @@ }, "Umbraco.Cms.Examine.Lucene": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "s4Txm5sVZzzVMeVWGQbJ2mq/0AvHXcbQ9Kv53mbABIGizFt53+rJBYl0gaayUg5k+Sbra/5bc2b6qfgLw3kJxw==", + "resolved": "10.0.0-rc1", + "contentHash": "oL3rnv5fFMlZtF35G9kci80n7BEeYHh/sMrYYrQju76xAt23EuZvc2WFHPkGzUx1SZxCRB/LYvjyFqbnCtd7rw==", "dependencies": { - "Examine": "2.0.1", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" + "Examine": "3.0.0-beta.9", + "Umbraco.Cms.Core": "10.0.0-rc1", + "Umbraco.Cms.Infrastructure": "10.0.0-rc1" } }, "Umbraco.Cms.Infrastructure": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "/yB/HZgv0x5EuwZWUa+9etCIQdAUc6idmNdsk+/6BDfQRAl4rUUygJn/5qTAZLOzZDn3YBL6V2pqhGHvCiAe2Q==", + "resolved": "10.0.0-rc1", + "contentHash": "8fwyXkQ4TAqLILFmZOGkXxC6FO2kPaIgYAwPpBOMYuKHVcZSU83B1AKSCQNBjTT4ZHWe3EvC7xNBeD1iByvGQg==", "dependencies": { - "Examine.Core": "2.0.1", - "HtmlAgilityPack": "1.11.38", - "IPNetwork2": "2.5.366", - "MailKit": "2.15.0", + "Examine.Core": "3.0.0-beta.9", + "HtmlAgilityPack": "1.11.42", + "IPNetwork2": "2.5.407", + "MailKit": "3.2.0", "Markdown": "2.2.1", "Microsoft.CSharp": "4.7.0", "Microsoft.CodeAnalysis.CSharp": "4.0.1", @@ -1758,7 +2221,7 @@ "Microsoft.Extensions.Configuration.Json": "6.0.0", "Microsoft.Extensions.DependencyInjection": "6.0.0", "Microsoft.Extensions.Http": "6.0.0", - "Microsoft.Extensions.Identity.Stores": "6.0.0", + "Microsoft.Extensions.Identity.Stores": "6.0.4", "MiniProfiler.Shared": "4.2.22", "NPoco.SqlServer": "5.3.2", "Newtonsoft.Json": "13.0.1", @@ -1773,25 +2236,25 @@ "Serilog.Sinks.Async": "1.5.0", "Serilog.Sinks.File": "5.0.0", "Serilog.Sinks.Map": "1.0.2", - "SixLabors.ImageSharp": "1.0.4", + "SixLabors.ImageSharp": "2.1.1", "System.IO.FileSystem.AccessControl": "5.0.0", "System.Text.Encodings.Web": "6.0.0", "System.Threading.Tasks.Dataflow": "6.0.0", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", + "Umbraco.Cms.Core": "10.0.0-rc1", "ncrontab": "3.3.1" } }, "Umbraco.Cms.PublishedCache.NuCache": { "type": "Transitive", - "resolved": "10.0.0-preview20220405.88864", - "contentHash": "174sloAV7Ur8RJ4gkzmodaN8NW6ZaRF4x/caiNGSWnExUFivVfHBe28wWgbyiLp7j8EaxXIptnNXoA1K/wIunA==", + "resolved": "10.0.0-rc1", + "contentHash": "qeOLycefK35h0cCMZqmn8p7Zq9ZvXRHhWqf5vLNJuWOPYGKFTesNF24b7Cl65N3xmbuVEISuE6rM6jnb2hx3JQ==", "dependencies": { "CSharpTest.Net.Collections-NetStd2": "14.906.1403.1084", - "K4os.Compression.LZ4": "1.2.15", + "K4os.Compression.LZ4": "1.2.16", "MessagePack": "2.3.85", "Newtonsoft.Json": "13.0.1", - "Umbraco.Cms.Core": "10.0.0-preview20220405.88864", - "Umbraco.Cms.Infrastructure": "10.0.0-preview20220405.88864" + "Umbraco.Cms.Core": "10.0.0-rc1", + "Umbraco.Cms.Infrastructure": "10.0.0-rc1" } } } From 22bf9a427a3fa6e83a7220c433f7442f7ad65d16 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 9 May 2022 14:06:24 +0200 Subject: [PATCH 22/26] Re-add updated Nerdbank.GitVersioning dependency --- src/Directory.Build.props | 5 ++++- src/Umbraco.StorageProviders.AzureBlob/packages.lock.json | 6 ++++++ src/Umbraco.StorageProviders/packages.lock.json | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 8af3b61..c4fa4e7 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -23,7 +23,7 @@ https://www.myget.org/F/umbraconightly/api/v3/index.json - + true @@ -41,5 +41,8 @@ true $(MSBuildThisFileDirectory) + + + diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json index f596d76..fe5f99c 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -28,6 +28,12 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, + "Nerdbank.GitVersioning": { + "type": "Direct", + "requested": "[3.5.103, )", + "resolved": "3.5.103", + "contentHash": "gMzXNdd/cQWBTp+zaYmHaoTVSOQwOuFKGD26wJJSdJ95aQeMcNYzKW5KGlZj/HnyHJSMMa2xAO+7Y0FKdZuv0g==" + }, "SixLabors.ImageSharp.Web.Providers.Azure": { "type": "Direct", "requested": "[2.0.0, )", diff --git a/src/Umbraco.StorageProviders/packages.lock.json b/src/Umbraco.StorageProviders/packages.lock.json index 1711a03..c1bc752 100644 --- a/src/Umbraco.StorageProviders/packages.lock.json +++ b/src/Umbraco.StorageProviders/packages.lock.json @@ -18,6 +18,12 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, + "Nerdbank.GitVersioning": { + "type": "Direct", + "requested": "[3.5.103, )", + "resolved": "3.5.103", + "contentHash": "gMzXNdd/cQWBTp+zaYmHaoTVSOQwOuFKGD26wJJSdJ95aQeMcNYzKW5KGlZj/HnyHJSMMa2xAO+7Y0FKdZuv0g==" + }, "StyleCop.Analyzers": { "type": "Direct", "requested": "[1.2.0-beta.435, )", From 6c1e7bf72f933feb2ee0fe8a5ced32a58466b664 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Mon, 9 May 2022 14:06:54 +0200 Subject: [PATCH 23/26] Remove nightly MyGet feed --- src/Directory.Build.props | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index c4fa4e7..32c249d 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -19,10 +19,6 @@ - - - https://www.myget.org/F/umbraconightly/api/v3/index.json - From 80f4d147bd7a56f99e0e5f7b6351f2a08d3c045b Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 11 May 2022 11:14:43 +0200 Subject: [PATCH 24/26] Revert GitVersioning and PublicApiAnalyzers --- .github/workflows/prepare-release.yml | 53 ----------- .github/workflows/publish-release.yml | 34 ------- src/Directory.Build.props | 22 ++--- .../PublicAPI.Shipped.txt | 89 ------------------- .../PublicAPI.Unshipped.txt | 1 - .../packages.lock.json | 12 --- .../PublicAPI.Shipped.txt | 15 ---- .../PublicAPI.Unshipped.txt | 1 - .../packages.lock.json | 12 --- src/version.json | 16 ---- 10 files changed, 9 insertions(+), 246 deletions(-) delete mode 100644 .github/workflows/prepare-release.yml delete mode 100644 .github/workflows/publish-release.yml delete mode 100644 src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt delete mode 100644 src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt delete mode 100644 src/Umbraco.StorageProviders/PublicAPI.Shipped.txt delete mode 100644 src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt delete mode 100644 src/version.json diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml deleted file mode 100644 index 76fe7e7..0000000 --- a/.github/workflows/prepare-release.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: Prepare release - -on: - workflow_dispatch: - inputs: - tag: - description: 'The prerelease tag to apply on the release branch (if any). If not specified, any existing prerelease tag will be removed.' - required: false - default: '' - type: choice - options: - - '' - - 'beta' - - 'rc' - versionIncrement: - description: 'Specifies which part of the version on the current branch is incremented.' - required: true - default: 'minor' - type: choice - options: - - 'major' - - 'minor' - - 'build' - -env: - DOTNET_NOLOGO: true - DOTNET_GENERATE_ASPNET_CERTIFICATE: false - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - -jobs: - prepare-release: - name: Prepare release - runs-on: windows-latest - - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Configure git - run: | - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - - - name: Setup Nerdbank.GitVersioning - run: dotnet tool install --tool-path . nbgv - - - name: Prepare release - run: ./nbgv prepare-release ${{ github.event.inputs.tag }} -p src --versionIncrement ${{ github.event.inputs.versionIncrement }} - - - name: Push commit (and new branch) - run: git push --all diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml deleted file mode 100644 index 18a9a64..0000000 --- a/.github/workflows/publish-release.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Publish release - -on: - workflow_dispatch: - -env: - DOTNET_NOLOGO: true - DOTNET_GENERATE_ASPNET_CERTIFICATE: false - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true - -jobs: - publish-release: - name: Publish release - runs-on: windows-latest - - steps: - - name: Checkout - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - - name: Configure git - run: | - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - - - name: Setup Nerdbank.GitVersioning - run: dotnet tool install --tool-path . nbgv - - - name: Tag release - run: ./nbgv tag -p src - - - name: Push git tags - run: git push --tags \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 32c249d..d926658 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,5 +1,6 @@  + 2.0.0-alpha en-US Umbraco Copyright © Umbraco 2022 @@ -10,16 +11,21 @@ MIT umbraco storage + + + true + true + $(DefaultItemExcludes);packages.lock.json + + - - - + true @@ -30,15 +36,5 @@ - - - - true - true - $(MSBuildThisFileDirectory) - - - - diff --git a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt deleted file mode 100644 index f769948..0000000 --- a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Shipped.txt +++ /dev/null @@ -1,89 +0,0 @@ -#nullable enable -const Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.MediaFileSystemName = "Media" -> string! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, string! name, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobMediaFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions.AddAzureBlobMediaFileSystem(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure, bool useAzureBlobImageCache = true) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.CreateIfNotExists(Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions! options, Azure.Storage.Blobs.Models.PublicAccessType accessType = Azure.Storage.Blobs.Models.PublicAccessType.None) -> Azure.Response! -Umbraco.Cms.Core.DependencyInjection.AzureBlobFileSystemExtensions -Umbraco.Cms.Core.DependencyInjection.AzureBlobMediaFileSystemExtensions -Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents -Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents.AzureBlobDirectoryContents(Azure.Storage.Blobs.BlobContainerClient! containerClient, System.Collections.Generic.IReadOnlyCollection! items) -> void -Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents.Exists.get -> bool -Umbraco.StorageProviders.AzureBlob.AzureBlobDirectoryContents.GetEnumerator() -> System.Collections.Generic.IEnumerator! -Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider -Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.AzureBlobFileProvider(Azure.Storage.Blobs.BlobContainerClient! containerClient, string? containerRootPath = null) -> void -Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.AzureBlobFileProvider(Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions! options) -> void -Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.GetDirectoryContents(string! subpath) -> Microsoft.Extensions.FileProviders.IDirectoryContents! -Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.GetFileInfo(string! subpath) -> Microsoft.Extensions.FileProviders.IFileInfo! -Umbraco.StorageProviders.AzureBlob.AzureBlobFileProvider.Watch(string! filter) -> Microsoft.Extensions.Primitives.IChangeToken! -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.AzureBlobItemInfo(Azure.Storage.Blobs.BlobClient! blobClient, Azure.Storage.Blobs.Models.BlobItemProperties! properties) -> void -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.AzureBlobItemInfo(Azure.Storage.Blobs.BlobClient! blobClient, Azure.Storage.Blobs.Models.BlobProperties! properties) -> void -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.CreateReadStream() -> System.IO.Stream! -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.Exists.get -> bool -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.IsDirectory.get -> bool -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.LastModified.get -> System.DateTimeOffset -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.Length.get -> long -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.Name.get -> string! -Umbraco.StorageProviders.AzureBlob.AzureBlobItemInfo.PhysicalPath.get -> string! -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.AzureBlobPrefixInfo(string! prefix) -> void -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.CreateReadStream() -> System.IO.Stream! -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.Exists.get -> bool -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.IsDirectory.get -> bool -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.LastModified.get -> System.DateTimeOffset -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.Length.get -> long -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.Name.get -> string! -Umbraco.StorageProviders.AzureBlob.AzureBlobPrefixInfo.PhysicalPath.get -> string! -Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache -Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.AzureBlobFileSystemImageCache(Azure.Storage.Blobs.BlobContainerClient! blobContainerClient) -> void -Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.AzureBlobFileSystemImageCache(Microsoft.Extensions.Options.IOptionsMonitor! options) -> void -Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.AzureBlobFileSystemImageCache(string! name, Microsoft.Extensions.Options.IOptionsMonitor! options) -> void -Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.GetAsync(string! key) -> System.Threading.Tasks.Task! -Umbraco.StorageProviders.AzureBlob.Imaging.AzureBlobFileSystemImageCache.SetAsync(string! key, System.IO.Stream! stream, SixLabors.ImageSharp.Web.ImageCacheMetadata metadata) -> System.Threading.Tasks.Task! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AddFile(string! path, string! physicalPath, bool overrideIfExists = true, bool copy = false) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AddFile(string! path, System.IO.Stream! stream) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AddFile(string! path, System.IO.Stream! stream, bool overrideIfExists) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AzureBlobFileSystem(string! rootUrl, Azure.Storage.Blobs.BlobContainerClient! blobContainerClient, Umbraco.Cms.Core.IO.IIOHelper! ioHelper, Microsoft.AspNetCore.StaticFiles.IContentTypeProvider! contentTypeProvider, string? containerRootPath = null) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.AzureBlobFileSystem(Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions! options, Umbraco.Cms.Core.Hosting.IHostingEnvironment! hostingEnvironment, Umbraco.Cms.Core.IO.IIOHelper! ioHelper, Microsoft.AspNetCore.StaticFiles.IContentTypeProvider! contentTypeProvider) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.CanAddPhysical.get -> bool -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.Create() -> Microsoft.Extensions.FileProviders.IFileProvider! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DeleteDirectory(string! path) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DeleteDirectory(string! path, bool recursive) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DeleteFile(string! path) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.DirectoryExists(string! path) -> bool -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.FileExists(string! path) -> bool -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetBlobClient(string! path) -> Azure.Storage.Blobs.BlobClient! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetCreated(string! path) -> System.DateTimeOffset -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetDirectories(string! path) -> System.Collections.Generic.IEnumerable! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFiles(string! path) -> System.Collections.Generic.IEnumerable! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFiles(string! path, string? filter) -> System.Collections.Generic.IEnumerable! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetFullPath(string! path) -> string! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetLastModified(string! path) -> System.DateTimeOffset -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetRelativePath(string! fullPathOrUrl) -> string! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetSize(string! path) -> long -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.GetUrl(string? path) -> string! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystem.OpenFile(string! path) -> System.IO.Stream! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.AzureBlobFileSystemOptions() -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ConnectionString.get -> string! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ConnectionString.set -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerName.get -> string! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerName.set -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerRootPath.get -> string? -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.ContainerRootPath.set -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.VirtualPath.get -> string! -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemOptions.VirtualPath.set -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemProvider -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemProvider.AzureBlobFileSystemProvider(Microsoft.Extensions.Options.IOptionsMonitor! optionsMonitor, Umbraco.Cms.Core.Hosting.IHostingEnvironment! hostingEnvironment, Umbraco.Cms.Core.IO.IIOHelper! ioHelper) -> void -Umbraco.StorageProviders.AzureBlob.IO.AzureBlobFileSystemProvider.GetFileSystem(string! name) -> Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem! -Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem -Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem.GetBlobClient(string! path) -> Azure.Storage.Blobs.BlobClient! -Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystemProvider -Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystemProvider.GetFileSystem(string! name) -> Umbraco.StorageProviders.AzureBlob.IO.IAzureBlobFileSystem! diff --git a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt b/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt deleted file mode 100644 index ab058de..0000000 --- a/src/Umbraco.StorageProviders.AzureBlob/PublicAPI.Unshipped.txt +++ /dev/null @@ -1 +0,0 @@ -#nullable enable diff --git a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json index fe5f99c..ead2fcd 100644 --- a/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json +++ b/src/Umbraco.StorageProviders.AzureBlob/packages.lock.json @@ -12,12 +12,6 @@ "System.Text.Json": "4.7.2" } }, - "Microsoft.CodeAnalysis.PublicApiAnalyzers": { - "type": "Direct", - "requested": "[3.3.3, )", - "resolved": "3.3.3", - "contentHash": "DWLeZtw2jszmzAh/MZXVo/Dy8fD9vcRaCIRZTaf2ppqaug8BGIV81dQdZfaYFlNuw7FyuZLVC5SZPZsCcePZhQ==" - }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[1.1.1, )", @@ -28,12 +22,6 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, - "Nerdbank.GitVersioning": { - "type": "Direct", - "requested": "[3.5.103, )", - "resolved": "3.5.103", - "contentHash": "gMzXNdd/cQWBTp+zaYmHaoTVSOQwOuFKGD26wJJSdJ95aQeMcNYzKW5KGlZj/HnyHJSMMa2xAO+7Y0FKdZuv0g==" - }, "SixLabors.ImageSharp.Web.Providers.Azure": { "type": "Direct", "requested": "[2.0.0, )", diff --git a/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt b/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt deleted file mode 100644 index 7f32c19..0000000 --- a/src/Umbraco.StorageProviders/PublicAPI.Shipped.txt +++ /dev/null @@ -1,15 +0,0 @@ -#nullable enable -override Umbraco.StorageProviders.CdnMediaUrlProvider.GetMediaUrl(Umbraco.Cms.Core.Models.PublishedContent.IPublishedContent! content, string! propertyAlias, Umbraco.Cms.Core.Models.PublishedContent.UrlMode mode, string? culture, System.Uri! current) -> Umbraco.Cms.Core.Routing.UrlInfo? -static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -static Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions.AddCdnMediaUrlProvider(this Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! builder, System.Action! configure) -> Umbraco.Cms.Core.DependencyInjection.IUmbracoBuilder! -Umbraco.Cms.Core.DependencyInjection.CdnMediaUrlProviderExtensions -Umbraco.StorageProviders.CdnMediaUrlProvider -Umbraco.StorageProviders.CdnMediaUrlProvider.CdnMediaUrlProvider(Microsoft.Extensions.Options.IOptionsMonitor! options, Microsoft.Extensions.Options.IOptionsMonitor! globalSettings, Umbraco.Cms.Core.Hosting.IHostingEnvironment! hostingEnvironment, Umbraco.Cms.Core.PropertyEditors.MediaUrlGeneratorCollection! mediaPathGenerators, Umbraco.Cms.Core.Routing.UriUtility! uriUtility) -> void -Umbraco.StorageProviders.CdnMediaUrlProviderOptions -Umbraco.StorageProviders.CdnMediaUrlProviderOptions.CdnMediaUrlProviderOptions() -> void -Umbraco.StorageProviders.CdnMediaUrlProviderOptions.RemoveMediaFromPath.get -> bool -Umbraco.StorageProviders.CdnMediaUrlProviderOptions.RemoveMediaFromPath.set -> void -Umbraco.StorageProviders.CdnMediaUrlProviderOptions.Url.get -> System.Uri! -Umbraco.StorageProviders.CdnMediaUrlProviderOptions.Url.set -> void diff --git a/src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt b/src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt deleted file mode 100644 index ab058de..0000000 --- a/src/Umbraco.StorageProviders/PublicAPI.Unshipped.txt +++ /dev/null @@ -1 +0,0 @@ -#nullable enable diff --git a/src/Umbraco.StorageProviders/packages.lock.json b/src/Umbraco.StorageProviders/packages.lock.json index c1bc752..0ca15cf 100644 --- a/src/Umbraco.StorageProviders/packages.lock.json +++ b/src/Umbraco.StorageProviders/packages.lock.json @@ -2,12 +2,6 @@ "version": 1, "dependencies": { "net6.0": { - "Microsoft.CodeAnalysis.PublicApiAnalyzers": { - "type": "Direct", - "requested": "[3.3.3, )", - "resolved": "3.3.3", - "contentHash": "DWLeZtw2jszmzAh/MZXVo/Dy8fD9vcRaCIRZTaf2ppqaug8BGIV81dQdZfaYFlNuw7FyuZLVC5SZPZsCcePZhQ==" - }, "Microsoft.SourceLink.GitHub": { "type": "Direct", "requested": "[1.1.1, )", @@ -18,12 +12,6 @@ "Microsoft.SourceLink.Common": "1.1.1" } }, - "Nerdbank.GitVersioning": { - "type": "Direct", - "requested": "[3.5.103, )", - "resolved": "3.5.103", - "contentHash": "gMzXNdd/cQWBTp+zaYmHaoTVSOQwOuFKGD26wJJSdJ95aQeMcNYzKW5KGlZj/HnyHJSMMa2xAO+7Y0FKdZuv0g==" - }, "StyleCop.Analyzers": { "type": "Direct", "requested": "[1.2.0-beta.435, )", diff --git a/src/version.json b/src/version.json deleted file mode 100644 index 70a4b18..0000000 --- a/src/version.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", - "version": "2.0.0-alpha", - "publicReleaseRefSpec": [ - "^refs/tags/release-", - "^refs/tags/v" - ], - "cloudBuild": { - "buildNumber": { - "enabled": true - } - }, - "release": { - "branchName": "release/{version}" - } -} From e2b8943bbc52cc375b07a08dbf51efcdc3f5a685 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 11 May 2022 11:56:25 +0200 Subject: [PATCH 25/26] Remove version.json from solution items --- Umbraco.StorageProviders.sln | 1 - 1 file changed, 1 deletion(-) diff --git a/Umbraco.StorageProviders.sln b/Umbraco.StorageProviders.sln index a1a8008..924a805 100644 --- a/Umbraco.StorageProviders.sln +++ b/Umbraco.StorageProviders.sln @@ -14,7 +14,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution src\Directory.Build.props = src\Directory.Build.props LICENSE = LICENSE README.md = README.md - src\version.json = src\version.json EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Umbraco.StorageProviders", "src\Umbraco.StorageProviders\Umbraco.StorageProviders.csproj", "{5EC38982-2C9A-4D8D-AAE2-743A690FCD71}" From 8f19fff7e5b3fd04fdf88d4fd0525223dc5772a9 Mon Sep 17 00:00:00 2001 From: Ronald Barendse Date: Wed, 11 May 2022 14:26:08 +0200 Subject: [PATCH 26/26] Fix typos in README.md Co-authored-by: Andy Butland --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 448944c..d253956 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ public void ConfigureServices(IServiceCollection services) } ``` -There're multiple ways to configure the CDN provider, it can be done in code: +There are multiple ways to configure the CDN provider. It can be done in code: ```csharp .AddCdnMediaUrlProvider(options => { @@ -72,7 +72,7 @@ public void ConfigureServices(IServiceCollection services) } ``` -There're multiple ways to configure the provider, it can be done in code: +There are multiple ways to configure the provider. It can be done in code: ```csharp .AddAzureBlobMediaFileSystem(options => {