diff --git a/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs b/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs
index 7bf8f0fa15..31f4373fd2 100644
--- a/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs
+++ b/src/Umbraco.Core/Configuration/ContentSettingsExtensions.cs
@@ -1,5 +1,4 @@
-using System;
-using System.Linq;
+using System.Linq;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Configuration.UmbracoSettings;
@@ -7,20 +6,6 @@ namespace Umbraco.Core.Configuration
{
public static class ContentSettingsExtensions
{
- ///
- /// Gets a value indicating whether the file extension corresponds to an image.
- ///
- /// The file extension.
- ///
- /// A value indicating whether the file extension corresponds to an image.
- public static bool IsImageFile(this ContentSettings contentConfig, string extension)
- {
- if (contentConfig == null) throw new ArgumentNullException(nameof(contentConfig));
- if (extension == null) return false;
- extension = extension.TrimStart('.');
- return contentConfig.Imaging.ImageFileTypes.InvariantContains(extension);
- }
-
///
/// Determines if file extension is allowed for upload based on (optional) white list and black list
/// held in settings.
diff --git a/src/Umbraco.Core/Constants-Web.cs b/src/Umbraco.Core/Constants-Web.cs
index d18e23a6c3..d0ae5550ca 100644
--- a/src/Umbraco.Core/Constants-Web.cs
+++ b/src/Umbraco.Core/Constants-Web.cs
@@ -51,6 +51,7 @@
public const string BackOfficePathSegment = "BackOffice"; // The path segment prefix for all back office controllers
public const string BackOfficeArea = "UmbracoBackOffice"; // Used for area routes of non-api controllers
public const string BackOfficeApiArea = "UmbracoApi"; // Same name as v8 so all routing remains the same
+ public const string BackOfficeTreeArea = "UmbracoTrees"; // Same name as v8 so all routing remains the same
}
}
}
diff --git a/src/Umbraco.Core/Media/IImageUrlGenerator.cs b/src/Umbraco.Core/Media/IImageUrlGenerator.cs
index f9e67cdd2b..7c77a34388 100644
--- a/src/Umbraco.Core/Media/IImageUrlGenerator.cs
+++ b/src/Umbraco.Core/Media/IImageUrlGenerator.cs
@@ -1,9 +1,12 @@
-using Umbraco.Core.Models;
+using System.Collections.Generic;
+using Umbraco.Core.Models;
namespace Umbraco.Core.Media
{
public interface IImageUrlGenerator
{
+ IEnumerable SupportedImageFileTypes { get; }
+
string GetImageUrl(ImageUrlGenerationOptions options);
}
}
diff --git a/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs b/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs
new file mode 100644
index 0000000000..902f84331b
--- /dev/null
+++ b/src/Umbraco.Core/Media/ImageUrlGeneratorExtensions.cs
@@ -0,0 +1,21 @@
+using System;
+
+namespace Umbraco.Core.Media
+{
+ public static class ImageUrlGeneratorExtensions
+ {
+ ///
+ /// Gets a value indicating whether the file extension corresponds to a supported image.
+ ///
+ /// The image URL generator implementation that provides detail on which image extension sare supported.
+ /// The file extension.
+ /// A value indicating whether the file extension corresponds to an image.
+ public static bool IsSupportedImageFormat(this IImageUrlGenerator imageUrlGenerator, string extension)
+ {
+ if (imageUrlGenerator == null) throw new ArgumentNullException(nameof(imageUrlGenerator));
+ if (extension == null) return false;
+ extension = extension.TrimStart('.');
+ return imageUrlGenerator.SupportedImageFileTypes.InvariantContains(extension);
+ }
+ }
+}
diff --git a/src/Umbraco.Infrastructure/Media/ImageSharpImageUrlGenerator.cs b/src/Umbraco.Infrastructure/Media/ImageSharpImageUrlGenerator.cs
index 48ff16f85b..cfe542badc 100644
--- a/src/Umbraco.Infrastructure/Media/ImageSharpImageUrlGenerator.cs
+++ b/src/Umbraco.Infrastructure/Media/ImageSharpImageUrlGenerator.cs
@@ -1,4 +1,5 @@
-using System.Globalization;
+using System.Collections.Generic;
+using System.Globalization;
using System.Text;
using Umbraco.Core;
using Umbraco.Core.Media;
@@ -9,6 +10,8 @@ namespace Umbraco.Infrastructure.Media
{
public class ImageSharpImageUrlGenerator : IImageUrlGenerator
{
+ public IEnumerable SupportedImageFileTypes => new[] { "jpeg", "jpg", "gif", "bmp", "png" };
+
public string GetImageUrl(ImageUrlGenerationOptions options)
{
if (options == null) return null;
diff --git a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs
index e4ad0f8979..deeed7a07c 100644
--- a/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs
+++ b/src/Umbraco.Infrastructure/Media/UploadAutoFillProperties.cs
@@ -1,12 +1,11 @@
using System;
using System.Drawing;
using System.IO;
-using Microsoft.Extensions.Options;
using Microsoft.Extensions.Logging;
using Umbraco.Core;
-using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.IO;
+using Umbraco.Core.Media;
using Umbraco.Core.Models;
namespace Umbraco.Web.Media
@@ -18,16 +17,16 @@ namespace Umbraco.Web.Media
{
private readonly IMediaFileSystem _mediaFileSystem;
private readonly ILogger _logger;
- private readonly ContentSettings _contentSettings;
+ private readonly IImageUrlGenerator _imageUrlGenerator;
public UploadAutoFillProperties(
IMediaFileSystem mediaFileSystem,
ILogger logger,
- IOptions contentSettings)
+ IImageUrlGenerator imageUrlGenerator)
{
_mediaFileSystem = mediaFileSystem ?? throw new ArgumentNullException(nameof(mediaFileSystem));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
- _contentSettings = contentSettings.Value ?? throw new ArgumentNullException(nameof(contentSettings));
+ _imageUrlGenerator = imageUrlGenerator ?? throw new ArgumentNullException(nameof(imageUrlGenerator));
}
///
@@ -72,7 +71,7 @@ namespace Umbraco.Web.Media
using (var filestream = _mediaFileSystem.OpenFile(filepath))
{
var extension = (Path.GetExtension(filepath) ?? "").TrimStart('.');
- var size = _contentSettings.IsImageFile(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null;
+ var size = _imageUrlGenerator.IsSupportedImageFormat(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null;
SetProperties(content, autoFillConfig, size, filestream.Length, extension, culture, segment);
}
}
@@ -106,7 +105,7 @@ namespace Umbraco.Web.Media
else
{
var extension = (Path.GetExtension(filepath) ?? "").TrimStart('.');
- var size = _contentSettings.IsImageFile(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null;
+ var size = _imageUrlGenerator.IsSupportedImageFormat(extension) ? (Size?)ImageHelper.GetDimensions(filestream) : null;
SetProperties(content, autoFillConfig, size, filestream.Length, extension, culture, segment);
}
}
diff --git a/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs
index c755d1ee0f..448e2043c0 100644
--- a/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs
+++ b/src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyEditor.cs
@@ -7,6 +7,7 @@ using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.IO;
+using Umbraco.Core.Media;
using Umbraco.Core.Models;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
@@ -37,7 +38,8 @@ namespace Umbraco.Web.PropertyEditors
IDataTypeService dataTypeService,
ILocalizationService localizationService,
ILocalizedTextService localizedTextService,
- IShortStringHelper shortStringHelper)
+ IShortStringHelper shortStringHelper,
+ UploadAutoFillProperties uploadAutoFillProperties)
: base(loggerFactory, dataTypeService, localizationService, localizedTextService, shortStringHelper)
{
_mediaFileSystem = mediaFileSystem ?? throw new ArgumentNullException(nameof(mediaFileSystem));
@@ -45,7 +47,7 @@ namespace Umbraco.Web.PropertyEditors
_dataTypeService = dataTypeService;
_localizationService = localizationService;
_localizedTextService = localizedTextService;
- _uploadAutoFillProperties = new UploadAutoFillProperties(_mediaFileSystem, loggerFactory.CreateLogger(), contentSettings);
+ _uploadAutoFillProperties = uploadAutoFillProperties;
}
///
diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs
index 0783012521..3434ee5bcb 100644
--- a/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs
+++ b/src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyEditor.cs
@@ -9,6 +9,7 @@ using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.IO;
+using Umbraco.Core.Media;
using Umbraco.Core.Models;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Services;
@@ -33,7 +34,6 @@ namespace Umbraco.Web.PropertyEditors
private readonly IMediaFileSystem _mediaFileSystem;
private readonly ContentSettings _contentSettings;
private readonly IDataTypeService _dataTypeService;
- private readonly ILocalizationService _localizationService;
private readonly IIOHelper _ioHelper;
private readonly UploadAutoFillProperties _autoFillProperties;
private readonly ILogger _logger;
@@ -49,18 +49,16 @@ namespace Umbraco.Web.PropertyEditors
ILocalizationService localizationService,
IIOHelper ioHelper,
IShortStringHelper shortStringHelper,
- ILocalizedTextService localizedTextService)
+ ILocalizedTextService localizedTextService,
+ UploadAutoFillProperties uploadAutoFillProperties)
: base(loggerFactory, dataTypeService, localizationService, localizedTextService, shortStringHelper)
{
_mediaFileSystem = mediaFileSystem ?? throw new ArgumentNullException(nameof(mediaFileSystem));
_contentSettings = contentSettings.Value ?? throw new ArgumentNullException(nameof(contentSettings));
- _dataTypeService = dataTypeService;
- _localizationService = localizationService;
- _ioHelper = ioHelper;
+ _dataTypeService = dataTypeService ?? throw new ArgumentNullException(nameof(dataTypeService));
+ _ioHelper = ioHelper ?? throw new ArgumentNullException(nameof(ioHelper));
+ _autoFillProperties = uploadAutoFillProperties ?? throw new ArgumentNullException(nameof(uploadAutoFillProperties));
_logger = loggerFactory.CreateLogger();
-
- // TODO: inject?
- _autoFillProperties = new UploadAutoFillProperties(_mediaFileSystem, loggerFactory.CreateLogger(), contentSettings);
}
public bool TryGetMediaPath(string alias, object value, out string mediaPath)
diff --git a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs
index 67adc73589..ec59876655 100644
--- a/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs
+++ b/src/Umbraco.Infrastructure/Runtime/CoreInitialComposer.cs
@@ -57,6 +57,7 @@ using IntegerValidator = Umbraco.Core.PropertyEditors.Validators.IntegerValidato
using TextStringValueConverter = Umbraco.Core.PropertyEditors.ValueConverters.TextStringValueConverter;
using Umbraco.Core.Configuration.Models;
using Microsoft.Extensions.Options;
+using Umbraco.Web.Media;
namespace Umbraco.Core.Runtime
{
@@ -372,6 +373,8 @@ namespace Umbraco.Core.Runtime
// Register noop versions for examine to be overridden by examine
composition.RegisterUnique();
composition.RegisterUnique();
+
+ composition.RegisterUnique();
}
}
}
diff --git a/src/Umbraco.Tests.Integration/TestServerTest/Controllers/ContentControllerTests.cs b/src/Umbraco.Tests.Integration/TestServerTest/Controllers/ContentControllerTests.cs
index 9a1b335c62..85bdfae8fa 100644
--- a/src/Umbraco.Tests.Integration/TestServerTest/Controllers/ContentControllerTests.cs
+++ b/src/Umbraco.Tests.Integration/TestServerTest/Controllers/ContentControllerTests.cs
@@ -11,6 +11,7 @@ using Umbraco.Core.Services;
using Umbraco.Tests.Common.Builders;
using Umbraco.Tests.Common.Builders.Extensions;
using Umbraco.Tests.Testing;
+using Umbraco.Web.BackOffice.Controllers;
using Umbraco.Web.Common.Formatters;
using Umbraco.Web.Editors;
using Umbraco.Web.Models.ContentEditing;
diff --git a/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs b/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
index 465305cd24..5fe06b8a99 100644
--- a/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
+++ b/src/Umbraco.Tests.Integration/TestServerTest/UmbracoTestServerTestBase.cs
@@ -22,6 +22,7 @@ using Umbraco.Web.Common.Builder;
using Umbraco.Web.Common.Controllers;
using Umbraco.Web.Editors;
using Microsoft.Extensions.Hosting;
+using Umbraco.Web.BackOffice.Controllers;
namespace Umbraco.Tests.Integration.TestServerTest
{
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs
index 77d7aead5e..cf91550fe5 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.Common/ImageCropperTest.cs
@@ -9,6 +9,7 @@ using Umbraco.Web.Models;
using System.Text;
using Umbraco.Core.Media;
using Umbraco.Extensions;
+using System.Collections.Generic;
namespace Umbraco.Tests.PropertyEditors
{
@@ -311,6 +312,8 @@ namespace Umbraco.Tests.PropertyEditors
internal class TestImageUrlGenerator : IImageUrlGenerator
{
+ public IEnumerable SupportedImageFileTypes => new[] { "jpeg", "jpg", "gif", "bmp", "png", "tiff", "tif" };
+
public string GetImageUrl(ImageUrlGenerationOptions options)
{
var imageProcessorUrl = new StringBuilder(options.ImageUrl ?? string.Empty);
diff --git a/src/Umbraco.Tests/Models/MediaXmlTest.cs b/src/Umbraco.Tests/Models/MediaXmlTest.cs
index a31c3ae4e1..646dc7f2a0 100644
--- a/src/Umbraco.Tests/Models/MediaXmlTest.cs
+++ b/src/Umbraco.Tests/Models/MediaXmlTest.cs
@@ -35,7 +35,7 @@ namespace Umbraco.Tests.Models
var contentSettings = new ContentSettings();
var mediaFileSystem = new MediaFileSystem(Mock.Of(), scheme, loggerFactory.CreateLogger(), ShortStringHelper);
- var ignored = new FileUploadPropertyEditor(loggerFactory, mediaFileSystem, Microsoft.Extensions.Options.Options.Create(contentSettings), DataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper);
+ var ignored = new FileUploadPropertyEditor(loggerFactory, mediaFileSystem, Microsoft.Extensions.Options.Options.Create(contentSettings), DataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper, UploadAutoFillProperties);
var media = MockedMedia.CreateMediaImage(mediaType, -1);
media.WriterId = -1; // else it's zero and that's not a user and it breaks the tests
diff --git a/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs b/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs
index 9cd50bd62e..f16ca63e55 100644
--- a/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs
+++ b/src/Umbraco.Tests/Routing/MediaUrlProviderTests.cs
@@ -7,7 +7,6 @@ using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.IO;
-using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Models.PublishedContent;
using Umbraco.Core.PropertyEditors;
@@ -39,8 +38,8 @@ namespace Umbraco.Tests.Routing
var dataTypeService = Mock.Of();
var propertyEditors = new MediaUrlGeneratorCollection(new IMediaUrlGenerator[]
{
- new FileUploadPropertyEditor(loggerFactory, mediaFileSystemMock, Microsoft.Extensions.Options.Options.Create(contentSettings), dataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper),
- new ImageCropperPropertyEditor(loggerFactory, mediaFileSystemMock, Microsoft.Extensions.Options.Options.Create(contentSettings), dataTypeService, LocalizationService, IOHelper, ShortStringHelper, LocalizedTextService),
+ new FileUploadPropertyEditor(loggerFactory, mediaFileSystemMock, Microsoft.Extensions.Options.Options.Create(contentSettings), dataTypeService, LocalizationService, LocalizedTextService, ShortStringHelper, UploadAutoFillProperties),
+ new ImageCropperPropertyEditor(loggerFactory, mediaFileSystemMock, Microsoft.Extensions.Options.Options.Create(contentSettings), dataTypeService, LocalizationService, IOHelper, ShortStringHelper, LocalizedTextService, UploadAutoFillProperties),
});
_mediaUrlProvider = new DefaultMediaUrlProvider(propertyEditors, UriUtility);
}
diff --git a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs
index da7c1efcd8..c44e33755a 100644
--- a/src/Umbraco.Tests/Testing/UmbracoTestBase.cs
+++ b/src/Umbraco.Tests/Testing/UmbracoTestBase.cs
@@ -53,6 +53,7 @@ using Umbraco.Web.AspNet;
using Umbraco.Web.ContentApps;
using Umbraco.Web.Hosting;
using Umbraco.Web.Install;
+using Umbraco.Web.Media;
using Umbraco.Web.PropertyEditors;
using Umbraco.Web.PublishedCache;
using Umbraco.Web.Routing;
@@ -133,6 +134,8 @@ namespace Umbraco.Tests.Testing
protected ILocalizationService LocalizationService => Factory.GetInstance();
protected ILocalizedTextService LocalizedTextService { get; private set; }
protected IShortStringHelper ShortStringHelper => Factory?.GetInstance() ?? TestHelper.ShortStringHelper;
+ protected IImageUrlGenerator ImageUrlGenerator => Factory.GetInstance();
+ protected UploadAutoFillProperties UploadAutoFillProperties => Factory.GetInstance();
protected IUmbracoVersion UmbracoVersion { get; private set; }
protected ITypeFinder TypeFinder { get; private set; }
@@ -348,6 +351,7 @@ namespace Umbraco.Tests.Testing
runtimeStateMock.Setup(x => x.Level).Returns(RuntimeLevel.Run);
Composition.RegisterUnique(f => runtimeStateMock.Object);
Composition.Register(_ => Mock.Of());
+ Composition.Register();
// ah...
Composition.WithCollectionBuilder();
diff --git a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
index 59a5a10347..a6b350da91 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
@@ -4,14 +4,13 @@ using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;
+using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Logging;
using Umbraco.Core;
using Umbraco.Core.BackOffice;
-using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Mapping;
using Umbraco.Core.Models;
@@ -54,6 +53,7 @@ namespace Umbraco.Web.BackOffice.Controllers
private readonly IEmailSender _emailSender;
private readonly Core.Hosting.IHostingEnvironment _hostingEnvironment;
private readonly IRequestAccessor _requestAccessor;
+ private readonly LinkGenerator _linkGenerator;
// TODO: We need to import the logic from Umbraco.Web.Editors.AuthenticationController
// TODO: We need to review all _userManager.Raise calls since many/most should be on the usermanager or signinmanager, very few should be here
@@ -72,7 +72,8 @@ namespace Umbraco.Web.BackOffice.Controllers
IOptions passwordConfiguration,
IEmailSender emailSender,
Core.Hosting.IHostingEnvironment hostingEnvironment,
- IRequestAccessor requestAccessor)
+ IRequestAccessor requestAccessor,
+ LinkGenerator linkGenerator)
{
_backofficeSecurityAccessor = backofficeSecurityAccessor;
_userManager = backOfficeUserManager;
@@ -88,6 +89,7 @@ namespace Umbraco.Web.BackOffice.Controllers
_emailSender = emailSender;
_hostingEnvironment = hostingEnvironment;
_requestAccessor = requestAccessor;
+ _linkGenerator = linkGenerator;
}
///
@@ -439,11 +441,10 @@ namespace Umbraco.Web.BackOffice.Controllers
private string ConstructCallbackUrl(int userId, string code)
{
// Get an mvc helper to get the url
- var urlHelper = new UrlHelper(ControllerContext);
- var action = urlHelper.Action(nameof(BackOfficeController.ValidatePasswordResetCode), ControllerExtensions.GetControllerName(),
+ var action = _linkGenerator.GetPathByAction(nameof(BackOfficeController.ValidatePasswordResetCode), ControllerExtensions.GetControllerName(),
new
{
- area = _globalSettings.GetUmbracoMvcArea(_hostingEnvironment),
+ area = Constants.Web.Mvc.BackOfficeArea,
u = userId,
r = code
});
diff --git a/src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs b/src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs
index 7a17791777..7a8adca44f 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs
@@ -16,6 +16,7 @@ using Umbraco.Core.Configuration.Grid;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Hosting;
using Umbraco.Core.Security;
+using Umbraco.Core.Serialization;
using Umbraco.Core.Services;
using Umbraco.Core.WebAssets;
using Umbraco.Extensions;
@@ -47,6 +48,7 @@ namespace Umbraco.Web.BackOffice.Controllers
private readonly BackOfficeSignInManager _signInManager;
private readonly IBackofficeSecurityAccessor _backofficeSecurityAccessor;
private readonly ILogger _logger;
+ private readonly IJsonSerializer _jsonSerializer;
public BackOfficeController(
IBackOfficeUserManager userManager,
@@ -59,7 +61,8 @@ namespace Umbraco.Web.BackOffice.Controllers
AppCaches appCaches,
BackOfficeSignInManager signInManager,
IBackofficeSecurityAccessor backofficeSecurityAccessor,
- ILogger logger)
+ ILogger logger,
+ IJsonSerializer jsonSerializer)
{
_userManager = userManager;
_runtimeMinifier = runtimeMinifier;
@@ -72,6 +75,7 @@ namespace Umbraco.Web.BackOffice.Controllers
_signInManager = signInManager;
_backofficeSecurityAccessor = backofficeSecurityAccessor;
_logger = logger;
+ _jsonSerializer = jsonSerializer;
}
[HttpGet]
@@ -249,11 +253,11 @@ namespace Umbraco.Web.BackOffice.Controllers
var user = await _userManager.FindByIdAsync(userId.ToString());
if (user != null)
{
- var result = await _userManager.VerifyUserTokenAsync(user, "ResetPassword", "ResetPassword", resetCode);
+ var result = await _userManager.VerifyUserTokenAsync(user, "Default", "ResetPassword", resetCode);
if (result)
{
//Add a flag and redirect for it to be displayed
- TempData[ViewDataExtensions.TokenPasswordResetCode] = new ValidatePasswordResetCodeModel { UserId = userId, ResetCode = resetCode };
+ TempData[ViewDataExtensions.TokenPasswordResetCode] = _jsonSerializer.Serialize(new ValidatePasswordResetCodeModel { UserId = userId, ResetCode = resetCode });
return RedirectToLocal(Url.Action("Default", "BackOffice"));
}
}
diff --git a/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs b/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs
index 755c0b3a3f..4f397c4a59 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs
@@ -11,6 +11,7 @@ using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Hosting;
+using Umbraco.Core.Media;
using Umbraco.Core.WebAssets;
using Umbraco.Extensions;
using Umbraco.Web.BackOffice.Profiling;
@@ -41,6 +42,7 @@ namespace Umbraco.Web.BackOffice.Controllers
private readonly SecuritySettings _securitySettings;
private readonly IRuntimeMinifier _runtimeMinifier;
private readonly IAuthenticationSchemeProvider _authenticationSchemeProvider;
+ private readonly IImageUrlGenerator _imageUrlGenerator;
public BackOfficeServerVariables(
LinkGenerator linkGenerator,
@@ -55,7 +57,8 @@ namespace Umbraco.Web.BackOffice.Controllers
IOptions runtimeSettings,
IOptions securitySettings,
IRuntimeMinifier runtimeMinifier,
- IAuthenticationSchemeProvider authenticationSchemeProvider)
+ IAuthenticationSchemeProvider authenticationSchemeProvider,
+ IImageUrlGenerator imageUrlGenerator)
{
_linkGenerator = linkGenerator;
_runtimeState = runtimeState;
@@ -70,6 +73,7 @@ namespace Umbraco.Web.BackOffice.Controllers
_securitySettings = securitySettings.Value;
_runtimeMinifier = runtimeMinifier;
_authenticationSchemeProvider = authenticationSchemeProvider;
+ _imageUrlGenerator = imageUrlGenerator;
}
///
@@ -363,7 +367,7 @@ namespace Umbraco.Web.BackOffice.Controllers
{"appPluginsPath", _hostingEnvironment.ToAbsolute(Constants.SystemDirectories.AppPlugins).TrimEnd('/')},
{
"imageFileTypes",
- string.Join(",", _contentSettings.Imaging.ImageFileTypes)
+ string.Join(",", _imageUrlGenerator.SupportedImageFileTypes)
},
{
"disallowedUploadFiles",
diff --git a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
index 8b8da0b959..96f0689b52 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
@@ -39,7 +39,7 @@ using Umbraco.Web.Models.Mapping;
using Umbraco.Web.Security;
using Umbraco.Web.WebApi.Filters;
-namespace Umbraco.Web.Editors
+namespace Umbraco.Web.BackOffice.Controllers
{
///
/// The API controller used for editing content
diff --git a/src/Umbraco.Web.BackOffice/Controllers/IconController.cs b/src/Umbraco.Web.BackOffice/Controllers/IconController.cs
index 28509e2425..cad92206ec 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/IconController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/IconController.cs
@@ -4,7 +4,7 @@ using Umbraco.Core.Services;
using Umbraco.Web.BackOffice.Controllers;
using Umbraco.Web.Common.Attributes;
-namespace Umbraco.Web.Editors
+namespace Umbraco.Web.BackOffice.Controllers
{
[PluginController("UmbracoApi")]
public class IconController : UmbracoAuthorizedApiController
diff --git a/src/Umbraco.Web.BackOffice/Controllers/ImagesController.cs b/src/Umbraco.Web.BackOffice/Controllers/ImagesController.cs
index 6f1b7fb037..1f626b1b0f 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/ImagesController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/ImagesController.cs
@@ -1,10 +1,7 @@
using System;
using System.IO;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
using Umbraco.Core;
-using Umbraco.Core.Configuration;
-using Umbraco.Core.Configuration.Models;
using Umbraco.Core.IO;
using Umbraco.Core.Media;
using Umbraco.Core.Models;
@@ -20,16 +17,13 @@ namespace Umbraco.Web.BackOffice.Controllers
public class ImagesController : UmbracoAuthorizedApiController
{
private readonly IMediaFileSystem _mediaFileSystem;
- private readonly ContentSettings _contentSettings;
private readonly IImageUrlGenerator _imageUrlGenerator;
public ImagesController(
IMediaFileSystem mediaFileSystem,
- IOptions contentSettings,
IImageUrlGenerator imageUrlGenerator)
{
_mediaFileSystem = mediaFileSystem;
- _contentSettings = contentSettings.Value;
_imageUrlGenerator = imageUrlGenerator;
}
@@ -62,7 +56,7 @@ namespace Umbraco.Web.BackOffice.Controllers
var ext = Path.GetExtension(imagePath);
// we need to check if it is an image by extension
- if (_contentSettings.IsImageFile(ext) == false)
+ if (_imageUrlGenerator.IsSupportedImageFormat(ext) == false)
return NotFound();
//redirect to ImageProcessor thumbnail with rnd generated from last modified time of original media file
diff --git a/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs b/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
index 50869662c1..5bf6798170 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
@@ -18,6 +18,7 @@ using Umbraco.Core.Events;
using Umbraco.Core.Hosting;
using Umbraco.Core.IO;
using Umbraco.Core.Mapping;
+using Umbraco.Core.Media;
using Umbraco.Core.Models;
using Umbraco.Core.Models.ContentEditing;
using Umbraco.Core.Models.Entities;
@@ -27,8 +28,6 @@ using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.PropertyEditors;
using Umbraco.Core.Security;
-using Umbraco.Web.ContentApps;
-using Umbraco.Web.WebApi.Filters;
using Umbraco.Core.Services;
using Umbraco.Core.Strings;
using Umbraco.Extensions;
@@ -39,7 +38,6 @@ using Umbraco.Web.Common.Attributes;
using Umbraco.Web.Common.Exceptions;
using Umbraco.Web.ContentApps;
using Umbraco.Web.Models.ContentEditing;
-using Umbraco.Web.Security;
using Umbraco.Web.WebApi.Filters;
using Constants = Umbraco.Core.Constants;
@@ -65,6 +63,7 @@ namespace Umbraco.Web.BackOffice.Controllers
private readonly ISqlContext _sqlContext;
private readonly IContentTypeBaseServiceProvider _contentTypeBaseServiceProvider;
private readonly IRelationService _relationService;
+ private readonly IImageUrlGenerator _imageUrlGenerator;
private readonly ILogger _logger;
public MediaController(
@@ -85,7 +84,8 @@ namespace Umbraco.Web.BackOffice.Controllers
IRelationService relationService,
PropertyEditorCollection propertyEditors,
IMediaFileSystem mediaFileSystem,
- IHostingEnvironment hostingEnvironment)
+ IHostingEnvironment hostingEnvironment,
+ IImageUrlGenerator imageUrlGenerator)
: base(cultureDictionary, loggerFactory, shortStringHelper, eventMessages, localizedTextService)
{
_shortStringHelper = shortStringHelper;
@@ -104,6 +104,7 @@ namespace Umbraco.Web.BackOffice.Controllers
_mediaFileSystem = mediaFileSystem;
_hostingEnvironment = hostingEnvironment;
_logger = loggerFactory.CreateLogger();
+ _imageUrlGenerator = imageUrlGenerator;
}
///
@@ -747,7 +748,7 @@ namespace Umbraco.Web.BackOffice.Controllers
if (contentTypeAlias == Constants.Conventions.MediaTypes.AutoSelect)
{
- if (_contentSettings.Imaging.ImageFileTypes.Contains(ext))
+ if (_imageUrlGenerator.SupportedImageFileTypes.Contains(ext))
{
mediaType = Constants.Conventions.MediaTypes.Image;
}
diff --git a/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs b/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs
index e4d616cc43..69188e1636 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/MemberTypeController.cs
@@ -21,10 +21,11 @@ using Umbraco.Web.BackOffice.Controllers;
using Umbraco.Web.BackOffice.Filters;
using Umbraco.Web.Common.Attributes;
using Umbraco.Web.Common.Exceptions;
+using Umbraco.Web.Editors;
using Umbraco.Web.Routing;
using Umbraco.Web.Security;
-namespace Umbraco.Web.Editors
+namespace Umbraco.Web.BackOffice.Controllers
{
///
/// An API controller used for dealing with member types
diff --git a/src/Umbraco.Web.BackOffice/Controllers/SectionController.cs b/src/Umbraco.Web.BackOffice/Controllers/SectionController.cs
index c579a3ec1d..982dab6dec 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/SectionController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/SectionController.cs
@@ -15,7 +15,7 @@ using Umbraco.Web.Security;
using Umbraco.Web.Services;
using Umbraco.Web.Trees;
-namespace Umbraco.Web.Editors
+namespace Umbraco.Web.BackOffice.Controllers
{
///
/// The API controller used for using the list of sections
diff --git a/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs b/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs
index b62d6b6080..4bae8970bc 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/TinyMceController.cs
@@ -12,6 +12,7 @@ using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.Models;
using Umbraco.Core.Hosting;
using Umbraco.Core.IO;
+using Umbraco.Core.Media;
using Umbraco.Core.Strings;
using Umbraco.Web.BackOffice.Filters;
using Umbraco.Web.Common.ActionsResults;
@@ -32,18 +33,20 @@ namespace Umbraco.Web.BackOffice.Controllers
private readonly IShortStringHelper _shortStringHelper;
private readonly ContentSettings _contentSettings;
private readonly IIOHelper _ioHelper;
+ private readonly IImageUrlGenerator _imageUrlGenerator;
public TinyMceController(
IHostingEnvironment hostingEnvironment,
IShortStringHelper shortStringHelper,
IOptions contentSettings,
- IIOHelper ioHelper
- )
+ IIOHelper ioHelper,
+ IImageUrlGenerator imageUrlGenerator)
{
_hostingEnvironment = hostingEnvironment;
_shortStringHelper = shortStringHelper;
_contentSettings = contentSettings.Value;
_ioHelper = ioHelper;
+ _imageUrlGenerator = imageUrlGenerator;
}
[HttpPost]
@@ -78,7 +81,7 @@ namespace Umbraco.Web.BackOffice.Controllers
var safeFileName = fileName.ToSafeFileName(_shortStringHelper);
var ext = safeFileName.Substring(safeFileName.LastIndexOf('.') + 1).ToLower();
- if (_contentSettings.IsFileAllowedForUpload(ext) == false || _contentSettings.Imaging.ImageFileTypes.Contains(ext) == false)
+ if (_contentSettings.IsFileAllowedForUpload(ext) == false || _imageUrlGenerator.SupportedImageFileTypes.Contains(ext) == false)
{
// Throw some error - to say can't upload this IMG type
return new UmbracoProblemResult("This is not an image filetype extension that is approved", HttpStatusCode.BadRequest);
diff --git a/src/Umbraco.Web.BackOffice/Extensions/HtmlHelperBackOfficeExtensions.cs b/src/Umbraco.Web.BackOffice/Extensions/HtmlHelperBackOfficeExtensions.cs
index ad51b1b543..68025fc7ab 100644
--- a/src/Umbraco.Web.BackOffice/Extensions/HtmlHelperBackOfficeExtensions.cs
+++ b/src/Umbraco.Web.BackOffice/Extensions/HtmlHelperBackOfficeExtensions.cs
@@ -116,8 +116,7 @@ namespace Umbraco.Extensions
sb.AppendLine();
sb.AppendLine(@"var errors = [];");
- var errors = val as IEnumerable;
- if (errors != null)
+ if (val is IEnumerable errors)
{
foreach (var error in errors)
{
@@ -125,13 +124,10 @@ namespace Umbraco.Extensions
}
}
- var resetCodeModel = val as ValidatePasswordResetCodeModel;
-
-
sb.AppendLine(@"app.value(""resetPasswordCodeInfo"", {");
sb.AppendLine(@"errors: errors,");
sb.Append(@"resetCodeModel: ");
- sb.AppendLine(JsonConvert.SerializeObject(resetCodeModel));
+ sb.AppendLine(val?.ToString() ?? "null");
sb.AppendLine(@"});");
return html.Raw(sb.ToString());
diff --git a/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs
index 92cb5b1b93..6f7eec68f8 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs
@@ -30,7 +30,7 @@ namespace Umbraco.Web.Trees
/// Used to return tree root nodes
///
[AngularJsonOnlyConfiguration]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
public class ApplicationTreeController : UmbracoAuthorizedApiController
{
private readonly ITreeService _treeService;
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs
index 5b7ffd2e05..607efbf2f9 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs
@@ -23,7 +23,7 @@ namespace Umbraco.Web.Trees
///
[UmbracoApplicationAuthorize(Constants.Applications.Content)]
[Tree(Constants.Applications.Settings, Constants.Trees.ContentBlueprints, SortOrder = 12, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class ContentBlueprintTreeController : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
index 63d58cb499..1685b329dd 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
@@ -36,7 +36,7 @@ namespace Umbraco.Web.Trees
Constants.Applications.Packages,
Constants.Applications.Members)]
[Tree(Constants.Applications.Content, Constants.Trees.Content)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
[SearchableTree("searchResultFormatter", "configureContentResult", 10)]
public class ContentTreeController : ContentTreeControllerBase, ISearchableTree
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
index 2ee5ef0b3f..82e4d70e8c 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
@@ -18,7 +18,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.DocumentTypes)]
[Tree(Constants.Applications.Settings, Constants.Trees.DocumentTypes, SortOrder = 0, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class ContentTypeTreeController : TreeController, ISearchableTree
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs
index c68908c3dc..7cffe230c7 100644
--- a/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs
@@ -19,7 +19,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.DataTypes)]
[Tree(Constants.Applications.Settings, Constants.Trees.DataTypes, SortOrder = 3, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class DataTypeTreeController : TreeController, ISearchableTree
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs
index d92ca0e6c7..657772e622 100644
--- a/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs
@@ -20,7 +20,7 @@ namespace Umbraco.Web.Trees
// We are allowed to see the dictionary tree, if we are allowed to manage templates, such that se can use the
// dictionary items in templates, even when we dont have authorization to manage the dictionary items
)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
[Tree(Constants.Applications.Translation, Constants.Trees.Dictionary, TreeGroup = Constants.Trees.Groups.Settings)]
public class DictionaryTreeController : TreeController
diff --git a/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs
index d34c26b07d..a3c0354ca9 100644
--- a/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs
@@ -11,7 +11,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Languages)]
[Tree(Constants.Applications.Settings, Constants.Trees.Languages, SortOrder = 11, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class LanguageTreeController : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs
index e9fe918c52..4de3670fcd 100644
--- a/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs
@@ -11,7 +11,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.LogViewer)]
[Tree(Constants.Applications.Settings, Constants.Trees.LogViewer, SortOrder= 9, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class LogViewerTreeController : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs
index c3d15996d5..690b1888c5 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs
@@ -13,7 +13,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Macros)]
[Tree(Constants.Applications.Settings, Constants.Trees.Macros, TreeTitle = "Macros", SortOrder = 4, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class MacrosTreeController : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs
index 736193e5c7..10edcd46c7 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs
@@ -32,7 +32,7 @@ namespace Umbraco.Web.Trees
Constants.Applications.Packages,
Constants.Applications.Members)]
[Tree(Constants.Applications.Media, Constants.Trees.Media)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
[SearchableTree("searchResultFormatter", "configureMediaResult", 20)]
public class MediaTreeController : ContentTreeControllerBase, ISearchableTree, ITreeNodeController
diff --git a/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs
index 27f4f8f77e..52a66d63ce 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs
@@ -18,7 +18,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.MediaTypes)]
[Tree(Constants.Applications.Settings, Constants.Trees.MediaTypes, SortOrder = 1, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class MediaTypeTreeController : TreeController, ISearchableTree
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs
index 06bd355b7d..22925e27e2 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs
@@ -13,7 +13,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.MemberGroups)]
[Tree(Constants.Applications.Members, Constants.Trees.MemberGroups, SortOrder = 1)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class MemberGroupTreeController : MemberTypeAndGroupTreeControllerBase
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs
index 859ee2f846..e6d18f3b72 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs
@@ -29,7 +29,7 @@ namespace Umbraco.Web.Trees
Constants.Applications.Media,
Constants.Applications.Members)]
[Tree(Constants.Applications.Members, Constants.Trees.Members, SortOrder = 0)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
[SearchableTree("searchResultFormatter", "configureMemberResult")]
public class MemberTreeController : TreeController, ISearchableTree, ITreeNodeController
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs
index 882ef6def3..a82d08eeac 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs
@@ -10,7 +10,7 @@ using Umbraco.Web.WebApi;
namespace Umbraco.Web.Trees
{
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public abstract class MemberTypeAndGroupTreeControllerBase : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
index b2d4a172fb..ae8a883fda 100644
--- a/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs
@@ -17,7 +17,7 @@ namespace Umbraco.Web.Trees
[CoreTree]
[UmbracoTreeAuthorize(Constants.Trees.MemberTypes)]
[Tree(Constants.Applications.Settings, Constants.Trees.MemberTypes, SortOrder = 2, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
public class MemberTypeTreeController : MemberTypeAndGroupTreeControllerBase, ISearchableTree
{
private readonly UmbracoTreeSearcher _treeSearcher;
diff --git a/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs
index f58b822f1c..634c093f46 100644
--- a/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs
@@ -11,7 +11,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Packages)]
[Tree(Constants.Applications.Packages, Constants.Trees.Packages, SortOrder = 0, IsSingleNodeTree = true)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class PackagesTreeController : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs
index 612b59ca4a..7fa4580372 100644
--- a/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs
@@ -14,7 +14,7 @@ namespace Umbraco.Web.Trees
///
[Tree(Constants.Applications.Settings, Constants.Trees.PartialViewMacros, SortOrder = 8, TreeGroup = Constants.Trees.Groups.Templating)]
[UmbracoTreeAuthorize(Constants.Trees.PartialViewMacros)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class PartialViewMacrosTreeController : PartialViewsTreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs
index afe720fde9..761475612f 100644
--- a/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs
@@ -17,7 +17,7 @@ namespace Umbraco.Web.Trees
///
[Tree(Core.Constants.Applications.Settings, Core.Constants.Trees.PartialViews, SortOrder = 7, TreeGroup = Core.Constants.Trees.Groups.Templating)]
[UmbracoTreeAuthorize(Constants.Trees.PartialViews)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class PartialViewsTreeController : FileSystemTreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs
index 46c6f004c6..a4fffc5760 100644
--- a/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs
@@ -14,7 +14,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.RelationTypes)]
[Tree(Constants.Applications.Settings, Constants.Trees.RelationTypes, SortOrder = 5, TreeGroup = Constants.Trees.Groups.Settings)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class RelationTypeTreeController : TreeController
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs
index fca6d7beb7..109b5c93c9 100644
--- a/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs
@@ -21,7 +21,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Templates)]
[Tree(Constants.Applications.Settings, Constants.Trees.Templates, SortOrder = 6, TreeGroup = Constants.Trees.Groups.Templating)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class TemplatesTreeController : TreeController, ISearchableTree
{
diff --git a/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs
index de7cb6c33c..9019b71d1b 100644
--- a/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs
@@ -18,7 +18,7 @@ namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Users)]
[Tree(Constants.Applications.Users, Constants.Trees.Users, SortOrder = 0, IsSingleNodeTree = true)]
- [PluginController("UmbracoTrees")]
+ [PluginController(Constants.Web.Mvc.BackOfficeTreeArea)]
[CoreTree]
public class UserTreeController : TreeController
{
diff --git a/src/Umbraco.Web.Common/ApplicationModels/BackOfficeApplicationModelProvider.cs b/src/Umbraco.Web.Common/ApplicationModels/BackOfficeApplicationModelProvider.cs
index d7c9833c6f..0ad6c4ec1a 100644
--- a/src/Umbraco.Web.Common/ApplicationModels/BackOfficeApplicationModelProvider.cs
+++ b/src/Umbraco.Web.Common/ApplicationModels/BackOfficeApplicationModelProvider.cs
@@ -14,7 +14,7 @@ namespace Umbraco.Web.Common.ApplicationModels
public BackOfficeApplicationModelProvider(IModelMetadataProvider modelMetadataProvider)
{
ActionModelConventions = new List()
- {
+ {
new BackOfficeIdentityCultureConvention()
};
}
@@ -52,7 +52,9 @@ namespace Umbraco.Web.Common.ApplicationModels
{
var pluginControllerAttribute = controller.Attributes.OfType().FirstOrDefault();
return pluginControllerAttribute != null
- && pluginControllerAttribute.AreaName == Core.Constants.Web.Mvc.BackOfficeArea;
+ && (pluginControllerAttribute.AreaName == Core.Constants.Web.Mvc.BackOfficeArea
+ || pluginControllerAttribute.AreaName == Core.Constants.Web.Mvc.BackOfficeApiArea
+ || pluginControllerAttribute.AreaName == Core.Constants.Web.Mvc.BackOfficeTreeArea);
}
}
}
diff --git a/src/Umbraco.Web.Common/Filters/BackOfficeCultureFilter.cs b/src/Umbraco.Web.Common/Filters/BackOfficeCultureFilter.cs
index 99109fe230..8a241e6a9d 100644
--- a/src/Umbraco.Web.Common/Filters/BackOfficeCultureFilter.cs
+++ b/src/Umbraco.Web.Common/Filters/BackOfficeCultureFilter.cs
@@ -12,6 +12,7 @@ namespace Umbraco.Web.Common.Filters
{
public void OnActionExecuted(ActionExecutedContext context)
{
+
}
public void OnActionExecuting(ActionExecutingContext context)
diff --git a/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml b/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml
index dc47195a18..e4e4c1d191 100644
--- a/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml
+++ b/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml
@@ -60,7 +60,7 @@
document.angularReady = function (app) {
@await Html.AngularValueExternalLoginInfoScriptAsync(signInManager, ViewData.GetExternalSignInError())
- @Html.AngularValueResetPasswordCodeInfoScript(ViewData["PasswordResetCode"])
+ @Html.AngularValueResetPasswordCodeInfoScript(ViewData[ViewDataExtensions.TokenPasswordResetCode])
}
diff --git a/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml b/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml
index 221f18b92d..65baa96890 100644
--- a/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml
+++ b/src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml
@@ -110,7 +110,7 @@