Merge branch 'release/14.2' into v14/dev

This commit is contained in:
Nikolaj Geisle
2024-08-13 08:57:05 +02:00
7 changed files with 43 additions and 4 deletions

View File

@@ -66,6 +66,10 @@ public class UpdateDomainsController : DocumentControllerBase
.WithDetail("One or more of the specified domain names were conflicting with domain assignments to other content items.")
.WithExtension("conflictingDomainNames", _domainPresentationFactory.CreateDomainAssignmentModels(result.Result.ConflictingDomains.EmptyNull()))
.Build()),
DomainOperationStatus.InvalidDomainName => BadRequest(problemDetailsBuilder
.WithTitle("Invalid domain name detected")
.WithDetail("One or more of the specified domain names were invalid.")
.Build()),
_ => StatusCode(StatusCodes.Status500InternalServerError, problemDetailsBuilder
.WithTitle("Unknown domain update operation status.")
.Build()),

View File

@@ -24,5 +24,17 @@ public interface IAuthorizationHelper
/// <param name="currentUser">The current user's principal.</param>
/// <param name="user">The resulting <see cref="IUser" />, if the conversion is successful.</param>
/// <returns>True if the conversion is successful, false otherwise</returns>
bool TryGetUmbracoUser(IPrincipal currentUser, [NotNullWhen(true)] out IUser? user);
bool TryGetUmbracoUser(IPrincipal currentUser, [NotNullWhen(true)] out IUser? user)
{
try
{
user = GetUmbracoUser(currentUser);
return true;
}
catch
{
user = null;
return false;
}
}
}

View File

@@ -6,6 +6,7 @@ using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.ContentEditing;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Core.Persistence.Repositories;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Extensions;
@@ -201,6 +202,11 @@ public class DomainService : RepositoryService, IDomainService
foreach (DomainModel domainModel in updateModel.Domains)
{
domainModel.DomainName = domainModel.DomainName.ToLowerInvariant();
if(Uri.IsWellFormedUriString(domainModel.DomainName, UriKind.RelativeOrAbsolute) is false)
{
return Attempt.FailWithStatus(DomainOperationStatus.InvalidDomainName, new DomainUpdateResult());
}
}
// make sure we're not attempting to assign duplicate domains

View File

@@ -7,5 +7,6 @@ public enum DomainOperationStatus
ContentNotFound,
LanguageNotFound,
DuplicateDomainName,
ConflictingDomainName
ConflictingDomainName,
InvalidDomainName
}

View File

@@ -332,6 +332,22 @@ public class DomainAndUrlsTests : UmbracoIntegrationTest
Assert.AreEqual(DomainOperationStatus.DuplicateDomainName, result.Status);
}
[TestCase("https://*.umbraco.com")]
[TestCase("&#€%#€")]
[TestCase("¢”$¢”¢$≈{")]
public async Task Cannot_Assign_Invalid_Domains(string domainName)
{
var domainService = GetRequiredService<IDomainService>();
var updateModel = new DomainsUpdateModel
{
Domains = new DomainModel { DomainName = domainName, IsoCode = Cultures.First() }.Yield()
};
var result = await domainService.UpdateDomainsAsync(Root.Key, updateModel);
Assert.IsFalse(result.Success);
Assert.AreEqual(DomainOperationStatus.InvalidDomainName, result.Status);
}
[Test]
public async Task Cannot_Assign_Already_Used_Domains()
{

View File

@@ -1,6 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
"version": "14.2.0-rc",
"version": "14.2.0-rc3",
"assemblyVersion": {
"precision": "build"
},