diff --git a/src/Umbraco.Cms.Api.Management/Controllers/TemporaryFile/ConfigurationTemporaryFileController.cs b/src/Umbraco.Cms.Api.Management/Controllers/TemporaryFile/ConfigurationTemporaryFileController.cs new file mode 100644 index 0000000000..89f80af439 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/TemporaryFile/ConfigurationTemporaryFileController.cs @@ -0,0 +1,26 @@ +using Asp.Versioning; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Management.Factories; +using Umbraco.Cms.Api.Management.ViewModels.TemporaryFile; + +namespace Umbraco.Cms.Api.Management.Controllers.TemporaryFile; + +[ApiVersion("1.0")] +public class ConfigurationTemporaryFileController : TemporaryFileControllerBase +{ + private readonly ITemporaryFileConfigurationPresentationFactory _temporaryFileConfigurationPresentationFactory; + + public ConfigurationTemporaryFileController( + ITemporaryFileConfigurationPresentationFactory temporaryFileConfigurationPresentationFactory) => + _temporaryFileConfigurationPresentationFactory = temporaryFileConfigurationPresentationFactory; + + [HttpGet("configuration")] + [MapToApiVersion("1.0")] + [ProducesResponseType(StatusCodes.Status200OK)] + public Task Configuration() + { + TemporaryFileConfigurationResponseModel responseModel = _temporaryFileConfigurationPresentationFactory.Create(); + return Task.FromResult(Ok(responseModel)); + } +} diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/TemporaryFileUploadsBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/TemporaryFileUploadsBuilderExtensions.cs index 856cffbcf8..498dbe44b4 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/TemporaryFileUploadsBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/TemporaryFileUploadsBuilderExtensions.cs @@ -1,4 +1,6 @@ -using Umbraco.Cms.Api.Management.Mapping.TemporaryFile; +using Microsoft.Extensions.DependencyInjection; +using Umbraco.Cms.Api.Management.Factories; +using Umbraco.Cms.Api.Management.Mapping.TemporaryFile; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Mapping; @@ -10,6 +12,7 @@ internal static class TTemporaryFileBuilderExtensions { builder.WithCollectionBuilder() .Add(); + builder.Services.AddTransient(); return builder; } diff --git a/src/Umbraco.Cms.Api.Management/Factories/ITemporaryFileConfigurationPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/ITemporaryFileConfigurationPresentationFactory.cs new file mode 100644 index 0000000000..94592aa360 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Factories/ITemporaryFileConfigurationPresentationFactory.cs @@ -0,0 +1,8 @@ +using Umbraco.Cms.Api.Management.ViewModels.TemporaryFile; + +namespace Umbraco.Cms.Api.Management.Factories; + +public interface ITemporaryFileConfigurationPresentationFactory +{ + TemporaryFileConfigurationResponseModel Create(); +} diff --git a/src/Umbraco.Cms.Api.Management/Factories/TemporaryFileConfigurationPresentationFactory.cs b/src/Umbraco.Cms.Api.Management/Factories/TemporaryFileConfigurationPresentationFactory.cs new file mode 100644 index 0000000000..c0aa1d1c28 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Factories/TemporaryFileConfigurationPresentationFactory.cs @@ -0,0 +1,29 @@ +using Microsoft.Extensions.Options; +using Umbraco.Cms.Api.Management.ViewModels.TemporaryFile; +using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Media; + +namespace Umbraco.Cms.Api.Management.Factories; + +public class TemporaryFileConfigurationPresentationFactory : ITemporaryFileConfigurationPresentationFactory +{ + private readonly RuntimeSettings _runtimeSettings; + private readonly IImageUrlGenerator _imageUrlGenerator; + private readonly ContentSettings _contentSettings; + + public TemporaryFileConfigurationPresentationFactory(IOptionsSnapshot contentSettings, IOptionsSnapshot runtimeSettings, IImageUrlGenerator imageUrlGenerator) + { + _runtimeSettings = runtimeSettings.Value; + _imageUrlGenerator = imageUrlGenerator; + _contentSettings = contentSettings.Value; + } + + public TemporaryFileConfigurationResponseModel Create() => + new() + { + ImageFileTypes = _imageUrlGenerator.SupportedImageFileTypes.ToArray(), + DisallowedUploadedFilesExtensions = _contentSettings.DisallowedUploadedFileExtensions, + AllowedUploadedFileExtensions = _contentSettings.AllowedUploadedFileExtensions, + MaxFileSize = _runtimeSettings.MaxRequestLength, + }; +} diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/TemporaryFile/TemporaryFileConfigurationResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/TemporaryFile/TemporaryFileConfigurationResponseModel.cs new file mode 100644 index 0000000000..369f6fa756 --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/ViewModels/TemporaryFile/TemporaryFileConfigurationResponseModel.cs @@ -0,0 +1,12 @@ +namespace Umbraco.Cms.Api.Management.ViewModels.TemporaryFile; + +public class TemporaryFileConfigurationResponseModel +{ + public string[] ImageFileTypes { get; set; } = Array.Empty(); + + public string[] DisallowedUploadedFilesExtensions { get; set; } = Array.Empty(); + + public string[] AllowedUploadedFileExtensions { get; set; } = Array.Empty(); + + public int? MaxFileSize { get; set; } +}