Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IOHelper: Why not use HostingEnvironment when there is no HttpContext? #9964

Closed
enkelmedia opened this issue Mar 10, 2021 · 6 comments · Fixed by #9978
Closed

IOHelper: Why not use HostingEnvironment when there is no HttpContext? #9964

enkelmedia opened this issue Mar 10, 2021 · 6 comments · Fixed by #9978

Comments

@enkelmedia
Copy link
Contributor

enkelmedia commented Mar 10, 2021

Umbraco Verison: 8.0.0 -> 8.11.1

We've had issues with IIS virtual paths not being respected by Umbraco in some cases. It all boils down to IOHelper.MapPath (

public static string MapPath(string path, bool useHttpContext)
) that will build the path based on the assembly path when not HttpContext is available.

There is a check here to see if there is a HttpContext available:

if (useHttpContext && HttpContext.Current != null)
if there is no context the method uses "GetRootDirectorySafe()" which figures out the path based on the executing assembly.

It makes sense not to call HttpContext.Server.MapPath() when there i no HttpContext available but from my research HostingEnvironment.MapPath() will work even in scenarios when there is no HttpContext.

I've tried HostingEnvironment.MapPath() in the following scenarios and it resolves our virtual paths in all of them:

  • Inside a web request (when HttpContext is available)
  • Inside UmbracoApplication.Ctor (during startup)
  • Inside UmbracoApplication.Init() (during startup)
  • Inside a Composers Compose()-method (during startup)
  • Inside a Components Initialize()-method (during startup)
  • Inside a new thread (like Task.Run(()=> {}}). (during startup)

In each of my test I also execute the same check in a new thread (different Thread.CurrentThread.ManagedThreadId) and HostingEnvironment.MapPath resolves the paths in all these cases.

This is the output from my tests where I have a Virtual Path (~/cache) configured, this points to a network drive \web.shared.se\site\Cache.

Inside a web request

This code is triggered inside a MVC-controller

----------- Inside a web request thread -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: \\web.shared.se\site\Cache\
UmbracoIOHelper: \\web.shared.se\site\Cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

-----------Inside new thread/task from this web request thread -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: n/a = exception
UmbracoIOHelper: C:\Development\site\Site.Web.UI\cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

Inside UmbracoApplication.Ctor (during startup)

-----------Inside current thread 153 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: n/a = exception
UmbracoIOHelper: C:\Development\site\Site.Web.UI\cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

-----------Inside task thread 214 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: n/a = exception
UmbracoIOHelper: C:\Development\site\Site.Web.UI\cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

Inside UmbracoApplication.Init() (during startup)

-----------Inside current thread 153 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: \\web.shared.se\site\Cache\
UmbracoIOHelper: \\web.shared.se\site\Cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

-----------Inside task thread 297 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: n/a = exception
UmbracoIOHelper: C:\Development\site\Site.Web.UI\cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

Inside Composers Compose() (during startup)

-----------Inside current thread 162 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: \\web.shared.se\site\Cache\
UmbracoIOHelper: \\web.shared.se\site\Cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

-----------Inside task thread 153 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: n/a = exception
UmbracoIOHelper: C:\Development\site\Site.Web.UI\cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

Inside Components Initialize() (during startup)

-----------Inside current thread 162 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: \\web.shared.se\site\Cache\
UmbracoIOHelper: \\web.shared.se\site\Cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\
-----------Inside task thread 290 -------------
Relative Path: ~/cache/
HostingEnvironmentMapPath: \\web.shared.se\site\Cache\
ServerMapPath: n/a = exception
UmbracoIOHelper: C:\Development\site\Site.Web.UI\cache\
ByAssemblyPath: C:\Development\site\Site.Web.UI\cache\

My conclusion is that HostingEnvironment.MapPath() will work in all scenarios that I've tested, the check for the HttpContext inside IOHelper.MapPath() should not be needed - removing this an always use HostingEnvironement.MapPath would solve a lot of the usses we have related to virtual paths.

Maybe the comment in the code is some kind o legacy that was there when/if the code uses HttpContext.Current.Server.MapPath? Then this check would make sense but not it does not.

