-
+
-
Set permissions for {{ currentNode.name }}
-
+
Set permissions for {{ currentNode.name }}
+
{{value.alias}}
{{value.width}}px x {{value.height}}px
+ User defined
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
index 78075d9b7a..ae8925e911 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
@@ -661,7 +661,7 @@
Ikon
Id
Importer
-
Inkludér undermapper i søgning
+
Søg kun i denne mappe
Info
Indre margen
Indsæt
@@ -1086,6 +1086,7 @@ Mange hilsner fra Umbraco robotten
Tilføj ny beskæring
Acceptér
Fortryd
+
Brugerdefineret
Vælg en version at sammenligne med den nuværende version
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
index 93a97414c9..a85df5714b 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
@@ -674,7 +674,7 @@
Icon
Id
Import
-
Include subfolders in search
+
Search only this folder
Info
Inner margin
Insert
@@ -1318,6 +1318,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Add new crop
Done
Undo edits
+
User defined
Select a version to compare with the current version
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
index 91fad336c7..d14fb03727 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
@@ -676,7 +676,7 @@
Icon
Id
Import
-
Include subfolders in search
+
Search only this folder
Info
Inner margin
Insert
@@ -1316,11 +1316,12 @@ To manage your website, simply open the Umbraco back office and start adding con
Enter the link
-
Reset crop
+
Reset crop
Save crop
Add new crop
-
Done
-
Undo edits
+
Done
+
Undo edits
+
User defined
Select a version to compare with the current version
diff --git a/src/Umbraco.Web.UI/config/umbracoSettings.config b/src/Umbraco.Web.UI/config/umbracoSettings.config
index 698c771db9..5814a82095 100644
--- a/src/Umbraco.Web.UI/config/umbracoSettings.config
+++ b/src/Umbraco.Web.UI/config/umbracoSettings.config
@@ -241,6 +241,14 @@
By default you can call any content Id in the url and show the content with that id, for example:
http://mysite.com/1092 or http://mysite.com/1092.aspx would render the content with id 1092. Setting
this setting to true stops that behavior
+ @disableRedirectUrlTracking
+ When the URL changes for content, redirects are automatically created for redirect handling within the
+ request pipeline. Setting this setting to true stops the automatic creation of redirects. Note that this
+ does not stop the request pipeline from handling any previously created redirects.
+ @urlProviderMode
+ By default Umbraco automatically figures out if internal URLs should be rendered as relative or absolute,
+ depending on the current request and the configured domains. By setting this setting to "Relative" or
+ "Absolute" you can force Umbraco to always render URLs as either relative or absolute.
@umbracoApplicationUrl
The url of the Umbraco application. By default, Umbraco will figure it out from the first request.
Configure it here if you need anything specific. Needs to be a complete url with scheme and umbraco
diff --git a/src/Umbraco.Web/Editors/TemplateController.cs b/src/Umbraco.Web/Editors/TemplateController.cs
index 92c4b53227..2250b16485 100644
--- a/src/Umbraco.Web/Editors/TemplateController.cs
+++ b/src/Umbraco.Web/Editors/TemplateController.cs
@@ -197,7 +197,9 @@ namespace Umbraco.Web.Editors
throw new HttpResponseException(HttpStatusCode.NotFound);
}
- var template = Services.FileService.CreateTemplateWithIdentity(display.Name, display.Alias, display.Content, master);
+ // we need to pass the template name as alias to keep the template file casing consistent with templates created with content
+ // - see comment in FileService.CreateTemplateForContentType for additional details
+ var template = Services.FileService.CreateTemplateWithIdentity(display.Name, display.Name, display.Content, master);
Mapper.Map(template, display);
}
diff --git a/src/Umbraco.Web/FormlessPage.cs b/src/Umbraco.Web/FormlessPage.cs
deleted file mode 100644
index 9789479fb5..0000000000
--- a/src/Umbraco.Web/FormlessPage.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System.Web.UI;
-
-namespace Umbraco.Web
-{
- ///
- /// A formless page for use with the rendering a control in a page via Server.Execute.
- /// This ignores the check to check for a form control on the page.
- ///
- ///
- /// UmbracoHelper currently uses this for rendering macros but could be used anywhere we want when rendering
- /// a page with Server.Execute.
- /// SD: I have a custom MVC engine that uses this in my own internal libs if we want to pull it out which is called ViewManager
- /// and works really well for things like this.
- ///
- internal class FormlessPage : Page
- {
- public override void VerifyRenderingInServerForm(Control control) { }
-
- }
-}
diff --git a/src/Umbraco.Web/Models/Mapping/ContentMapDefinition.cs b/src/Umbraco.Web/Models/Mapping/ContentMapDefinition.cs
index 582a930b9f..40249a4750 100644
--- a/src/Umbraco.Web/Models/Mapping/ContentMapDefinition.cs
+++ b/src/Umbraco.Web/Models/Mapping/ContentMapDefinition.cs
@@ -86,7 +86,7 @@ namespace Umbraco.Web.Models.Mapping
target.Icon = source.ContentType.Icon;
target.Id = source.Id;
target.IsBlueprint = source.Blueprint;
- target.IsChildOfListView = DermineIsChildOfListView(source);
+ target.IsChildOfListView = DetermineIsChildOfListView(source);
target.IsContainer = source.ContentType.IsContainer;
target.IsElement = source.ContentType.IsElement;
target.Key = source.Key;
@@ -217,7 +217,7 @@ namespace Umbraco.Web.Models.Mapping
return source.CultureInfos.TryGetValue(culture, out var name) && !name.Name.IsNullOrWhiteSpace() ? name.Name : $"({source.Name})";
}
- private bool DermineIsChildOfListView(IContent source)
+ private bool DetermineIsChildOfListView(IContent source)
{
// map the IsChildOfListView (this is actually if it is a descendant of a list view!)
var parent = _contentService.GetParent(source);
diff --git a/src/Umbraco.Web/Models/Mapping/MediaMapDefinition.cs b/src/Umbraco.Web/Models/Mapping/MediaMapDefinition.cs
index bdd748883a..3298f3bd1e 100644
--- a/src/Umbraco.Web/Models/Mapping/MediaMapDefinition.cs
+++ b/src/Umbraco.Web/Models/Mapping/MediaMapDefinition.cs
@@ -62,7 +62,7 @@ namespace Umbraco.Web.Models.Mapping
target.CreateDate = source.CreateDate;
target.Icon = source.ContentType.Icon;
target.Id = source.Id;
- target.IsChildOfListView = DermineIsChildOfListView(source);
+ target.IsChildOfListView = DetermineIsChildOfListView(source);
target.Key = source.Key;
target.MediaLink = string.Join(",", source.GetUrls(_umbracoSettingsSection.Content, _logger, _propertyEditorCollection));
target.Name = source.Name;
@@ -101,7 +101,7 @@ namespace Umbraco.Web.Models.Mapping
target.VariesByCulture = source.ContentType.VariesByCulture();
}
- private bool DermineIsChildOfListView(IMedia source)
+ private bool DetermineIsChildOfListView(IMedia source)
{
// map the IsChildOfListView (this is actually if it is a descendant of a list view!)
var parent = _mediaService.GetParent(source);
diff --git a/src/Umbraco.Web/Security/BackOfficeSignInManager.cs b/src/Umbraco.Web/Security/BackOfficeSignInManager.cs
index 1440abc13c..fe5b061d15 100644
--- a/src/Umbraco.Web/Security/BackOfficeSignInManager.cs
+++ b/src/Umbraco.Web/Security/BackOfficeSignInManager.cs
@@ -114,6 +114,19 @@ namespace Umbraco.Web.Security
return SignInStatus.LockedOut;
}
+ // We need to verify that the user belongs to one or more groups that define content and media start nodes.
+ // To do so we have to create the user claims identity and validate the calculated start nodes.
+ var userIdentity = await CreateUserIdentityAsync(user);
+ if (userIdentity is UmbracoBackOfficeIdentity backOfficeIdentity)
+ {
+ if (backOfficeIdentity.StartContentNodes.Length == 0 || backOfficeIdentity.StartMediaNodes.Length == 0)
+ {
+ _logger.WriteCore(TraceEventType.Information, 0,
+ $"Login attempt failed for username {userName} from IP address {_request.RemoteIpAddress}, no content and/or media start nodes could be found for any of the user's groups", null, null);
+ return SignInStatus.Failure;
+ }
+ }
+
await UserManager.ResetAccessFailedCountAsync(user.Id);
return await SignInOrTwoFactor(user, isPersistent);
}
diff --git a/src/Umbraco.Web/Templates/HtmlImageSourceParser.cs b/src/Umbraco.Web/Templates/HtmlImageSourceParser.cs
index 49248bb564..74333cf533 100644
--- a/src/Umbraco.Web/Templates/HtmlImageSourceParser.cs
+++ b/src/Umbraco.Web/Templates/HtmlImageSourceParser.cs
@@ -13,14 +13,10 @@ namespace Umbraco.Web.Templates
this._getMediaUrl = getMediaUrl;
}
+ private readonly IUmbracoContextAccessor _umbracoContextAccessor;
public HtmlImageSourceParser(IUmbracoContextAccessor umbracoContextAccessor)
{
- if (umbracoContextAccessor?.UmbracoContext?.UrlProvider == null)
- {
- return;
- }
-
- _getMediaUrl = (guid) => umbracoContextAccessor.UmbracoContext.UrlProvider.GetMediaUrl(guid);
+ _umbracoContextAccessor = umbracoContextAccessor;
}
private static readonly Regex ResolveImgPattern = new Regex(@"(
![]()
]*src="")([^""\?]*)((?:\?[^""]*)?""[^>]*data-udi="")([^""]*)(""[^>]*>)",
@@ -29,7 +25,7 @@ namespace Umbraco.Web.Templates
private static readonly Regex DataUdiAttributeRegex = new Regex(@"data-udi=\\?(?:""|')(?
umb://[A-z0-9\-]+/[A-z0-9]+)\\?(?:""|')",
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
- private readonly Func _getMediaUrl;
+ private Func _getMediaUrl;
///
/// Parses out media UDIs from an html string based on 'data-udi' html attributes
@@ -57,12 +53,8 @@ namespace Umbraco.Web.Templates
/// Umbraco image tags are identified by their data-udi attributes
public string EnsureImageSources(string text)
{
- // no point in doing any processing if we don't have
- // a function to retrieve Urls
- if (_getMediaUrl == null)
- {
- return text;
- }
+ if(_getMediaUrl == null)
+ _getMediaUrl = (guid) => _umbracoContextAccessor.UmbracoContext.UrlProvider.GetMediaUrl(guid);
return ResolveImgPattern.Replace(text, match =>
{
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 9d76d6bd39..1437104b69 100755
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -644,9 +644,6 @@
-
- ASPXCodeBehind
-