diff --git a/src/Umbraco.Core/Models/DeliveryApi/ApiLink.cs b/src/Umbraco.Core/Models/DeliveryApi/ApiLink.cs index d255f6ab32..fcfe12b339 100644 --- a/src/Umbraco.Core/Models/DeliveryApi/ApiLink.cs +++ b/src/Umbraco.Core/Models/DeliveryApi/ApiLink.cs @@ -2,19 +2,32 @@ namespace Umbraco.Cms.Core.Models.DeliveryApi; public sealed class ApiLink { + [Obsolete("Please use the overload that accepts a query string. Will be removed in V14.")] public static ApiLink Content(string title, string? target, Guid destinationId, string destinationType, IApiContentRoute route) - => new(LinkType.Content, null, title, target, destinationId, destinationType, route); + => Content(title, queryString: null, target, destinationId, destinationType, route); + public static ApiLink Content(string title, string? queryString, string? target, Guid destinationId, string destinationType, IApiContentRoute route) + => new(LinkType.Content, url: null, queryString, title, target, destinationId, destinationType, route); + + [Obsolete("Please use the overload that accepts a query string. Will be removed in V14.")] public static ApiLink Media(string title, string url, string? target, Guid destinationId, string destinationType) - => new(LinkType.Media, url, title, target, destinationId, destinationType, null); + => Media(title, url, queryString: null, target, destinationId, destinationType); + public static ApiLink Media(string title, string url, string? queryString, string? target, Guid destinationId, string destinationType) + => new(LinkType.Media, url, queryString, title, target, destinationId, destinationType, route: null); + + [Obsolete("Please use the overload that accepts a query string. Will be removed in V14.")] public static ApiLink External(string? title, string url, string? target) - => new(LinkType.External, url, title, target, null, null, null); + => External(title, url, queryString: null, target); - private ApiLink(LinkType linkType, string? url, string? title, string? target, Guid? destinationId, string? destinationType, IApiContentRoute? route) + public static ApiLink External(string? title, string url, string? queryString, string? target) + => new(LinkType.External, url, queryString, title, target, null, null, null); + + private ApiLink(LinkType linkType, string? url, string? queryString, string? title, string? target, Guid? destinationId, string? destinationType, IApiContentRoute? route) { LinkType = linkType; Url = url; + QueryString = queryString; Title = title; Target = target; DestinationId = destinationId; @@ -24,6 +37,8 @@ public sealed class ApiLink public string? Url { get; } + public string? QueryString { get; } + public string? Title { get; } public string? Target { get; } diff --git a/src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/MultiUrlPickerValueConverter.cs b/src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/MultiUrlPickerValueConverter.cs index dfc64bdad5..61cc0e1c7d 100644 --- a/src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/MultiUrlPickerValueConverter.cs +++ b/src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/MultiUrlPickerValueConverter.cs @@ -185,6 +185,7 @@ public class MultiUrlPickerValueConverter : PropertyValueConverterBase, IDeliver ? null : ApiLink.Content( item.Name.IfNullOrWhiteSpace(_apiContentNameProvider.GetName(content)), + item.QueryString, item.Target, content.Key, content.ContentType.Alias, @@ -195,12 +196,13 @@ public class MultiUrlPickerValueConverter : PropertyValueConverterBase, IDeliver ? null : ApiLink.Media( item.Name.IfNullOrWhiteSpace(_apiContentNameProvider.GetName(media)), - _apiMediaUrlProvider.GetUrl(media), + $"{_apiMediaUrlProvider.GetUrl(media)}{item.QueryString}", + item.QueryString, item.Target, media.Key, media.ContentType.Alias); default: - return ApiLink.External(item.Name, $"{item.Url}{item.QueryString}", item.Target); + return ApiLink.External(item.Name, $"{item.Url}{item.QueryString}", item.QueryString, item.Target); } } diff --git a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs index fe105bee67..beb8787c79 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs @@ -526,7 +526,7 @@ public class AuthenticationController : UmbracoApiControllerBase await _signInManager.TwoFactorSignInAsync(model.Provider, model.Code, model.IsPersistent, model.RememberClient); if (result.Succeeded) { - return GetUserDetail(_userService.GetByUsername(user.UserName)); + return Ok(GetUserDetail(_userService.GetByUsername(user.UserName))); } if (result.IsLockedOut) diff --git a/src/Umbraco.Web.UI.Client/src/views/common/login-2fa.html b/src/Umbraco.Web.UI.Client/src/views/common/login-2fa.html index be11a78d76..5d8b9cd3fd 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/login-2fa.html +++ b/src/Umbraco.Web.UI.Client/src/views/common/login-2fa.html @@ -1,6 +1,6 @@ -