I'm proposing: Remove the check for HttpContext and resolve paths with HostingEnvironment.MapPath all the time.

I'm I missing something here? Any scenario that I have not tested that I should test?

Maybe this was added as a fallback for unit tests? There have to be a way to get around that and resolve Virtual Directories in IIS in the right way when Umbraco runs.

Cheers!

@Shazwazza
Copy link
Contributor

HostingEnvironment isn't a silver bullet. In a lot of cases the Umbraco DLLs are being run outside of a web environment (i.e. command line and unit tests). There is no HostingEnvironment there. This could be mitigated by a check with HostingEnvironment.IsHosted.

If you have time to submit a PR to deal with all the cases please do!

@umbrabot
Copy link

Hi @enkelmedia,

We're writing to let you know that we would love some help with this issue. We feel that this issue is ideal to flag for a community member to work on it. Once flagged here, folk looking for issues to work on will know to look at yours. Of course, please feel free work on this yourself ;-). If there are any changes to this status, we'll be sure to let you know.

For more information about issues and states, have a look at this blog post

Thanks muchly, from your friendly Umbraco GitHub bot :-)

@enkelmedia
Copy link
Contributor Author

@Shazwazza Sounds fair! I’m thinking that the check for the HttpContext could be switch with a check for HostingEnvironment.IsHosted and we’ll keep the fallback to GetRootDirectorySafe().

Not sure about the “useHttpContext” parameter, it’s not really using the context today at all so the name of the setting doesn’t really make sense? What should we do with it?

@Shazwazza
Copy link
Contributor

Just having a look at this method now, it seems its already doing all the things you want isn't it? https://github.com/umbraco/Umbraco-CMS/blob/v8/contrib/src/Umbraco.Core/IO/IOHelper.cs#L81

Typically everything should just be using the single param overload here: https://github.com/umbraco/Umbraco-CMS/blob/v8/contrib/src/Umbraco.Core/IO/IOHelper.cs#L111 public static string MapPath(string path) which passes in true for useHttpContext which then checks if there's an HttpContext.Current or if IsHosted (which checks HostingEnvironment.IsHosted) and then proceeds to use HostingEnvironment.MapPath if it can, else fallsback to manually putting together the path.

So this is pretty much doing exactly what you want, it's always going to use HostingEnvironment.MapPath if it's hosted.

@Shazwazza
Copy link
Contributor

Ah, I think the only check that needs to change which seems like a bug is this one: if (useHttpContext && HttpContext.Current != null) which should just be if (useHttpContext) since useHttpContext is set to useHttpContext && IsHosted; which checks if there is a HttpContext.Current or if it's hosted.

enkelmedia pushed a commit to enkelmedia/Umbraco-CMS that referenced this issue Mar 15, 2021
@enkelmedia
Copy link
Contributor Author

@Shazwazza That's what I was thinking as well, I verified this in a local install, applied the change and and executed the same tests as I did when posting the issue and the virtual path was resolved correctly in all the tests.

nathanwoulfe added a commit that referenced this issue Apr 20, 2021
* Bump version to 8.6.8

* Initial rework of Lock dictionaries

* [Issue 5277-146] accessibility - Close 'X' icon next to language drop… (#9264)

* [Issue 5277-146] accessibility - Close 'X' icon next to language drop down is identified as "link" - screen reader

* add new loacalization key

* Fix issue with SqlMainDomLock that cannot use implicit lock timeouts … (#9973)

* Fix issue with SqlMainDomLock that cannot use implicit lock timeouts … (#9973)

(cherry picked from commit da5351d)

* Adjust unit tests and apply fixes to scope

* Add more unit tests, showing current issue

* Counting Umbraco.ModelsBuilder and ModelsBuilder.Umbraco namespaces as external providers

* Fix dead lock with TypeLoader

* Fix errors shown in unit tests

* Throw error if all scopes hasn't been disposed

* Clean

* Fixes and Updates for DB Scope and Ambient Context leaks (#9953)

* Adds some scope tests (ported back from netcore) and provides a much better error message, ensure execution context is not flowed to child tasks that shouldn't leak any current ambient context

* updates comment

* Ensure SqlMainDomLock suppresses execution context too

* Since we're awaiting a task in a library method, ConfigureAwait(false)

* missing null check

Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>

* Adds additional error checking and reporting to MainDom/SqlMainDomLock (#9954)

Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>

* Add copy logic to Media Picker (#9957)

* Add copy logic to Media Picker

* Add action for copy all

* Fix for selectable media item

* Wrap calls to map in scopes

* Autocomplete scopes

* Remove unnecessary aria-hidden attribute from <umb-icon>

* Remove scope from method that calls another method that has a scope

* Fixes #9993 - Cannot save empty image in Grid

* Clean

* Revert "The Value() method for IPublishedContent was not working with the defaultValue parameter" (#9989)

* Use a hashset to keep track of acquired locks

This simplifies disposing/checking for locks greatly.

* Add images in grid - fixes 9982 (#9987)

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>

* Only create the dicts and hashset when a lock is requested

* Clean

* Adds a config for configuring the access rules on the content dashboard - by default it granted for all user groups

* Adds additional params indicating whether user is admin

* Add images in grid - fixes 9982 (#9987)

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
(cherry picked from commit e201977)

* Bump version to 8.12.2

* #9964 Removed unneeded check for HttpContext

* Fix for #9950 - HttpsCheck will now retry using the login background image if inital request returns 301/302. Excessvie Headers check will now check the root url instead of the backoffice

* Merge pull request #9994 from umbraco/v8/bugfix/9993

Fixes #9993 - Cannot save empty image in Grid

(cherry picked from commit 0ecc933)

* Apply suggestions from review

* Fixes #9983 - Getting kicked, if document type has a Umbraco.UserPicker property (#10002)

* Fixes #9983

Temporary fix for this issue. using the entityservice like before.

* Needed to remove the call to usersResource here as well for displaying the picked items

* Don't need usersResource for now

* Fixes #9983 - Getting kicked, if document type has a Umbraco.UserPicker property (#10002)

* Fixes #9983

Temporary fix for this issue. using the entityservice like before.

* Needed to remove the call to usersResource here as well for displaying the picked items

* Don't need usersResource for now

(cherry picked from commit 45de0a1)

* 8539: Allow alias in image cropper (#9266)

Co-authored-by: Owain Williams <owaingdwilliams@gmail.com>

* Wrap dumping dictionaries in a method.

* Create method for generating log message

And remove forgotten comments.

* Fix swedish translation for somethingElse.

* Copy member type (#10020)

* Add copy dialog for member type

* Implement copy action for member type

* Create specific localization for content type, media type and member type

* Handle "foldersonly" querystring

* Add button type attribute

* Add a few missing changes of anchor to button element

* Null check on scope and options to ensure backward compatibility

* Improve performance, readability and handling of FollowInternalRedirects (#9889)

* Improve performance, readability and handling of FollowInternalRedirects

* Logger didn't like string param

Passing string param to _logger.Debug<PublishedRouter, int> wasn't happy. Changed to pass existing internalRedirectAsInt variable.

Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>

* Update casing of listview layout name

* 9097 add contextual password helper (#9256)

* update back-office forms

* Display tip on reset password page as well

* add directive for password tip

* integrate directove in login screen

* forgot the ng-keyup :-)

* adapt tooltip directive to potential different Members and Users password settings

* remove watcher

Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>

* Unbind listener

Listening for splitViewRequest was only unbound if the split view editor was opened. Not cleaning up the listener caused a memory leak when changing between nodes as the spit view editor was detached but not garbage-collected

* Replace icon in date picker with umb-icon component (#10040)

* Replace icon in date picker with <umb-icon> component

* Adjust height of clear button

* Update cypress and fix tests

* Listview config icons (#10036)

* Update icons to use <umb-icon> component

* Simplify markup and use disabled button

* Use move cursor style on sortable handle

* Add class for action column

* Update setting auto focus

* Increase font size of umb-panel-header-icon

* Anchor noopener (#10009)

* Set rel="noopener" for anchors with target="_blank"

* Reverted unwanted changes to Default.cshtml

* Align 'Add language' test to netcore

* Add new cypress tests

* Add indentation

* Getting rid of the config file and implementing an appSetting instead

* Implementation for IContentDashboardSettings

* Cleanup

* bool.Try

* Taking AllowContentDashboardAccessToAllUsers prop from GlobalSettings to ContentDashboardSettings and saving AccessRulesFromConfig into a backing field

* Handling multiple values per field in Examine Management

* Add Root<T> and Breadcrumbs extension methods for IPublishedContent (#9033)

* Fix usage of obsolete CreatorName and WriterName properties

* Add generic Root extension method

* Add Breadcrumbs extension methods

* Orders member type grouping of members alphabetically, matching the listing of member types.

* Revert updating deprecated WriterName/CreatorName refs

Changing the properties to use the extensions is a good thing (given the props are deprecated), but causes issues deep in tests. I'm reverting that change to fix the tests, and all refs to the deprecated properties should be updated in one sweep, to deal with any other test issues that might crop up.

* Handle Invalid format for Upgrade check

* Fixes tabbing-mode remains active after closing modal #9790 (#10074)

* Allow to pass in boolean to preventEnterSubmit directive (#8639)

* Pass in value to preventEnterSubmit directive

* Set enabled similar to preventDefault and preventEnterSubmit directives

* Update prevent enter submit value

* Init value from controller

* Use a different default input id prefix for umb-search-filter

* Fix typo

* Check for truthly value

* Revert "Set enabled similar to preventDefault and preventEnterSubmit directives"

This reverts commit 536ce85.

* None pointer events when clicking icon

* Use color variable

* Fixes tabbing-mode remains active after closing modal #9790 (#10074)

(cherry picked from commit c881fa9)

* Null check on scope and options to ensure backward compatibility

(cherry picked from commit fe8cd23)

* Fix validation of step size in integer/numeric field

* 9962: Use $allowedEditors instead of allowed (#10086)

* 9962: Use $allowedEditors instead of allowed

* 9962: Remove redundant statement

* fixes #10021 adds ng-form and val-form-manager to the documentation

* Improved accessibility of link picker (#10099)

* Added support for screeen reader alerts on the embed so that assitive technology knows when a url retrieve has been succesfull.
Added labels for the controls
Preview reload only triggered if the values for height and width change

* Added control ids for the link picker

* Add French translation

* Accessibility: Alerts the user how many results have been returned on a tree search (#10100)

* Added support for screeen reader alerts on the embed so that assitive technology knows when a url retrieve has been succesfull.
Added labels for the controls
Preview reload only triggered if the values for height and width change

* Tree search details the number of search items returned

* Add French translations

* Updated LightInject to v6.4.0

* Remove HtmlSanitizer once more - see #9803

* Also make sure NuGet installs the correct version of the CodePages dependency

* Bump version to 8.13 RC

* Fixed copy preserving sort order (#10091)

* Revert "Updated LightInject to v6.4.0"

This reverts commit fc77252.

* Revert "Add copy logic to Media Picker (#9957)"

This reverts commit f7c032a.

* Reintroduce old constructor to make non-breaking

* Update cypress test to make macros in the grid work again

* Attributes could be multiple items, test specifically if `Directory` is an attribute

* Accessibility: Adding label fors and control ids for the macro picker (#10101)

* Added support for screeen reader alerts on the embed so that assitive technology knows when a url retrieve has been succesfull.
Added labels for the controls
Preview reload only triggered if the values for height and width change

* Added support for label fors for the macro picker and also gave the ,acro search box a title

* Now displays a count of the matching macros returned. Please note the language file amends shared with #10100

* Removed src-only class for the display of the count of messages

* Updating typo

* Removed top-margin from switcher icon

* Allow KeepAlive controller Ping method to be requested by non local requests (#10126)

* Allow KeepAlive controller Ping method to be requested by non local requests and accept head requests

* removed unused references

* fix csproj

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Justin Shearer <justin.shearer@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Callum Whyte <hey@callumwhyte.com>
Co-authored-by: Shannon <sdeminick@gmail.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
Co-authored-by: patrickdemooij9 <patrickdemooij98@hotmail.com>
Co-authored-by: Bjarne Fyrstenborg <bjarne_fyrstenborg@hotmail.com>
Co-authored-by: Michael Latouche <michael@crossingpaths.be>
Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>
Co-authored-by: Markus Johansson <markus@obviuse.se>
Co-authored-by: Jeavon Leopold <jeavon@crumpled-dog.com>
Co-authored-by: Benjamin Carleski <benjamin@proworks.com>
Co-authored-by: Owain Williams <owaingdwilliams@gmail.com>
Co-authored-by: Jesper Löfgren <jesper.lofgren@sappa.se>
Co-authored-by: Martin Bentancour <mbe@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@panoramastudios.nl>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: BeardinaSuit <BeardInASuit@outlook.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Rachel Breeze <RachBreeze@users.noreply.github.com>
Co-authored-by: Dave de Moel <d.demoel@wearetriple.com>
Co-authored-by: ric <60885685+ricbrady@users.noreply.github.com>
Co-authored-by: Carole Rennie Logan <crgrieve@users.noreply.github.com>
Co-authored-by: Dennis Öhman <dennis.ohman@bjornmamman.se>
nathanwoulfe added a commit that referenced this issue Apr 20, 2021
* load only once

* Bump version to 8.6.8

* Initial rework of Lock dictionaries

* [Issue 5277-146] accessibility - Close 'X' icon next to language drop… (#9264)

* [Issue 5277-146] accessibility - Close 'X' icon next to language drop down is identified as "link" - screen reader

* add new loacalization key

* Fix issue with SqlMainDomLock that cannot use implicit lock timeouts … (#9973)

* Fix issue with SqlMainDomLock that cannot use implicit lock timeouts … (#9973)

(cherry picked from commit da5351d)

* Adjust unit tests and apply fixes to scope

* Add more unit tests, showing current issue

* Counting Umbraco.ModelsBuilder and ModelsBuilder.Umbraco namespaces as external providers

* Fix dead lock with TypeLoader

* Fix errors shown in unit tests

* Throw error if all scopes hasn't been disposed

* Clean

* Fixes and Updates for DB Scope and Ambient Context leaks (#9953)

* Adds some scope tests (ported back from netcore) and provides a much better error message, ensure execution context is not flowed to child tasks that shouldn't leak any current ambient context

* updates comment

* Ensure SqlMainDomLock suppresses execution context too

* Since we're awaiting a task in a library method, ConfigureAwait(false)

* missing null check

Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>

* Adds additional error checking and reporting to MainDom/SqlMainDomLock (#9954)

Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>

* Add copy logic to Media Picker (#9957)

* Add copy logic to Media Picker

* Add action for copy all

* Fix for selectable media item

* Wrap calls to map in scopes

* Autocomplete scopes

* Remove unnecessary aria-hidden attribute from <umb-icon>

* Remove scope from method that calls another method that has a scope

* Fixes #9993 - Cannot save empty image in Grid

* Clean

* Revert "The Value() method for IPublishedContent was not working with the defaultValue parameter" (#9989)

* Use a hashset to keep track of acquired locks

This simplifies disposing/checking for locks greatly.

* Add images in grid - fixes 9982 (#9987)

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>

* Only create the dicts and hashset when a lock is requested

* Clean

* Adds a config for configuring the access rules on the content dashboard - by default it granted for all user groups

* Adds additional params indicating whether user is admin

* Add images in grid - fixes 9982 (#9987)

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
(cherry picked from commit e201977)

* Bump version to 8.12.2

* #9964 Removed unneeded check for HttpContext

* Fix for #9950 - HttpsCheck will now retry using the login background image if inital request returns 301/302. Excessvie Headers check will now check the root url instead of the backoffice

* Merge pull request #9994 from umbraco/v8/bugfix/9993

Fixes #9993 - Cannot save empty image in Grid

(cherry picked from commit 0ecc933)

* Apply suggestions from review

* Fixes #9983 - Getting kicked, if document type has a Umbraco.UserPicker property (#10002)

* Fixes #9983

Temporary fix for this issue. using the entityservice like before.

* Needed to remove the call to usersResource here as well for displaying the picked items

* Don't need usersResource for now

* Fixes #9983 - Getting kicked, if document type has a Umbraco.UserPicker property (#10002)

* Fixes #9983

Temporary fix for this issue. using the entityservice like before.

* Needed to remove the call to usersResource here as well for displaying the picked items

* Don't need usersResource for now

(cherry picked from commit 45de0a1)

* 8539: Allow alias in image cropper (#9266)

Co-authored-by: Owain Williams <owaingdwilliams@gmail.com>

* Wrap dumping dictionaries in a method.

* Create method for generating log message

And remove forgotten comments.

* Fix swedish translation for somethingElse.

* Copy member type (#10020)

* Add copy dialog for member type

* Implement copy action for member type

* Create specific localization for content type, media type and member type

* Handle "foldersonly" querystring

* Add button type attribute

* Add a few missing changes of anchor to button element

* Null check on scope and options to ensure backward compatibility

* Improve performance, readability and handling of FollowInternalRedirects (#9889)

* Improve performance, readability and handling of FollowInternalRedirects

* Logger didn't like string param

Passing string param to _logger.Debug<PublishedRouter, int> wasn't happy. Changed to pass existing internalRedirectAsInt variable.

Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>

* Update casing of listview layout name

* 9097 add contextual password helper (#9256)

* update back-office forms

* Display tip on reset password page as well

* add directive for password tip

* integrate directove in login screen

* forgot the ng-keyup :-)

* adapt tooltip directive to potential different Members and Users password settings

* remove watcher

Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>

* Unbind listener

Listening for splitViewRequest was only unbound if the split view editor was opened. Not cleaning up the listener caused a memory leak when changing between nodes as the spit view editor was detached but not garbage-collected

* Replace icon in date picker with umb-icon component (#10040)

* Replace icon in date picker with <umb-icon> component

* Adjust height of clear button

* Update cypress and fix tests

* Listview config icons (#10036)

* Update icons to use <umb-icon> component

* Simplify markup and use disabled button

* Use move cursor style on sortable handle

* Add class for action column

* Update setting auto focus

* Increase font size of umb-panel-header-icon

* Anchor noopener (#10009)

* Set rel="noopener" for anchors with target="_blank"

* Reverted unwanted changes to Default.cshtml

* Align 'Add language' test to netcore

* Add new cypress tests

* Add indentation

* Getting rid of the config file and implementing an appSetting instead

* Implementation for IContentDashboardSettings

* Cleanup

* bool.Try

* Taking AllowContentDashboardAccessToAllUsers prop from GlobalSettings to ContentDashboardSettings and saving AccessRulesFromConfig into a backing field

* fix support for non run states

* Handling multiple values per field in Examine Management

* Add Root<T> and Breadcrumbs extension methods for IPublishedContent (#9033)

* Fix usage of obsolete CreatorName and WriterName properties

* Add generic Root extension method

* Add Breadcrumbs extension methods

* Orders member type grouping of members alphabetically, matching the listing of member types.

* Revert updating deprecated WriterName/CreatorName refs

Changing the properties to use the extensions is a good thing (given the props are deprecated), but causes issues deep in tests. I'm reverting that change to fix the tests, and all refs to the deprecated properties should be updated in one sweep, to deal with any other test issues that might crop up.

* Handle Invalid format for Upgrade check

* Fixes tabbing-mode remains active after closing modal #9790 (#10074)

* Allow to pass in boolean to preventEnterSubmit directive (#8639)

* Pass in value to preventEnterSubmit directive

* Set enabled similar to preventDefault and preventEnterSubmit directives

* Update prevent enter submit value

* Init value from controller

* Use a different default input id prefix for umb-search-filter

* Fix typo

* Check for truthly value

* Revert "Set enabled similar to preventDefault and preventEnterSubmit directives"

This reverts commit 536ce85.

* None pointer events when clicking icon

* Use color variable

* Fixes tabbing-mode remains active after closing modal #9790 (#10074)

(cherry picked from commit c881fa9)

* Null check on scope and options to ensure backward compatibility

(cherry picked from commit fe8cd23)

* Fix validation of step size in integer/numeric field

* 9962: Use $allowedEditors instead of allowed (#10086)

* 9962: Use $allowedEditors instead of allowed

* 9962: Remove redundant statement

* fixes #10021 adds ng-form and val-form-manager to the documentation

* Improved accessibility of link picker (#10099)

* Added support for screeen reader alerts on the embed so that assitive technology knows when a url retrieve has been succesfull.
Added labels for the controls
Preview reload only triggered if the values for height and width change

* Added control ids for the link picker

* Add French translation

* Accessibility: Alerts the user how many results have been returned on a tree search (#10100)

* Added support for screeen reader alerts on the embed so that assitive technology knows when a url retrieve has been succesfull.
Added labels for the controls
Preview reload only triggered if the values for height and width change

* Tree search details the number of search items returned

* Add French translations

* Updated LightInject to v6.4.0

* Remove HtmlSanitizer once more - see #9803

* Also make sure NuGet installs the correct version of the CodePages dependency

* Bump version to 8.13 RC

* Fixed copy preserving sort order (#10091)

* Revert "Updated LightInject to v6.4.0"

This reverts commit fc77252.

* Revert "Add copy logic to Media Picker (#9957)"

This reverts commit f7c032a.

* Reintroduce old constructor to make non-breaking

* Update cypress test to make macros in the grid work again

* Attributes could be multiple items, test specifically if `Directory` is an attribute

* Accessibility: Adding label fors and control ids for the macro picker (#10101)

* Added support for screeen reader alerts on the embed so that assitive technology knows when a url retrieve has been succesfull.
Added labels for the controls
Preview reload only triggered if the values for height and width change

* Added support for label fors for the macro picker and also gave the ,acro search box a title

* Now displays a count of the matching macros returned. Please note the language file amends shared with #10100

* Removed src-only class for the display of the count of messages

* Updating typo

* Removed top-margin from switcher icon

* Allow KeepAlive controller Ping method to be requested by non local requests (#10126)

* Allow KeepAlive controller Ping method to be requested by non local requests and accept head requests

* removed unused references

* fix csproj

* fix merge

* btree serializer optimizations

* array pool and nametable optimizations

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Justin Shearer <justin.shearer@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Callum Whyte <hey@callumwhyte.com>
Co-authored-by: Shannon <sdeminick@gmail.com>
Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
Co-authored-by: patrickdemooij9 <patrickdemooij98@hotmail.com>
Co-authored-by: Bjarne Fyrstenborg <bjarne_fyrstenborg@hotmail.com>
Co-authored-by: Michael Latouche <michael@crossingpaths.be>
Co-authored-by: Nathan Woulfe <nathan@nathanw.com.au>
Co-authored-by: Markus Johansson <markus@obviuse.se>
Co-authored-by: Jeavon Leopold <jeavon@crumpled-dog.com>
Co-authored-by: Benjamin Carleski <benjamin@proworks.com>
Co-authored-by: Owain Williams <owaingdwilliams@gmail.com>
Co-authored-by: Jesper Löfgren <jesper.lofgren@sappa.se>
Co-authored-by: Martin Bentancour <mbe@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@panoramastudios.nl>
Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: BeardinaSuit <BeardInASuit@outlook.com>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Rachel Breeze <RachBreeze@users.noreply.github.com>
Co-authored-by: Dave de Moel <d.demoel@wearetriple.com>
Co-authored-by: ric <60885685+ricbrady@users.noreply.github.com>
Co-authored-by: Carole Rennie Logan <crgrieve@users.noreply.github.com>
Co-authored-by: Dennis Öhman <dennis.ohman@bjornmamman.se>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants