Compare commits

...
2495 Commits
Author SHA1 Message Date
Andreas ZerbstandGitHub 9ab0abca99 E2E: Stop running version 14 on nightly test pipeline (#20558)
Stops 14 from running on our nightly test pipeline
2025-10-20 12:05:42 +02:00
Andy Butland 009a999e22 Merge branch 'release/14.3.4' into v14/dev 2025-04-08 07:15:06 +02:00
Andy ButlandandGitHub d3c1443b14 Merge commit from fork
* Prevent path traveral vulnerability with upload of temporary files.

* Used BadRequest instead of NotFound for invalid file name response.
2025-04-08 05:03:40 +02:00
Andy Butland 8a9db11422 Merge branch 'release/14.3.3' into v14/dev
# Conflicts:
#	Directory.Packages.props
#	version.json
2025-03-11 09:28:52 +01:00
Andy ButlandandGitHub d9fb6df16e Merge commit from fork
* Bumped version to 15.2.1.

# Conflicts:
#	version.json

* Tighten management API endpoint access rules.
2025-03-11 05:11:35 +01:00
Andy Butland 14ed3348bf bumped imagesharp to prevent CVE-2025-27598 (#18602)
# Conflicts:
#	Directory.Packages.props
2025-03-09 08:54:03 +01:00
Sven Geusens 9e7a36865a Merge branch 'v13/dev' into v14/dev
Revert #18249 as it is reimplemented for v15
Revert #18320 as the new architecture explictly throws an error

# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.Core/EmbeddedResources/Lang/en.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
#	src/Umbraco.Core/Models/ContentEditing/ContentSaveAction.cs
#	src/Umbraco.Core/Services/ContentService.cs
#	src/Umbraco.Core/Services/IContentService.cs
#	src/Umbraco.Core/Services/MemberService.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextEditorPastedImages.cs
#	src/Umbraco.Infrastructure/Security/BackOfficeUserStore.cs
#	src/Umbraco.Infrastructure/Security/MemberUserStore.cs
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
#	src/Umbraco.Web.BackOffice/Controllers/EntityController.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	src/Umbraco.Web.BackOffice/Controllers/MemberController.cs
#	src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs
#	src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
#	src/Umbraco.Web.BackOffice/DependencyInjection/UmbracoBuilder.BackOfficeAuth.cs
#	src/Umbraco.Web.BackOffice/Filters/ContentSaveValidationAttribute.cs
#	src/Umbraco.Web.BackOffice/Filters/MemberSaveModelValidator.cs
#	src/Umbraco.Web.BackOffice/Filters/MemberSaveValidationAttribute.cs
#	src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs
#	src/Umbraco.Web.Common/RuntimeMinification/SmidgeOptionsSetup.cs
#	src/Umbraco.Web.Common/RuntimeMinification/SmidgeRuntimeMinifier.cs
#	src/Umbraco.Web.Common/Views/UmbracoViewPage.cs
#	src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbbuttongroup.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/property/umbproperty.directive.js
#	src/Umbraco.Web.UI.Client/src/common/resources/content.resource.js
#	src/Umbraco.Web.UI.Client/src/common/resources/publicaccess.resource.js
#	src/Umbraco.Web.UI.Client/src/common/resources/users.resource.js
#	src/Umbraco.Web.UI.Client/src/common/services/assets.service.js
#	src/Umbraco.Web.UI.Client/src/views/common/drawers/help/help.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/linkpicker/linkpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediaentryeditor/mediaentryeditor.controller.js
#	src/Umbraco.Web.UI.Client/src/views/components/content/umb-tabbed-content.html
#	src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html
#	src/Umbraco.Web.UI.Client/src/views/content/content.create.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/listview/listview.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.component.js
#	src/Umbraco.Web.UI.Client/src/views/users/views/user/details.html
#	src/Umbraco.Web.UI.Client/src/views/webhooks/edit.controller.js
#	src/Umbraco.Web.UI.Client/src/views/webhooks/edit.html
#	src/Umbraco.Web.UI.Client/test/unit/app/content/create-content-controller.spec.js
#	src/Umbraco.Web.UI.Client~HEAD
#	src/Umbraco.Web.UI.Login/src/auth.element.ts
#	tests/Umbraco.TestData/UmbracoTestDataController.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Core/Services/ContentServiceTests.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentEventsTests.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServicePublishBranchTests.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServiceTagsTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs
#	version.json
2025-02-17 19:25:45 +01:00
Andy ButlandandGitHub db1d999721 Avoid exception when attempting to find member by Id when Id is not an expected Guid or integer, as can be the case with external member providers. (#18320) 2025-02-17 12:47:52 +01:00
Andy ButlandandGitHub 18047a7cfb Only filter post retrieval of entities for start nodes if working with entities that support start nodes. (#18287) 2025-02-17 12:45:51 +01:00
Andy ButlandandGitHub def7ebd48c Html encodes the user's name in the invite email. (#18343) 2025-02-17 12:25:12 +01:00
8c2b1ebdc5 V13: Introduce publishNotifications method on IMembershipMemberService (#18207)
* Introduce publishNotifications method on IMembershipMemberService.cs

* Fix test

* Add PublishNotificationSaveOptions

* Fix up according to comments

* Use numeric values for flag enum

* Update src/Umbraco.Core/Services/MemberService.cs

Co-authored-by: Andy Butland <abutland73@gmail.com>

* Update src/Umbraco.Core/Services/MemberService.cs

Co-authored-by: Andy Butland <abutland73@gmail.com>

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-02-12 13:30:41 +01:00
Andy ButlandandGitHub 9227517a50 Split force for publish descendants into separate options for publish unpublish and re-publish unedited (13) (#18249)
* Split force for publish descendents into separate options for publish unpublish and re-publish unedited.

* Added integration task verifying updated behaviour.

* Variant integration test.

* Update test data controller.

* Remove usued function parameters.

* Refactor to enum.

* Fixed flags enum.

* Variable name refactor.

* Applied changes from code review.

* Refactored method name.

* Aligned js boolean checks.
2025-02-12 11:30:27 +00:00
Andy Butland 5322d0f7b5 Bumped version to 13.8.0-rc. 2025-02-12 08:13:58 +01:00
Andy ButlandandGitHub a282cc5691 Backport use of thread delay over sleep and handle dispose in FileSystemMainDomLock (#18151)
* Backport use of thread delay over sleep and handle dispose in FileSystemMainDomLock (from PRs #18119 and #18147)

* Applied suggestion from code review.
2025-02-12 08:06:50 +01:00
Andy ButlandandGitHub 048f8bcdf9 Fixed userResource request to get all users. (#18105) 2025-02-11 17:06:18 +01:00
Andy ButlandandGitHub 7bcbc748d4 URL encodes member user names when passing information for public access setting such that those with user names as emails containing a plus will be included in the rule. (#18142) 2025-02-11 13:36:19 +01:00
Andy ButlandandGitHub f30e6cfe7f Prevents folder selection in media picker when used from the multi URL picker. (#18288) 2025-02-11 09:18:01 +01:00
Andy ButlandandGitHub 026e80e026 Avoid an exception on sign out when the principal is populated from an incomplete external login (#18078)
* Avoid an exception on signout when the principal is populated from an incomplete external login.

* Tidied up comment.
2025-02-10 12:51:35 +01:00
Andy ButlandandGitHub a3b77cff63 Add validation to prevent update of a user or member to an invalid username (13) (#18261)
* Add validation to prevent update of a user or member to an invalid username.

* Avoid password manager updates of user name field on user details screen.
2025-02-10 10:40:53 +01:00
Niels LyngsøandGitHub 4ca68d6995 Add client-side validation for RTE (#18257) 2025-02-07 11:43:04 +00:00
Sven GeusensandGitHub 280cb7f2b1 Fix issues in newly added buttongroup localization (#18254)
* Fix #18253 nullref exception

* Fix #18239 by listening to broader scope changes
2025-02-07 07:00:34 +01:00
095a73132c Review: Allow Duplicate Email for Members (#16202)
* init

* Aligned default values on security settings.

* Added validator for security settings.

* Provide default implementation for get members by email.

* Refactored constructor of MemberController.

* Validate on unique member email only when configured to do so.

* Further code tidy and use of DI in constructor.

* Used new constructor in tests.

* Add unit test for modified behaviour.

* Removed validator for security settings (it's not necessary, I got confused with users and members).

* Spelling.

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-02-05 12:38:40 +01:00
Andy Butland cfb0fc23ac Merge branch 'v13/dev' into v13/contrib 2025-02-04 12:35:49 +01:00
6620aca9fe Cache null dictionary values by key (#15576)
* Add CacheNullValues option to RepositoryCachePolicy

* Cache null values in DictionaryByKeyRepository

* Fixed issue with nullable reference.

* Updated logic for caching of null values.

* Update src/Umbraco.Infrastructure/Cache/DefaultRepositoryCachePolicy.cs

Co-authored-by: Sven Geusens <geusens@gmail.com>

* Made the NullValueRepresentation overwritable in a generic manner

* Improve generic NullValueCachePolicyResolver

* Revert Commits and clarify logic with comment

This reverts commit 8befb43792 "Improve generic NullValueCachePolicyResolver"
Also reverts 8adf0a2 - Made the NullValueRepresentation overwritable in a generic manner
And 8adf0a2 - Made the NullValueRepresentation overwritable in a generic manner

* Update src/Umbraco.Infrastructure/Cache/DefaultRepositoryCachePolicy.cs

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Sven Geusens <geusens@gmail.com>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2025-02-04 12:29:21 +01:00
2422a02b23 Set Smidge cachebuster type (#18198)
* Set Smidge cachebuster type

* Amend exception and fix typo

* Minor tweak to comment and exception message.

---------

Co-authored-by: Simon Hartfield <simon.hartfield@googlemail.com>
Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-02-04 11:00:44 +00:00
b4a9dc0770 V13: Fix members while using basic auth. (#18206)
* Flow additional identities to new principal

* Add extension to more easily get member identity

* Ensure the member is used instead of the backoffice user in `MemberManager`

* Update snippet

* Fix the comment that I broke

* Update src/Umbraco.Web.Common/Extensions/MemberClaimsPrincipalExtensions.cs

Co-authored-by: Andy Butland <abutland73@gmail.com>

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-02-03 19:48:08 +01:00
Andy ButlandandGitHub e7411244fd Show notifications menu only to users with permission for the feature. (#18184) 2025-02-03 13:24:58 +01:00
Kenn JacobsenandGitHub 9f357173c3 Enforce user start nodes for media uploads through the RTE (#18204) 2025-02-03 12:50:23 +01:00
Andy Butland 7dc6e3ed5b Merge branch 'v13/dev' into v13/contrib 2025-01-31 16:16:22 +01:00
Gareth WrightandGitHub 5dfff212d0 Update auth.element.ts (#18192)
auth_username => general_username
2025-01-31 14:59:25 +01:00
17615f966b Fix out of memory of 2gb+ (max 4gb) error introduced by #14657 SVG xss security fix (#17421)
Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-01-31 13:46:56 +00:00
Kenn JacobsenandGitHub 7a2d6b6c63 More robust resolving of Delivery API redirects (#18160) 2025-01-31 14:26:07 +01:00
Sven Geusens 343867f6ee Merge branch 'release/13.6' into v13/dev and version bump
# Conflicts:
#	src/Umbraco.Web.BackOffice/Controllers/PreviewController.cs
#	version.json
2025-01-30 16:27:49 +01:00
Bjarke BergandSven Geusens b9837ac77c Optimize Azure pipeline (#17674)
* Only fetch single commit

* Hopefully fixes Nerdbank.GitVersioning.GitException: Shallow clone lacks the objects required to calculate version height. Use full clones or clones with a history at least as deep as the last version height resetting change.

* Do not checkout again

* More test pipeline

* Another attempt

* yet another attempt

* more attempts

* Revert "more attempts"

This reverts commit 5694d97ba6.

* Test without building backoffice and login explicitly

* Fix mem leak in integration tests

* Fixes sqlserver lock test
# Conflicts:
#	build/azure-pipelines.yml
2025-01-30 14:10:05 +01:00
Sven Geusens bb73ec6c68 Set release version 2025-01-30 09:52:50 +01:00
Andy ButlandandGitHub ee2d7bbb1b Excluded tags from trashed content (#18164) 2025-01-29 21:10:11 +01:00
Andy ButlandandGitHub 5d48bc7371 Provides an option to remove the inessential version number from the generated models (#18081)
* Provides an option to remove the inessential version number from the generated models.

* Clarified comment.
2025-01-29 13:33:49 +01:00
Kenn JacobsenandGitHub 59a4649528 Do not allow editing read-only properties by clicking their labels (#18152)
* Do not allow editing read-only properties by clicking their labels

* Simplify the fix :)

* Fix linting issue
2025-01-29 10:29:58 +01:00
Andy ButlandandGitHub f54b6033ab Added Resharper test assemblies to exclude list on TypeFinder. (#18145) 2025-01-29 10:27:17 +01:00
Jacob OvergaardandGitHub bf340cd7d4 fix: remove unused parameters and documentation (#18095)
this fixes an issue where unused parameters were published as supported, but they were in fact never supported.
2025-01-28 10:53:00 +00:00
Andy Butland 313417cb91 Tidied up XML header comment in ITagQuery. 2025-01-28 10:52:21 +01:00
7850078623 Redirect to the published URL when exiting preview (#18114)
Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-01-24 18:46:28 +00:00
44bf3b77b3 Make it possible to reset media picker crops (#18110)
Co-authored-by: Andy Butland <abutland73@gmail.com>
2025-01-24 13:41:30 +00:00
Kenn JacobsenandGitHub 8485458896 Add clientside validation to webhook events (#18089) 2025-01-23 17:01:55 +01:00
Nikolaj Geisle 3d253f5f06 bump version 2025-01-23 11:15:26 +01:00
Nikolaj Geisle 64287d7e1a Merge branch 'release/13.5.3' into release/13.6
# Conflicts:
#	version.json
2025-01-23 11:14:47 +01:00
Andy ButlandandGitHub edc78a5a4c Handles migration case where an expected constraint is renamed but the constraint does not exist. (#18063) 2025-01-22 12:26:06 +01:00
Andy Butland 8056a59a10 Fix schema defined in JSON schema tool definition after merge from 13. 2025-01-21 15:52:31 +01:00
1a18d6c035 Replaced deprecated navigator.platform with navigator.userAgent for platform detection. (#17373)
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
2025-01-21 13:56:40 +01:00
Andy Butland 3e877182b5 Merge branch 'v13/contrib' into v13/dev 2025-01-21 09:47:20 +01:00
Martin VennevoldandGitHub 0e4f883bc1 Fix create child issue in list view with infinite editor (#13355). (#17637) 2025-01-21 09:44:22 +01:00
Andy Butland 265cc62ab8 Merge branch 'release/13.6' into v13/dev 2025-01-21 09:21:36 +01:00
Andy Butland 800c16970e Merge branch 'release/13.6' of https://github.com/umbraco/Umbraco-CMS into release/13.6 2025-01-21 09:20:11 +01:00
Andy Butland 6bd11bf233 Fixes failing front-end unit test to align with new behaviour from PR #17818 (
Allow skipSelect blueprints only when one blueprint exists).
2025-01-21 09:19:31 +01:00
Kenn Jacobsen a2fd82a3f3 Add NoopCurrentMemberClaimsProvider so Umbraco can boot without the Delivery API enabled (#18049) 2025-01-21 09:13:31 +01:00
Kenn JacobsenandSven Geusens 56c0aebd76 Add NoopCurrentMemberClaimsProvider so Umbraco can boot without the Delivery API enabled (#18049) 2025-01-21 09:12:20 +01:00
Kenn JacobsenandGitHub 7567990da1 Add NoopCurrentMemberClaimsProvider so Umbraco can boot without the Delivery API enabled (#18049) 2025-01-21 09:10:43 +01:00
Zeegaan c7d157bbfd build on ubuntu 2025-01-21 09:02:00 +01:00
Sven Geusens 4b9771c0eb Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	Directory.Packages.props
#	build/azure-pipelines.yml
#	src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderAuthExtensions.cs
#	src/Umbraco.Cms.Persistence.EFCore/Locking/SqlServerEFCoreDistributedLockingMechanism.cs
#	src/Umbraco.Core/Configuration/Models/RichTextEditorSettings.cs
#	src/Umbraco.Core/EmbeddedResources/Lang/da.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/en.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
#	src/Umbraco.Core/Services/ContentService.cs
#	src/Umbraco.Web.BackOffice/Authorization/ContentPermissionsQueryStringHandler.cs
#	src/Umbraco.Web.BackOffice/Authorization/ContentPermissionsResourceHandler.cs
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
#	src/Umbraco.Web.BackOffice/Controllers/ExamineManagementController.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	src/Umbraco.Web.BackOffice/Trees/StaticFilesTreeController.cs
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	src/Umbraco.Web.UI.Client/src/common/directives/components/buttons/umbbuttongroup.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js
#	src/Umbraco.Web.UI.Client/src/common/filters/simpleMarkdown.filter.js
#	src/Umbraco.Web.UI.Client/src/common/filters/simpleMarkdown.filter.js.js
#	src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js
#	src/Umbraco.Web.UI.Client/src/less/components/umb-group-builder.less
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediaentryeditor/mediaentryeditor.less
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/propertysettings/propertysettings.html
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/ysod/ysod.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/overlays/ysod/ysod.html
#	src/Umbraco.Web.UI.Client/src/views/components/buttons/umb-button-group.html
#	src/Umbraco.Web.UI.Client/src/views/content/overlays/sendtopublish.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/blockgrid.blockconfiguration.overlay.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/prevalue/blockgrid.blockconfiguration.overlay.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/prevalue/blocklist.blockconfiguration.overlay.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.component.js
#	src/Umbraco.Web.UI.Client~HEAD
#	src/Umbraco.Web.UI.Login/package-lock.json
#	src/Umbraco.Web.UI.Login/package.json
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorContent.spec.ts
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentServiceNotificationTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/ContentControllerTests.cs
#	tools/Umbraco.JsonSchema/UmbracoCmsSchema.cs
#	version.json
2025-01-21 08:47:38 +01:00
Jacob Overgaard abc312c9b4 update backoffice submodule to 14.3.2 2025-01-21 08:44:10 +01:00
Nikolaj Geisle 2161edb871 Bump version 2025-01-21 07:41:06 +01:00
Nikolaj Geisle e77e9c5691 Format sql statement (#17354)
(cherry picked from commit aa9f194d76)
2025-01-20 18:27:54 +01:00
Nikolaj Geisle e934a943b5 build on windows 2025-01-20 17:37:04 +01:00
Ronald BarendseandNikolaj Geisle 65bb2801b0 Merge commit from fork
* Add TimedScope

* Use TimedScope in login endpoint

* Use seperate default duration and only calculate average of actual successful responses

* Only return detailed error responses if credentials are valid

* Cancel timed scope when credentials are valid

* Add UserDefaultFailedLoginDuration and UserMinimumFailedLoginDuration settings
2025-01-20 16:44:28 +01:00
Andy ButlandandGitHub a0a4af6a0c Merge commit from fork 2025-01-20 14:54:14 +01:00
Jacob Overgaard e8d6cded2b update backoffice submodule to 14.3.2 2025-01-20 14:42:17 +01:00
Bjarke BergandJacob Overgaard c65204a146 update backoffice submodule to 14.3.2 2025-01-20 14:34:03 +01:00
Andy ButlandandGitHub 95eb58587b Merge commit from fork 2025-01-20 14:14:28 +01:00
Andy ButlandandGitHub 86f3033334 Merge commit from fork 2025-01-20 14:14:28 +01:00
25628a8b76 Lucene Package Update to Address CVE-2024-43383 (#17942)
* Update Lucene Package to 4.8.0-beta00017

* Add Package Reference

---------

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
2025-01-20 11:45:35 +01:00
Callum WhyteandAndy Butland 7552e315fb Allow skipSelect blueprints only when one blueprint exists (#17818) 2025-01-20 11:45:26 +01:00
Callum WhyteandGitHub d15b5b221e Allow skipSelect blueprints only when one blueprint exists (#17818) 2025-01-20 10:27:54 +01:00
60e3fa97a9 Lucene Package Update to Address CVE-2024-43383 (#17942)
* Update Lucene Package to 4.8.0-beta00017

* Add Package Reference

---------

Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
2025-01-20 10:04:02 +01:00
Sven Geusens fd1bd51aff bump version 2025-01-16 10:10:04 +01:00
Sven Geusens b12620af9c Merge branch 'release/13.6' into v13/dev 2025-01-16 10:08:43 +01:00
Sven Geusens d1af59fdf0 Merge branch 'v13/dev' into release/13.6 2025-01-15 22:13:42 +01:00
Andreas ZerbstandGitHub 1b050ebc47 V13 QA added parallelization for E2E tests (#17995)
* Added script for running tests

* Added parallelization for our E2E tests

* Removed line

* Removed condition
2025-01-15 22:12:45 +01:00
Sven Geusens ff3e457c58 Merge branch 'v13/dev' into release/13.6 2025-01-15 20:55:41 +01:00
Andy ButlandandGitHub 2ffaede07b Added a maxlength setting to the regular expression pattern field. (#17982) 2025-01-15 20:54:54 +01:00
Sven GeusensandGitHub 2a83f57262 Do not re-map schedule modal on error as it leads to broken bindings (#17990) 2025-01-15 17:35:23 +01:00
Kenn JacobsenandGitHub 5be9193978 Do not show "Save and preview" by default (#17986) 2025-01-15 15:42:37 +01:00
Niels LyngsøandSven Geusens d3f264fc54 Fix: only fire event when instance is available (issue 17847) (#17987)
* only fire event when instance is available

* avoid js issue when no markup
2025-01-15 14:01:33 +01:00
Niels LyngsøandGitHub 04ea002bf3 Fix: only fire event when instance is available (issue 17847) (#17987)
* only fire event when instance is available

* avoid js issue when no markup
2025-01-15 13:56:53 +01:00
Kenn JacobsenandGitHub 8f42a3a0ea Make the RTE handle inline elements gracefully for JSON (#17983) 2025-01-15 11:26:03 +01:00
Kenn JacobsenandGitHub 4dd8fbe25d Enforce the "Save and preview" button after when switching content app (#17985) 2025-01-15 09:55:00 +01:00
Sven GeusensandGitHub ee727c43e1 Added localizations for composite key of missing New (media) Audit item (#17981) 2025-01-14 21:08:47 +01:00
Jacob OvergaardandGitHub 395213946b build(deps): update @microsoft/signalr from 7.0.12 to 8.0.7 (#17973) 2025-01-14 15:44:52 +00:00
Andy ButlandandGitHub ed0b236208 Resets send to approval dialog on close such that when re-opening the selection and operation can still be triggered. (#17956) 2025-01-14 16:25:26 +01:00
Kenn JacobsenandGitHub 8d56e75257 Add Vary header to all content API operations (#17962)
* Add Vary header to all content API operations

* Make attribute sealed
2025-01-14 15:54:19 +01:00
Jacob OvergaardandGitHub b3c27415d1 build(deps): bump @umbraco-ui/uui from 1.11.0 to 1.12.2 (#17972) 2025-01-14 15:48:34 +01:00
Justin NevilleandNikolaj Geisle 9839b0ee66 Fixes issue with the IVirtualPageController not setting PublishedRequest content via FindContent (#15121)
* Fixes issue https://github.com/umbraco/Umbraco-CMS/issues/12834

* Re-worked based on feedback

* Use dependency injection

* Only call new constructor

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
(cherry picked from commit fd9c1a0e9c)
2025-01-14 13:57:00 +01:00
f3f57f9748 Improve YSOD rendering in the client (#17940)
* Conditionally render error details and make sure something is rendered

* V13 QA updated locator for failing E2E test (#17825)

* Added timeouts

* Nullcheck user in Content permission handlers (#17846)

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>

---------

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
2025-01-14 13:38:07 +01:00
Nikolaj GeisleandGitHub 85d16a4354 V13: Show validation error, when saving invalid media (#17961)
* Don't save invalid media

* Revert "Don't save invalid media"

This reverts commit c4b6acf542.

* Still allow save, but show validation error, not popup error

* Add clarifying comment
2025-01-14 11:18:36 +01:00
Kenn JacobsenandGitHub c0517c3562 Allow filtering for multiple content types (#17960) 2025-01-14 10:40:45 +01:00
92e535a1c9 V13 QA updated locator for failing E2E test (#17825)
* Added timeouts

* Nullcheck user in Content permission handlers (#17846)

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Niels Lyngsø <nsl@umbraco.dk>
2025-01-14 09:12:41 +01:00
Kenn JacobsenandGitHub 7411c2552b Added integration test to verify the Delivery API contract (#17949) 2025-01-13 15:15:37 +01:00
Andy ButlandandGitHub f2410f376e Corrected property names and structure used in JSON schema generation for configuration of default data to install. (#17946) 2025-01-13 11:05:51 +01:00
Kenn JacobsenandGitHub a9313c1367 Make the Delivery API "ancestors" selector work with preview (#17938) 2025-01-13 07:47:14 +01:00
Nikolaj GeisleandGitHub 58d6404ec8 V14: Reintroduce BackOfficeUserManagerAuditer (#17349)
* Reintroduce BackOfficeUserManagerAuditer

* Cleanup legacy code

* Notify user logout on logout
2025-01-09 21:14:24 +01:00
Nikolaj GeisleandJacob Overgaard 53a5813189 V15: Dont create invalid media (#17534)
* Don't allow create when there is validation errors

* Fix tests

* Add tests

* Fix last test

* Fix more tests

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2025-01-09 12:21:54 +01:00
Nikolaj Geisleandkjac 5b3b9d770a V13: Add rcl files to static files tree (#17671)
* Refactor to use IWebhostEnvironment for wwwroot files.

* Obsolete ctor

* Add ActivatorUtiiliesConstructor

* Refactor logic to include folders

* Fix so we can see files in wwwroot/App_Plugins

* Cosmetic: Use invariant comparison for the "umbraco" folder".

---------

Co-authored-by: kjac <kja@umbraco.dk>
2025-01-09 10:02:34 +01:00
4a54215fa1 V13: Add rcl files to static files tree (#17671)
* Refactor to use IWebhostEnvironment for wwwroot files.

* Obsolete ctor

* Add ActivatorUtiiliesConstructor

* Refactor logic to include folders

* Fix so we can see files in wwwroot/App_Plugins

* Cosmetic: Use invariant comparison for the "umbraco" folder".

---------

Co-authored-by: kjac <kja@umbraco.dk>
2025-01-09 09:36:32 +01:00
Sven Geusensandnikolajlauridsen 52fbb34ddd Nullcheck user in Content permission handlers (#17846) 2025-01-07 15:07:42 +01:00
Sven GeusensandGitHub c96dc7eaa1 Nullcheck user in Content permission handlers (#17846) 2025-01-07 14:52:40 +01:00
Andy Butland 0166727eee Bumped version to 14.3.2. 2025-01-07 10:13:02 +01:00
Jacob Overgaard f19409ba5b Revert "bump version"
This reverts commit 679c42ef90.
2025-01-06 12:51:10 +01:00
Jacob Overgaard 679c42ef90 bump version 2025-01-06 12:46:03 +01:00
Nikolaj GeisleandGitHub 77b6e6e6d9 override PerformGetAll (#17822) 2024-12-16 13:35:02 +01:00
Elitsa MarinovskaandGitHub 32d0cb477e V14: Adding the ability to conditionally serialize version bound properties for the Delivery API (#16731)
* Property level versioning for the Delivery API using a custom System.Text.Json resolver

* Adding a converter base class that custom converters can implement

* Revert resolver

* Use IHttpContextAccessor for the API version

* Fix attribute and checks in ShouldIncludeProperty

* Fix enumeration

* Fix comment

* Unit tests

* Refactoring

* Remove Assert.Multiple where no needed
2024-12-16 11:34:55 +01:00
Nikolaj GeisleandElitsa d451390d78 V13: Clear username cache (#17815)
* Clear member username cache on delete

* Also refresh cache on update
2024-12-16 09:56:54 +02:00
Elitsa MarinovskaandGitHub 3304c6f472 Enable anonymous calls to HandleLogout action (#17807) 2024-12-16 07:26:12 +01:00
Nikolaj GeisleandGitHub 34f09fa260 V13: Clear username cache (#17815)
* Clear member username cache on delete

* Also refresh cache on update
2024-12-16 08:18:30 +02:00
Jacob Overgaard fd4efd38cd Merge branch 'v13/dev' into release/13.6 2024-12-13 10:07:46 +01:00
Jacob Overgaard e4e9bfc3e9 bump version to 13.6.0-rc2 2024-12-13 09:58:13 +01:00
Jacob Overgaard 3774dbe38c Merge remote-tracking branch 'origin/v13/contrib' into v13/dev 2024-12-13 09:56:46 +01:00
Dan ListerandJacob Overgaard 4ef50642ad Fixed an issue where bold markdown would not work inside a property description 2024-12-13 09:53:36 +01:00
Bjarke BergandGitHub cb88cbba43 Merge pull request #17761 from umbraco/v14/task/media-picker-min-max-validation
V14 min/max validator for mediapicker
2024-12-13 08:28:13 +01:00
Bjarke BergandGitHub f95fb78022 Merge pull request #17800 from umbraco/v13/bugfix/corrupt-examine-dashboard
Make sure Examine dashboard still functions when an index is corrupt
2024-12-12 12:07:06 +01:00
Sven Geusens 0f9a8bde61 Broadend the error catching when building the examine dashboard 2024-12-12 09:38:35 +01:00
Sven Geusens 129d369c1a Version bump to release 2024-12-11 13:46:38 +01:00
Sven Geusens dd2c591a5b Merge branch 'release/13.6' into v13/dev 2024-12-11 13:45:35 +01:00
Nhu DinhandGitHub e9758321ce V14 Added Content tests with Approved Color (#16725)
* Added Content tests with Approved Color

* Bumped version of test helper

* Make Content tests run in the pipeline

* Using custom datatype builder instead of changing the default approved color data type

* Updated variables

* Fixed comment

* Make all Content tests run in the pipeline

* Reverted
2024-12-10 14:52:46 +07:00
Nikolaj GeisleandGitHub 82e58eae3e V14: cherry pick #17656 (#17763)
* V15: Fix webhook RTE serialization (#17656)

* Make base type resolver class

* Add new webhook serializer

* fix comment

* Update src/Umbraco.Infrastructure/Serialization/ContentJsonTypeResolverBase.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Update src/Umbraco.Core/Services/WebhookRequestService.cs

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
(cherry picked from commit 6f081785e6)

* Add back missing usings
2024-12-09 16:09:54 +01:00
Sven Geusens de78560343 Fix unit test mocks 2024-12-09 15:08:22 +01:00
Sven Geusens f569553d79 Added min/max validator for mediapicker3 2024-12-09 14:26:14 +01:00
Kenn JacobsenandNikolaj Geisle 16749a724d Add (un)publishing details to TreeChange notifications (#17757)
(cherry picked from commit 404a62aa0b)
2024-12-09 11:42:53 +01:00
Kenn JacobsenandNikolaj Geisle a627930b58 Warn about un-routable content at publish time (#17705)
(cherry picked from commit 2d9cfc880b)
2024-12-09 11:42:46 +01:00
Kenn JacobsenandGitHub 404a62aa0b Add (un)publishing details to TreeChange notifications (#17757) 2024-12-09 11:36:48 +01:00
Kenn JacobsenandGitHub 2d9cfc880b Warn about un-routable content at publish time (#17705) 2024-12-09 11:07:32 +01:00
Kenn JacobsenandGitHub ee8bdfc4ac Add "user info" endpoint for the Delivery API (#17719)
* Add "user info" endpoint for the Delivery API

* Add comment about public and unsealed class
2024-12-09 09:57:21 +01:00
f048cfe62d v14: DecimalConverter - add check for integer (#17679)
* Add check for integer

* Fix typo

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-12-04 15:18:12 +01:00
Nikolaj GeisleandElitsa 9cab0e8bb1 Add content to TreeAccessTemplate (#17694) 2024-12-04 11:08:57 +01:00
Bjarke BergandGitHub b55d484863 Updated NuGet Packages for v13 (#17704)
* Update nuget packages

* Cherry pick fixes from v15

* Fixed: Projects that use central package version management should not define the version on the PackageReference items but on the PackageVersion items

* rollback update in tool
2024-12-03 08:51:23 +01:00
Ronald BarendseandGitHub ed0058a503 Fix PanicException: failed to get child with id= after updating content types (#17702)
* Remove tree node from hierarchy after clearing branch

* Refactor ClearBranchLocked to split clearing child and siblings
2024-12-03 08:00:18 +01:00
21e3518a69 Fix copy document with descendants onto self (#17661)
* Filter self out of descedants for self onto self copy

* Optimized code

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-12-01 13:02:47 +01:00
Jacob OvergaardandGitHub b0aed393d6 fix: keep the lead char when editing an existing link (#17667) 2024-11-28 14:04:59 +00:00
Sven Geusens 28756d449b Rectify v13 in v14 merge 2024-11-27 14:35:22 +01:00
Sven Geusens 38a96db369 Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.Imaging.ImageSharp/ConfigureImageSharpMiddlewareOptions.cs
#	src/Umbraco.Core/Models/AuditItem.cs
#	src/Umbraco.Core/Routing/UmbracoRequestPaths.cs
#	src/Umbraco.Core/Services/ContentService.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/AuditRepository.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/MediaRepository.cs
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/content/umbtabbedcontent.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/media/umbmedianodeinfo.directive.js
#	src/Umbraco.Web.UI.Client/src/common/directives/components/upload/umbfiledropzone.directive.js
#	src/Umbraco.Web.UI.Client/src/common/services/mediahelper.service.js
#	src/Umbraco.Web.UI.Client/src/common/services/rte-blockeditor-clipboard.service.js
#	src/Umbraco.Web.UI.Client/src/common/services/tinymce.service.js
#	src/Umbraco.Web.UI.Client/src/common/services/user.service.js
#	src/Umbraco.Web.UI.Client/src/less/components/umb-media-grid.less
#	src/Umbraco.Web.UI.Client/src/views/components/media/umbimagepreview/umb-image-preview.html
#	src/Umbraco.Web.UI.Client/src/views/components/media/umbimagepreview/umbimagepreview.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/contentpicker/contentpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/rte/rte.component.js
#	src/Umbraco.Web.UI.Client/src/views/templates/edit.html
#	src/Umbraco.Web.UI.Client~HEAD
#	src/Umbraco.Web.UI.Login/package-lock.json
#	src/Umbraco.Web.UI.Login/package.json
#	src/Umbraco.Web.UI.Login/src/auth.element.ts
#	src/Umbraco.Web.UI.Login/src/components/pages/login.page.element.ts
#	src/Umbraco.Web.UI.Login/src/index.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/Routing/UmbracoRequestPathsTests.cs
2024-11-27 14:04:41 +01:00
Sven Geusens a1ea203281 Merge branch 'v10/dev' into v13/dev
# Conflicts:
#	src/Directory.Packages.props
#	src/Umbraco.Infrastructure/Manifest/ManifestParser.cs
2024-11-26 21:08:22 +01:00
Kenn JacobsenandGitHub 4590739fa5 Add ASCII file name conversion (#17580) 2024-11-26 11:26:44 +01:00
7c617f2976 Revert #14234 add update error message for DB connection failures (#17612)
* Revert #14234

* Make the boot failure message more descriptive when unable to connect to DB

* Update src/Umbraco.Infrastructure/Runtime/RuntimeState.cs

Co-authored-by: Ronald Barendse <ronald@barend.se>

* Revert changes

* Obsolete InstallMissingDatabase from V16

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
2024-11-26 11:06:40 +01:00
Lee KelleherandGitHub 9141f61708 V13: Dropzone, upload complete callback with processed file array (#17631)
* Dropzone, upload complete callback with processed file array

* Media card: cosmetic fix for image border-radius

The image's square corners were poking out.
2024-11-25 15:51:16 +01:00
ba4120050f Add cache key to GetByUserName (#17350)
* Add cache key to GetByUserName

* Remove constants

* create new cache policy for member repository

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-11-25 15:27:22 +01:00
Nikolaj Geisle 772c523a23 Validate email for member models (#17532)
* Validate email for member models

* Add null check or more test cases

* return invalid when not a valid email

* Cleanup

* remove private method in favor of extension

* Remove non used, using statement

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
(cherry picked from commit 6b0f8e7b7c)
2024-11-25 13:56:45 +01:00
Kenn JacobsenandGitHub cbd4dc6e0d Handle "all slashes" routes (#17596) 2024-11-22 09:06:10 +01:00
c7014e159b Sort manifest file paths alphabetically (#14466)
* Sort manifest file paths alphabetically

* Update src/Umbraco.Infrastructure/Manifest/ManifestParser.cs

Co-authored-by: Ronald Barendse <ronald@barend.se>

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
2024-11-21 16:19:48 +01:00
Sven Geusensandnikolajlauridsen 9febbc7db1 Distinguish between default zero and intentional zero sort order for new documents (#17517)
* Distinguish between default value and initial zero

* Update special value comment documentation

* Redid solution with dirty/new entity tracking

* rework copy branch sortorder fix

* Change == false to is false

---------

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
2024-11-21 09:09:25 +01:00
Kenn JacobsenandGitHub ec8e10f406 Fix RTE console error when blocks are not available (#17582) 2024-11-21 08:53:59 +01:00
EalseandJacob Overgaard 3233b24a4e fix: infinite editor stuck in create action (#15945) 2024-11-20 10:00:50 +01:00
Anders BjernerandJacob Overgaard 5775e9cb18 Added fix for <umb-button-group /> label issues 2024-11-20 09:59:27 +01:00
MoleandGitHub 570005f5e1 Run both cms and package migrations in upgrader (#17575)
* Run both cms and package migrations in upgrader

* Use correct setting
2024-11-20 08:38:33 +01:00
1e9182cfa4 V14: Use decimal in slider property editor (#17568)
* Allow SliderPropertyEditor to use decimals

* Add tests

* Boyscout unittest update

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-11-19 11:14:53 +01:00
Bjarne FyrstenborgandLaura Neto fbaa3440f2 Don't shrink crops container on right side 2024-11-18 20:11:48 +01:00
Bjarne FyrstenborgandJacob Overgaard e662468ecc Set TinyMCE to readonly 2024-11-18 08:51:04 +01:00
Andreas ZerbstandGitHub 33eb4dd5a4 V14 QA updated playwright config (#17544)
* Only run windows SQL Server

* Updated timeout and retry count

* Updated condition

* Fixed indentation

* Skipped
2024-11-18 08:30:50 +01:00
Bjarne FyrstenborgandMatthew-Wise c8efc30654 Fallback value when setttings element type doesn't exists as it can have reference, but no available element type 2024-11-17 17:05:28 +00:00
Bjarke Berg d7b98a2f00 Use catch all for urls what ends with a path (#17468)
(cherry picked from commit 3c0f7a03ba)
2024-11-14 12:29:40 +01:00
Sven Geusensandnikolajlauridsen 9edd21a3b0 Made some membertype endpoints available for member related actions (#17440)
Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2024-11-13 13:47:37 +01:00
Andreas ZerbstandGitHub 7010ff1d26 V14 QA added rich text editor with stylesheet test (#17449)
* Rte tests

* Cleaned up

* Bumped version

* Added ensure not exists
2024-11-11 10:47:41 +01:00
Andreas ZerbstandGitHub 6acdf21eab V14 QA user groups permissions tests (#17429)
* Added tests for userGroup

* Clean up

* Updated userGroup tests

* Updated tests

* Updated tests

* Cleane up

* Cleaned up

* Bumped versions

* Run user tests

* Cleaned up

* Added permission tests

* Added tests, not done

* Updated tests

* Fixed tests

* Cleaned up

* Bumped version

* More cleanup

* Run user tests

* Added wait

* Added tests and cleaned up naming

* Bumped versions

* Reverted smokeTest command
2024-11-11 09:45:22 +01:00
Andreas ZerbstandGitHub a5479bc96e V14 QA members section user tests (#17448)
* Added tests for the members

* Cleaned up tests

* Bumped version

* Removed skip
2024-11-11 09:43:57 +01:00
marwaldvandJacob Overgaard 79d117026f Add swiss languages as backoffice languages
Add missing backoffice languages as properties etc. are translated via translation section (e.g. with "#Backoffice Settings"). At the moment the swiss languages always need to be added via the umbraco/Config folder.
2024-11-09 12:29:44 +01:00
Casper LundgreenandGitHub 2709054bdb Fix NameIdentifier is not an integer. (TryParse implemented) (#17414)
Issue: 17383
2024-11-08 13:27:53 +01:00
Sven Geusensandnikolajlauridsen 0acdd26850 Made some stylesheet endpoints available for document/media/member related actions (#17442) 2024-11-08 12:19:10 +01:00
MoleandGitHub 2d4230c001 Include create date in audit item (#17447) 2024-11-08 08:58:38 +01:00
Nhu DinhandGitHub 2d027ce9a1 V14 QA Added acceptance tests for rendering content with content picker (#17378)
* Added tests for rendering content with content picker

* Bumped version

* Make all the tests for rendering content run in the pipeline

* Reverted
2024-11-06 16:09:37 +07:00
Andreas ZerbstandGitHub b1d9085c83 V14 QA Added user groups acceptance tests (#17344)
* Added tests for userGroup

* Clean up

* Updated userGroup tests

* Updated tests

* Updated tests

* Cleane up

* Cleaned up

* Bumped versions

* Run user tests

* Cleaned up

* Added method for checking if the document tree is empty

* Bumped version

* Reverted
2024-10-28 11:11:28 +01:00
Nhu DinhandGitHub 41da2e2cf3 V14 Added acceptance tests for the List View Media and custom data type in Content section (#17025)
* Added Content tests with custom data type

* Added tests for List View Media data type in Media section

* Updated method name due to api helper changes

* Updated the assertion of Content tests with custom data type

* Bumped version of test helper

* Make all Content tests run in the pipeline

* Skipped test for code editor as it is removed

* Fixed comment

* Make Media tests running in the pipeline

* Bumped version

* Updated code due to ui helper changes

* Bumped version of test helper

* Updated tests for bulk trash in the media section

* Fixed notification message

* Make Content tests and Media tests run in the pipeline

* Added more waits

* Reverted
2024-10-28 10:53:33 +07:00
Nhu DinhandGitHub 76fcf19b15 V14 QA Added acceptance tests for rendering content with Dropdown, Radiobutton and ImageCropper (#17357)
* Added tests for rendering content with numeric

* Added tests for rendering content with textarea

* Added tests for rendering content with approved color

* Added tests for rendering content with numeric

* Added tests for rendering content with tags

* Added tests for rendering content with textarea

* Updated tests for rendering content with textstring due to test helper changes

* Added tests for rendering content with truefalse

* Bumped version of test helper

* Make all tests for rendering content run in the pipeline

* Fixed comments

* Removed blank lines

* Fixed name

* Make all smoke tests run in the pipeline

* Added tests for rendering content with dropdown

* Added tests for rendering content with Image Cropper - not done

* Updated tests for rendering content due to ui helper changes

* Updated tests for rendering content with image cropper

* Updated tests due to the api helper changes

* Bumped version of test helper

* Make all the tests for rendering content run in the pipeline

* Removed blank lines

* Format code

* Fixed test name

* Reverted
2024-10-25 18:19:53 +07:00
Nhu DinhandGitHub 11ccafeb97 V14 QA Added tests for rendering content with checkboxlist and date picker (#17332)
* Added tests for rendering content with numeric

* Added tests for rendering content with textarea

* Added tests for rendering content with approved color

* Added tests for rendering content with numeric

* Added tests for rendering content with tags

* Added tests for rendering content with textarea

* Updated tests for rendering content with textstring due to test helper changes

* Added tests for rendering content with truefalse

* Added tests for rendering content with checkbox list

* Added tests for rendering content with date picker - not done

* Updated tests for rendering content with date picker

* Updated tests for rendering content due to ui helper changes

* Bumped version

* Removed blank lines

* Make Rendering Content tests run in the pipeline

* Changed method name due to test helper changes

* Reverted
2024-10-25 15:16:28 +07:00
Nikolaj GeisleandGitHub aa9f194d76 Format sql statement (#17354) 2024-10-24 14:45:23 +02:00
Nikolaj GeisleandZeegaan 73d70ba9fc Swap to windows vm for build (#17348)
(cherry picked from commit 199a2f4619)
2024-10-24 09:47:59 +02:00
Zeegaan 6435ff0bb3 Merge remote-tracking branch 'origin/release/14.3' into v14/dev
# Conflicts:
#	version.json
2024-10-23 09:03:05 +02:00
Zeegaan f7729508cf Merge branch 'release/13.5' into v13/dev
# Conflicts:
#	version.json
2024-10-23 08:57:30 +02:00
Zeegaan 31e1acce67 Merge remote-tracking branch 'origin/release/10.8.7' into v10/dev
# Conflicts:
#	version.json
2024-10-23 08:48:08 +02:00
Andreas ZerbstandGitHub aa1f3df76b Updated to match locator (#17334) 2024-10-23 08:37:24 +02:00
Andreas ZerbstandGitHub 728dc89909 V14 QA Skip Users tests on Sqlite (#17330)
* Split sqlite test because we run into db locks

* Uses the new command
2024-10-22 13:12:42 +02:00
Nhu DinhandGitHub e36dc1f554 V14 QA Added the acceptance tests for rendering content with different value (#17293)
* Added tests for rendering content with numeric

* Added tests for rendering content with textarea

* Added tests for rendering content with approved color

* Added tests for rendering content with numeric

* Added tests for rendering content with tags

* Added tests for rendering content with textarea

* Updated tests for rendering content with textstring due to test helper changes

* Added tests for rendering content with truefalse

* Bumped version of test helper

* Make all tests for rendering content run in the pipeline

* Fixed comments

* Removed blank lines

* Fixed name

* Make all smoke tests run in the pipeline
2024-10-22 10:26:59 +07:00
Sven GeusensandNikolaj Geisle 3431f76320 Prevents XSS when viewing an uploaded SVG
from the media-info and image-preview components.
2024-10-21 12:50:12 +02:00
ElitsaandNikolaj Geisle 1bc5466a8d Update the HttpContext's user with the authenticated user's principal 2024-10-21 12:45:38 +02:00
ElitsaandNikolaj Geisle d83daf44d3 Reduce the time when getRemainingTimeoutSeconds request is made from 30s to 20s, so fewer calls are made 2024-10-21 12:44:40 +02:00
ElitsaandNikolaj Geisle 2ad5ecd5d5 Make sure that the client shows the login screen as close to the server's timout time as possible 2024-10-21 12:44:39 +02:00
Sven GeusensandNikolaj Geisle 35c51a029a Prevents XSS when viewing an uploaded SVG
from the media-info and image-preview components.
2024-10-21 12:42:06 +02:00
ElitsaandNikolaj Geisle 8c1128c85b Update the HttpContext's user with the authenticated user's principal 2024-10-21 12:41:42 +02:00
ElitsaandNikolaj Geisle c9021ab2d2 Reduce the time when getRemainingTimeoutSeconds request is made from 30s to 20s, so fewer calls are made 2024-10-21 12:41:18 +02:00
ElitsaandNikolaj Geisle 67a71f8f82 Make sure that the client shows the login screen as close to the server's timout time as possible 2024-10-21 12:41:17 +02:00
Andreas ZerbstandAndreas Zerbst 6caf53ed2e Updated version of messagepack (#17321)
(cherry picked from commit 8a22672c7f)
(cherry picked from commit 6399f235f2)
2024-10-21 11:54:26 +02:00
Andreas ZerbstandAndreas Zerbst 97d74f39e7 Updated version of messagepack (#17321)
(cherry picked from commit 8a22672c7f)
2024-10-21 11:49:13 +02:00
Andreas ZerbstandAndreas Zerbst edd0a4a4a9 Updated message pack (#17320)
(cherry picked from commit 11270eaaf5)
2024-10-21 11:46:43 +02:00
Andreas ZerbstandAndreas Zerbst 6399f235f2 Updated version of messagepack (#17321)
(cherry picked from commit 8a22672c7f)
2024-10-21 11:17:50 +02:00
Andreas ZerbstandGitHub 8a22672c7f Updated version of messagepack (#17321) 2024-10-21 11:15:59 +02:00
Andreas ZerbstandGitHub 11270eaaf5 Updated message pack (#17320) 2024-10-21 11:00:47 +02:00
Justin NevilleandGitHub 1e32d59ecb Query for media using the full file path as well as the original file path for files that contain the sizes in the file name (i.e. image_200x200.jpg) (#17314) 2024-10-21 09:53:17 +02:00
Bjarke BergandGitHub 4be183a20d Do not rely on NuCache to do key/id lookups (#17291)
* Fixes #17182

* Ensure wait-on is installed
2024-10-21 09:49:34 +02:00
Kenn JacobsenandGitHub eab27123dd MNTP: Re-initialize contextual dialog options upon content creation (#17301) 2024-10-18 09:39:29 +02:00
Kenn JacobsenandGitHub a6253957c8 MNTP: Improve site and root context for dynamic root (#17303) 2024-10-18 09:17:17 +02:00
Jacob OvergaardandGitHub a8f5631144 V13: Update @umbraco-ui/uui to 1.11.0 (#17281)
* build(deps): update @umbraco-ui/uui from 1.7.1 to 1.11.0

* fix: umb-login-element no attributes

Cherry-picked a fix from V14 where the custom login input component was no longer needed, which was fixed because it errors out. This simplifies the login form.

* cherry-pick code to handle 'enter' click from v14
2024-10-17 10:25:02 +01:00
Andreas ZerbstandGitHub ba1080541b Updated to string.empty (#17294) 2024-10-17 09:59:41 +02:00
Jacob Overgaard 1581eb61d3 V15: Rich Text Editor links do not work with query strings and anchors (#17288)
* fix: anchors and query strings do not work

Since the change from UDIs to localLinks in href, the pattern matched a little too much in the href section completely ignoring any "extras" such as querystrings and anchors after the locallink, which meant that the locallink did not get replaced at all if they were present. This is fixed by limiting the regexp a bit.

* fix: legacy links do not follow the same regexp as new links

Because we are no longer matching the whole `href` attribute but only some of its contents, we need to fix up the old pattern. It has been extended with matching groups that follow the same pattern as the new links.

* feat: allow a-tags to be multiline

example:

```html
<a
  type="document"
  href="/{localLink:<GUID>}">
Test
</a>
```

* fix: split regex into two parts: first a tokenizer for a-tags and then a type-finder

* fix: ensure only "document" and "media" are matching to speed up the pattern

* feat: allow a-tags to be multiline

(cherry picked from commit 35e8f2e460)
2024-10-17 09:06:48 +02:00
Jason ElkinandNikolaj Geisle 6d98162e19 Unlock form after unsuccessful save and publish. (#17285)
(cherry picked from commit ee37ad0f4b)
2024-10-16 15:09:31 +02:00
Jason ElkinandGitHub ee37ad0f4b Unlock form after unsuccessful save and publish. (#17285) 2024-10-16 15:08:37 +02:00
Andreas ZerbstandGitHub 2b3a91757d V14 QA added user permission tests (#17226)
* Added test

* Small changes

* Added content start node tests

* Added media start node tests

* Cleaned up

* More updates

* Cleaned up

* Added wait

* Cleaned up

* Bumped helpers

* Updated to run user tests

* Fixed user tests

* Bumped helpers

* Added missing semicolon

* Fixes based on comments

* Run smoke tests
2024-10-16 13:26:36 +02:00
Andreas ZerbstandGitHub 00563013b6 V14 QA Updated package E2E tests (#17236)
* Updated tests

* Cleaned package tests

* Updated package test file

* Bumped version

* Added missing semicolons

* Run all smoke tests

* Run smoke tests
2024-10-16 12:46:24 +02:00
Ronald BarendseandBjarke Berg 378d4ecfef Fix ContentStore locking exceptions in async code (#17246)
* Add ContentCache test

* Use SemaphoreSlim as write lock

* Apply lock imrpovements to SnapDictionary

* Obsolete unused MonitorLock

(cherry picked from commit c3db3457e7)
2024-10-16 12:34:44 +02:00
Andreas ZerbstandBjarke Berg a497f3f4dd Updated nuget package (#17286)
(cherry picked from commit 5183391a86)
2024-10-16 12:24:31 +02:00
Bjarke BergandGitHub 2d71b5a63b Updated image sharp to a non vulnerable version (#17290) 2024-10-16 12:16:38 +02:00
Bjarke BergandGitHub f4f83bccbe Added an explicit dependency to Microsoft.Extensions.Caching.Memory to force it to use a non-vulnerable version (#17287) 2024-10-16 10:25:17 +02:00
Andreas ZerbstandGitHub 5183391a86 Updated nuget package (#17286) 2024-10-16 10:07:25 +02:00
Nhu DinhandGitHub 0551976126 V14 QA Added acceptance tests for notification message (#17195)
* Updated step to verify the notification message

* Added tests for notification message

* Bumped version

* Updated expected notification message

* Bumped version
2024-10-14 13:26:55 +07:00
Nhu DinhandGitHub da2a4d1713 V14 QA Added the acceptance tests for rendering content with textstring (#17247)
* Added tests for textstring in the rendered content

* Updated tests for rendering content with textstring

* Added tests for rendering content with numeric

* Added tests for rendering content with textarea

* Removed tests

* Bumped version

* Make all tests for rendering content run in the pipeline

* Make all smoke tests run in the pipeline
2024-10-14 11:57:52 +07:00
Nhu DinhandGitHub 9f5867bdf8 V14 QA Fixing the failing acceptance tests in the pipeline v14 (#17214)
* Added more waits

* Updated assert steps

* Fixed api method name

* Added more waits to avoid the failing test in window

* Updated tests due to business changes

* Added more waits to avoid the failing tests in window

* Updated test due to Ui changes

* Bumped version

* Bumped version of test helper

* Bumped version
2024-10-11 12:15:49 +02:00
Ronald BarendseandBjarke Berg 30b114d538 Fix ContentStore locking exceptions in async code (#17246)
* Add ContentCache test

* Use SemaphoreSlim as write lock

* Apply lock imrpovements to SnapDictionary

* Obsolete unused MonitorLock

(cherry picked from commit c3db3457e7)
2024-10-11 09:47:31 +02:00
Ronald BarendseandGitHub c3db3457e7 Fix ContentStore locking exceptions in async code (#17246)
* Add ContentCache test

* Use SemaphoreSlim as write lock

* Apply lock imrpovements to SnapDictionary

* Obsolete unused MonitorLock
2024-10-11 09:45:01 +02:00
Sven GeusensandGitHub 7787af2df1 Fix install url detection (#17241) 2024-10-10 18:09:11 +02:00
Wojciech WróbelandJacob Overgaard 3730109cce Fixed issue #17225. The 'code' html element added as valid to RTE configuration 2024-10-09 14:19:38 +02:00
Nikolaj Geisle b814608c06 Bump version 2024-10-08 12:34:23 +02:00
Jacob Overgaard ed63b51e46 update backoffice submodule 2024-10-07 15:46:21 +02:00
Jacob Overgaard ea608cc630 update backoffice submodule 2024-10-07 15:46:06 +02:00
Jacob Overgaard 4cfe498628 update backoffice submodule 2024-10-07 13:45:04 +02:00
Jacob Overgaard 42912dd5c9 update backoffice submodule 2024-10-07 13:44:18 +02:00
Nikolaj Geisle 9bab74d30e Bump version.json 2024-10-07 11:55:34 +02:00
Nikolaj Geisle 865787db1d Bump version.json 2024-10-07 11:48:41 +02:00
Bjarke Berg c58a7b7b23 Merge remote-tracking branch 'origin/release/14.3' into v14/dev 2024-10-03 07:50:18 +02:00
Bjarke Berg 32c00f9a09 Merge remote-tracking branch 'origin/release/14.3' into release/14.3 2024-10-01 17:40:35 +02:00
Bjarke Berg 348f1f2bae Change webhook permissions to require webhook tree access for all endpoints 2024-10-01 07:58:41 +02:00
Jacob Overgaard 73c8d8e0f9 Merge remote-tracking branch 'origin/release/14.3' into release/14.3 2024-09-30 10:24:17 +02:00
Jacob Overgaard 2d7c00f27f update backoffice submodule 2024-09-30 10:24:03 +02:00
Andreas ZerbstandGitHub 4fae91d55c V14 QA added content tests with list view content (#17115)
* Added tests for List view

* More tests

* Added rest of test

* Bumped version

* Fixed failing tests

* Added tests and fixed comments

* Cleaned up tests

* Bumped testhelpers

* Bumped again

* Set condition to only run sql server when enabled

* Run all content test

* Reverted changes
2024-09-27 17:32:44 +02:00
Sebastiaan Janssen 6c08f69801 Merge branch 'contrib' into v14/dev 2024-09-27 09:04:32 +02:00
Sebastiaan Janssen 910fb4062b Merge branch 'v14/dev' into contrib 2024-09-27 08:54:49 +02:00
Bjarke Berg f2e4e44db1 Merge remote-tracking branch 'origin/release/14.3' into v14/dev 2024-09-27 07:47:59 +02:00
Bjarke Berg d57d12d54d Fixed imagesharp 2 also 2024-09-27 07:43:12 +02:00
NguyenThuyLanandBjarke Berg 46604909be Fix error format code (#17146)
* update ImageSharpMiddlewareOption for fixing invalid width and height (#17126)

Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>

* Fix issue format parameters

---------

Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>

(cherry picked from commit 9a12eea495)
2024-09-27 07:42:30 +02:00
9a12eea495 Fix error format code (#17146)
* update ImageSharpMiddlewareOption for fixing invalid width and height (#17126)

Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>

* Fix issue format parameters

---------

Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>
2024-09-27 07:41:55 +02:00
NguyenThuyLanandBjarke Berg 762d72b018 update ImageSharpMiddlewareOption for fixing invalid width and height (#17126)
Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>
(cherry picked from commit 9b19d63a6a)
2024-09-27 07:40:42 +02:00
Nhu DinhandGitHub 45f43a6b7a V14 Added Content tests with different document types properties (#17131)
* Added tests for Allow At Root property

* Added Content tests for Allowed Child Nodes property

* Added Content tests for the Allow at root property

* Added Content tests for the Allowed child node property

* Added Content tests for the Collection property

* Added Content tests with allow vary by culture

* Added more waits

* Updated tests due to api helper changes

* Added Content tests with allowed templates

* Bumped version of test helper

* Updated code due to api helper changes

* Fixed naming
2024-09-27 10:36:15 +07:00
Jacob Overgaard c9c9374de1 update backoffice submodule 2024-09-26 14:39:12 +02:00
Jacob Overgaard 6bd558c016 update backoffice submodule 2024-09-26 14:38:27 +02:00
Bjarke Berg f1cddd91c6 Missing context complete
(cherry picked from commit fdb9cfa3e7)
2024-09-26 09:55:19 +02:00
Bjarke Berg fdb9cfa3e7 Missing context complete 2024-09-26 09:54:43 +02:00
Bjarke Berg 009394982c Merge remote-tracking branch 'origin/release/14.3' into v14/dev 2024-09-26 08:54:19 +02:00
Jacob Overgaard a43db4ff05 update backoffice submodule 2024-09-26 08:52:40 +02:00
Jacob Overgaard 8c4780380d update backoffice submodule 2024-09-26 08:51:36 +02:00
Kenn JacobsenandBjarke Berg d3a67fe4e0 Move all V14 User and User Group migration to pre-migrations (#17130)
(cherry picked from commit 910d70302e)
2024-09-26 08:45:37 +02:00
Kenn JacobsenandGitHub 910d70302e Move all V14 User and User Group migration to pre-migrations (#17130) 2024-09-26 08:45:08 +02:00
Bjarke Berg 63a487bc0b Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2024-09-26 07:54:43 +02:00
Ronald BarendseandBjarke Berg a40eadcfce Add RemoveDefault() extension method to fluent API for CMS webhook events (#15424)
* Add RemoveDefault extension method

* Move default webhook event types to single list

(cherry picked from commit 8f26263178)
2024-09-26 07:54:26 +02:00
Ronald BarendseandBjarke Berg 0c1daa290b Add RemoveDefault() extension method to fluent API for CMS webhook events (#15424)
* Add RemoveDefault extension method

* Move default webhook event types to single list

(cherry picked from commit 8f26263178)
2024-09-26 07:53:54 +02:00
Ronald BarendseandGitHub 8f26263178 Add RemoveDefault() extension method to fluent API for CMS webhook events (#15424)
* Add RemoveDefault extension method

* Move default webhook event types to single list
2024-09-26 07:52:39 +02:00
Ronald BarendseandBjarke Berg 635d9b83f9 Use version of the assembly with the same name as the package ID (#16544)
(cherry picked from commit 14a0e62278)
2024-09-26 07:51:35 +02:00
Ronald BarendseandGitHub 14a0e62278 Use version of the assembly with the same name as the package ID (#16544) 2024-09-26 07:51:16 +02:00
Ronald BarendseandBjarke Berg a76af1de9d Fix IContentBase.GetUdi() extension method to support document-blueprint entity type (#16939)
* Add tests for all UDI entity types

* Fix IContentBase UDI entity type for blueprints

* Remove redundant switch statements and reorder methods

(cherry picked from commit 609b5f76d4)
2024-09-26 07:48:10 +02:00
Ronald BarendseandGitHub 609b5f76d4 Fix IContentBase.GetUdi() extension method to support document-blueprint entity type (#16939)
* Add tests for all UDI entity types

* Fix IContentBase UDI entity type for blueprints

* Remove redundant switch statements and reorder methods
2024-09-26 07:47:33 +02:00
9b19d63a6a update ImageSharpMiddlewareOption for fixing invalid width and height (#17126)
Co-authored-by: Lan Nguyen Thuy <lnt@umbraco.dk>
2024-09-25 13:19:09 +02:00
Andreas ZerbstandGitHub e4dacf5c8c V14 QA fixed E2E tests for SQL server (#17122)
* Updated version of test helpers

* Added option to run smoke tests

* Found the issue

* Fixed pipeline

* Removed duplicate file creation

* Removed

* Always run sql server tests

* Removed unused parameter

* Enables sqlServer E2E to run on pipeline

* Removed comment
2024-09-25 07:04:12 +02:00
dependabot[bot]andJacob Overgaard 99125ef5cc Bump rollup from 4.21.3 to 4.22.4 in /src/Umbraco.Web.UI.Login
Bumps [rollup](https://github.com/rollup/rollup) from 4.21.3 to 4.22.4.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.21.3...v4.22.4)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-24 14:43:07 +02:00
Jacob Overgaard 264fbb6987 update backoffice submodule 2024-09-24 14:34:00 +02:00
Emma L GarlandandGitHub ac575662ac Resolved more warnings, and marked more warning types as errors (#16991)
* Fix warnings SA1111, SA1028, SA1500, IDE1270  in Umbraco.Web.Website, and updated rules.

* Remove warnings: IDE0270: Null check can be simplified

* More SqlServer project warnings resolved

* CS0105 namespace appeared already

* Suppress warning until implementation:

#pragma warning disable CS0162 // Unreachable code detected
#pragma warning disable CS0618 // Type or member is obsolete

CS0162 remove unreachable code
SA1028 remove trailing whitespace
SA1106 no empty statements
CS1570 malformed XML
CS1572 corrected xml parameter
CS1573 param tag added
IDE0007 var not explicit
IDE0008 explicit not var
IDE0057 simplify substring
IDE0074 compound assignment
CA1825 array.empty

Down to 3479 warnings

* - SA1116, SA117 params on same line
- IDE0057 substring simplified

Specific warnings for Umbraco.Tests.Benchmarks

* Fixed IDE0074 compound assignment and added specific warnings for Umbraco.Tests.Common

* Specific warnings for Umbraco.Tests.Integration and Umbraco.Tests.Common

Fixed:

- SA1111, SA1116, SA117 params and line formatting (not all as there are many)
- SA1122 string.Empty
- IDE0057 simplify substring
- IDE0044,IDE0044 make field readonly
- IDE1006 naming rule violation (add _)
- SA1111 closing parenthesis on line of last parameter
- SA1649 filename match type name
- SA1312,SA1306 lowercase variable and field names

* Fixed various warnings where they are more straight-forward, including:

- SA1649 file name match type name
- SA111 parenthesis on line of last parameter
- IDE0028 simplify collection initializer
- SA1306 lower-case letter field
- IDE044 readonly field
- SA1122 string.Empty
- SA1116 params same line
- IDE1006 upper casing
- IDE0041 simplify null check

Updated the following projects to only list their remaining specific warning codes:

- Umbraco.Tests.UnitTests

Typo in `Umbraco.Web.Website` project

* Reverted test change

* Now 1556 warnings.

Fixed various warnings where they are more straight-forward, including:

- SA1111/SA1116/SA1119 parenthesis
- SA1117 params
- SA1312 lowercase variable
- SA1121 built-in type
- SA1500/SA1513/SA1503 formatting braces
- SA1400 declare access modifier
- SA1122 string.Empty
- SA1310 no underscore
- IDE0049 name simplified
- IDE0057 simplify substring
- IDE0074 compound assignment
- IDE0032 use auto-property
- IDE0037 simplify member name
- IDE0008 explicit type not var
- IDE0016/IDE0270/IDE0041 simplify null checks
- IDE0048/SA1407 clarity in arithmetic
- IDE1006 correct param names
- IDE0042 deconstruct variable
- IDE0044 readonly
- IDE0018 inline variable declarations
- IDE0074/IDE0054 compound assignment
- IDE1006 naming
- CS1573 param XML
- CS0168 unused variable

Comment formatting in project files for consistency.

Updated all projects to only list remaining specific warning codes as warnings instead of errors (errors is now default).

* Type not var, and more warning exceptions

* Tweaked merge issue, readded comment about rollback

* Readded comment re rollback.

* Readded comments

* Comment tweak

* Comment tweak
2024-09-24 12:56:28 +01:00
Terence BurridgeandSebastiaan Janssen 6939472f37 Update valid reasons not to have a template on a content node to include having a redirect field
Cherry-picked from: 385a5345b1
2024-09-23 14:30:13 +02:00
Sebastiaan Janssen 0387307301 Merge branch 'v13/dev' into v13/contrib 2024-09-23 14:27:48 +02:00
Andreas ZerbstandAndreas Zerbst e92b4f3172 V15 QA Enabled Nightly E2E Pipeline to run on V15 (#17103)
* Uncommented

* Added timeout

(cherry picked from commit 142db8c0fb)
2024-09-23 14:00:32 +02:00
Jacob Overgaard c70c8d86f9 update backoffice submodule 2024-09-23 09:58:52 +02:00
Bjarke Berg e733ec1717 Merge remote-tracking branch 'origin/release/14.3' into v14/dev 2024-09-18 13:48:55 +02:00
Bjarke Berg fa7b81474c Bump version to 14.3.0 2024-09-18 13:48:23 +02:00
Bjarke Berg 753aa6f9db Fixed version 2024-09-18 13:46:05 +02:00
Bjarke Berg 59aac9053f Bump version 2024-09-18 13:17:16 +02:00
Bjarke Berg 234c2673f6 Allow the client to send all content, with all languages, even when the user do not have permissions to save a specific language. (#17052)
(cherry picked from commit c5243e562e)
2024-09-18 13:16:25 +02:00
Bjarke Berg d2d6d3493f Revert "Bump version"
This reverts commit f8e26f5ba1.
2024-09-18 13:15:59 +02:00
Bjarke BergandGitHub c5243e562e Allow the client to send all content, with all languages, even when the user do not have permissions to save a specific language. (#17052) 2024-09-18 13:10:15 +02:00
Bjarke Berg 5c857aa97d Bump version 2024-09-18 12:57:05 +02:00
Bjarke Berg f8e26f5ba1 Bump version 2024-09-18 12:56:19 +02:00
Bjarke Berg 25a5dde8e9 Merge remote-tracking branch 'origin/release/13.5' into v13/dev
# Conflicts:
#	version.json
2024-09-18 12:55:35 +02:00
Bjarke Berg 47d843f424 Merge remote-tracking branch 'refs/remotes/origin/contrib' into v14/dev
# Conflicts:
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
2024-09-18 11:05:15 +02:00
dependabot[bot]andJacob Overgaard c8899afed6 Bump vite from 5.3.1 to 5.4.6 in /src/Umbraco.Web.UI.Login
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.3.1 to 5.4.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 10:31:40 +02:00
Jacob Overgaard 939b2aaa3d update backoffice submodule to 14.3 release branch 2024-09-18 09:45:21 +02:00
Bjarke Berg 2e068bb73e Merge remote-tracking branch 'origin/release/13.5' into release/13.5 2024-09-17 14:51:05 +02:00
Bjarke Berg 842cacde19 Bump version 2024-09-17 14:50:57 +02:00
f72c39ef59 V14: Fix templates not having set master template on package install (#16978)
* Reorder templates to save master templates first, and use new ITemplateService

* Add obsoletion

* Fix if statement

* Refactor async calls into async method to avoid multiple get awaiters

* Update interface

* Avoid breaking changes

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-09-17 14:43:05 +02:00
MoleandGitHub 991b9a791e Updaet template to reference 13.5 (#17063) 2024-09-17 14:42:25 +02:00
Bjarke BergandGitHub 920591bcd1 Updated the assembly names to avoid a debug-warning in the log (#16997) 2024-09-17 14:41:29 +02:00
Dennis ÖhmanandSebastiaan Janssen 6a453a0910 v13.5 - New Swedish translation crashes Umbraco, removed duplicate areas. (#17059)
Cherry-picked from d64bf5de22
2024-09-17 14:04:22 +02:00
Sebastiaan Janssen ff9903b14d Merge branch 'v13/contrib' of https://github.com/umbraco/Umbraco-CMS into v13/contrib 2024-09-17 13:58:37 +02:00
Dennis ÖhmanandGitHub d64bf5de22 v13.5 - New Swedish translation crashes Umbraco, removed duplicate areas. (#17059) 2024-09-17 13:56:58 +02:00
Sebastiaan Janssen 9300d867fb Merge branch 'v13/dev' into v13/contrib 2024-09-17 13:12:04 +02:00
Andreas ZerbstandGitHub 66aeafe797 V14 QA Content with upload video (#17066)
* Added tests for upload video in content

* Added ogv file

* Added ogv to test

* Reverted smokeTest command
2024-09-17 12:13:35 +02:00
Andreas ZerbstandGitHub f32d40a35e V14 QA Content with vector graphics (#17065)
* Added tests for Upload vector graphics

* Run all content tests

* Fixed indentation

* Reverted smokeTest string
2024-09-17 12:13:10 +02:00
Jacob Overgaard 625366f82b update backoffice submodule 2024-09-17 11:46:51 +02:00
Jacob Overgaard 8ebc44f959 update OpenApi.json 2024-09-17 11:01:30 +02:00
Kenn JacobsenandJacob Overgaard e6f379034f Add notification alias to document notifications endpoint output (#17028) 2024-09-17 10:59:33 +02:00
Niels LyngsøandGitHub eb0f8b5c24 fire change event (#17078) 2024-09-17 10:06:16 +02:00
Niels LyngsøandGitHub d58768f26d utilize lock unlock events for readonly mode while saving (#17077) 2024-09-17 09:52:00 +02:00
Niels LyngsøandGitHub 3667217053 only resolve if value is present (#17070) 2024-09-17 09:51:47 +02:00
Andreas ZerbstandGitHub d12dedb526 V14 QA update fetch depth (#17068)
* Removed fetch depth

* Added fetch depth 0
2024-09-17 10:16:29 +07:00
Bjarke BergandGitHub 017209c5ba Updated nuget packages (#17062) 2024-09-16 12:15:36 +02:00
Andreas ZerbstandGitHub 48e4cdaa88 V14 QA new E2E test pipeline (#17064)
* Added E2E pipeline

* Set up CI with Azure Pipelines

[skip ci]

* Update nightly-E2E-test-pipelines.yml for Azure Pipelines

* Updated solution file

* Added fetch depth

* Update nightly-E2E-test-pipelines.yml for Azure Pipelines

* Added a step for installing wait-on

* Added runSqlServerE2ETests

* Update nightly-E2E-test-pipelines.yml for Azure Pipelines

* Update nightly-E2E-test-pipelines.yml for Azure Pipelines

* Updated pipeline so we only run smoke

* Update nightly-E2E-test-pipelines.yml for Azure Pipelines

* Update nightly-E2E-test-pipelines.yml for Azure Pipelines

* Removed pipeline
2024-09-16 10:13:26 +02:00
Jacob Overgaard ce379bc153 update backoffice submodule 2024-09-13 13:54:43 +02:00
Bjarke Berg 26bf04c085 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2024-09-13 08:12:23 +02:00
Sven Geusens b237285703 Merge branch 'release/13.5' into v13/dev and version bump 2024-09-12 15:12:20 +02:00
Andreas ZerbstandGitHub a96a304860 V14 Fix E2E tests (#17011)
* Fixed tests

* Fixed tests

* Added timeout

* Fixed rest of the failing tests

* Bumped version

* Added timeout

* Bumped version of helpers

* Added parameter

* Applied fixes for tests and did some skips

* Small changes

* Bumped version

* Fixed comments
2024-09-12 11:04:12 +02:00
Kenn JacobsenandGitHub 3d3f6b5021 Add endpoint for upgrade checks (#17026)
* Fix upgrade check repo, so it's able to check more than once :)

* Add VersionCheckPeriod to server configuration output

* Add upgrade check endpoint

* Obsolete unused response model

* Update OpenAPI JSON
2024-09-11 17:08:50 +02:00
Jacob Overgaard 78aaafedc7 update backoffice submodule 2024-09-11 07:53:34 +02:00
Sven Geusens a6c5581942 Update version to non RC 2024-09-10 18:10:57 +02:00
Sven GeusensandGitHub 9a088d36b9 Expand RedirectUrl.Url storage type to avoid truncation (#17038)
* Add migration to expand RedirectUrl.Url to varcharMax

* Simplify Migration

* readded notnull attribute
2024-09-10 18:07:20 +02:00
Emma L GarlandandGitHub 862820c6a6 Resolved more warnings, and marked more warning types as errors (#16990)
* Fix warnings SA1111, SA1028, SA1500, IDE1270  in Umbraco.Web.Website, and updated rules.

* Remove warnings: IDE0270: Null check can be simplified

* More SqlServer project warnings resolved

* CS0105 namespace appeared already

* Suppress warning until implementation:

#pragma warning disable CS0162 // Unreachable code detected
#pragma warning disable CS0618 // Type or member is obsolete

CS0162 remove unreachable code
SA1028 remove trailing whitespace
SA1106 no empty statements
CS1570 malformed XML
CS1572 corrected xml parameter
CS1573 param tag added
IDE0007 var not explicit
IDE0008 explicit not var
IDE0057 simplify substring
IDE0074 compound assignment
CA1825 array.empty

Down to 3479 warnings
2024-09-10 15:17:29 +01:00
Sven Geusens 407734ff4a Fix null reference exception in CacheValues.For when building the CompositeStringStringKey (#17024)
* Fix null ref exeption based on IPropertyValue.Culture documentation

* Clarify comment
2024-09-10 12:50:02 +02:00
Sven GeusensandGitHub a74d963cfa Fix null reference exception in CacheValues.For when building the CompositeStringStringKey (#17024)
* Fix null ref exeption based on IPropertyValue.Culture documentation

* Clarify comment
2024-09-09 18:13:14 +02:00
Jacob Overgaard a30827145c update backoffice submodule 2024-09-09 16:01:25 +02:00
Niels LyngsøandNiels Lyngsø 02a47695e7 dispatch change event when embedded media has been added (#17008) 2024-09-09 13:09:31 +02:00
Niels Lyngsø 0f37cd3a45 PR 17018 2024-09-09 13:07:47 +02:00
Yari MariënandGitHub 5fe18bb78c Content.EditorDirectiveController: added formSubmittedValidationFailed broadcast to prevent fields to stay disabled (#17018) 2024-09-09 13:05:12 +02:00
Niels LyngsøandGitHub b16dfa9ca1 dispatch change event when embedded media has been added (#17008) 2024-09-09 12:49:07 +02:00
kasparboelkjeldsenandGitHub 3d5e70654b ModelsGenerator to IModelsGenerator in BuildModelsBuilderController (#16919)
* ModelsGenerator to IModelsGenerator in BuildModelsBuilderController

* Added obsolete constructors for backwards compatibility
2024-09-09 08:06:52 +02:00
marwaldvandMatthew-Wise 7acce83c83 Update LogDto.cs
fix: issue resolved, where content saving breaks due to saving to umbracoLog with error message like that: String or binary data would be truncated in table 'dto.umbracoLog', column 'parameters'. Truncated value: 'English (United States), German (Switzerland), French (France), Italian (Italy), Arabic (Iraq), Pers'...
2024-09-05 14:55:35 +02:00
3e6116fcba No longer shows success message if content moving is cancelled (#15051)
* Fix for issue https://github.com/umbraco/Umbraco-CMS/issues/13923
 - Added AttemptMove method to the ContentService
 - Updated ContentController PostMove method to return ValidationProblem whenever the node is not moved

* Align changes with V14 solution. Make it non breaking.

---------

Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
2024-09-05 14:08:48 +02:00
Bjarke Berg 3b3c9c57ca Merge remote-tracking branch 'refs/remotes/origin/v13/dev' into v14/dev 2024-09-04 14:20:43 +02:00
Ronald BarendseandGitHub ef3bf496e9 Avoid concurrent build of Umbraco.JsonSchema tool and add execution timeouts to Exec build tasks (#17006)
* Disable building Umbraco.JsonSchema and Umbraco.Tests.AcceptanceTest.UmbracoProject

* Add 10 minute timeout to Exec MSBuild tasks
2024-09-04 13:44:19 +02:00
087a01de83 V14/fix/cookie breaking installer (#16993)
* Do not run authentication if Umbraco is not ready for it. Fail instead.

* Fix breaking change

* Spelling + code style :)

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-09-03 11:05:22 +02:00
Sebastiaan Janssen bff293213d Merge branch 'v13/dev' into v13/contrib 2024-09-03 11:01:39 +02:00
a47a1775f2 Prevent templates being editable when using Production runtime mode (#16923)
Co-authored-by: Nick Hoang <nick@codeberwery.com>
Co-authored-by: Jason Elkin <jason@bumpdigital.co.uk>
2024-09-03 00:54:32 +01:00
Jacob Overgaard 9321774613 Merge branch 'v14/dev' of github.com:umbraco/Umbraco-CMS into v14/dev 2024-08-29 11:38:35 +02:00
Jacob Overgaard 590b28110b update backoffice submodule 2024-08-29 11:38:24 +02:00
c277005b62 improve missingProperties data returned for missing propertie values (#16910)
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-08-29 10:12:43 +02:00
Andreas ZerbstandGitHub 6851113cf1 V14 QA added block list editor tests (#16862)
* Added tests for blocklistEditor

* Added more tets

* Removed faker

* Added blockTest

* Updates

* Added tests

* Removed dependencies

* Fixes

* Clean up

* Fixed naming

* Cleaned up

* Bumped version

* Added missing semicolons

* Added tags

* Only runs the new tests

* Updates

* Bumped version

* Fixed tests

* Cleaned up

* Updated version

* Fixes, not done

* Fixed tests

* Bumped helpers

* Bumped helpers

* Fixed conflict

* Fixed comment

* Reverted to run smokeTests

* Updated helpers
2024-08-29 08:47:24 +02:00
Jason Elkin b2a2df7a8a Ignore Visual Studio's generated launchSettings file. 2024-08-28 14:08:52 +01:00
Sven Geusens 34179f5b7d Merge branch 'release/13.5' into v13/dev and bump version 2024-08-28 10:14:09 +02:00
98e9a300bc Treat warnings as errors for initial projects (#15019)
* Treat warnings as errors for Umbraco.Cms, Umbraco.Cms.Api.Common and Umbraco.Cms.Api.Delivery projects.

* Treat warnings as errors for Umbraco.Cms.Imaging.ImageSharp and Umbraco.Cms.Imaging.ImageSharp2 projects

* Treat warnings as errors for Umbraco.Cms.Persistence.EFCore.Sqlite, Umbraco.Cms.Persistence.EFCore.SqlServer and Umbraco.Cms.StaticAssets

* Treat warnings as errors for Umbraco.Cms.Targets

* Treat warnings as errors for templates/Umbraco.Templates and Umbraco.JsonSchema

* More projects with warnings as errors.

* Reverted warnings as errors due to some file changes since the update.

* Remove unwanted tag

* Removed warnings as errors on TestData project

* Implement warnings as errors in props file, and exclude specific warnings where appropriate as per PR review suggestions.

* Reverted spaces

* Revert "Reverted spaces"

This reverts commit 3734c45e22.

* Update sdk version to fully support Umbraco.code 2.2.0 dependency on Microsoft.CodeAnalysis.CSharp.Workspaces 4.10.0

* Ignore PathToLongErrors for now in static assets

---------

Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-08-27 18:56:09 +02:00
Sven GeusensandGitHub 95f08e748e Update sdk version to fully support Umbraco.code 2.2.0 dependency on Microsoft.CodeAnalysis.CSharp.Workspaces 4.10.0 (#16963) 2024-08-27 18:55:42 +02:00
Sven Geusens d38b744c08 Merge branch 'v13/dev' into release/13.5 2024-08-27 18:54:54 +02:00
Jacob OvergaardandGitHub 04d96c6a94 fix: appEntryPoint types are not executed unless we have the UmbappEntryPointExtensionInitializer running (#16967) 2024-08-27 16:07:50 +01:00
Niels LyngsøandGitHub ef58416814 V13: Read only mode while saving (#16961)
* make a clear console error when case happens

* turn Content into readonly mode when submitting form aka saving
2024-08-27 15:01:59 +01:00
Sven GeusensandGitHub 62b7c9468e Fix undefined property read (#16941) 2024-08-27 14:28:04 +01:00
Sven GeusensandGitHub 27108036b4 Support parentId in document/media item search endpoints (#16933)
* Updated search services to start searching from a guid based key.

* Solved api breaking changes with new minor version

* Ordering and formatting

* Changed interface default implementation to the new method...

* Consolidated version

* PR review cleanup and renaming
2024-08-27 15:18:25 +02:00
148d51bf8c Remove warnings from Umbraco.Web.UI (#16958)
* Fixed warning SA1119 for Umbraco.Web.UI project (unnecessary parenthesis)

* Remove parenthesis (startup no longer exists)

---------

Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
2024-08-27 11:29:02 +01:00
Andreas ZerbstandGitHub 3f8bae1a29 V14 QA added Block grid acceptance tests (#16908)
* Added blockgrid tests

* Additional tests

* Added more tets

* Split tests

* Block updates

* Bumped version

* Added block tests

* Fixes, not done

* Fixed

* Updated helper

* Bumped version

* Bumped helpers

* Fixed conflicts

* Removed page

* Removed page

* Bumped

* Reverted to run smoke tests
2024-08-27 10:36:44 +02:00
Nhu DinhandGitHub c5e5fa2dd1 V14 QA Added Content tests with various of data types (#16824)
* Added Content tests with content picker

* Removed the test for content picker

* Added Content tests with the default content picker

* Added more Content tests with Content Picker data type

* Added the Content tests with Dropdown

* Added Content tests with Image Cropper

* Updated upload file method due to test helper changes

* Added Content tests with Image Cropper

* Added Content tests with Image Cropper data type

* Added Content tests with Media Picker data type

* Updated Media tests due to ui helper changes

* Bumped version of test helper and json builder

* Make all Content tests run in pipeline - should remove it before merging

* Fixed the name of tests

* Updated the tests for Media Picker in Content section

* Added the Content tests with Multiple Media Picker

* Updated the Content test with Content Picker due to the test helper changes

* Bumped version of test helper

* Fixed the failing tests for Content

* Removed Image Cropper test in this branch

* Added more waits

* Added smoke tags

* Make smoke tests run in the pipeline

* Added Content tests for Image Cropper

* Added smoke tags to make all Image Cropper tests running in the pipeline

* Added Content tests with Member Picker

* Added Content tests with Multiple Image Media Picker

* Added Content tests with Numeric

* Bumped version of test helper

* Make all Content tests running in the pipeline

* Assert that the content is published

* Assert that the content is published

* Fixed code conflict

* Fixed comment and code conflict

* Make all Content tests run in the pipeline

* Refactor the Content tests with different data type

* Cleaned code

* Make the smoke tests run in the pipeline
2024-08-27 13:53:35 +07:00
Bjarke BergandGitHub bafdb21b45 Fix mandatory RTE validation (#16962)
* Added a custom RichTextRequiredValidator, to check that the empty richtext object (still with json) can be required or not. We are now testing the markdown needs to have a value

* Fixed namespaced and moved back wrong class

* Cleanup
2024-08-26 15:03:11 +02:00
MoleandGitHub a31e4265bd Improve dotnet templates (#16815)
* Add delivery api toggle

* Add Dockerfile

* add docker compose template

* Ensure no duplicate database containers

* Remove wwwroot/umbraco permission check

We don't need write access to this folder

* Provide environment variables from dokcer-compose

* Build as debug from compose

The compose file is intended to be used for local dev

* Don't store password in docker files

Still not great to store it in .env but it's fine for dev

* Add additional template files

* Add docker ignore file

* Enable delivery API in settings too

* Enable models builder mode toggle

* Add WIP for umbraco release option

* Add starterkit option

* Add option to chose LTS or latest

* Add development mode option

* Add descriptions

* Add display names

* Add backoffice development at explicit default

* Rearrange DevelopmentMode before ModelsBuilderMode

* Allow specifying a port for the compose file

* Add some notes

* Move starterkits into its own template

* Don't update version

* Remove test configuration from Dockerfile

* Add default modelsbuilder option

* Update descriptions

* overwrite default values in IDE development

* Remove obsolete runtime minification

* Try and fix healthcheck

* Don't use post action for starterkit

otherwise it won't work with Rider, also make the version 13.0.0 if LTS is chosen

* Move UmbracoVersion above FinalVersion

Otherwise, rider will use UmbracoVersion for some weird reason

* Fix healthcheck

* Use else instead of second if for modelsbuilder

* Obsolete UmbracoVersion

* Remove custom release option

* Use forward slashes for volumes

* Add MSSQL_SA_PASSWORD env variable

* Temporarily limit acceptance tests so it works

* Try again

* Disable SQLServer integration tests

* Set UseHttps to false in appsettings.Development.json

You still want to be able to use non-https when developing locally

* Fix LTS version

LTS still needs installer endpoints added

* Update permissions of wwwroot/umbraco for v13 sites

* Fix conditional in Program.cs

* Undo pipeline shenanigans
2024-08-26 11:21:02 +02:00
Terence BurridgeandEmma L Garland 385a5345b1 Update valid reasons not to have a template on a content node to include having a redirect field 2024-08-25 22:01:38 +01:00
Jason ElkinandMatthew-Wise 862e45eca3 Ignore Visual Studio's generated launchSettings file. 2024-08-25 15:31:51 +01:00
Nhu DinhandGitHub 17d441760d V14 QA Fixed the failing smoke tests (#16953)
* Updated api tests for Data type due to test helper changes

* Fixed Data Type tests due to test helper changes

* Updated the test for edit password due to ui helper changes

* Bumped version
2024-08-23 16:18:28 +07:00
Nhu DinhandGitHub 8eeac2774b V14 Added the Content tests with Upload Article, Upload Audio and Upload File data type (#16945)
* Added the test files for article

* Added Content tests with Upload Article datatype

* Added the audio test files

* Fix format

* Updated the Content tests with Upload Article

* Added Content tests with Upload Audio

* Added Content tests with Upload File

* Bumped version

* Make all Content tests run in the pipeline

* Cleaned code

* Make the smoke tests run in the pipeline
2024-08-23 15:17:30 +07:00
Nhu DinhandGitHub 405fd9724f V14 Added the Content tests with Textarea, Textstring, TrueFalse datatype (#16946)
* Added Contents test with Textarea

* Added Content tests with textstring

* Removed the tests for Textarea property editor

* Added Content tests for TrueFalse data type

* Bumped version of test helper

* Make all Content tests run in the pipeline

* Cleaned code

* Make the smoke tests run in the pipeline
2024-08-23 13:54:14 +07:00
dependabot[bot]andJason Elkin e8051978e9 Bump axios from 1.6.5 to 1.7.4 in /tests/Umbraco.Tests.AcceptanceTest
Bumps [axios](https://github.com/axios/axios) from 1.6.5 to 1.7.4.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.5...v1.7.4)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 20:49:13 +01:00
Sven Geusens 136753f0b0 Merge branch 'release/14.2' into v14/dev with correct version bump
# Conflicts:
#	version.json
2024-08-22 16:07:40 +02:00
Sven Geusens 1b21caa20a Update backoffice submodule with hotfix for breaking change that broke forms. 2024-08-22 12:14:43 +02:00
Nhu DinhandGitHub bbda1c8330 V14 Added Content tests with Multi URL picker (#16885)
* Added Content tests with Multi URL Picker

* Bumped version of test helper

* Make all Content tests run in the pipeline - remove it before merging

* Added goToSection step

* Fix comments

* Fix comments

* Fixed comments

* Make the smoke tests run in the pipeline
2024-08-22 16:00:35 +07:00
Bjarke BergandGitHub 79080ffa93 Updated nuget packages and take a explicit dependency on Microsoft.IdentityModel.JsonWebTokens (#16935) 2024-08-21 10:25:39 +02:00
Sven GeusensandGitHub f99f821a6d Fix Mismatching constraint names in old migration (#16891)
* Find the constraint name based on table,column,type name instead of hardcoding it

* removed unnecesary using

* Check constraint rename seperatly from column rename
2024-08-21 09:07:09 +02:00
Nikolaj Geisle bf805a181a Bump version 2024-08-20 12:54:19 +02:00
Nikolaj Geisle 66592bfbcc Merge branch 'release/14.1' into release/14.2
# Conflicts:
#	version.json
2024-08-20 12:53:40 +02:00
Sven Geusens 1a69bc9d8b Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	Directory.Packages.props
#	src/Umbraco.Core/EmbeddedResources/Lang/sv.xml
2024-08-20 11:25:31 +02:00
leekelleher 1ff3858a9e update backoffice submodule 2024-08-20 09:56:00 +01:00
Bjarke BergandNikolaj Geisle b76070c794 Merge commit from fork
* Use Debug Mode to determine content of the ProblemDetails

* Cache the debug value
2024-08-19 15:10:44 +02:00
Sven GeusensandNikolaj Geisle 72bef8861d Merge commit from fork 2024-08-19 15:10:24 +02:00
Bjarke BergandGitHub d0c76171dd Merge commit from fork
* Use Debug Mode to determine content of the ProblemDetails

* Cache the debug value
2024-08-19 15:05:02 +02:00
Sven GeusensandGitHub b0988e6136 Merge commit from fork 2024-08-19 15:04:08 +02:00
Nhu DinhandGitHub 20087c8e80 V14 Added the Content tests with Radiobox and Tags datatype (#16909)
* Added Content tests with Radiobox data type - not done

* Removed Content test with Tags property editor

* Added Content tests with Radiobox datatype

* Added Content tests with Tags data type

* Created content with data type via API

* Bumped version of test helper

* Make all Content tests run in the pipeline

* Make all smoke tests run in the pipeline
2024-08-19 13:54:55 +07:00
Matthew CareandGitHub 3b6fbf1a4c Cache a dictionary of dictionaries (#15908)
* Re-commit change

Re-commit change after merge

* Fix issues after merge

Update usings after merge

* Re-delete obsolete

Remove the obsolete method
2024-08-17 15:00:24 +01:00
Emanuel GustafzonandGitHub 9338395a59 Stripped username before login (#16921)
* Stripped username before login
2024-08-16 20:59:10 +01:00
Nikolaj Geisle a3ede67777 bump version 2024-08-16 09:29:03 +02:00
Niels LyngsøandGitHub 3b51475150 move and rename (#16916) 2024-08-15 12:53:57 +02:00
Sebastiaan Janssen b41de5764b Merge branch 'v13/dev' into v13/contrib 2024-08-15 11:28:55 +02:00
PeterandSebastiaan Janssen bb1c36f591 Making method ExecuteAsync virtual. (#16496)
Co-authored-by: Kvyatkovsky, Petr <pkvyatkovsky@qulix.com>
(cherry picked from commit 3a9ef3810b)
2024-08-15 11:15:24 +02:00
Sebastiaan Janssen 3560fc9848 Merge branch 'v14/dev' into contrib 2024-08-15 11:10:30 +02:00
Jason Elkin 80b8b2a4ed Issue-15712: MemberDefaultLockoutTimeInMinutes fix. 2024-08-15 09:51:27 +02:00
Andrii KudandJason Elkin 09f16c33d1 Issue-15712: MemberDefaultLockoutTimeInMinutes fix. 2024-08-15 08:48:58 +01:00
fd100602c2 V14/fix/element switch validation (#16421)
* Added Element <-> Document type switch validation

* Apply HasElementconfigured to block grid and block list

Fix smalle bug + optimization

* Moved some of the logic into warnings trough notifcationhandlers and eventmessages

* Cleanup

* Update openApi spec (merge changes)

* Add IsElement check between parent and child on creation

* Typos

* Transformed HasElementConfigured into HasElementConfigured

* Typo

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>

* IsElement Validation refactor

Moved validation logic regarding doctype IsElement switch into its own service as it will be consumed by more things down the line

* commit missing services...

* Naming improvements

* Bugfix

* First batch of integration tests for ElementSwitchValidator

* More integration tests!

* Little reformatting

* Changed the default values of block based configuration to match expected values.

---------

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2024-08-15 07:11:17 +02:00
PeterGitHubKvyatkovsky, Petr <pkvyatkovsky@qulix.com>
3a9ef3810b Making method ExecuteAsync virtual. (#16496)
Co-authored-by: Kvyatkovsky, Petr <pkvyatkovsky@qulix.com>
2024-08-14 21:07:36 +01:00
Andreas ZerbstandGitHub 7a700f3029 V14 QA content image media picker tests (#16890)
* Started some tests for imageMediaPicker

* Added tests

* Added additional test

* Fixed based on updates to helpers

* Bumped versions

* Fixes based on comments

* Updated so we run all content test

* Cleaned
2024-08-14 21:05:09 +02:00
Nikolaj GeisleandGitHub de57523b4f Use browse instead of protect (#16907) 2024-08-14 10:03:35 +02:00
56b3f17355 V14: Don't duplicate audit loggin for media trashing (#16903)
* Remove auditlogging from media service

* Refactor to use backofficeSecurityaccessor to get backoffice user

* Fix constructor error

* Reinstate media service move

* Go back to audit type delete

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-08-13 12:29:29 +02:00
9d94658372 V13: fix 16663 (#16866)
* fix unit testing

* fix server value update case

* PastePropertyResolver for RTE Blocks

---------

Co-authored-by: leekelleher <leekelleher@gmail.com>
2024-08-13 09:43:20 +01:00
Niels LyngsøandGitHub 81f36df066 V13: fix 15516 (#16864)
* fix unit testing

* fix server value update case

* re initialize Block if it was offloaded
2024-08-13 09:25:24 +01:00
Nikolaj Geisle 66ccc92399 change version after merge 2024-08-13 08:57:26 +02:00
Nikolaj Geisle 8aee8a8bc9 Merge branch 'release/14.2' into v14/dev 2024-08-13 08:57:05 +02:00
Nikolaj Geisle a36535b354 bump version 2024-08-13 08:56:18 +02:00
EalseandEmma L Garland 7afc2b9963 fix: uploaded item not selected in media picker 2024-08-12 21:42:35 +01:00
Kenn JacobsenandNikolaj Geisle 79807999ee Add the default date-with-time configuration if missing (#16902) 2024-08-12 16:37:01 +02:00
Kenn JacobsenandGitHub 61a9386209 Add the default date-with-time configuration if missing (#16902) 2024-08-12 14:25:27 +02:00
Kenn JacobsenandZeegaan 506d3b3a9c Fix date conversion on the server-side (#16841)
(cherry picked from commit ceddf8681b)
2024-08-12 13:15:27 +02:00
Kenn JacobsenandGitHub ceddf8681b Fix date conversion on the server-side (#16841) 2024-08-12 12:41:37 +02:00
c288d038dd v14: TryGetUmbracouser default implementation (#16899)
* Add default implementation

* Update src/Umbraco.Core/Security/Authorization/IAuthorizationHelper.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-08-12 12:38:28 +02:00
a235591521 Add Content-Security-Policy (CSP) health check (#16830)
* Add CSP Header Check

* Update src/Umbraco.Core/EmbeddedResources/Lang/en.xml

Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>

* Update src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml

Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>

---------

Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
2024-08-12 10:18:20 +02:00
leekelleher 35d6fc2f39 update backoffice submodule 2024-08-12 08:16:20 +01:00
Zeegaan d3d057db60 bumb version.json 2024-08-12 09:04:37 +02:00
Andreas ZerbstandGitHub b30a45a248 V14 QA applied changes from our test helpers (#16889)
* Made fixes based on changes in our test helpers

* Bumped version

* Fixed user tests
2024-08-12 10:28:34 +07:00
leekelleher cae00d49d8 update backoffice submodule 2024-08-08 09:04:34 +01:00
Sven GeusensandGitHub 2e3369a09a Upgrade imagesharp2 dependency (#16883) 2024-08-07 15:20:28 +02:00
Bjarke BergandGitHub 58e515da11 Do not allow save of invalid domains (#16880) 2024-08-07 13:38:32 +02:00
Bjarke BergandGitHub 212b2c999f Updated to lastest nuget minor or patch versions (#16871) 2024-08-07 10:17:00 +02:00
Sebastiaan Janssen 1c1b4c6ee8 Merge branch 'v14/dev' into contrib 2024-08-06 14:42:37 +02:00
mcl-szandSebastiaan Janssen 2761f5cd20 Combining OpenId and OfflineAccess scope (#16220)
* Combining OpenId and OfflineAccess scope

When the client scope is set to "openid offline_access", the returned scope only has the "offline_access" scope. The "openid" scope and the "id_token" are missing. By combining the OpenId and OfflineAccess as return scope, the refresh_token and id_token are returned.

* Update MemberController.cs

Cleaner way, provided by @kjac, to check if the scope has openid and/or offiline_access set.

(cherry picked from commit 55f9b09ab7)
2024-08-06 14:35:59 +02:00
Nikolaj Geisle 0f16dae269 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_7_0/MigrateTagsFromNVarcharToNText.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/UseNvarcharInsteadOfNText.cs
2024-08-06 09:09:10 +02:00
Sebastiaan Janssen d5831fea94 Merge branch 'v13/dev' into v13/contrib 2024-08-06 09:07:06 +02:00
Sebastiaan Janssen 71afa21701 Revert "Configure WebP encoder to use Lossy by default (#16769)"
This reverts commit ee0fd7dd5f.
2024-08-06 09:04:27 +02:00
Nikolaj GeisleandGitHub 4f63324411 Create new AccessPolicy (#16865) 2024-08-06 08:47:01 +02:00
18d2656414 FIX: Deleting language can make the backoffice client unusable (#16863)
* Make missing languages a non blocker for usergroup retrieval

* Add logging

* Update obsolete message

---------

Co-authored-by: Zeegaan <skrivdetud@gmail.com>
2024-08-05 13:30:18 +02:00
Bjarke BergandGitHub 4cd2f4637b Updated nuget packages (#16861) 2024-08-05 11:23:21 +02:00
Callum WhyteandGitHub d26f1e474d Remove favicon from dotnet templates (#16840) 2024-08-05 10:22:42 +01:00
Sven GeusensandGitHub c48490bf13 OpenIddict needs to process the /.well-known/openid-configuration url to be able to return the data. (#16845) 2024-08-05 11:11:56 +02:00
Bartlomiej KomendarczukandGitHub fc5cd6bdd1 Added apostrophe to allowed characters for username. (#16406) 2024-08-02 13:26:16 +01:00
Wojciech TenglerandZeegaan 2736a513a3 Fixing regression bug introduced in #14806 and found during investigation of #16803 - well tested on db with 300k+ nodes (#16837)
Co-authored-by: Wojciech Tengler <wtengler@umbracare.net>
(cherry picked from commit 688790e90a)
2024-08-02 11:58:02 +02:00
688790e90a Fixing regression bug introduced in #14806 and found during investigation of #16803 - well tested on db with 300k+ nodes (#16837)
Co-authored-by: Wojciech Tengler <wtengler@umbracare.net>
2024-08-02 11:21:48 +02:00
Sven GeusensandGitHub bb654360bf Improve migration performance (#16784)
* Improve migration performance

* Fix PR review comments

* Revert tags migration for sql lite as the optimized sql doesn't work properly and sqlLite datasets should not be large anyway
2024-07-31 10:35:28 +02:00
Kenn JacobsenandGitHub 5d866d7bae Graceful handling of unauthorized requests to the Management API (#16836) 2024-07-31 09:45:34 +02:00
mcl-szandGitHub 55f9b09ab7 Combining OpenId and OfflineAccess scope (#16220)
* Combining OpenId and OfflineAccess scope

When the client scope is set to "openid offline_access", the returned scope only has the "offline_access" scope. The "openid" scope and the "id_token" are missing. By combining the OpenId and OfflineAccess as return scope, the refresh_token and id_token are returned.

* Update MemberController.cs

Cleaner way, provided by @kjac, to check if the scope has openid and/or offiline_access set.
2024-07-30 08:38:06 +02:00
Sven GeusensandGitHub f8079608fe Clean up Processed local image links in Management api (#16828)
* Removed type attribute from processed local links

improved code readabilty by using multi return type to private class

* Removed type attribute from processed locallinks in delivery api

* Removed type attribute from expected output regarding locallink parsing

* Added type atttribute removal in deliveryapi for local image link and invalid local links

Test rename for clarity and
2024-07-29 13:32:42 +02:00
Jacob Overgaard ceb86b6c36 Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-07-26 11:06:25 +02:00
Jacob Overgaard 18c7fc5767 update backoffice submodule 2024-07-26 11:06:15 +02:00
Nhu DinhandGitHub 15a74e2511 V14 Fixing the failing smoke tests (#16822)
* Added tests with empty name for Partial View, Stylesheet, Script and Template

* Added tests with non-empty folder for Partial View, Stylesheet, Script

* Added tests to create a partial view in a folder in a folder

* Moved goToSetting to Arrange

* Fixed the failing tests and added the unhappy path tests

* Fixed the failing tests due to UI changes

* Fixed format

* Bumped version of test helper

* Run the tests for Settings in the pipeline

* Fixed the Member failing tests

* Fixed the Document Type Design Tab failing tests

* Fixed the Media Type Design Tab failing tests

* Fixed the Script failing tests

* Bumped version of test helper

* Bumped version of test helper
2024-07-26 10:56:23 +02:00
b14ac811ef Make block editor base classes public (#16774)
* Make block editor base classes public

* Update BlockEditorValues.cs

Change to trigger a new build for #16774

---------

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2024-07-26 08:16:08 +02:00
Jacob Overgaard bec0bd6641 update backoffice submodule 2024-07-25 18:20:17 +02:00
Nhu DinhandGitHub 4f62746053 V14 Added Content tests with various data types (#16809)
* Added Content tests with content picker

* Removed the test for content picker

* Added Content tests with the default content picker

* Added more Content tests with Content Picker data type

* Added the Content tests with Dropdown

* Added Content tests with Image Cropper

* Updated upload file method due to test helper changes

* Added Content tests with Image Cropper

* Added Content tests with Image Cropper data type

* Added Content tests with Media Picker data type

* Updated Media tests due to ui helper changes

* Bumped version of test helper and json builder

* Make all Content tests run in pipeline - should remove it before merging

* Fixed the name of tests

* Updated the tests for Media Picker in Content section

* Added the Content tests with Multiple Media Picker

* Updated the Content test with Content Picker due to the test helper changes

* Bumped version of test helper

* Fixed the failing tests for Content

* Removed Image Cropper test in this branch

* Added more waits

* Added smoke tags

* Make smoke tests run in the pipeline
2024-07-25 17:59:47 +07:00
Elitsa MarinovskaandGitHub b61b71ee9d Returning the correct totalItems amount (#16799) 2024-07-25 10:01:53 +02:00
9a49ab712b Add Health Check for Runtime mode (#16715)
* Add Health Check for Runtime mode

* Update src/Umbraco.Core/EmbeddedResources/Lang/en.xml

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

* Update src/Umbraco.Core/HealthChecks/Checks/LiveEnvironment/RuntimeModeCheck.cs

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

* Update lang file

* Fix typo.

---------

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>
2024-07-24 17:36:17 +01:00
Ronald BarendseandGitHub 2f78d1a8f3 Fix UdiRange.Parse() throwing ArgumentException for valid value (#16788)
* Add test to assert UdiRange can round-trip all selectors

* Fix parsing UdiRange without a selector
2024-07-24 14:28:19 +02:00
Jacob Overgaard 7e444e5604 update backoffice submodule 2024-07-24 10:12:54 +02:00
9e0fb54ea5 Removed Type attribute from parsed local links (#16780)
* Removed type attribute from processed local links

improved code readabilty by using multi return type to private class

* Removed type attribute from processed locallinks in delivery api

* Removed type attribute from expected output regarding locallink parsing

* Cleanup

* Fixed spacing bug

* Added 2 more edge test cases

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-07-23 10:25:54 +02:00
Nikolaj Geisle 94ee50c819 Merge branch 'release/14.1.1' into v14/dev
# Conflicts:
#	src/Umbraco.Web.UI.Client
#	version.json
2024-07-22 08:12:16 +02:00
MoleandGitHub 213a13db81 Merge pull request #16800 from umbraco/v14/merge
V14: Merge
2024-07-19 11:22:01 +02:00
nikolajlauridsen a7bfc6fbf0 Merge branch 'refs/heads/v13/dev' into v14/merge 2024-07-19 10:15:08 +02:00
nikolajlauridsen 635076d657 Revert "fix: revert the inert attribute on Tours since you are expected to be able to work with the background in certain steps"
This reverts commit d72fc5c4e8.
2024-07-19 10:14:54 +02:00
Jacob OvergaardandGitHub cad5502f79 V14: Remove user-defined.css (#16792)
* chore: remove the `user-defined.css` asset from the RCL

You cannot overwrite an asset in an RCL just like that, as the user-defined.css were intended.

* delete actual file
2024-07-18 13:06:27 +01:00
Jacob Overgaard 2f7afa67a3 update backoffice submodule 2024-07-18 12:56:58 +02:00
Daniël KnippersandGitHub ee0fd7dd5f Configure WebP encoder to use Lossy by default (#16769)
This greatly reduces file sizes in many cases compared to the default
Lossless setting that seems to be used for PNGs.
2024-07-16 20:48:32 +01:00
Jacob Overgaard eb4fc97c5d update backoffice submodule (datepicker hotfix) 2024-07-16 09:22:47 +02:00
Jacob Overgaard f6074b4c32 bump version to 14.1.1 2024-07-15 14:31:37 +02:00
Elitsa MarinovskaandGitHub dfe41d7f76 V13: Ensure TransformingIndexValues event is also raised from the DeliveryApiContentIndex (#16756)
* Removing override of OnTransformingIndexValues from DeliveryApiContentIndex

* Making sure that TransformingIndexValues event is raised for DeliveryApiContentIndex without performing the special index value transformations

* Review suggestion
2024-07-15 10:45:57 +02:00
Jacob Overgaard efe2f51d13 update backoffice submodule 2024-07-15 09:58:47 +02:00
Jacob Overgaard be81586b46 set version to 13.5.0-rc 2024-07-11 15:07:36 +02:00
Jacob Overgaard c33b06274d Merge remote-tracking branch 'origin/release/13.4' into v13/dev 2024-07-11 15:06:42 +02:00
Jacob Overgaard d72fc5c4e8 fix: revert the inert attribute on Tours since you are expected to be able to work with the background in certain steps 2024-07-11 12:50:49 +02:00
Jacob OvergaardandSebastiaan Janssen a41555cc0d fix: revert the inert attribute on Tours since you are expected to be able to work with the background in certain steps 2024-07-11 12:38:37 +02:00
Jacob Overgaard c1bf3a7e15 bump version to 13.4.1 2024-07-11 12:02:39 +02:00
Nikolaj Geisle cbb6c5c9bf Merge branch 'release/14.1' into v14/dev
# Conflicts:
#	src/Umbraco.Web.UI.Client
2024-07-11 11:37:40 +02:00
Zeegaan e4b776a56c bump version 2024-07-10 11:53:07 +02:00
Jacob Overgaard fd3f77c477 update backoffice submodule (hotfix ufm) 2024-07-10 11:50:40 +02:00
Jacob Overgaard d05e32b6e9 update backoffice submodule 2024-07-10 11:49:47 +02:00
nikolajlauridsen 40a782e50f Merge remote-tracking branch 'refs/remotes/origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs
#	src/Umbraco.Web.BackOffice/Controllers/EntityController.cs
2024-07-10 09:21:40 +02:00
Elitsa MarinovskaandGitHub 510f805223 Keeping launchBrowser settings as in v13 (#16765) 2024-07-09 09:57:26 +02:00
Jacob OvergaardandGitHub 512114bcd7 V14: Add usernameIsEmail to the user configuration object (#16759)
* fix: move usernameIsEmail from the current user to the user configuration since it is a static variable not only relevant to the current user

* update OpenApi.json

* update OpenApi.json

* update OpenApi.json
2024-07-08 16:15:48 +02:00
Elitsa 5f6be40bdf Revert "Removing override of OnTransformingIndexValues from DeliveryApiContentIndex"
This reverts commit f6deaca452.
2024-07-08 09:30:12 +03:00
Elitsa 8dc02fa081 Revert "Making sure base.OnTransformingIndexValues(e); is called for DeliveryApiContentIndex without the special index value transformations"
This reverts commit a7ff32891e.
2024-07-08 09:30:12 +03:00
Elitsa a7ff32891e Making sure base.OnTransformingIndexValues(e); is called for DeliveryApiContentIndex without the special index value transformations 2024-07-08 09:28:34 +03:00
Elitsa f6deaca452 Removing override of OnTransformingIndexValues from DeliveryApiContentIndex 2024-07-08 09:27:36 +03:00
Jacob Overgaard 26084d8bb5 update backoffice submodule 2024-07-05 13:45:27 +02:00
Jacob Overgaard 58a766293e update backoffice submodule 2024-07-05 13:29:59 +02:00
8681a4e4e8 Move ReservedFieldNames to type configuration endpoints (#16735)
* Move ReservedFieldNames to type configuration endpoints

* Update obsoletion messages

* Update src/Umbraco.Cms.Api.Management/Controllers/MemberType/ConfigurationMemberTypeController.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

---------

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2024-07-05 12:34:25 +03:00
Jacob Overgaard 4283f34fd1 update backoffice submodule 2024-07-05 11:05:18 +02:00
Jacob Overgaard a79f2705da introduce an "other changes" category 2024-07-05 09:10:19 +02:00
Jacob Overgaard ff3b1d678b introduce an "other changes" category 2024-07-05 09:10:06 +02:00
Jacob Overgaard d3fe69afe4 add type/improvement to list of bug fixes 2024-07-05 09:05:42 +02:00
Jacob Overgaard 36d00bd967 add type/improvement to list of bug fixes 2024-07-05 09:05:23 +02:00
Jason Elkin f20528c9fa Merge branch 'v14/dev' into contrib 2024-07-04 12:56:41 +01:00
Nhu DinhandGitHub ffa85ee3b5 V14 Added Content tests with Checkbox list (#16733)
* Added Content tests with checkbox list

* Bumped version of test helper

* Make the Content tests run in the pipeline

* Moved goToBackOffice to beforeEach

* Removed the unnecessary file

* Moved goToBackOffice to beforeEach

* Make smoke test run in the pipeline
2024-07-04 16:57:55 +07:00
Nikolaj Geisle dd67fd16fe Merge branch 'v14/dev' into release/14.1 2024-07-04 09:20:38 +02:00
Ronald BarendseandBjarke Berg 33338add76 Support parsing object to DateTimeOffset and preserve timezone offset (#16732)
(cherry picked from commit 4643b7dba3)
2024-07-04 07:36:58 +02:00
Ronald BarendseandGitHub 4643b7dba3 Support parsing object to DateTimeOffset and preserve timezone offset (#16732) 2024-07-04 07:36:09 +02:00
Lee KelleherandGitHub 0a9df3c105 V14: OpenAPI: Explicitly set ByRelationTypeKey endpoint name (#16729)
This is because of an `operationId` name clash with `ByKeyRelationTypeController.ByKey`,
ref: https://github.com/umbraco/Umbraco-CMS/blob/release-14.0.0/src/Umbraco.Cms.Api.Management/Controllers/RelationType/ByKeyRelationTypeController.cs#L27

This change attempts to ensure a unique `operationId` in the OpenAPI/Swagger JSON.
2024-07-03 12:54:31 +02:00
Lee KelleherandGitHub 32fe23ba41 V14: Expose Umb-Notifications HTTP header (#16728)
Enables client-side dev env to access the custom header.
2024-07-03 11:25:44 +02:00
6069610f83 v14: Implement backoffice signalR hub (#16723)
* Implement backoffice signalR hub

* Fix test

* Refactor to use object instead of string

* Update src/Umbraco.Cms.Api.Management/Routing/BackofficeHub.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-07-02 17:14:43 +02:00
Sven GeusensandGitHub 46acd51759 [V14] Make the backend work with the new localLinks format (#16661)
* Support new localLink format in core link parsing

* Updated devliery api to work with the new locallinks format

Added tests for old and new format handling.

* Fix error regarding type attribute not always being present (for example old format or non local links)
2024-07-02 14:22:19 +02:00
Elitsa MarinovskaandGitHub ef01c27fad Respect user start nodes in GetPagedChildren (used in List View) (#16722) 2024-07-02 09:55:03 +02:00
Jacob OvergaardandGitHub 13b77d35df V14: Build and publish Typedoc docs (#16724)
* rename display names of 'ui docs' to 'storybook'

* add new jobs to build and publish the ui-api docs (typedoc) to the blob storage
2024-07-02 09:40:53 +02:00
Jacob Overgaard ecd6e05c48 Merge remote-tracking branch 'origin/release/14.1' into v14/dev 2024-07-02 09:08:18 +02:00
Jacob Overgaard 9efcc4d8ed Merge branch 'release/14.1' into v14/dev 2024-07-02 09:05:46 +02:00
d2707acd3b V14: Create seperate Create and Update in ContentTypeServiceBase (#16714)
* Create seperate Create and Update in ContentTypeServiceBase

* Fix up notification for update

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2024-07-01 15:29:42 +02:00
Jacob OvergaardandGitHub 2122af7e96 V14: Build and release the type declarations of the Backoffice to npm (#16718)
* separate backoffice install into its own template

* add new job to build the backoffice npm package

* move location of templates

* set version, then build, then pack

* use nbgv to get just the NpmPackageVersion

* calculate version earlier and for both builds

* merge two tasks

* add Build keyword to the display name

* get the node version from the backoffice

* update backoffice submodule

* bump npm version before restoring cache to ensure the cache key doesn't change

* add template to umbraco.sln
2024-07-01 12:23:58 +02:00
Jacob Overgaard 2185be1b03 update backoffice submodule 2024-06-28 15:26:28 +02:00
Zeegaan 2010a241fe Bumb version 2024-06-28 09:30:06 +02:00
Sven GeusensandZeegaan 921598b667 Fixed toolbar not showing for seeded,untouched and then migrated RTE datatypes (#16665)
Moved 14.1 migrations into their own namespace

Co-authored-by: Sven Geusens <sge@umbraco.dk>
(cherry picked from commit d170193a95)
2024-06-28 09:29:55 +02:00
d170193a95 Fixed toolbar not showing for seeded,untouched and then migrated RTE datatypes (#16665)
Moved 14.1 migrations into their own namespace

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-06-28 09:28:55 +02:00
Bjarke Bergandnikolajlauridsen 2fa4149b62 Use the configured backoffice url to initialize openiddict if it is available and just fallback to the one from the first request. (#16660)
Fixes https://github.com/umbraco/Umbraco-CMS/issues/16179
2024-06-27 10:49:19 +02:00
Bjarke BergandGitHub 1ea65c1fb2 Use the configured backoffice url to initialize openiddict if it is available and just fallback to the one from the first request. (#16660)
Fixes https://github.com/umbraco/Umbraco-CMS/issues/16179
2024-06-27 10:47:41 +02:00
Elitsa MarinovskaandGitHub d8b4361936 V13: Update url scheme for Twitter OEmbedProvider (#16650)
* Adds url support for x.com/.*/status/.*

* Updated regex

* Obsoleting Twitter as OEmbedProvider

* Introducing X as its new alternative

* Adding X and removing Twitter from EmbedProvidersCollection

* Typo
2024-06-27 09:23:47 +02:00
Jacob Overgaard ed220035ef backoffice submodule release/14.1 2024-06-26 14:40:57 +02:00
Jacob Overgaard dacd324c9a Merge remote-tracking branch 'refs/remotes/origin/v14/dev' into release/14.1
# Conflicts:
#	src/Umbraco.Web.UI.Client
2024-06-26 14:26:04 +02:00
Jacob Overgaard 195d8b5843 backoffice submodule release/14.1 2024-06-26 13:33:07 +02:00
Jacob Overgaard 1774d4e234 update backoffice submodule 2024-06-26 13:32:28 +02:00
Jacob Overgaard f1b54fe426 fix login build errors 2024-06-26 11:34:52 +02:00
Jacob Overgaard bb058c4f89 update lockfile 2024-06-26 11:22:45 +02:00
Sebastiaan Janssen 3ce2e97f5e Merge branch 'v14/dev' into contrib 2024-06-26 10:45:31 +02:00
Jacob Overgaard 7e8dd02e79 update backoffice submodule 2024-06-26 10:32:45 +02:00
Nikolaj GeisleandGitHub 8ca637d0cb V14: Fix source code editor not showing on fresh install / upgrade (#16655)
* Create richtext with sourcecode by default

* Add rich text migration

* Create migration for migration "ace" value to "sourcecode"
2024-06-26 10:18:05 +02:00
Andreas ZerbstandGitHub 0b868638e0 V14 QA updated dictionary naming in E2E test (#16657)
* Updated naming

* Bumped version of helper
2024-06-25 17:24:47 +02:00
Bjarke Berg 37d22766b1 Merge remote-tracking branch 'refs/remotes/origin/v13/dev' into v14/dev 2024-06-25 14:10:22 +02:00
Bjarke BergandGitHub 0afb4f7283 Make GetHeaderValue support HttpContext unavailable (#16654)
* Make GetHeaderValue tolerant for when the http context is not available. Now it just returns null.

* Add unit tests
2024-06-25 13:47:25 +02:00
Bjarke BergandGitHub a01be0d16f Merge pull request #16653 from umbraco/v14/nuget-update-2024-06-25
Nuget update 2024 06 25
2024-06-25 12:03:20 +02:00
Bjarke Berg 3c34eaf739 Updated nuget packages 2024-06-25 11:20:52 +02:00
Bjarke Berg 3c3d9269ca Merge remote-tracking branch 'refs/remotes/origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Packages.props
2024-06-25 10:34:20 +02:00
Kenn JacobsenandGitHub 76bb2b0847 Add endpoint for calculating effective user start nodes (#16609)
* Add endpoint for calculating effective user start nodes

* Fix OpenAPI
2024-06-25 10:34:16 +02:00
Bjarke BergandGitHub 215fc4378e Merge pull request #16652 from umbraco/v14/feature/merge-2024-06-25
Code changes from V13.4
2024-06-25 10:32:27 +02:00
Bjarke Berg 9ad67e27c5 Fixed test by moving when the publishing notification is fired. 2024-06-25 10:03:19 +02:00
Bjarke Berg bda23c35e3 Merge remote-tracking branch 'refs/remotes/origin/v14/dev' into v14/feature/merge-2024-06-25
# Conflicts:
#	src/Umbraco.Web.UI.Client
2024-06-25 08:47:38 +02:00
Bjarke Berg 4cfa021132 Merged v13/dev into v14 2024-06-25 08:44:36 +02:00
Jacob Overgaard 2a57af8240 update backoffice submodule 2024-06-24 14:52:49 +02:00
Vlael LayugandGitHub 4e746d367e Use parentElement instead of parent when setting focus for modals with tabs (#16257)
* added null checker for umb-tab when it's trying to get the elm.parent

* use parentElement instead of parent
2024-06-22 13:01:04 +01:00
Josh BrownandGitHub cb090353f4 Fix unguarded calls to ServiceDescriptor.ImplementationType for keyed services (#16604)
* Update integration test base class to verify that calls to ServiceDescriptor.ImplementationType are guarded for keyed services

* Fix unguarded calls to ServiceDescriptor.ImplementationType for keyed services
2024-06-22 10:20:12 +01:00
Lars-Erik AabechandGitHub de74ae4c04 Added custom mvc setup method to testserver base class (#16545) 2024-06-21 16:43:30 +01:00
georgebid 53139a1046 Revert "test"
This reverts commit 462903397f.
2024-06-21 16:23:35 +01:00
georgebid 462903397f test 2024-06-21 16:22:40 +01:00
Nikolaj Geisle e3d65967aa Bump version.json 2024-06-20 14:45:13 +02:00
Nikolaj Geisle 73408f1cce Merge branch 'release/13.4' into v13/dev 2024-06-20 14:44:40 +02:00
Andreas ZerbstandNikolaj Geisle 6e3a6917c8 Decreased to 1 retry for this file only (#16623) 2024-06-20 11:30:22 +02:00
Andreas ZerbstandNikolaj Geisle b2b112eb8b V13 QA Updated depedencies (#16606)
* Bumped version of helper and builder

* Removed faker
2024-06-20 11:30:21 +02:00
MoleandNikolaj Geisle 56710d5b5b V13: Eaglery route domains for virtual page controllers (#16635)
* Do domain routing eagerly

* Cleanup

* Fix comment
2024-06-20 11:30:11 +02:00
MoleandGitHub 00ca9e0d2d V13: Eaglery route domains for virtual page controllers (#16635)
* Do domain routing eagerly

* Cleanup

* Fix comment
2024-06-20 11:25:02 +02:00
Bjarke BergandGitHub f717a5d0b7 Simplified how we disable the TransportSecurityRequirement in OpenIddict (#16629) 2024-06-20 10:39:24 +02:00
Bjarke BergandGitHub 75c42f4ea4 Added post configuration of OpenIddictServerOptions that removes the ValidateTransportSecurityRequirement iff globalsettings.usehttps is false. (#16614) 2024-06-19 15:21:57 +02:00
Kenn JacobsenandGitHub 1f52d01493 Do not rely on claims to figure out user access + prepare for claims removal (#16552)
* Do not rely on claims to figure out user access + prepare for claims removal

* Fix typos :)

* Ensure we fire all relevant notifications when creating and updating user groups

* Leave it to the cache refreshers to flush user cache data (start nodes)
2024-06-19 15:19:31 +02:00
Andreas ZerbstandGitHub 65c76fcfab Decreased to 1 retry for this file only (#16623) 2024-06-19 09:49:04 +02:00
a686ba2a0e V13: Update nuget packages (#16616)
* Update nuget packages

* Fix Imagesharp 2

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-06-19 07:50:52 +02:00
Andreas ZerbstandGitHub 01909ca204 V14 QA Users acceptance tests (#15916)
* Added tests for users

* Additional tests

* Found additional test scenarios

* File select

* Fixed tests

* Cleaned up user tests

* Bumped versions of helpers and builder

* Updated naming of method

* More updates

* Added more tests

* Fixed tests

* Fixed skipped tests

* Final touches

* Bumped

* Run userTests

* Fixes made based on review

* Updated so we run our smoketest again
2024-06-18 13:36:00 +02:00
Nikolaj GeisleandGitHub 8edb1885c9 Add missing translations (#16612) 2024-06-18 10:40:59 +02:00
Nikolaj Geisle 344245b1ea bump to final version 2024-06-18 10:05:36 +02:00
Nikolaj Geisle 82b4f506c2 bump version to rc2 2024-06-18 09:08:40 +02:00
dependabot[bot]andJason Elkin 8e98c1e023 Bump braces from 3.0.2 to 3.0.3 in /tests/Umbraco.Tests.AcceptanceTest
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-17 16:57:09 +01:00
Andreas ZerbstandGitHub 5e31fde416 V13 QA Updated depedencies (#16606)
* Bumped version of helper and builder

* Removed faker
2024-06-17 10:49:16 +02:00
Christian YngvessonandGitHub b60665d096 Feature/swedish translations (#16582)
* Added some translations

* Update sv.xml - Minor typo
2024-06-14 16:18:18 +01:00
Kenn JacobsenandGitHub a64dbe12a1 OpenIddict should only handle /umbraco/ requests (#16549) 2024-06-10 13:31:51 +02:00
Jacob Overgaard fe559c20ab set version to 14.1.0-rc 2024-06-10 12:11:24 +02:00
Jacob Overgaard 4d7e722b99 bump version back to 14.1 2024-06-10 12:09:39 +02:00
Jacob Overgaard 777bb4cd57 Merge remote-tracking branch 'refs/remotes/origin/contrib' into v14/dev 2024-06-10 11:28:04 +02:00
Matt DarbyandMatthew-Wise 0bb46b9667 Fix broken logo URL + replace old nonodes background 2024-06-10 10:23:52 +01:00
Jacob Overgaard fc9de30604 update backoffice submodule 2024-06-10 10:29:18 +02:00
46c0b66a70 V14 Adding unhappy path tests for Member and Member Group (#16564)
* Added unhappy path tests for MemberGroup

* Added unhappy path tests for Member

* Bumped version of test helpers

* Added smoke tag to make all the tests running in the pipeline

* Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Members/Members.spec.ts

* Removed smoke tags before merging

---------

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-06-07 12:53:54 +02:00
Zeegaan 24abc117fe update version.json 2024-06-07 12:50:46 +02:00
MoleandGitHub 5ae5fe338a V13: Set request culture for VirtualPageController (#16572)
* Rename FindDomain to FindAndSetDomain

* Ensure VariationContext and PublishedRequest is updated for virtual page controller
2024-06-07 12:49:13 +02:00
Nhu DinhandGitHub d5176d668d V14 Added acceptance test for Document Blueprint (#16563)
* Added tests for Document blueprints

* Fixed the failing tests for Partial View

* Updated tests for Document Blueprints

* Fixed the delete document blueprints tests

* Fixed method name due to the test helpers changes

* Fix arrange steps

* Bumped version of test helpers

* Removed 's' in the file name

* Removed the step to reload tree

* Fixed comments

* Removed test.describe before merging
2024-06-07 11:33:36 +02:00
b04e4d7586 V14: Add missing action parameters mapping (#16557)
* Add missing mapping for ActionParameters

* Remove -ActionParameters as that is now mapped

* Update OpenApi.json

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-06-07 10:22:13 +02:00
42ce64c357 V14 QA Fixed DocumentType and MediaType tests (#16539)
* Changed name of locator click

* fixed tests

* Bumped version of testHelpers

* Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/DocumentType/DocumentTypeDesignTab.spec.ts

Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>

---------

Co-authored-by: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com>
2024-06-07 08:06:06 +02:00
71199b3323 V14 Added acceptance tests for Data Type - p2 (#15873)
* Added tests for Multi URL Picker

* Added tests for Multiple Media Picker

* Added tests for RichTextEditor - not done

* Added tests for Richtext Editor

* Added tests for Content Picker

* Added tests for Tags

* Fixed the tests for Approved Color

* Added tests for Checkbox list

* Fixed tests for DataTypeFolder

* Fixed tests for DatePicker due to api changes

* Added tests for Dropdown

* Fixed tests for ImageCropper due to ui changes

* Added tests for List View

* Added tests for Multiple Media Picker

* Added tests for RichTextEditor

* Added tests for Radiobox

* Added tests for True false

* Added tests for Upload

* Bumped version of test helper

* Bumped version

* Fixed code format

* Removed hard waits

* Updated tests for Template and Partial View - not done

* Added insert section tests

* Used defaultTemplateContent to avoid duplicate code

* Added insert section tests

* Added missing tests for Partial View

* Added missing tests for Scripts

* Added missing tests for Stylesheet

* Added missing tests for Template

* Changed method's name due to test helper changes

* Added skip tests

* Bumped version of test helper

* Reversed waits

* Changed createThreeDotsButton to createButton due to UI changes

* Removed List View - Members tests as the UI changes

* Added more waits

* Removed unnecessary waits

* Added and removed skip tests

* Fixed and added missing tests

* Changed name of test file for Media Picker, Image Media Picker, Multiple Media Picker and Multiple Image Media Picker

* Updated and added missing tests for Data Types

* Bumped version of test helper

* Changed configuration of smokeTest to make all DataType tests run in the pipeline. It should remove before merging

* Added skip for all tests of Numeric as there is no configuration now

* Removed test.describle

* Change syntax of smoke tag

* Removed duplicate code

* Added the tests that avoid the minimum value is greater than the maximum value

* Added the tests that avoid the min height value is greater than the max height value

* Added test for adding available block to RTE

* Remove skip and add more tests

* Added tests for create an empty data type

* Fixed the create data type tests

* Added tests for changing setting a data type

* Updated the test for creating a new data type

* Added skip tests due to UI changes

* Skipped unhappy tests as the front-end is not ready

* Changed the way to create a new stylesheet

* Updated method names due to test helpers changes

* Bumped version of test helper

* Updated expected result

* Updated method name due to UI changes

* Bumped version of test helper

* Bumped version of test helper

* Fixed add start node tests

* Added skip tests

* Updated the expected result

* Fixed add layout tests

* Added more waits

* Add skip tests

* Removed , in the objects and renamed some tests

* Added tests for updating the option

* Fixed naming and removed unnecessary commas

* Update tests/Umbraco.Tests.AcceptanceTest/package.json

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-06-06 14:36:49 +02:00
Zeegaan 5f8eac0464 bump version.json 2024-06-06 10:22:18 +02:00
Zeegaan fc951ee100 Merge branch 'release/13.4' into v13/dev 2024-06-06 10:21:53 +02:00
Nikolaj GeisleandGitHub ebf77024ce V14: Add clearer error for invalid property type (#16530)
* Add clearer error for invalid property type

* Update test
2024-06-06 08:54:47 +02:00
Nikolaj Geisle 78bf04ef67 bump version.json 2024-06-04 14:56:22 +02:00
Andreas ZerbstandGitHub ae7db56f77 Decreased retry count (#16554) 2024-06-04 14:25:57 +02:00
Kenn JacobsenandGitHub 3dace4fc9d RTE and media picker should route medias the same way in the Delivery API (#16550)
* RTE and media picker should route medias the same way in the Delivery API

* Fix failing unit test

* Fixed failing tests
2024-06-04 10:32:37 +02:00
Nikolaj GeisleandGitHub 32912b0c35 Update to query to SqlRaw (#16542) 2024-06-03 13:34:43 +02:00
Nikolaj Geisle f15be3ed65 Merge branch 'v13/dev' into release/13.4 2024-06-03 12:30:44 +02:00
Sebastiaan Janssen 46e99910e7 Merge branch 'v13/contrib' into v13/dev 2024-06-03 12:26:54 +02:00
Nikolaj Geisle c3e7dad236 bumb to rc version 2024-06-03 12:09:37 +02:00
MoleandGitHub 100f2c3bcd Add check to ensure that RenderControllers and SurfaceControllers are always routed through the UmbracoRouteValueTransforms (#16540) 2024-06-03 12:03:40 +02:00
0aaac78cfa A bunch of minor performance optimizations (#16335)
* Do not execute query if no macros found

* Request cache the permission lookup

* Unbreak change by adding obsolete ctor

* Clean up

* Wrap indexing for delivery API in a scope

* Do not ask options every time for the timeout, instead listen for updates

* Lookup content types once instead of one by one

* Use TryGetValue instead

* Do a distinct on user ids before building index, to avoid issue with more than 2100 parameters

* Don't map ContentDto (it's unused)

* Introduce request bound block editor element cache

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-06-03 11:23:25 +02:00
Don BuddhiandMatthew-Wise e4ac7c9752 Added git submodule update --init command to the documentation 2024-06-03 09:44:58 +01:00
Nhu DinhandGitHub 1f8b7f3a35 V14 QA Added acceptance tests for Members and Member Group (#16074)
* Updated tests for Member Group - not done

* Added api tests for Member

* Added api tests for Member Group

* Added ui tests for Members

* Added ui tests for Member Group

* Added tests for Member Type

* Added code to block unnecessary resources

* Updated createFolder

* Bumped version of test helper

* Changed clickCreateButton to clickCreateLink due to UI changes

* Bumped version of json builder

* Reversed previous code

* Removed waitForTimeout

* Removed waitForTimeout after login

* Bumped version of json builder

* Changed delete folder method

* Bumped version of test helper

* Update create link

* Removed waitForTimeout

* Added skip tests since currently only can view relations

* Added more explicit wait

* Removed hard wait

* Removed invalid verification step due to paging

* Moved get set telemetry level from test to before/after test

* Bumped version of test helper

* Added smoke tags - not done

* Added smoke tags

* Changed locator due to Ui changes

* Changed update to rename method due to test helpers change

* Bumped version of test helpers

* Removed tests for MemberType

* Fixed merge conflict

* Added code to run smoke E2E tests after each build instead of full E2E tests

* Updated command to run smoke test

* Added more smoke tag

* Added smoke tags

* Updated the syntax of smoke tag

* Added smoke tag to make all tests run in the pipeline

* Bumped version of test helper

* Fixed comment

* Removed unnecessary lines

* Removed test.describle
2024-06-03 10:23:50 +02:00
e0c64e4d6a V14: Add required dependency to management api (#16532)
* Add registration to management api

* Check for registration

* Update src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderApiExtensions.cs

Co-authored-by: Nuklon <Nuklon@users.noreply.github.com>

---------

Co-authored-by: Nuklon <Nuklon@users.noreply.github.com>
2024-06-03 10:01:17 +02:00
Shannon DeminickandMatthew-Wise f9a6712403 Fixes a bug where the ValueSetValidator is null which will cause a NullReferenceException.
Fixes a bug where the ValueSetValidator is null which will cause a NullReferenceException.
2024-06-01 13:03:47 +01:00
Johan RunstenandMatthew-Wise 5795cf119a Typo when getting query parm 2024-06-01 12:24:09 +01:00
Nikolaj GeisleandGitHub 4478d22390 Add retries to flaky tests (#16529) 2024-05-31 13:02:43 +02:00
Bjarke BergandGitHub 7c1f541bbb Handle MasterTemplateNotFound as bad request instead of unepxected (#16445) 2024-05-31 12:39:48 +02:00
Bjarke BergandGitHub e6568c69dc Added a notifiction handler that checks if we wanna have domain publish warnings. If so it adds as Umb-Notifications and logs it. (#16507) 2024-05-31 12:26:37 +02:00
Elitsa MarinovskaandGitHub 464eaa0409 Adding a base class of oembedresponse, so we can handle string values for dimentions (#16514) 2024-05-31 11:39:09 +02:00
Nikolaj GeisleandGitHub 71e1b74337 v14: Validate file name to return correct error (#16419)
* Validate name

* Add missing case for HandleRename
2024-05-31 11:25:27 +02:00
Nikolaj GeisleandGitHub 133f985293 Include description in DocumentTypeItemResponseModel (#16503) 2024-05-31 09:08:33 +02:00
Ronald BarendseandGitHub bb3ac68241 Include umbraco-package.json manifests in telemetry data (#16430)
* Include umbraco-package.json manifests in package telemetry and add ID

* Add package ID to ManifestResponseModel

* Use async service method and HTTP client factory

* Avoid breaking changes
2024-05-31 09:02:36 +02:00
Nhu DinhandGitHub d78a063f07 V14 QA Added Content acceptance tests (#16289)
* Added api tests for Document - not done

* Added ui tests for Content - not done

* Added api test for Documents

* Added ui tests for Content

* Updated method name due to ui changes

* Bumped version of test helpers and json builders

* Added smoke tag to run all Content tests in the pipeline

* Bumped version of json builder

* Revert files

* Updated the syntax of smoke tag

* Added tests for content with different property editors

* Added tests for Info Tab

* Added more steps for before tests

* Added more tests for Redirect Management

* Added more tests for Content

* Bumped version of test helper

* Changed test name

* Updated the method name due to the test helper changes

* Fixed typo

* Added more waits and skip tests

* Updated the test name

* Changed click action for save button

* Bumped version of test helper

* Bumped version of test helper

* Updated choose document type step after clicking create button due to UI changes

* Added skip tests

* Changed clean method

* Fixed arrange step

* Fixed the arrange steps

* Removed test.describe and unnecessary variables

* Added smoke tests
2024-05-31 08:45:07 +02:00
Bjarke Berg d10596896e Added PackageValidation 2024-05-30 13:49:48 +02:00
Jacob Overgaard 4041e290bf update backoffice submodule 2024-05-30 09:59:08 +02:00
Sebastiaan Janssen 41dddee620 Merge branch 'v14/dev' into contrib
# Conflicts:
#	src/Umbraco.Web.UI.Login/package-lock.json
#	src/Umbraco.Web.UI.Login/package.json
2024-05-30 08:41:49 +02:00
Zeegaan 48c8ffcbc5 Merge branch 'release/14.0' into v14/dev
# Conflicts:
#	src/Umbraco.Web.UI.Client
2024-05-30 08:14:30 +02:00
Jacob Overgaard 0c38eea6f7 update backoffice submodule 2024-05-29 10:20:47 +02:00
Jacob Overgaard 48c4d75886 update backoffice submodule 2024-05-29 10:18:47 +02:00
Jacob Overgaard 8685c7d64a fix: edit blocks in areas 2024-05-29 09:56:34 +02:00
Bjarke Berg 926a077374 Merge remote-tracking branch 'origin/release/14.0' into release/14.0 2024-05-29 07:47:37 +02:00
Bjarke Berg e39c600415 Bump version 2024-05-29 07:47:30 +02:00
Bjarke BergandGitHub 23461b3698 Handle the case where the editorvalue is from the db and just is a path. (#16429) 2024-05-28 15:27:23 +02:00
Jacob Overgaard 2a9808c776 update backoffice submodule 2024-05-28 15:01:32 +02:00
Jacob Overgaard 4046d13c29 update backoffice submodule 2024-05-28 15:00:45 +02:00
Jacob Overgaard d38421286f update backoffice submodule 2024-05-28 09:48:05 +02:00
Jacob Overgaard 17e1b823de update backoffice submodule 2024-05-28 09:45:23 +02:00
Jacob Overgaard 799e0dcca8 update backoffice submodule 2024-05-28 09:43:11 +02:00
Andreas ZerbstandGitHub 0ad177a522 V14 QA Fix E2E tests (#16427)
* Moved group

* Fixed button name

* Bumped version of testHelpers
2024-05-28 09:16:03 +02:00
Nikolaj Geisle 5a966ec3e7 Merge branch 'v14/dev' into release/14.0 2024-05-28 08:55:05 +02:00
Jacob Overgaard 64dbfd0bc9 update backoffice submodule 2024-05-28 00:10:58 +02:00
Nikolaj Geisle 7bfe3eda56 bumb version.json 2024-05-27 22:11:46 +02:00
Nikolaj Geisle 7eaaa8e2e6 Merge branch 'v14/dev' into release/14.0 2024-05-27 22:11:24 +02:00
Kenn JacobsenandGitHub 5296013d89 Enrich the datatype references output with content type data (#16417) 2024-05-27 19:38:57 +02:00
Kenn JacobsenandGitHub ce8e258d6d Make sure listviews are initialized correctly in a new DB (#16418) 2024-05-27 18:35:43 +02:00
Jacob Overgaard 57cca63d81 update backoffice submodule 2024-05-27 17:38:14 +02:00
Andreas ZerbstandGitHub b6be3c50f1 V14 QA Decreased retry amount (#16423)
* Decreased retry once again

* Changed fallback value to 1
2024-05-27 16:17:03 +02:00
Kenn JacobsenandGitHub 1f7b7043b3 The "item" endpoints should be accessible for all users (#16422) 2024-05-27 15:25:17 +02:00
806fce8ed9 Add editor ui alias to package xml (#16420)
* Add editor ui alias to package xml

* Update src/Umbraco.Infrastructure/Packaging/PackageDataInstallation.cs

* Add AllowAtRoot and AllowInAreas

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-05-27 14:10:19 +02:00
Jacob Overgaard f4a77ce217 update backoffice submodule 2024-05-27 13:35:58 +02:00
Kenn JacobsenandGitHub e7780265fa Use runtime mode to determine cache TTL for manifest files (#16393)
* Use runtime mode to determine cache TTL for manifest files

* Remove unused manifest settings
2024-05-27 10:33:49 +02:00
Jacob Overgaard 53ca2910fa update backoffice submodule 2024-05-27 09:49:31 +02:00
e5e87c96db [v14] Fix multiple upgrader issues (#16339)
* Made previewhubupdater work with full cache refreshes

* Make signout_Async available on coreSignInManager

* Allow Migrations to signout the logged in user

* Adding a guid to a user requires resignin

* Added a token revoke mechanism during migrations

* Revert "Make signout_Async available on coreSignInManager"

This reverts commit b103cf119a.

* Revert add allRefreshed on preview hub

Clarified with a comment

* Updated failing test setups

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-05-27 07:17:45 +02:00
Jacob OvergaardandGitHub c083b3bc8a fix: correct the validation localization constants to match the client (#16401) 2024-05-27 06:44:55 +02:00
Kenn JacobsenandGitHub d927146855 Fix issues with initial creation of external users (#16363)
* Use constant instead of "sub"

* Re-assign the newly created user key as well as its ID
2024-05-24 14:55:56 +02:00
Sebastiaan JanssenandGitHub 729016e429 Update README.md 2024-05-24 14:29:06 +02:00
Sebastiaan JanssenandGitHub 5545051cb1 Task/update readme (#16403)
* Update readme
2024-05-24 14:18:03 +02:00
Kenn JacobsenandGitHub 07711aac28 Expose and manage system media types (#16343)
* Expose and manage system media types

* Removed license :D
2024-05-24 08:59:47 +02:00
MoleandGitHub 8383532fd5 Fix use cache issue when deleting (#16284) 2024-05-23 15:35:08 +02:00
Jacob OvergaardandGitHub 7582b9bcea V14: Login updates (#16359)
* switch logos around to support new login image

* add new login image

* update npm dependencies

* chore: compress the image further
2024-05-23 15:14:23 +02:00
Kenn JacobsenandGitHub 2b79d24afa Add endpoint for retrieving "folder" media types. (#16345)
* Add endpoint for retrieving "folder" media types.

* The system Folder media type should always be considered a "folder"
2024-05-23 14:43:00 +02:00
Jacob Overgaard 8f4f23938d Merge remote-tracking branch 'origin/v14/dev' into contrib 2024-05-23 14:32:53 +02:00
Jacob Overgaard 228aab1154 remove temp database 2024-05-23 14:13:02 +02:00
Bjarke Berg 528583430f Merge remote-tracking branch 'refs/remotes/origin/release/13.3' into v13/dev
# Conflicts:
#	src/Umbraco.Web.Website/Routing/EagerMatcherPolicy.cs
#	version.json
2024-05-23 13:31:34 +02:00
Andreas ZerbstandGitHub cff1dd5219 V14 QA Added document type acceptance test (#16211)
* Added tests

* Added the rest of the tests

* Few changes to failing test

* Added tests for folders

* More cleanup

* Updates

* Fixed tests

* More documentType fixes

* Fixed test

* Cleaned up

* Cleaned

* Bumped version of testHelpers

* Added @smoke in the define to test all our tests

* Updated version

* Added smoke tags

* Remove reload

* Added clean

* Updates from comments, not done

* Added smoke tag

* Uncommented test.describe

* Bumped version

* Added semicolon

* Split documentType tests into more files

* Bumped version

* Removed test describe and fixed indentation
2024-05-23 12:00:01 +02:00
Andreas ZerbstandGitHub 876e91d41d V14 QA media type tests (#16282)
* Added mediaType and mediaTypeFolder

* Added more tests

* More tests!

* Even more tests

* More fixes

* Clean up

* Added smoke tags

* Bumped version

* Added wait after clicking login

* Added remaining tests

* Bumped version of testHelpers

* Skipped failing test

* Fixed to comments

* Fixed comments and added missing test

* Bumped version

* Split mediaType tests into different files

* Removed test.describe and fixed indentation
2024-05-23 11:59:43 +02:00
Jacob OvergaardandGitHub 380c5bbbe2 feat: add autofocus to the email/username field (#16350)
this field will be automatically focused when the user sees the login screen, and it should be valid according to a11y best practices as this is the first and main element on the page

fixes #16276
2024-05-23 11:17:57 +02:00
Bjarke BergandGitHub aabb5b7c48 Updated nuget packages (#16349) 2024-05-23 10:41:28 +02:00
Bjarke BergandGitHub 696a71166c Ensure ufprt-token requests are handle in the UmbracoRouteValueTransformer (#16347) 2024-05-23 10:14:37 +02:00
Jacob Overgaard 0c5d7b2627 Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-23 09:13:33 +02:00
Jacob Overgaard fcf82240d0 update backoffice submodule 2024-05-23 09:13:15 +02:00
Sebastiaan Janssen 9dd5e706b1 Merge branch 'v14/dev' into contrib 2024-05-22 15:29:46 +02:00
Jacob Overgaard 3f20abf767 Merge branch 'v14/dev' into release/14.0 2024-05-22 14:32:10 +02:00
Jacob Overgaard b1f012f85f update backoffice submodule 2024-05-22 14:31:55 +02:00
Bjarke BergandGitHub dd537f8ae8 Update path (#16346) 2024-05-22 14:24:19 +02:00
Jacob Overgaard b940578d9d bump version to 14.0.0-rc4 2024-05-22 13:54:58 +02:00
Jacob Overgaard 9186d1de5e Merge branch 'v14/dev' into release/14.0 2024-05-22 13:54:28 +02:00
Jacob Overgaard beba9d92e8 update backoffice submodule 2024-05-22 13:53:37 +02:00
MoleandBjarke Berg 5f082df3ab Ensure there is always at least 1 valid candidate (#16344)
(cherry picked from commit eb6bb99eaf)
2024-05-22 13:30:54 +02:00
MoleandGitHub eb6bb99eaf Ensure there is always at least 1 valid candidate (#16344) 2024-05-22 13:29:17 +02:00
Bjarke Berg fd2138c1fd Bump version 2024-05-22 12:21:56 +02:00
Nikolaj GeisleandGitHub 0f3160f727 Move publishing notification after validation (#16331) 2024-05-22 12:17:04 +02:00
Kenn JacobsenandGitHub 9ab8b816b2 The preview hub throws an exception during DB upgrade (#16338) 2024-05-22 12:11:01 +02:00
+3 a4a9a274bb V14: Merge 13 to 14 (#16340)
* Updates JSON schema for Umbraco 10 with latest references for Forms and Deploy (#15918)

* Ported over #15928 changes for 13.3 RC (#16023)

* Ported over #15928 changes for 13.3 RC

* Use GetOrAdd()

* Lock dictionary initialization

---------

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

* Make the API content response builder extendable (#16056)

* Make the API content response builder extendable

* DeliveryApiJsonTypeResolver needs to be extendable too

* bump rc to regular

* Bump to next minor

* Add blocks in RTE telemetry (#16104)

* Add blocks telemetry

* Use constants and update tests

* V13: Add property type information to telemetry (#16109)

* Add property type counts to telemetry

* Use constants and fix tests

* Update description

* V10: Fix for fallback file upload (#14892) (#15868)

* Fix for fallback file upload (#14892)

* Added check for file type

* Removed unneeded null checks and fixed tabs

* Cleaning

* Cleanups, cleanups, and removal of unneeded null checks

* Reverted removal of relationshipservice

* Revert null check removals (too risky)

---------

Co-authored-by: Ambert van Unen <AvanUnen@ilionx.com>
Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>

(cherry picked from commit 0b5d1f8aa6)

* Fix up formatting

---------

Co-authored-by: Ambert van Unen <ambertvu@gmail.com>

* Implementors using Umbraco.Tests.Integration won't have to override GetLocalizedTextService

(cherry picked from commit b0016687eb)
(cherry picked from commit 2bb56f1b81)

* Fix logic for retrieving lastKnownElement

(cherry picked from commit cae106bfe8)

* bump version

* Bump version

* Bump version

* Since v13 properties can sometimes be of type IRichTextEditorIntermediateValue - this was unexpected in the XPath navigator code (#16121)

* Webhook log improvements (#16200)

* fix: include all headers in webhook log

* feat: return webhook log status from server

* feat: make webhook logs deep linkable

* feat: add webhook log pagination

* feat: improve webhook request/response body preview

* V13: Optimize custom MVC routing (#16218)

* Introduce EagerMatcherPolicy to conditionally bypass content routing

* Ensure that the candidate we disable dynamic routing for is valid

* Skip Umbraco endpoints

* Simplify logic a bit

* Move install logic to matcher

* Ensure that dynamic routing is still skipped when in upgrade state

* Fixup comments

* Reduce nesting a bit

* Don't show maintenance page when statically routed controllers are hít

* Remove excess check, since installer requests are statically routed

* V13: Optimize custom MVC routing (#16218)

* Introduce EagerMatcherPolicy to conditionally bypass content routing

* Ensure that the candidate we disable dynamic routing for is valid

* Skip Umbraco endpoints

* Simplify logic a bit

* Move install logic to matcher

* Ensure that dynamic routing is still skipped when in upgrade state

* Fixup comments

* Reduce nesting a bit

* Don't show maintenance page when statically routed controllers are hít

* Remove excess check, since installer requests are statically routed

(cherry picked from commit ba9ddd11da)

* Property source level variation should only be applied when configured (#16270)

* Property source level variation should only be applied when configured (#16270)

(cherry picked from commit ab32bac5d9)

* Merge pull request from GHSA-j74q-mv2c-rxmp

* Merge pull request from GHSA-j74q-mv2c-rxmp

* Merge pull request from GHSA-j74q-mv2c-rxmp

* Fix up after merge

* Remove obselete test

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
Co-authored-by: Ambert van Unen <ambertvu@gmail.com>
Co-authored-by: Lars-Erik <lars-erik@aabech.no>
Co-authored-by: Joshua Daniel Pratt Nielsen <jdpnielsen@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
Co-authored-by: Rasmus John Pedersen <mail@rjp.dk>
2024-05-22 12:05:41 +02:00
Nikolaj GeisleandGitHub 8ddb911a52 V14; Refactor permissions for Document/Media/Member (#16310)
* Refactor permissions

* Fix user startnode caching

* Relax permissions on user item endpoint

* Refactor media types to align with newly refactored content permissions

* Remove permissions from member type item endpoint
2024-05-22 10:56:26 +02:00
Andreas ZerbstandGitHub b56d14322a V14 QA remove test describe (#16330)
* Removed test.describe and fixed indentation

* Removed test.describe, fixed indentation and moved test file to settings
2024-05-22 15:28:43 +07:00
Jacob Overgaard 03be7b8f2c update backoffice submodule 2024-05-22 09:11:06 +02:00
Jacob Overgaard 365e3b39ca update backoffice submodule 2024-05-21 11:14:18 +02:00
393566a3fb V14: Adds preview.js (#16305)
* Adds `preview.js`

to replace the legacy `umbraco.websitepreview.min.js` script.

Updates the content's `Id` with `Key`.

* allow any protected route to render the backoffice

* optimise component so it doesn't need to observe its attributes and use the popover API to show it on top of the content

* handle case where the culture could be set to "invariant" - we just want to set the "lang" attribute to the default ui language

* convert 'end preview' into an api request and reset the style of the button

* minimize function

* move static text into constants

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2024-05-21 11:13:26 +02:00
5a75488d0e Clean up null values in datatype configs (#16296)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-05-21 09:50:02 +02:00
Bjarke Berg 04ed514a21 Merge remote-tracking branch 'refs/remotes/origin/v12/dev' into v13/dev 2024-05-21 08:57:43 +02:00
Bjarke Berg 4f382abc66 Merge remote-tracking branch 'refs/remotes/origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
2024-05-21 08:49:33 +02:00
Bjarke Berg 60f656006d Merge remote-tracking branch 'refs/remotes/origin/release/12.3' into v12/dev
# Conflicts:
#	version.json
2024-05-21 08:48:54 +02:00
Bjarke Berg 5c777f3182 Merge remote-tracking branch 'refs/remotes/origin/v10/dev' into v11/dev
# Conflicts:
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
2024-05-21 08:46:37 +02:00
Bjarke Berg 0ee0db8071 Merge remote-tracking branch 'refs/remotes/origin/release/10.8' into v10/dev
# Conflicts:
#	version.json
2024-05-21 08:44:27 +02:00
Nhu DinhandGitHub bfbb9756f3 Updated smoke tag (#16326) 2024-05-21 08:36:02 +02:00
11e5257b56 V14: Untangle the preview functionality from the auth cookie (#16308)
* AB40660 - untangle the preview cookie from the auth cookie

* Clean up

* Allow anonymous to end preview sessions

* Some refinements

* update OpenApi.json

* Fix enter preview test

* correct tests to match new expectations of the preview cookie

* sync preview tests with correct expectations of access level

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2024-05-17 16:06:26 +02:00
Bjarke Berg 9bacd13ce2 Merge remote-tracking branch 'refs/remotes/origin/release/13.3' into v13/dev
# Conflicts:
#	version.json
2024-05-17 14:39:44 +02:00
80794f3efd [V14] import/export media/document type endpoints (#16100)
* Working import/export media/document types

* WIP

* Refactoring of import doctype/media types

- added analyze endpoint to extract relevant data without fully processing the file
- split up import endpoints into POST & PUT
- removed availableAtAction as the new endpoint allows clients to call the POST/PUT endpoints with confidence
- Added a new service that is responsible for turning temp files into Import compatible XML and being able to extracty partial information from it

* Wrap persistance access in scopes

* Typos, formatting, clean-up

* PR feedback

* update openapi spec

* Changed deleteFile flag to _temporaryFileService.EnlistDeleteIfScopeCompletes

* Itty bitty typo

* Moved magic cleanup into its own method so orchestration can decide when.

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
2024-05-17 14:35:18 +02:00
MoleandGitHub 13f2d52576 V14: Fix package creation (#16309)
* Fix documents and document types

* Fix remaining parts
2024-05-17 12:30:26 +02:00
56e0e1cc2b merge user/current/logins and user/current/login-providers (#16307)
also deleted unused requestmodel

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-05-17 09:23:56 +02:00
Bjarke BergandGitHub c17d4e1a60 Merge pull request from GHSA-j74q-mv2c-rxmp 2024-05-17 08:37:51 +02:00
Bjarke BergandGitHub 5f24de3085 Merge pull request from GHSA-j74q-mv2c-rxmp 2024-05-17 08:37:51 +02:00
Bjarke BergandGitHub d8df405db4 Merge pull request from GHSA-j74q-mv2c-rxmp 2024-05-17 08:37:51 +02:00
295f6f8720 V14: Backend changes to facilitate Preview mode in Bellissimma (#16279)
* Sends GUID instead of the numeric ID for SignalR Preview Hub

* Add possibility to set cookies as HttpOnly

* Set UMB_PREVIEW cookie as HttpOnly

* fixup! Add possibility to set cookies as HttpOnly

* Refactor ContentFinderByIdPath to more readable

* Create ContentFinderByKeyPath reusing logic from ContentFinderByIdPath

* Add a comment to DisableFindContentByIdPath setting

* Append new content finder

* Change ordering of content finders registrations

* Refactor with a base class

* Update/refactor and add tests regarding ContentFindersByIdentifier

* Fix comment

* Avoiding breaking change

* Make usages use non-obsolete implementation

* Fixed todo in config instead of use the one old legacy name even more. Also obsoleted the ContentFinderByIdPath

* add `preview` as an allowed backoffice client route

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2024-05-16 15:53:42 +02:00
Kenn JacobsenandGitHub 93db1912a6 Fix the editor UI alias migration and re-run it (#16292) 2024-05-16 15:20:29 +02:00
Nikolaj GeisleandGitHub d20892e329 Refactor UserGroupService methods to use attempt (#16302) 2024-05-16 15:04:54 +02:00
Andreas ZerbstandGitHub a8f6e8f8dd Bumped version of testHelpers (#16304) 2024-05-16 13:29:55 +02:00
Jacob Overgaard 9f83ff3ab5 update backoffice submodule 2024-05-16 10:10:26 +02:00
Jacob Overgaard 7287e7d740 update backoffice submodule 2024-05-16 08:57:13 +02:00
Nikolaj GeisleandGitHub 520e5e4206 V14: Refactor user and usergroups with referency by id model (#16287)
* Refactor user group endpoints to use reference by id models instead

* Update user endpoints to use reference by id models

* Update usergroup ids to ReferenceByIdModel
2024-05-15 14:55:54 +02:00
MoleandGitHub bdd231caee V14: Fix null ref exception in current user permission endpoint (#16286)
* Fix null reference exception

* Align behaviour with document and media version
2024-05-15 14:23:04 +02:00
MoleandGitHub e46a8d2d31 Use SearchRedirectUrls (#16285) 2024-05-15 09:54:08 +02:00
Jacob Overgaard 3c4da9df53 update backoffice submodule 2024-05-15 09:53:32 +02:00
742307dc32 [v14] backoffice user login providers endpoint (#16141)
* Added endpoint and backing service for backoffice login providers and the status per user.

* Improve link login redirect forming and error handling

* Add responseModel and mapping instead of returning core model

* Moved unlink endpoint logic into a service

* Refactored ExternalLinkLoginCallback logic into BackofficeExternalLoginService method

* typo and minor code style improvements

* async method name alignment

* Add BackOfficeExternalLoginService tests

* Remove helper method that makes less sense that thought.

* Minor formatting, clean-up and conventions

* Replaced cookie authentication in link-login with a short lived secret

Applied PR feedback

* Update openapi

* Changed link login to a form endpoint

* fix broken comment link

* Do not store claimsprinciple in secret + comments

* update redirect paths

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2024-05-14 15:55:32 +02:00
MoleandGitHub 7f654a1c63 Add JsonDocumentOptions skipping comments (#16281) 2024-05-14 14:12:02 +02:00
cbf9781ae8 DX: Add BlockValue constructors to force correct property editor alias and layout item type (#16266)
* Improve getting and initializing new block value layouts

* Remove unnecessary generic type constraints

* Add and use new block value/layout item constructors in tests

* Removed GetLayouts that did not make sense

* Added constructor to BlockItemData to simplify explicit usages

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-05-14 13:34:54 +02:00
Jacob Overgaard 6a9f936cce update backoffice submodule 2024-05-14 11:04:58 +02:00
d18bce0ea7 V14: Resize url endpoint (#16275)
* Add image resizing endpoint

* Rename factory

* Actually use height and width

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2024-05-14 10:42:33 +02:00
Nhu DinhandGitHub eda4a6cc55 V14 QA Added missing acceptance tests for Dictionary (#16241)
* Changed name from Dictionary to Translation

* Removed old Dictionary

* Adding missing tests for Dictionary

* Added smoke tag to test

* Bumped version of test helper

* Add comments

* Fixed comments

* Removed smoke tag
2024-05-14 13:45:47 +07:00
Kenn JacobsenandBjarke Berg 94cef504a3 Property source level variation should only be applied when configured (#16270)
(cherry picked from commit ab32bac5d9)
2024-05-13 15:45:45 +02:00
Kenn JacobsenandGitHub ab32bac5d9 Property source level variation should only be applied when configured (#16270) 2024-05-13 15:44:07 +02:00
Jacob OvergaardandGitHub 22c0c250e0 V14: The login page does not respect certain error codes (#16244)
* handle 403 and unknown error codes from the server

* resolve 2fa errors in repository

error handling was never being activated because this specific endpoint did not return api errors as it works exactly like the "authorize" endpoint, which is being called directly

* chore: add obsolete message to unused `SetupViewPath`

* chore: remove unused events

* add missing labels

* fix: send only 'error' back if the response is not ok

* chore: remove duplicate error handling for 500 errors

* fix: add hack to allow to submit the form on enter click
2024-05-13 12:39:38 +01:00
leekelleher 2cc5f496f3 update backoffice submodule 2024-05-13 12:31:33 +01:00
39e9408a09 Allow FileUpload and Imagecropper to upload files in the same way (#16214)
* Allow FileUpload and Imagecropper to upload files in the same way

* Fixed issue with backward compatibility

* Exclude from converter

* Bugfix if editorvalue is not a string

* Fix file upload value editor + clean up + throw explicitly if editor value is invalid

* Revert changes to FileUploadPropertyEditor - the stored property data format remains the file path

* Actually revert all changes to FileUploadPropertyEditor

* Also revert JsonValueConverter

* Cleanup remove unused equality methods

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-05-13 12:29:31 +01:00
Kenn JacobsenandGitHub 079097427b Return all templates from GetAllAsync if no keys are passed (#16254) 2024-05-13 11:23:20 +02:00
Bjarke BergandGitHub 962bedac29 Ensure we do not expose any cultures we do not accept in languages. Futhermore, I moved it to a service to people can replace the logic (#16265) 2024-05-13 11:09:46 +02:00
Kenn JacobsenandGitHub 46864daf7a Use a fixed access token timeout for developer clients (#16255)
* Use a fixed access token timeout for developer clients

* Re-introduce auth persistence in Swagger UI
2024-05-13 09:41:13 +02:00
87c7347900 V14: Reintroduce umbraco api controller as obsolete (#16263)
* Revert "v14: Remove mentions of UmbracoApiController (#15863)"

This reverts commit 30e2dea57a.

* Obsolete UmbracoApiController

* Added a few more obsoletion messages

* Removed some of the reintroduced stuff again

* Add obsoletion to FrontEndRoutes controller

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-05-13 08:28:42 +02:00
Bjarke Berg b4b512dd53 Return 403 when missing permissions instead of 401 2024-05-10 14:36:25 +02:00
Bjarke Berg e9074ea97a Return 403 when missing permissions instead of 401 2024-05-10 13:28:15 +02:00
MoleandBjarke Berg 18765465ae V13: Optimize custom MVC routing (#16218)
* Introduce EagerMatcherPolicy to conditionally bypass content routing

* Ensure that the candidate we disable dynamic routing for is valid

* Skip Umbraco endpoints

* Simplify logic a bit

* Move install logic to matcher

* Ensure that dynamic routing is still skipped when in upgrade state

* Fixup comments

* Reduce nesting a bit

* Don't show maintenance page when statically routed controllers are hít

* Remove excess check, since installer requests are statically routed

(cherry picked from commit ba9ddd11da)
2024-05-10 11:37:11 +02:00
MoleandGitHub ba9ddd11da V13: Optimize custom MVC routing (#16218)
* Introduce EagerMatcherPolicy to conditionally bypass content routing

* Ensure that the candidate we disable dynamic routing for is valid

* Skip Umbraco endpoints

* Simplify logic a bit

* Move install logic to matcher

* Ensure that dynamic routing is still skipped when in upgrade state

* Fixup comments

* Reduce nesting a bit

* Don't show maintenance page when statically routed controllers are hít

* Remove excess check, since installer requests are statically routed
2024-05-10 11:36:12 +02:00
Bjarke BergandGitHub 86d98eda8d Return 401 in case the signin was not successfully (#16258) 2024-05-10 11:27:34 +02:00
c7328bcbbc v14: Return all data types from DataTypeService.GetAllAsync() (#16230)
* Return all data types from GetAllAsync

* Remove unnecessary async/awaits

* Ensure we don't accidentally fetch all data types when we mean to fetch none.

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-05-10 08:12:25 +02:00
53654d3b28 V14: Return the unhealthy error message from Examine index (#16228)
* Use Attempt<string> result to display the unhealthy error message

* Update OpenApi.json

* Code readability improvements

* Add unittest covering the bug

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-05-08 08:41:18 +02:00
Jacob OvergaardandGitHub 6577b56d23 V14: The dev server for the login app does not work (#16225)
* bump from es2020 to es2022 for better javascript support

* remove the hardcoded "paths" in tsconfig and replace with the backoffice package

* import uui-css to have styling on the dev server

* change endpoint mock url

* cleanup unused code
2024-05-07 13:54:26 +02:00
Jacob Overgaard 78d93a11d0 Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-07 10:27:38 +02:00
Jacob Overgaard f65d465a8a update backoffice submodule 2024-05-07 10:27:23 +02:00
2260da210d Management api should use datetimeoffset (#16196)
* Move audit log endpoints to their respective silos and clean up

* Fix failing integration tests

* Using DateTimeOffset in management api and new methods in service layer

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-05-07 08:07:20 +02:00
f44fb59b34 V14 QA Added acceptance tests for Language (#15997)
* Fixed failing tests

* Updated tests to use the updated helpers

* Clean up tests

* Enabled our pipeline for E2E testing

* Updated the CMS URl for our E2E tests

* Bumped version of our testHelpers

* Did some fixing, still a bit more to do

* Updated auth tests to use LoginUiHelper

* Updated Telemetry tests to use TelemetryUiHelper

* Updated LogViewer tests to use LogViewerUiHelper

* Updated api tests to apply AAA pattern and fix failed tests

* Removed unused import

* Updated api tests for Language

* Added ui tests for Language

* Updated ui test of Language as test helper is changed

* Bumped version of test helper

* Updated create language tests

* Updated delete language test

* Added Language folder

* Fixed method name

* Bumped version of test helper

* Fix merge conflict

* Fixed typo

* Added more waits

* Fixed locator

* Updated locator

* Added timeout

* Fixed password

* Reversed file

* Bumped version

* Bumped version of test helper

* Added more waits

* Added skip for add language test

* Bumped version of test helper

* Added smoke tags

* Fix conflict

* Added @smoke tag to test all Language tests in the pipeline

* Fixed comment

* Removed smoke tag in describe

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2024-05-07 11:59:59 +07:00
Jacob Overgaard 4035550dfa Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-06 18:15:32 +02:00
Jacob OvergaardandGitHub 91d81063a3 V14: Login page throws validation errors (#16222)
* remove unused login-input.element.ts

* fix: use regular html inputs to prevent validation errors that arose when we removed the shadow dom
2024-05-06 18:14:49 +02:00
Jacob Overgaard 97dcc90601 Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-06 14:17:20 +02:00
Jacob Overgaard 70cc0a5a05 update backoffice submodule 2024-05-06 14:15:14 +02:00
Elitsa MarinovskaandNikolaj Geisle e352be14ea Change order of service converter check (#16182) 2024-05-06 13:39:44 +02:00
Elitsa MarinovskaandGitHub 4736683273 Change order of service converter check (#16182) 2024-05-06 13:38:29 +02:00
Rasmus John PedersenandGitHub cfcdc9c98d Webhook log improvements (#16200)
* fix: include all headers in webhook log

* feat: return webhook log status from server

* feat: make webhook logs deep linkable

* feat: add webhook log pagination

* feat: improve webhook request/response body preview
2024-05-06 13:14:11 +02:00
Jacob Overgaard b2d6bb20ba add release.yml to be able to categorise github release notes (#16219) 2024-05-06 11:28:48 +02:00
Jacob OvergaardandGitHub b0b2b59740 add release.yml to be able to categorise github release notes (#16219) 2024-05-06 11:22:54 +02:00
Kenn JacobsenandGitHub b98a6aaa41 Use the correct editor UI for MNTP (#16217) 2024-05-06 11:22:28 +02:00
Jacob Overgaard 73646a88b1 Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-06 10:46:45 +02:00
Jacob Overgaard 09a8be12ec update backoffice submodule 2024-05-06 10:46:24 +02:00
Jacob Overgaard ba06e859c3 Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-06 10:32:05 +02:00
Jacob Overgaard 6dbb7e286d update backoffice submodule 2024-05-06 10:31:45 +02:00
Jacob Overgaard 01ce93510e update backoffice submodule 2024-05-06 10:30:32 +02:00
Nikolaj GeisleandGitHub d13278af80 V14: Webhook endpoint fixes (#16215)
* Update to use presentation factory

* remove unused usings

* Update delete endpoint to work

* Remember to map key

* Map key for updating webhooks
2024-05-06 10:25:33 +02:00
Sebastiaan JanssenandGitHub 23d0a6b9b2 Since v13 properties can sometimes be of type IRichTextEditorIntermediateValue - this was unexpected in the XPath navigator code (#16121) 2024-05-06 09:40:52 +02:00
f9c0235a35 [v14] Add missing alias and id to usergroup related api models (#16154)
* Added missing alias and Id to usergroup models

create/update/response/item

* Changed userGroup IsSystemGroup to more meaningfull fields

Also enforced the AliasCanBeChanged businessrule 🙈

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
2024-05-03 10:24:09 +02:00
Bjarke Berg fee222daff Bump version 2024-05-03 09:29:37 +02:00
Bjarke Berg edb516f71a Bump version 2024-05-03 09:28:43 +02:00
Bjarke Berg b6031dea1a bump version 2024-05-03 09:27:20 +02:00
8ad6c36038 Amend user start node handling (#16094)
* Amend user start node handling

* Add "has root access" to current user endpoint

* Add document and media root access to user response model

* Update OpenApi.json

* Applied API suggestions

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-05-03 08:47:10 +02:00
Sebastiaan Janssen 8b878a7aa6 Merge branch 'v14/dev' into contrib 2024-05-02 15:33:32 +02:00
Jacob Overgaard caebf37f51 Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-02 13:50:24 +02:00
Jacob OvergaardandGitHub f0dae526bf add the new oauth_complete path to the list of exemptions for the backoffice client (#16210) 2024-05-02 13:09:20 +02:00
Jacob Overgaard 8c8ebc0de1 update backoffice submodule 2024-05-02 12:59:30 +02:00
Jacob Overgaard 6eb8624291 update backoffice submodule 2024-05-02 12:50:11 +02:00
Jacob Overgaard 4a09e8dfd9 update backoffice submodule 2024-05-02 12:46:21 +02:00
Jacob Overgaard 7230091010 bump version.json 2024-05-02 12:04:47 +02:00
Jacob Overgaard 8db9913bdd Merge branch 'refs/heads/v14/dev' into release/14.0 2024-05-02 12:04:28 +02:00
Jacob Overgaard 859e1e65f1 update backoffice submodule 2024-05-02 11:59:31 +02:00
Jacob OvergaardandGitHub fe1ee46115 V14: Unique OAuth callback route (#16194)
* set the default for `AuthorizeCallbackPathName` to "/umbraco/oauth_complete" to allow the server to redirect the user back to a route where we don't load the entire backoffice.

* remove redundant method
2024-05-02 11:56:27 +02:00
2009989f6a [V14] Allow specifying ID on the create package endpoint (#16203)
* Allow package creation to specify the ID

* update openapi

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-05-02 11:33:15 +02:00
Nhu DinhandGitHub 0cfa8626b1 V14 QA Setting up the smoke E2E tests in pipeline (#16082)
* Added code to block unnecessary resources

* Updated createFolder

* Bumped version of test helper

* Changed clickCreateButton to clickCreateLink due to UI changes

* Bumped version of json builder

* Reversed previous code

* Removed waitForTimeout

* Removed waitForTimeout after login

* Bumped version of json builder

* Changed delete folder method

* Bumped version of test helper

* Update create link

* Removed waitForTimeout

* Added skip tests since currently only can view relations

* Added more explicit wait

* Removed hard wait

* Removed invalid verification step due to paging

* Moved get set telemetry level from test to before/after test

* Bumped version of test helper

* Added smoke tags - not done

* Added smoke tags

* Fixed merge conflict

* Added code to run smoke E2E tests after each build instead of full E2E tests

* Updated command to run smoke test

* Added more smoke tag

* Added reload tree steps

* Bumped version

* Removed hard waits

* Reduced wait time

* Reversed hard waits

* Set up full test suite in nightly build

* Fixed conditions

* Changed config
2024-05-02 10:09:48 +02:00
Nikolaj Geisle 5c02a560f4 Update openapi for webhooks 2024-05-02 09:55:09 +02:00
Nikolaj GeisleandGitHub bad211027b Don't validate credentials first (#16199) 2024-05-01 14:42:25 +02:00
374d699fd9 Move audit log endpoints to their respective silos and clean up (#16170)
* Move audit log endpoints to their respective silos and clean up

* Fix failing integration tests

---------

Co-authored-by: Mads Rasmussen <madsr@hey.com>
2024-05-01 12:07:06 +02:00
c8180d508b V14: Test new content and media list view service (#16193)
* Fix operation status msg

* Cleanup

* Removing unused status

* Adding WithConfigurationEditor on DataEditorBuilder to be able to create new list views with custom configuration

* Adding list view service tests for content and media

* Adding list view service tests base

* Consistency

* Clean up

* More cleanup

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-05-01 10:54:26 +02:00
Andreas ZerbstandGitHub 94b0f4d1a2 Skips failing test (#16197) 2024-05-01 10:00:34 +02:00
Nikolaj GeisleandGitHub abcb837eeb Add events v14/feature/add-webhook-events-endpoint (#16192) 2024-05-01 08:28:32 +02:00
Kenn JacobsenandGitHub e4986b9793 Set the data type editor UI aliases at install time (#16185) 2024-05-01 08:11:32 +02:00
Kenn JacobsenandGitHub 404cb28c59 Add data type editor UI aliases on upgrade (#16183) 2024-05-01 07:50:26 +02:00
d953a78ae6 Add avatarUrls to the userItem responsemodel (#16190)
Move "mapping" to the factory as there are now dependencies to build the model.

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-04-30 18:16:30 +02:00
Jacob Overgaard 87e21f5339 update backoffice submodule 2024-04-30 16:41:17 +02:00
Kenn JacobsenandGitHub b5f24d5297 Add member type icon to member type tree output (#16178) 2024-04-30 15:00:53 +02:00
Kenn JacobsenandGitHub de230334be Add user group filter endpoint (#16087) 2024-04-30 14:55:20 +02:00
39e51a4467 Add endpoint for retrieving allowed media types for file extensions (#16189)
* Add endpoint for retrieving allowed media types for file extensions

* Moved paging into service

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-04-30 14:26:12 +02:00
Bjarke BergandGitHub 3eef9b9579 Add oEmbed endpoint to the management api (#16188)
* OEmbed query endpoint

* Log provider instead of url from user
2024-04-30 14:21:50 +02:00
e3a4d4dae2 Handle multiple simultaneous block editor layouts (#16184)
* Handle multiple simultaneous block editor layouts

* Cleanup

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-04-30 12:53:26 +02:00
Nhu DinhandGitHub b833bace1e V14 QA Fixing failing tests for Partial View (#16181)
* Added code to block unnecessary resources

* Updated createFolder

* Bumped version of test helper

* Changed clickCreateButton to clickCreateLink due to UI changes

* Bumped version of json builder

* Reversed previous code

* Removed waitForTimeout

* Removed waitForTimeout after login

* Bumped version of json builder

* Changed delete folder method

* Bumped version of test helper

* Update create link

* Removed waitForTimeout

* Added skip tests since currently only can view relations

* Added more explicit wait

* Removed hard wait

* Removed invalid verification step due to paging

* Moved get set telemetry level from test to before/after test

* Bumped version of test helper

* Added smoke tags - not done

* Added smoke tags

* Fixed merge conflict

* Added code to run smoke E2E tests after each build instead of full E2E tests

* Updated command to run smoke test

* Added more smoke tag

* Added reload tree steps

* Bumped version

* Removed hard waits

* Reduced wait time

* Reversed hard waits

* Set up full test suite in nightly build

* Fixed conditions

* Changed config

* Added more waits

* Reversed yaml file

* Reversed yaml files

* Reversed YAML files

* Added .skip for failing tests due to RTE
2024-04-30 09:11:38 +02:00
Jacob OvergaardandGitHub 171eef9078 chore: remove import from backoffice icons since we now only have to rely on the ui library (#16155)
this also fixes an issue where icons did not work anymore due to changes in the backoffice taking over
2024-04-29 16:34:45 +01:00
976146b46e Persist claims from OnExternalLogin event (#16180)
* This fix ensures the claims added doing OnExternalLogin is persisted in the OpenIddict tokens

* Update comment

* Tiniest bit of formatting

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-04-29 11:54:39 +02:00
0e12b94107 Translate member picker property editor value to V14 compatible format (and back again) (#16149)
* Translate member picker property editor value to V14 compatible format (and back again)

* Fix typo

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-29 10:23:07 +02:00
Kenn JacobsenandGitHub d1e90dd3d8 Always use IActionResult - not ActionResult (#16145) 2024-04-29 09:07:19 +02:00
Bjarke Berg 25b47719ad Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-04-29 08:23:11 +02:00
Andreas ZerbstandGitHub 9236d6a3b9 V14 QA added acceptance tests for the media section (#16039)
* Added media tests

* Bumped versions

* Bumped version of testhelpers

* Cleaned up

* Added additional media tests

* Bumped version of playwright and testHelpers
2024-04-29 12:07:15 +07:00
Kenn JacobsenandGitHub 16a1f42985 Translate member group picker property editor value to V14 compatible format (and back again) (#16150) 2024-04-26 10:43:33 +02:00
Joshua Daniel Pratt NielsenandSebastiaan Janssen 5b46c718e6 Fix logic for retrieving lastKnownElement
(cherry picked from commit cae106bfe8)
2024-04-26 09:59:49 +02:00
Lars-ErikandSebastiaan Janssen 599ec18ecc Implementors using Umbraco.Tests.Integration won't have to override GetLocalizedTextService
(cherry picked from commit b0016687eb)
(cherry picked from commit 2bb56f1b81)
2024-04-26 09:59:32 +02:00
Joshua Daniel Pratt NielsenandSebastiaan Janssen cae106bfe8 Fix logic for retrieving lastKnownElement 2024-04-26 09:55:05 +02:00
Jacob OvergaardandGitHub e296c173cc V14: add authorized logout callback path (#16152)
* add option to SecuritySettings.cs to allow the developer to set an authorized logout callback path in line with the login callback path

* allow clients using the "Umbraco back-office access" descriptor to return back to either the login path or the logout path
2024-04-26 08:32:42 +02:00
Nikolaj GeisleandGitHub fcbfecd28e Reverse boolean check, to not fail if valid (#16153) 2024-04-26 08:29:50 +02:00
Andreas ZerbstandGitHub e1692f867f Skips failing test (#16148) 2024-04-26 09:22:44 +07:00
Bjarke Berg c4d49c2d73 Merge remote-tracking branch 'refs/remotes/origin/v13/hotfix/performance-optimizations-based-on-eu-data' into v14/dev
# Conflicts:
#	src/Umbraco.Core/Services/UserService.cs
#	src/Umbraco.Infrastructure/Templates/HtmlMacroParameterParser.cs
2024-04-25 15:57:55 +02:00
Nikolaj GeisleandGitHub 7bd499565d V14: Cache user by id (#16139)
* Cache user by id

* Add todo

* Fix tests

* Clear cache after update

* Refer to base class cache instead of implementing own

* Dont hardcode cache key

* Update to be Payload cache refresher instead
2024-04-25 15:56:01 +02:00
Kenn JacobsenandGitHub f824280162 Translate user picker property editor value to V14 compatible format (and back again) (#16151) 2024-04-25 13:20:41 +02:00
Kenn JacobsenandGitHub c85b1d4d37 Make public access endpoints work correctly (#16136) 2024-04-25 13:17:24 +02:00
Kenn JacobsenandGitHub b9e72a2d82 RTE media folder config is stored as a GUID in V14 (#16138) 2024-04-25 12:56:46 +02:00
9fc083fece V14: Migrate notify action from char to string (#16142)
* Migrate nofication chars to strings

* Add a length to the UserGroup2PermissionDto.Permission

* Remove StripWhitespace

It was only nececary when it was nchar

* Better name for migration

* Reuse dictionary in migrations

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-04-25 12:51:17 +02:00
Kenn JacobsenandGitHub 7a39314586 Remove all RTE config from appsettings (#16140) 2024-04-25 12:25:47 +02:00
Kenn JacobsenandGitHub ca84d002a4 Fix RTEs stylesheet loading error (#16128) 2024-04-25 12:19:41 +02:00
Zeegaan 37ae17ad20 Use renamed controller 2024-04-25 12:12:56 +02:00
Kenn JacobsenandGitHub 0cac0f8b5c Add endpoint for retrieveing the configured default language (#16086)
* Add endpoint for retrieveing the configured default language

* Update OpenApi.json
2024-04-25 11:42:16 +02:00
Kenn JacobsenandGitHub c7b3175621 Fix data parsing error for dropdown and checkbox list (#16132) 2024-04-25 11:21:12 +02:00
Jacob Overgaard 4b922c65e7 Merge branch 'v14/dev' into release/14.0 2024-04-25 11:09:31 +02:00
Jacob Overgaard f4cc408a11 update backoffice submodule 2024-04-25 11:08:11 +02:00
Bjarke BergandGitHub 89755157c1 Support member saving Cancel (#16147)
* Fixes https://github.com/umbraco/Umbraco-CMS/issues/15152

Handle when a notification cancels the member saving operation.

* Fixed unit tests
2024-04-25 10:59:41 +02:00
Jacob Overgaard a8021c46f6 update backoffice submodule 2024-04-25 10:33:24 +02:00
Bjarke BergandGitHub 73de6e164f Configured the swagger UI to persist the authentication token (still only valid for 5 minutes, as it cannot use refreshtoken) and added filtering. (#16146) 2024-04-25 09:45:36 +02:00
f1e43a7376 Align various controllers (#16137)
* Renamed the language item controllers to follow the current standard (they should not be called "entity")

* Renamed the webhook item controllers to follow the current standard (they should not be called "entity")

* Moved the webhook item controllers to the "/item" silo

* Renamed the user gorup controller base to be singular instead of plural

* Create member group endpoint should yield a 201 created response

* Update member endpoint should yield an empty 200 OK upon success

* Update UpdateUserDataController with correct action name and return an empty 200 OK upon success

* More item endpoints alignment

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-25 08:34:21 +02:00
Kenn JacobsenandGitHub c4958365fe Support OpenAPI polymorphic output with JsonDerivedType (#16144) 2024-04-25 08:26:44 +02:00
Nikolaj GeisleandGitHub fc9b47a2ea V14: Fixup webhook endpoints (#16143)
* Use presentation factory, as there is no map definition

* Refactor to actually get entities by key
2024-04-24 15:41:32 +02:00
Kenn JacobsenandGitHub ed64dbf3e4 Cleaned up V13 related and obsoleted system directory constants (#16133)
* Cleaned up V13 related and obsoleted system directory constants

* The LogFiles constant is still used, it seems
2024-04-24 13:54:15 +02:00
119fde2033 V10: Fix for fallback file upload (#14892) (#15868)
* Fix for fallback file upload (#14892)

* Added check for file type

* Removed unneeded null checks and fixed tabs

* Cleaning

* Cleanups, cleanups, and removal of unneeded null checks

* Reverted removal of relationshipservice

* Revert null check removals (too risky)

---------

Co-authored-by: Ambert van Unen <AvanUnen@ilionx.com>
Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>

(cherry picked from commit 0b5d1f8aa6)

* Fix up formatting

---------

Co-authored-by: Ambert van Unen <ambertvu@gmail.com>
2024-04-24 13:44:20 +02:00
c7a1205180 Refactor endpoints to return 0 items if the ids/paths are empty (#16126)
Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-24 12:28:24 +02:00
Jacob Overgaard ca0c90e321 set version to rc2 2024-04-24 11:47:05 +02:00
Jacob Overgaard a62fbf4269 update backoffice submodule 2024-04-24 11:46:04 +02:00
Andreas ZerbstandGitHub aec90b2e58 Fixed failing test (#16130) 2024-04-24 08:59:18 +02:00
Nikolaj GeisleandGitHub 7bbef2a584 V14: Fix member mapping (#16106)
* convert key to name before saving roles

* Rework MemberEditingService to convert keys

* Rename variable to groups

* Extract to variable
2024-04-23 12:25:36 +02:00
94bf4efe10 V14: Obsolete runtime minification settings (#16123)
* Obsolete RuntimeMinificationSettings

* Obsolete RuntimeMinificationValidator

* Update src/Umbraco.Core/Constants-Configuration.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Obsolete RuntimeMinificationCacheBuster

---------

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2024-04-23 11:17:50 +02:00
Bjarke Berg 07431e092b Do a distinct on user ids before building index, to avoid issue with more than 2100 parameters 2024-04-23 11:03:42 +02:00
Sebastiaan Janssen d4188022af Merge branch 'v14/dev' into contrib 2024-04-23 10:01:39 +02:00
Jacob Overgaard 263b995991 update backoffice submodule 2024-04-23 09:54:14 +02:00
Nikolaj GeisleandGitHub 4118f441c9 Remove UI settings (#16064) 2024-04-22 13:05:12 +02:00
MoleandGitHub 0980350172 Add blocks in RTE telemetry (#16104)
* Add blocks telemetry

* Use constants and update tests

* V13: Add property type information to telemetry (#16109)

* Add property type counts to telemetry

* Use constants and fix tests

* Update description
2024-04-22 12:56:36 +02:00
7b46d44eeb RC2 Breaking - Ensure migrations persist the executed key, when executed. (#16113)
* Adds new functionality to the migrations.

This requires a migration to call Context.SetDone() on the migration context. This happens automatically on scoped migrations before the scope is completed. But migrations inheriting the UnScopedMigrationBase needs to call this manually, inside the scopes or when it is considered done.

Thereby, we minimize the risk (and eliminate it for SqlServer) that a migration is executed but the state is not saved.

If a migration is executed without the SetDone is called, the migration upgrader throws an error, so we do not start executing the next migration

* Updated tests

* Renamed after review suggestion

* Rename in test

* More renaming after review

* Remove public modifier from interface

* Add missing space in exception message

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2024-04-22 12:21:16 +02:00
Jacob Overgaard c6898ec3f6 update backoffice submodule 2024-04-22 09:45:39 +02:00
Andreas ZerbstandGitHub b392a499cf V14 QA Token access fix (#16111)
* Added fixtures

* Fixed existing tests

* Temporary file path for updating StorageState

* Fixed indentation

* Bumped version

* Added a storageStatePath

* Deleted unnecessary fixtures

* Deleted commented out code

* Bumped version of testHelpers

* Updated Pipeline

* Bumped version

* Added fixes from review

* Added another wait and goToSection
2024-04-22 13:58:05 +07:00
Nikolaj GeisleandGitHub cceb4180f2 V14: Redirect to login screen (#16051)
* Redirect to login screen after flows complete

* Revoke tokens after completing flow

* Use Ok not Redirect

* skip length check
2024-04-19 09:42:13 +02:00
Jacob Overgaard 4dfd26e59e update backoffice submodule 2024-04-19 09:32:47 +02:00
Bjarke Berg 5c16cfb947 Use TryGetValue instead 2024-04-18 20:44:26 +02:00
Bjarke Berg 61908b4235 Lookup content types once instead of one by one 2024-04-18 16:27:56 +02:00
Bjarke Berg c2d1b7a315 Do not ask options every time for the timeout, instead listen for updates 2024-04-18 16:27:26 +02:00
Bjarke Berg e1e584ba64 Wrap indexing for delivery API in a scope 2024-04-18 16:26:57 +02:00
Sven Geusens a27a4dcd84 Bump to next minor 2024-04-18 15:36:44 +02:00
Sven Geusens adc2435073 Merge branch 'release/13.3.0' into v13/dev 2024-04-18 15:24:41 +02:00
Bjarke Berg 487f480548 Clean up 2024-04-18 13:43:01 +02:00
d04769a84b V14/feature/all segment endpoint (#16054)
* Added All Segments service with backing noopService

* Add openapi spec

* Apply suggestions from code review

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Fix ctor

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-04-18 12:20:26 +02:00
Jacob OvergaardandGitHub 337d547698 Do not refer to $npmTag which does not exist (#16075)
`--access` is not required either since we now specify that in the package.json file
2024-04-18 10:22:11 +02:00
Sven Geusens a325ba339b bump rc to regular 2024-04-18 09:10:22 +02:00
Nikolaj Geisle 8247360700 Merge branch 'release/14.0' into v14/dev 2024-04-18 09:02:28 +02:00
Nikolaj Geisle 8b0bf9da27 bump version 2024-04-18 09:01:17 +02:00
e33d7a779d V14: Apply sliding window token expiry based on the configured max login lifetime (#16028)
* Consider max login lifetime with access and refresh tokens

* Adding clarification comment

* Updated comment and added a little explanation for future clarity

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-04-18 08:24:58 +02:00
Nhu DinhandGitHub e20e001c12 V14 QA Added skip to the failing test due to UI changes (#16076)
* Added skip to the failing test due to UI changes

* Added skip tests

* Added skip tests
2024-04-17 15:33:05 +02:00
Andreas ZerbstandGitHub 55f68f477f Added timeout (#16073) 2024-04-17 15:30:51 +02:00
ChadandMichael Latouche cc39d36ff5 Correct BasicAuthSettings.Enabled description
Correct BasicAuthSettings.Enabled description.
2024-04-17 15:24:35 +02:00
Bjarke Berg 5d51d81545 Unbreak change by adding obsolete ctor 2024-04-17 13:05:03 +02:00
Bjarke Berg 7b4581bd8d Request cache the permission lookup 2024-04-17 12:55:14 +02:00
Jacob Overgaard 15b85d0e4a update backoffice submodule 2024-04-17 12:36:35 +02:00
Jacob Overgaard 8a15c14e70 update backoffice submodule 2024-04-17 11:21:17 +02:00
Jacob Overgaard 1e7b048756 update backoffice submodule 2024-04-17 09:38:48 +02:00
Nikolaj Geisle d25c3ca86d Merge remote-tracking branch 'origin/v13/dev' into release/14.0
# Conflicts:
#	src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
#	src/Umbraco.Infrastructure/BackgroundJobs/Jobs/ReportSiteJob.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Core/Telemetry/TelemetryServiceTests.cs
2024-04-17 09:10:05 +02:00
Zeegaan 0993a61d39 dont depend on e2e 2024-04-17 08:07:01 +02:00
dependabot[bot]andJacob Overgaard bb9e66d0da Bump vite from 5.2.2 to 5.2.6 in /src/Umbraco.Web.UI.Login
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.2.2 to 5.2.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.2.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-16 17:23:20 +02:00
ElitsaandJacob Overgaard dc9c28db9a Added missing endpoints 2024-04-16 17:18:51 +02:00
Jacob Overgaard db0c315aae bump to 14.0.0-rc1 2024-04-16 17:14:45 +02:00
6dd08b2377 V14 External login linking + Proposed error handling (#16052)
* Added mostly working linking methods to the backoffice controller

Cleanup still required

* Added proposed default error handling extionsion methods

* Cleanup, clarification and PR feedback

* More cleanup

* Transformed the OAuthOptionsExtensions into a helper class

this allows for proper DI for the dependencies

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-04-16 17:08:55 +02:00
Lee KelleherandGitHub 298f4de973 Merge pull request #16069 from umbraco/v14/feature/login-assets-cleanup
V14: Optimise login screen javascript
2024-04-16 15:59:12 +01:00
Jacob Overgaard 9be314b509 load the auth bundle 2024-04-16 16:52:28 +02:00
Bjarke BergandGitHub 36bde9e7f0 Add JsonObjectConverter to the default serializer and make a safe check before adding index (#16067)
* Do not add index if it already exists

* Add the JsonObjectConverter by default. This is required by the block editor

* Update test to reflect that fact we have the json object converter applied
2024-04-16 16:47:58 +02:00
Jacob Overgaard 41bbe67343 update backoffice submodule 2024-04-16 16:43:35 +02:00
Jacob Overgaard 9698b8331e make the login client load in the uui-css assets directly from the backoffice client since we are hooking on to the uui javascript anyway (this way we dont have to maintain uui several places) 2024-04-16 16:34:43 +02:00
Jacob Overgaard 43e4d3e83d make sure the login screen doesn't load entrypoints meant for the backoffice client (only simple extensions are supported on the login screen) 2024-04-16 16:31:15 +02:00
Jacob OvergaardandGitHub a15c8ddf3b V14/chore/pipelines e2e nuget (#16066)
* make the myget release wait for e2e tests

* update api docs after the nuget stage
2024-04-16 14:56:40 +02:00
MoleandGitHub 096991ac79 V13: Add webhook information to detailed telemetry (#16060)
* Cleanup ReportSiteJob

* Report on registered webhook event types

* Report on custom header webhook count

* Use constants instead of magic strings

* Update tests

* Update translation files
2024-04-16 14:36:02 +02:00
Bjarke BergandGitHub 43bf2a26d1 Fixed issue with custom fields not determined as custom (#16065) 2024-04-16 13:39:14 +02:00
cd6f2b4b6d V14: Support custom Swagger schema and operation identifiers for external packages (#16062)
* Adding ISchemaIdHandler and core implementation enabling custom package implementations

* Adding IOperationIdSelector and refactoring core implementation to enable custom package implementations

* Adding OperationIdSelector core implementation enabling custom package

* Removing old way of Operation id extensibility

* Registering schema and operation id handlers

* Refactoring based on unnecessary param

* Obsoletion

* Refactoring SchemaIdSelector to make use of the new ISchemaIdHandler

* Update OpenApi.json

* Revert "Update OpenApi.json"

This reverts commit c9165f174b.

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-04-16 12:52:45 +02:00
Nhu DinhandGitHub 0988f4a7be V14 QA Added missing tests for Partial View, Stylesheet, Script, Template (#16059)
* Removed hard waits

* Updated tests for Template and Partial View - not done

* Added insert section tests

* Used defaultTemplateContent to avoid duplicate code

* Added insert section tests

* Added missing tests for Partial View

* Added missing tests for Scripts

* Added missing tests for Stylesheet

* Added missing tests for Template

* Changed method's name due to test helper changes

* Added skip tests

* Bumped version of test helper

* Reversed waits

* Changed createThreeDotsButton to createButton due to UI changes

* Removed List View - Members tests as the UI changes

* Added more waits

* Removed unnecessary waits
2024-04-16 12:12:09 +02:00
Kenn JacobsenandGitHub a6a76d1815 Make the API content response builder extendable (#16056)
* Make the API content response builder extendable

* DeliveryApiJsonTypeResolver needs to be extendable too
2024-04-16 12:03:44 +02:00
Jacob OvergaardandGitHub 9f6af970b4 V14/feature/login image (#16063)
* update the login image to the v14 variant

* switch out the default value of the "alternative" logo to the dark version since it fits better in this version
2024-04-16 11:34:19 +02:00
Ronald BarendseandGitHub e680be506f v14: Update ImageSharp and MailKit dependencies (#16061)
* Remove duplicate PackageReferences

* Update ImageSharp dependencies

* Update MailKit dependency to 4.5.0
2024-04-16 11:12:05 +02:00
Lee KelleherandGitHub 68f623ede8 V14: MediaPicker/MNTP - Changed StartNodeId from a Udi to Guid (#16042)
* MediaPicker3: Changed `StartNodeId` from a `Udi` to `Guid`

* MNTP: Changed `StartNodeId` from a `Udi` to `Guid`
2024-04-16 11:01:18 +02:00
6379f2fd35 Ported over #15928 changes for 13.3 RC (#16023)
* Ported over #15928 changes for 13.3 RC

* Use GetOrAdd()

* Lock dictionary initialization

---------

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>
2024-04-16 08:55:40 +02:00
Ronald BarendseandGitHub 2d850bf8f1 v14: Add async methods to Deploy interfaces (#16055)
* Add async method to IContextCache

* Add async methods to IImageSourceParser and ILocalLinkParser

* Add async methods to IDataTypeConfigurationConnector, IServiceConnector and IValueConnector

* Obsolete non-aysnc methods

* Add cancellation tokens to new async methods

* Add ConfigureAwait(false) to awaits
2024-04-15 18:04:47 +02:00
Kenn JacobsenandGitHub 5ddf7a1be7 Clean up FIXMEs in security controllers (#16038) 2024-04-15 17:27:37 +02:00
3edc783ddb V14: Additional blueprint endpoints (#16047)
* Fix /item endpoint response when 0 ids

* Adding GetPagedByContentTypeKeyAsync to IContentBlueprintEditingService

* Adding mapping for new DocumentTypeBlueprintItemResponseModel

* New endpoint and operation status handling

* Fix test cases

* Added tests

* Fixed partial test references

* Rename method

* Add ancestors endpoint for blueprints

* Change == to is

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-04-15 13:49:08 +02:00
MoleandGitHub 2a889f502b V14: Clean up backend translation files (#16050)
* Remove unused translation areas

* Cleanup translation files
2024-04-15 11:13:58 +02:00
Bjarke Berg ee5936804d Do not execute query if no macros found 2024-04-15 10:55:42 +02:00
Nikolaj GeisleandGitHub e15bddcc39 Set invite users to false if deny local login is true (#16043) 2024-04-15 10:26:49 +02:00
Ronald BarendseandGitHub ad82fe89cf v14: JSON schema tool improvements (#16035)
* Use require modifier instead of setting null-suppressed default values

* Only remove read-only properties when IgnoreReadOnlyProperties is set

* Obsolete UmbracoPath property and remove work-around for obsolete setter
2024-04-15 08:58:52 +02:00
767c417153 Only add a SQL in statement if there are keys to filter on (#16044)
* Only add a SQL in statement if there are keys to filter on

* Improved faulty query fix by calling a cached path.

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-04-15 08:55:50 +02:00
Kenn JacobsenandGitHub 576b360cce Removed leftover System.Text.Json dependencies (#16040) 2024-04-15 08:51:00 +02:00
Bjarke BergandGitHub 2f0b3d055f Fixed check to support unix/linux OS (#16045) 2024-04-12 14:57:31 +02:00
89de08a1e8 V14: Remove member list view (#15979)
* Remove default member list view

* Fix up test

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2024-04-12 10:58:26 +02:00
Sebastiaan Janssen 62421f67ac Sync submodule 2024-04-11 17:08:55 +02:00
Sebastiaan Janssen 403ab49c22 Merge branch 'v14/dev' into contrib 2024-04-11 16:49:21 +02:00
Jacob Overgaard 5c3527d4f4 bump to 14.0.0-beta004 2024-04-11 15:57:48 +02:00
Jacob Overgaard 159e103936 Merge branch 'release/14.0' into v14/dev 2024-04-11 15:56:22 +02:00
Jacob Overgaard ba16aef194 add manual check for validation 2024-04-11 14:59:39 +02:00
Jacob Overgaard 8965e9c180 update dependencies 2024-04-11 14:59:19 +02:00
d5809da665 V14: Move towards get guid (#15889)
* Implement using keymap for member

* Remove current usages of GetUserById

* User userId resolver to resolve user key

* Refactor user repository to use GUID not int

* Add happy path test

* Remove user in cache when user gets updated

* Use await in async method

* Fix up according to review

* Update IMetricsConsentService.cs to have async method

* Fix according to review

* Fix more according to comments

* Revert "Fix up according to review"

This reverts commit a75acaaa

* Get current backoffice user from method

* Update user repository delete functionality

* Fix up more test

* Try to get user by id if key fails

* Add user key as required claim

* Fix tests

* Don't set claim in BackofficeController

* Create constant for the Sub claim

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-04-11 13:53:34 +02:00
Nikolaj GeisleandGitHub 0b62df2bb4 Add "UserIsAlreadyLoggedIn" property to BackOfficeLoginModel (#16034) 2024-04-11 13:48:20 +02:00
Jacob Overgaard 821e4e439e Merge remote-tracking branch 'origin/v14/dev' into release/14.0 2024-04-11 12:21:12 +02:00
Jacob Overgaard 40e6359499 update backoffice submodule 2024-04-11 12:20:45 +02:00
Jacob Overgaard 5c197cfa43 Merge remote-tracking branch 'origin/v14/dev' into release/14.0 2024-04-11 12:20:16 +02:00
Bjarke BergandGitHub 782c009754 Improvements to the OpenAPI Docs (#14754)
* Ensure APIS only can produce one response type

* Ensure APIs document Unauthorized and Forbidden results

* If a controller constructor injects IAuthorizationService we assume the actions can return forbidden

* Updated OpenApi.json

* OpenApi.json

* Update OpenApi.json

* Update OpenApi.json
2024-04-11 11:58:47 +02:00
Alina-Magdalena TincasandGitHub 85747593cc Update v14 api docs with info from umbraco docs (#15977)
* update api docs

* small update
2024-04-11 11:19:23 +02:00
513f39f623 Prevent template circular references (#15907)
* Added a simpel circular reference check to templates

* Upgraded detecting to all levels

* Rename method and add comment to clarify why we have 2 similar methods

* Apply suggestions from code review

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-04-11 11:18:00 +02:00
acae5f2d57 Remove "additional data" from entities (#16024)
* Remove "additional data" from entities

* Fix merge issue

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-04-11 10:55:21 +02:00
Kenn JacobsenandGitHub faee63627f Cleaned up some low-hanging FIXMEs (#16010)
* Cleaned up some low-hanging FIXMEs

* Fixed merge
2024-04-11 10:50:31 +02:00
Kenn JacobsenandGitHub a982df97a6 Remove manifest validators (#16027)
* Remove manifest validators

* Remove "Configuration" from RegexValidator
2024-04-11 10:42:22 +02:00
Kenn JacobsenandGitHub 459cd79a06 Remove RTE embedded image handling + clean up file upload configuration (#16025) 2024-04-11 10:40:44 +02:00
Jacob Overgaard 10fa3b87bf update backoffice submodule 2024-04-11 10:30:40 +02:00
Jacob OvergaardandGitHub 858a1af6c1 update imports on Web.Ui.Login after breaking change merged in the backoffice client (#16033) 2024-04-11 09:27:56 +02:00
Kenn JacobsenandGitHub 45a169f62b Clean up explicit test dependencies for System.Text.Json serializer (#16017) 2024-04-11 09:17:48 +02:00
Jacob Overgaard 5a87b1af6f update backoffice submodule 2024-04-11 09:15:23 +02:00
48e9be2b73 Content & media url endpoints (#15832)
* First go at the document url controller

Added optimizations for documenturlFactory

* Updated Document Url endpoint

Duplicated the endpoint for media
Cleaned up some code marked async that will never hit a long running operation

* Remove dupplicate attributes

* Rename resource sets to response model

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-04-11 09:10:45 +02:00
Kenn JacobsenandGitHub d47638df98 Remove remnants of the Angular implementation (#16026) 2024-04-11 09:08:56 +02:00
Ronald BarendseandGitHub 80c5d28316 v14: Update .NET dependencies to 8.0.4 (#16031)
* Update .NET dependencies to 8.0.4

* Update StyleCop.Analyzers to 1.2.0-beta.556
2024-04-10 21:32:58 +02:00
Ronald BarendseandGitHub 7c2a0f8976 Update to NJsonSchema 11.0.0 and use SystemTextJsonSchemaGeneratorSettings (#16030) 2024-04-10 21:25:54 +02:00
16dd5327d4 v14: Refactor and enhance System.Text.Json converters (#15960)
* Update JsonUdiConverter to support Udi, GuidUdi and StringUdi types

* Require boolean (like) value and rename to JsonFuzzyBooleanConverter

* Add read/write only JsonConverters and align naming

* Rename SystemTextJsonSerializer to DefaultJsonSerializer

* Rename SystemTextConfigurationEditorJsonSerializer to DefaultConfigurationEditorJsonSerializer

* Add JsonUdiRangeConverter

* Rename JsonFuzzyBooleanConverter back to JsonBooleanConverter

* Fix value type check in JsonObjectConverter

* Revert class names

* Updated tests

* Post fix after merge.

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-04-10 20:21:24 +02:00
Ronald BarendseandGitHub 1c5e27397b Remove Newtonsoft.Json from tests (#16029) 2024-04-10 19:30:32 +02:00
Kenn JacobsenandGitHub 1c799802c5 Deduplicate the magic string "/management/api/" (#16016) 2024-04-10 14:21:59 +02:00
Bjarke Berg 7b6db02426 Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-04-10 13:21:38 +02:00
Bjarke Berg 46994c2d1c Added missing index, while adding column key to users 2024-04-10 13:21:32 +02:00
d50b3a521e Simplify user group authorization failure statuses (#16009)
Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-10 12:39:22 +02:00
fcda25af50 Premigrations + Updated NuGet Dependencies (#15987)
* Updated nuget packages + added migrations for OpenIddict - Currently can only be executed using unatttended installs

* Added new Premigration concept - Migrations that always runs unattended before other migrations

* Apply suggestions from code review

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Zeegaan <skrivdetud@gmail.com>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-04-10 12:30:30 +02:00
082d504b33 Fix tracked reference queries for SqlServer (#16020)
* Fixed issue with SqlServer and optimized queries to not do the actual paging if total count is 0

* Cleanup

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-10 12:03:32 +02:00
Jacob Overgaard c241bfd85a update backoffice submodule 2024-04-10 11:56:59 +02:00
Ronald BarendseandGitHub 4c3c3cd158 v14: Align Deploy interfaces, remove obsolete methods and default interface implementations (#15965)
* Align FromArtifact return type with IDataType.ConfigurationData

* Align Alias nullability with interface

* Lazily initialize ArtifactDependency collection when not set

* Remove ShouldSerializeChecksum (not used by STJ)

* Remove obsolete methods and default interface implementations

* Order dependencies once when setting collection

* Update test to include artifact Checksum property
2024-04-10 10:12:38 +02:00
Jacob Overgaard eecb493585 use correct types for login build 2024-04-10 08:53:47 +02:00
Jacob Overgaard fe7f79aacf update backoffice submodule 2024-04-09 17:45:44 +02:00
41238d141a Move manifest endpoints to their own, independent API group and fix access policies accordingly (#15989)
* Move manifests to their own API group and fix access policies

* Update OpenApi.json

* add an endpoint to fetch "private" packages, i.e. AllowPublicAccess=false

* Review comments

* update OpenAPI.json

* update OpenApi.json

* allow /umbraco/logout to be used for PostLogoutRedirectUris when logging out through the management api

* use the Umbraco.Extensions string extensions instead

* add constraints to the BackofficeDefaultController to handle the cases of 'install', 'upgrade', and 'logout'

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2024-04-09 17:44:49 +02:00
Lars-ErikandSebastiaan Janssen 2bb56f1b81 Implementors using Umbraco.Tests.Integration won't have to override GetLocalizedTextService
(cherry picked from commit b0016687eb)
2024-04-09 12:56:15 +02:00
Elitsa MarinovskaandGitHub ac7e4c1fa3 Clean up comments that won't apply (#16018) 2024-04-09 12:07:55 +02:00
b8ae3e34ff Convert Tourdata into a more generic concept (#15923)
* Added UserData and migrated tours data into it

* Remove tourdata from user

* Removed tour definition/manipulation classes

Fixed a userData error typo

* Removed toursettings

* Update openapi spec

* V13: Align database schemas of migrated and new database (#15934)

* Drop default constraint umbracoCacheInstruction table

* Align umbracoContentVersion table

* Update indexes on external login table

* Align node table

* Make relation type index unique

* Remove user-group default constraint

* Re-order methods

* Make webhook url not nullable

* Cleanup

* Cleanup

* Update OpenApi.json

* Update src/Umbraco.Cms.Api.Management/Controllers/UserData/UserDataControllerBase.cs

* Remove tour settings from schema

* Add cancelation tokens

* Dont inject, but take as parameter

* Remove some from injection

* Update schema

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
Co-authored-by: Zeegaan <skrivdetud@gmail.com>
2024-04-09 11:59:43 +02:00
Sebastiaan Janssen 9ad413db4c Merge branch 'v14/dev' into contrib 2024-04-09 11:18:11 +02:00
Kenn JacobsenandGitHub de1fc65393 Swagger: Don't use allOf for inheritance + fix polymorphic models (#15985)
* Swagger: Don't use allOf for inheritance + fix polymorphic models

* Cannot mix $ref and nullable in OpenAPI

* Update OpenApi.json

* Regenerate OpenApi.json
2024-04-09 10:20:20 +02:00
MoleandGitHub 91085d9b21 Refactor DocumentPresentationFactory to use ITemplateService instead of IFileService (#15995) 2024-04-09 10:18:26 +02:00
9c18cd22e0 V14: Deleted code marked as obsolete for V14 (#15998)
* Obsoletions related to Delivery API

* Fix TypeLoader and TypeFinder tests

* Remove obsolete and default implementations of IFileSource and IFileTypeCollection

* More Delivery API related obsoletions

* VariationContextAccessor related

* ValueFactories obsoletion and fix references

* ValueSetBuilders obsoletions

* ValueConverters obsoletions

* Other obsolete ctors and methods

* Forgotten VariationContextAccessor obsoletion

* More obsoletions

* XPath related obsoletions

* Revert XmlHelper changes

* Delete RenamedRootNavigator and its tests

* Fix test

* XmlHelper obsoletion

* Return null instead of GetXPathValue

* Obsolete entire class instead

* Remove XPath obsoletions from IPublishedCache

* Remove XPath-related if-block that is no longer needed

* Change obsolete msg for classes needed for NuCache

* Moving classes to NuCache and making them internal

* Remove more XPath-related obsoletions

* Remove NavigableNavigator and its tests

* Cleanup

* Remove Xpath references from tests

* Revert interface deletion in MediaCache

* Using XOR operation

Co-authored-by: Nuklon <Nuklon@users.noreply.github.com>

---------

Co-authored-by: Nuklon <Nuklon@users.noreply.github.com>
2024-04-09 09:06:48 +02:00
187d45860a V14: Add cancellation tokens to all endpoints (#15984)
* Add CancellationToken to controllers

* Fix GetManagementApiUrl

* Forgotten Item and Tree controllers

* Document Blueprint and Version endpoints

* Fix merge conflict

* Cleanup

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-09 08:18:45 +02:00
ddf663d30b Support containers for blueprints (#15983)
* Support containers for blueprints

* Update OpenApi.json

* Fix tree ordering

* Add CancellationToken to new endpoints

* Change to doc blueprint specific things

* Fix policies

* Cleanup

* Use ContentBlueprintEditingService methods instead of underlying ContentService

* Review comments

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-08 14:55:46 +02:00
e326370b5f V14: Deleted code marked as obsolete for V12 and V13 (#15999)
* Forgotten v12 obsoletions

* V13 obsoletions

* Remove LegacyStaticServiceProvider and fix using statements of StaticServiceProvider

* Remove obsolete ctors for v13

* More v13 obsoletions

* UmbracoMapper obsoletion

* UmbracoPipelineFilter obsoletion

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2024-04-08 11:17:32 +02:00
Bjarke BergandGitHub 85d35b3a69 Ensure the user is authenticated to see webprofiler/miniprofiler logs (#16007) 2024-04-08 11:14:25 +02:00
Kenn JacobsenandGitHub b552ccb885 Rename Examine based entity search service (#15991)
* Rename Examine based entity search service

* Add a few comments to make it easier to tell the "indexed" search service from the "regular" one.
2024-04-05 17:42:08 +02:00
Sven Geusens 45e584c061 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs

# Ignored Conflicts (Umbraco.Web.UI.Client is completly replaced in v14)
#	src/Umbraco.Web.UI.Client/src/common/directives/components/application/umbtour/umbtourstep.directive.js
#	src/Umbraco.Web.UI.Client/src/views/components/application/umb-tour.html
#	src/Umbraco.Web.UI.Client/src/views/components/application/umbtour/umb-tour-step-content.html
#	src/Umbraco.Web.UI.Client/src/views/components/application/umbtour/umb-tour-step-counter.html
#	src/Umbraco.Web.UI.Client/src/views/components/application/umbtour/umb-tour-step-header.html
#	src/Umbraco.Web.UI.Client~HEAD
#	src/Umbraco.Web.UI.Login/package-lock.json
#	src/Umbraco.Web.UI.Login/package.json
2024-04-05 14:14:45 +02:00
Kenn JacobsenandGitHub c6f1189418 Return 404 instead of 500 when an "original parent" has been deleted (#15990) 2024-04-05 12:49:24 +02:00
Lars-ErikandJason Elkin b0016687eb Implementors using Umbraco.Tests.Integration won't have to override GetLocalizedTextService 2024-04-04 17:07:24 +01:00
3cc14888a9 Moved logic from FolderTreeControllerBase service layer (#15976)
* Moved logic from FolderTreeControllerBase into EntityService and EntityRepository

* Custom sorting for data types, not media types

* Ensure ordering is the same for SQLite and SQLServer

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-04-04 11:27:13 +02:00
Sebastiaan Janssen e993c23d5c Merge branch 'v13/dev' into contrib
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
2024-04-04 11:25:13 +02:00
Elitsa MarinovskaandGitHub 43f77eef64 Remove StaticServiceProvider usage (#15978) 2024-04-04 11:25:13 +02:00
dependabot[bot]andSebastiaan Janssen 71e16d20ef Bump vite from 5.1.1 to 5.1.7 in /src/Umbraco.Web.UI.Login
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.1.1 to 5.1.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.1.7/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.1.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-04 11:12:22 +02:00
Nhu DinhandGitHub 978d191039 Bumped version of test helper (#15981) 2024-04-04 10:58:49 +02:00
Lee KelleherandGitHub ac1ef52aba Download Created Package MIME type (#15982)
Sets the appropriate MIME type of the Created Package download,
this would be either an XML string or a ZIP file. The MIME type will
be used on the client-side to handle the responds accordingly.
2024-04-04 10:37:42 +02:00
Nikolaj GeisleandGitHub b5c6a2088f Return null if container type is not found (#15974) 2024-04-04 09:50:31 +02:00
Elitsa MarinovskaandGitHub be16aa0663 V14: Test new content blueprint editing service (#15970)
* Fix wrong service name

* Move tests to correct place and fix naming

* Introducing a test base

* Tests IContentBlueprintEditingService

* Remove comment

* Adding Assert.Multiple

* More Assert.Multiple + Can_Create_With_Basic_Model() and Cannot_Create_When_Content_Type_Not_Found()
2024-04-04 09:40:06 +02:00
Kenn JacobsenandGitHub 70878f501e Make property container type parsing explicit (#15963) 2024-04-04 09:32:24 +02:00
Jacob Overgaard d74b4d99d1 update backoffice submodule 2024-04-04 09:14:50 +02:00
Kenn JacobsenandGitHub 75b1d4729f Examine entity search for documents, media and members (#15972) 2024-04-03 18:49:23 +02:00
a95a092c39 V14: login screen (#15932)
* remove the temp login screen

* set login build back to esm

* convert razor entrypoint to show new login screen

* enable loading a user defined stylesheet that can be overridden through RCL mechanics

* remove unused file

* for now, remove the call to the old `localizedtext` endpoint until a replacement has been built

* add fallback font

* remove login to the old backoffice

* change models for twoFactorView

* Send view that have to be used for 2fa.

* get 2fa providers from the login call directly

* Return 2fa providers

* map enabledTwoFactorProviderNames to the view

* use correct endpoints for 2fa

* Send link

* change key to id in querystring

* improve localization

* merge authUrl

* Added flow query parameter

* remove unused getter

* remove debug info

* fix fallback value

* fallback value

* Added invite url to email

* Clean up

* Added password configuration to the verify responses, so the client knows, and have confirmed the user is allwed to see it

* allow reset password

* Allow anonymous on invite create password

* open api

* check for invite

* fix fallback text

* validate invite token

* try to extract the problem details object

* add error logging

* fix invite user parameters

* Use correct id for performing user

* Allow password reset on yourself without the old password, if you are currently invited

* hardcode the authorize endpoint url for now

* fix handlers and disable icons for now

* import icons from backoffice client

* add backoffice path to icons

* fix handler for 2fa custom view

* update image temporarily

* remove old icon registry

* convert login components to UmbLitElement

* convert `UmbAuthContext` into a real context with a token

* cleanup dependencies

* optimise vite

* remove lit

* optimise external login component loader

* use generated resources for reset password

* use generated resources for all methods

* import and register the main bundle

* register localization

* change localization keys

* update all localization keys to new format

* replace tokens

* copy code

* added danish translations

* convert to lowercase

* all languages should have same weight

* added german translations

* add missing variable

* missing text

* added dutch translations

* added swedish translations

* added norwegian translations

* add temporary fix so the login app can be built

* make sure BuildLogin is run only after BuildBellissima has been run to ensure the dependencies are present on disk

* run the real login build in pipelines

* set vite language to en-us

* optimise msw warnings

* wait a bit before rendering the form so we know everything has been loaded

* Add external login endpoint + move models around

* Allow FORM submissions to the external login endpoint

* rename `IdentityProvider` back to `Provider` to avoid a breaking change from V13

* type in url for login-external manually (for now) since route attributes are no longer a thing

* move GET back to POST for external forms

* load in public manifests on boot of the login screen

* Clean up

* handle the case where an external login provider has disabled local login and show a message instead of the login form

* remove external login providers from the server login screen

* add more translations

* use the friendly greeting for the error layout

* show login form

* add mock handler for public manifest endpoint

* remove the external login layout

* fix test

* Added generic English localization

as a fallback language.

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: kjac <kja@umbraco.dk>
Co-authored-by: leekelleher <leekelleher@gmail.com>
2024-04-03 15:45:09 +02:00
be58f3142d V14 QA Fixed/Cleaned up the api acceptance tests (#15964)
* Removed api tests for RelationType since it is impossible to create/update/delete relation type

* Fixed api tests for UserGroup

* Fixed api tests for UserAvatar

* Fixed api tests for User

* Fixed api tests for Temporary File

* Fixed api tests for Dictionary

* Fixed api tests for DataType

* Fixed api tests for DataTypeFolder

* Cleaned up

* Bumped version of test helper

* Update tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Dictionary/Dictionary.spec.ts

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

* Reversed the api tests for Relation Type

---------

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-04-03 12:06:54 +02:00
1437483a68 V14: Add IsAdmin to user and current user response models (#15969)
* Added isAdmin og user response models

* updated factory

* revert line removal

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-04-03 11:08:47 +02:00
Kenn JacobsenandGitHub 06cfec25aa Fix swagger schema error after #15946 (#15971) 2024-04-03 10:16:02 +02:00
ChadandJason Elkin 682b7656bc Update RefreshMethodType.cs 2024-04-02 21:49:03 +01:00
Elitsa MarinovskaandGitHub 37734efd15 V14: Blueprint CRUD endpoints (#15947)
* Get blueprint by key

* Renaming

* Implementing DeleteBlueprintAsync

* Fixing tests to use the new method

* Making ContentControllerBase abstract

* Cleanup

* Implementing Delete blueprint endpoint

* Revert obsoletion in ContentService.cs

* More reverting

* Remove usings

* Introducing IContentBlueprintEditingService

* Refactor Get and Delete blueprint endpoints to use the new IContentBlueprintEditingService

* Fix base inheritance case in SchemaIdSelector

* Creating RequestModelBase for UpdateDocument to be reused in both document and blueprint models

* Creating DocumentResponseModelBase to be reused in both document and blueprint models

* Renamed blueprint response model for item endpoint to be aligned with the rest of the item models

* More renaming changes of the DocumentBlueprintItemResponseModel

* Refactor ByKeyDocumentBlueprintController to make use of the new blueprint models

* New blueprint models and mapping

* Adding UpdateAsync to ContentBlueprintEditingService

* Adding IDocumentBlueprintEditingPresentationFactory.cs

* Adding UpdateDocumentBlueprintController.cs

* Adding methods required from the base

* Fixing bug in document type mapping - mapping incorrect key

* Cleanup

* Fix item endpoint

* Adding MapCreateModel

* Adding create model

* Creating request model base + related classes

* Another request model

* Blueprint editing service

* Adding create controllers

* Adding DuplicateName operation status for blueprints and handling it

* Updating OpenApi.json

* Fix comment

* Fix mapping

* Adding comments

* Passing in id for create blueprint from document model

* Mapping default state to Draft - no need to calculate it, it will always be that for blueprints

* Cleanup

* Update OpenApi.json

* Review comments

* Fix policies

* More policy updates
2024-04-02 12:53:06 +02:00
95849c265b Document version endpoints (#15946)
* Rename/Move/duplicate PaginationService to facilitate conversion closer to the data layer

Duplication is because of internal modifier as we don't want to expose these temporary classes

* Move Guid to Int Extensions into core + add unittests

* Added Document version endpoints

Updated used services to use async methods

* Moved PaginationConverter into core so it can be used by the service layer

* Endpoint structure improvements

* Updating OpenApi.json

* Add greedy constructors for contentService tests

* Namespace changes and naming cleanup

* Update openapispec again...

* Refactor injected services

* PR suggestion updates

- Move endpoints into their own structural section as they are also in a different swagger section
- Naming improvements
- Allign PresentationFactories with similar classes
- Cleanup unused assignments
- Cleanup refactoring comments
- Improve obsoletion remarks

* Cleanup

* ResponseModel improvements

* OpenApi spec update

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2024-04-02 12:12:36 +02:00
Kenn JacobsenandGitHub 1866b61e12 Use an extension method for fetching a required user in a common way (#15953) 2024-04-02 11:20:05 +02:00
Kenn JacobsenandGitHub 96f2b17c5a Entity search - take one (#15951)
* Add entity search endpoints (to be replaced with Examine based ones for content, media and member)

* Update OpenApi.json
2024-04-02 10:40:45 +02:00
Nhu DinhandGitHub 892a39d39a V14 QA Fixed the failing tests due to UI changes (#15944)
* Bumped version of test helper

* Changed clickCreateButton to clickCreateLink due to UI changes

* Bumped version of json builder

* Changed delete folder method

* Bumped version of test helper

* Added skip tests since currently only can view relations
2024-04-02 09:39:01 +02:00
MoleandGitHub d765e69713 V13: Align database schemas of migrated and new database (#15934)
* Drop default constraint umbracoCacheInstruction table

* Align umbracoContentVersion table

* Update indexes on external login table

* Align node table

* Make relation type index unique

* Remove user-group default constraint

* Re-order methods

* Make webhook url not nullable

* Cleanup

* Cleanup
2024-04-02 08:31:38 +02:00
Jacob Overgaard b3c25ca477 update backoffice submodule 2024-03-27 17:43:59 +01:00
Sven Geusens 67d80da9ed Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/PropertyEditors/MultiUrlPickerValueEditor.cs
#	src/Umbraco.Web.Common/Profiler/WebProfiler.cs
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/src/common/directives/validation/valpropertymsg.directive.js
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/linkpicker/linkpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/linkpicker/linkpicker.html
#	src/Umbraco.Web.UI.Client/src/views/content/content.create.controller.js
#	src/Umbraco.Web.UI.Client/src/views/content/create.html
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/blockgrid/umbBlockGridPropertyEditor.component.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/multiurlpicker/multiurlpicker.controller.js
#	src/Umbraco.Web.UI.Client/src/views/propertyeditors/multiurlpicker/multiurlpicker.html
#	src/Umbraco.Web.UI.Client~HEAD

# Ignored changes
#  https://github.com/umbraco/Umbraco-CMS/pull/14787
#  https://github.com/umbraco/Umbraco-CMS/pull/15853
#  https://github.com/umbraco/Umbraco-CMS/pull/15841
2024-03-27 16:13:09 +01:00
Jacob Overgaard 03044202fa update backoffice submodule 2024-03-27 15:20:40 +01:00
Sven Geusens 43920f9adc Merge branch 'v12/dev' into v13/dev 2024-03-27 15:04:00 +01:00
1fdc0e2582 Relations/types mangement api cleanup (#15910)
* Made Relation types read only trough the management api

* Removed path from RelationTypeResponseModel

* Removed RelationTypes tree controllers

* Deleted ByChildRelationController as the usecase has been internalized

* Reworked RelationResponseModel

* Added the ID the toe relation response model

* RelationType.IsDeletable is no longer relevant for the management api

Since types are only managed trough code.

* Removed RelationType create/update leftovers

Brought RelationType responsemodels more in line with similar models
Update openapi spec

* Review improvements

* Renamed controller file to match class name

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: kjac <kja@umbraco.dk>
2024-03-27 10:01:29 +01:00
e1ee896556 Refactor Tracked references endpoints (#15933)
* Moved tracked references under their respective sources

Prepped the endpoints to be more inline with how we will optimize in the future

* Fixed some endpoint signature issues and update openapi spec

* Partial Revert "Moved tracked references under their respective sources"

This reverts the submodule update in commit 3819276a74.

* Fix duplicate line

* Rework for polymorphic output

* Improved endpoint naming

* Regenerate OpenApi.json

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
2024-03-26 14:32:56 +01:00
Ethan NaganoandGitHub fdea8c28c8 14744 tour not coded to best practice (#15133)
* Apply focusLockService to TourStepDirective

Apply focusLockService to TourStepDirective in order to ensure that
non-modal page contents are inert and do not interfere with focus on
modal dialog with regards to screen reading technologies.

* Add properties to umb-tour.html.

Add properties to umb-tour html page to ensure that it aligns with modal
dialog best practices.

* Add dialog properties to Umbraco tour .html files.

Add properties relating to dialog and accessibility to the Umbraco tour
.html files, including aria-label, role, and tab index.
2024-03-26 09:39:34 +00:00
Jacob Overgaard 2175d523cc update backoffice submodule 2024-03-26 09:55:04 +01:00
Jacob Overgaard 7cb03c3a71 update backoffice submodule 2024-03-26 09:07:41 +01:00
3e6d48e6d0 Fixed contentTypeIds being mapped to the id of the wrapping entity (#15941)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-03-25 17:45:50 +01:00
4dca7495f8 Handle sensitive properties in the Management API (#15936)
* Handle sensitive properties in the Management API

* Use Assert.Multiple to catch all failing tests in one run

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-03-25 16:56:13 +01:00
Ethan NaganoandGitHub ce372abf8a Add check for ContentVariation.Nothing when copying documents. (#15185)
A new check for ContentVariation.Nothing is necessary when copying from
documents to ensure that if there is no content variation as defined by
the Nothing property, values are still copied even if variation is not
supported since the content itself will not vary.
2024-03-25 13:27:36 +00:00
f6f868e463 Add ancestor endpoints and remove explicit parent context (#15746)
* Remove explicit parent context in API outputs

* Add ancestor endpoints for document and data type (experimental for now)

* Add ancestor endpoints for doctypes, media, mediatypes, partial views, scripts, static files, stylesheets and templates

* Add unit tests for ancestor ID parsing

* Add ancestor endpoint for dictionary items

* Update OpenApi.json

* Fix merge and regenerate OpenApi.json

* Regenerate OpenApi.json

* Rename "folder" to "parent" for consistency

* Fix merge

* Fix merge

* Include "self" in ancestor endpoints

* Handle ancestors for root items correctly

* Remove "type" from recycle bin items

* Tests against fixed values instead of calculated ones.

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-03-25 12:15:50 +01:00
Jacob Overgaard e441639786 update backoffice submodule 2024-03-25 11:10:18 +01:00
Jacob Overgaard 82f725b2be update backoffice submodule 2024-03-25 10:57:08 +01:00
Jacob Overgaard c620b84fdc update backoffice submodule 2024-03-25 09:57:16 +01:00
Kenn JacobsenandGitHub b1c3473856 Introduce path provider and resolver for the Content Delivery API (#15922) 2024-03-22 14:12:33 +01:00
Jacob Overgaard d5d7023eaa update backoffice submodule 2024-03-22 13:28:02 +01:00
dd68a6da7f V14: Add reserved fields to config endpoints (#15919)
* Add reserved fields to documents

* Add member configuration endpoint

* Add reserved field to media configuration

* Refactor to use service instead on hardcoded methods

* Clean up, aligning

* Update OpenApi

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-03-22 12:11:38 +01:00
Kenn JacobsenandGitHub 0ed65671bb Use the correct localization keys for core property validation errors (#15931) 2024-03-22 10:19:33 +01:00
Jacob Overgaard 113068e17d update backoffice submodule 2024-03-22 09:55:34 +01:00
kjac bef0d659c0 Update OpenApi.json (add missing manifest method) 2024-03-21 15:01:35 +01:00
Kenn JacobsenandGitHub e750d29d14 Ensure correct access to all manifests + introduce "public" package manifests (#15921)
* Introduce "public" package manifests

* Make sure "all manifests" are available to anyone with backoffice access

* review comments
2024-03-21 09:55:30 +01:00
Andy ButlandandGitHub 52c21b0fca Updates JSON schema for Umbraco 10 with latest references for Forms and Deploy (#15918) 2024-03-20 13:20:40 +01:00
Andreas ZerbstandGitHub 129e9004d8 Bumped timeout for auth test (#15917) 2024-03-20 13:03:55 +01:00
Bjarke BergandGitHub a9e5a46829 Added missing 404 (#15915) 2024-03-20 11:19:52 +01:00
Bjarke Berg d03362486b Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-03-20 10:30:40 +01:00
Jacob Overgaard 1ab7c304bb update backoffice submodule 2024-03-20 10:23:26 +01:00
Bjarke Berg 2cb7597749 Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-03-20 09:44:43 +01:00
Bjarke Berg b7533b57b4 Merge remote-tracking branch 'origin/release/13.2' into v13/dev
# Conflicts:
#	version.json
2024-03-20 07:15:18 +01:00
Bjarke Berg 0dc13cf23f Merge remote-tracking branch 'origin/release/12.3' into v12/dev
# Conflicts:
#	version.json
2024-03-20 07:14:33 +01:00
Ronald BarendseandGitHub dd5d5ecf51 Add additional lock timeouts and clean-up ObjectCacheAppCache (#15911)
* Remove IHostEnvironment parameter and update clear cache

* Add lock timeouts and update exception messages

* Update constructor to internal
2024-03-19 18:38:05 +01:00
Jacob Overgaard 3f95af9b02 update backoffice submodule 2024-03-19 17:34:34 +01:00
Jacob Overgaard 0ed1d6869a update beta002 backoffice submodule 2024-03-19 16:36:14 +01:00
Jacob Overgaard 5a23127832 update beta002 backoffice submodule 2024-03-19 16:22:15 +01:00
Nikolaj GeisleandGitHub 30e2dea57a v14: Remove mentions of UmbracoApiController (#15863)
* Remove mentions of UmbracoApiController

* Remove last mentions of UmbracoApi controller
2024-03-19 14:42:08 +01:00
dependabot[bot]andSebastiaan Janssen d3b96a163f Bump follow-redirects in /src/Umbraco.Web.UI.Client
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-19 14:42:03 +01:00
dependabot[bot]andSebastiaan Janssen 95aba6d696 Bump follow-redirects in /tests/Umbraco.Tests.AcceptanceTest
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-19 14:41:45 +01:00
Sebastiaan Janssen 9030b1c19f Merge branch 'v13/dev' into contrib 2024-03-19 14:40:30 +01:00
Jacob Overgaard 08783c6065 bump version to beta003 2024-03-19 14:20:23 +01:00
Jacob Overgaard 7213e940ca Merge branch 'v14/dev' into release/14.0 2024-03-19 14:14:17 +01:00
Bjarke Berg 79d241a910 Bump version 2024-03-19 13:59:49 +01:00
Bjarke Berg c48d6f5a38 Update imagesharp 3 2024-03-19 13:59:38 +01:00
Bjarke Berg d9e890e954 Fixed duplicate reference 2024-03-19 13:58:43 +01:00
Bjarke Berg ecdbd9653b Update imagesharp 2 2024-03-19 13:57:46 +01:00
Bjarke Berg e0bb4b6a23 Bump version 2024-03-19 13:57:36 +01:00
Jacob Overgaard 4e0df98c34 update backoffice submodule 2024-03-19 13:44:12 +01:00
Andreas ZerbstandGitHub d2f8b18456 Skipped flaky test (#15905) 2024-03-19 13:31:08 +01:00
Andreas ZerbstandGitHub e7f40affac V14 Bugfix ensures correct line endings for partial view snippets (#15906)
* Created extension class so we can ensure native line endings

* Added usage of extension method for ensuring native line endings

* Added tests, to see if the snippets return the correct content

* Removed space
2024-03-19 13:14:38 +01:00
2c41388096 Preserve user populated link title when selecting nodes in link picker (#14787)
* Prevent user populated link names being removed

When selecting a node in a link picker, the "name" (Link title) field is always overridden with the selected node's name.
This change prevents the field from being overridden if it is user populated.

* Don't update for media either

If there is already a name, don't update when selecting media

* Deselect current node

When selecting media, deselect current node if there is one

* Change to suggested functionality

Update to more elaborate functionality which will always use the *current* node name. i.e If you change the node name then the link picker name changes also.

* Reapply changes

Repply changes after merge from contrib branch

* Use IsCulturePublished() and only track node name

* Fallback to node name in preview

* Fix setting media name

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
2024-03-19 11:31:31 +00:00
Bjarke BergandGitHub 1e69695650 Added missing locks and use timeout on all of them in ObjectCacheAppCache (#15902)
* Added missing locks, and ensure we have timeout on all of them

* Wrap the removable of objects from the hashset in a lock

* remove old comment

* Exit correct lock
2024-03-19 10:23:11 +01:00
Bjarke Berg 697c13c649 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/PreMigration/DataTypeSplitDataCollector.cs
2024-03-19 08:52:47 +01:00
Bjarke Berg 0ec9423e0a Merge remote-tracking branch 'origin/release/13.2' into v13/dev
# Conflicts:
#	version.json
2024-03-19 08:48:07 +01:00
Bjarke Berg efe24289bf Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2024-03-19 08:45:29 +01:00
Bjarke Berg 03aa17e602 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-03-19 08:44:55 +01:00
Bjarke Berg 99d5a7e609 Merge remote-tracking branch 'origin/release/10.8' into v10/dev 2024-03-19 08:43:59 +01:00
Bjarke Berg 383617ec17 Fix after wrong log merge 2024-03-18 19:00:30 +01:00
Kenn JacobsenandGitHub 39085b9ad4 Add DB locking for container APIs (#15870) 2024-03-18 14:27:11 +01:00
Sven GeusensandBjarke Berg a39030f4ba DataTypeSplit datacollector should not care about propertyEditors (#15898)
This ensures keys are correctly assumed to be unique => safe for dictionary usage

Co-authored-by: Sven Geusens <sge@umbraco.dk>
(cherry picked from commit e267b41575)
2024-03-18 13:21:35 +01:00
Elitsa MarinovskaandGitHub e9cfcf4e99 Revoke previous sessions when AllowConcurrentLogins is false (#15892) 2024-03-18 13:18:57 +01:00
e267b41575 DataTypeSplit datacollector should not care about propertyEditors (#15898)
This ensures keys are correctly assumed to be unique => safe for dictionary usage

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-03-18 12:39:24 +01:00
Andreas ZerbstandGitHub 76066eac5a Skipped failing tests (#15897) 2024-03-18 12:04:51 +01:00
Jacob Overgaard 82611f9fd2 update backoffice submodule 2024-03-18 11:59:05 +01:00
MoleandGitHub 1408298adf V14: Extend IContentEntitySlim (#15890)
* Extend EntitySlim with key

* Add ListView to GenericContentEntityDto and ContentEntitySlim

* Move ContentTypeKey and ListViewKey back to BaseDto

* Remove extra DB call when mapping to DocumentTypeReferenceResponseModel

* Remove extra DB call when mapping to MediaTypeReferenceResponseModel

* Remove duplicate db call for members

* Remove now redundant base class

* Fix comment
2024-03-18 10:46:03 +01:00
Bjarke Berg 6e3496d3f5 Fix after merge
(cherry picked from commit 3e08ce1efb)

(cherry picked from commit 7e822bb8a1)
2024-03-18 08:53:35 +01:00
Bjarke Berg 14f3336941 Fixing locking issues for document type saves. (#15854)
* Added  ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands

* Added Cache Instructions lock, to avoid deadlocks

* Optimized read locks for nucache when only one content type is rebuilt

* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two

* Avoid breaking changes

* Cosmetic changes

* Take locks if everything is rebuild

* Use same lock in scopes, to avoid potential deadlocks between the two

* Use eager locks in PublishedSnapshotService.cs

* Added timeouts to some of the application locks

* Revert "Use eager locks in PublishedSnapshotService.cs"

This reverts commit 01873aae97.

* Revert "Added Cache Instructions lock, to avoid deadlocks"

This reverts commit e3fca7c12a.

* Use single readlock call to lock many

* Use eager locks for reads

* Eager write locks

* Ignore test of lazy locks

* Unique timeout exception messages

---------

Co-authored-by: kjac <kja@umbraco.dk>

(cherry picked from commit 2c23e67c65)
2024-03-18 08:53:15 +01:00
Bjarke Berg da43d2f08c Fix after merge
(cherry picked from commit 3e08ce1efb)

(cherry picked from commit 7e822bb8a1)
2024-03-18 08:42:59 +01:00
Bjarke Berg 827fa188f4 Fixing locking issues for document type saves. (#15854)
* Added  ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands

* Added Cache Instructions lock, to avoid deadlocks

* Optimized read locks for nucache when only one content type is rebuilt

* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two

* Avoid breaking changes

* Cosmetic changes

* Take locks if everything is rebuild

* Use same lock in scopes, to avoid potential deadlocks between the two

* Use eager locks in PublishedSnapshotService.cs

* Added timeouts to some of the application locks

* Revert "Use eager locks in PublishedSnapshotService.cs"

This reverts commit 01873aae97.

* Revert "Added Cache Instructions lock, to avoid deadlocks"

This reverts commit e3fca7c12a.

* Use single readlock call to lock many

* Use eager locks for reads

* Eager write locks

* Ignore test of lazy locks

* Unique timeout exception messages

---------

Co-authored-by: kjac <kja@umbraco.dk>

(cherry picked from commit 2c23e67c65)
2024-03-18 08:42:27 +01:00
Bjarke Berg 352b6fa45b Bump version 2024-03-18 08:39:19 +01:00
Bjarke Berg 8789a643ec Bump version 2024-03-18 08:38:55 +01:00
Bjarke Berg cb02c51da7 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2024-03-18 08:36:36 +01:00
Bjarke Berg 8696f66915 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2024-03-18 08:35:17 +01:00
Bjarke Berg 98de8acece Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2024-03-18 08:33:15 +01:00
Bjarke Berg 0f076f7a13 Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Security/UmbracoUserManager.cs
2024-03-18 08:31:10 +01:00
JeyandBjarke Berg 7e1d1a1968 Merge pull request from GHSA-552f-97wf-pmpq
Co-authored-by: jey <jey@umbraco.dk>
(cherry picked from commit b743f6a2df)
2024-03-18 08:28:25 +01:00
b743f6a2df Merge pull request from GHSA-552f-97wf-pmpq
Co-authored-by: jey <jey@umbraco.dk>
2024-03-18 08:27:41 +01:00
Bjarke Berg 7e822bb8a1 Fix after merge
(cherry picked from commit 3e08ce1efb)
2024-03-15 17:16:04 +01:00
Bjarke Berg 6f26aae708 Update client 2024-03-15 17:13:16 +01:00
Bjarke Berg 17bc6f1d0c Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2024-03-15 16:00:46 +01:00
Bjarke Berg 3e08ce1efb Fix after merge 2024-03-15 15:58:22 +01:00
Bjarke Berg 1011a2c1a6 Merge 2024-03-15 15:35:08 +01:00
Bjarke Berg 77bfff83f2 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2024-03-15 15:05:17 +01:00
Bjarke Berg a34c63a313 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Scoping/Scope.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/LocksTests.cs
2024-03-15 15:01:36 +01:00
Bjarke Berg 6ea84db0ae Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-03-15 14:55:56 +01:00
Bjarke Berg a2511ff09b Fixing locking issues for document type saves. (#15854)
* Added  ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands

* Added Cache Instructions lock, to avoid deadlocks

* Optimized read locks for nucache when only one content type is rebuilt

* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two

* Avoid breaking changes

* Cosmetic changes

* Take locks if everything is rebuild

* Use same lock in scopes, to avoid potential deadlocks between the two

* Use eager locks in PublishedSnapshotService.cs

* Added timeouts to some of the application locks

* Revert "Use eager locks in PublishedSnapshotService.cs"

This reverts commit 01873aae97.

* Revert "Added Cache Instructions lock, to avoid deadlocks"

This reverts commit e3fca7c12a.

* Use single readlock call to lock many

* Use eager locks for reads

* Eager write locks

* Ignore test of lazy locks

* Unique timeout exception messages

---------

Co-authored-by: kjac <kja@umbraco.dk>
(cherry picked from commit 2c23e67c65)
2024-03-15 14:55:20 +01:00
Nikolaj GeisleandGitHub 0bafede51a Remove mention of backoffice project (#15894) 2024-03-15 13:40:09 +01:00
MoleandGitHub b619399edb Remove KeepAliveJob (#15891) 2024-03-15 12:48:31 +01:00
Jacob Overgaard c2fe847ba5 update backoffice submodule 2024-03-15 11:46:19 +01:00
Kenn JacobsenandGitHub 469a54cbbe Workaround for failing entity tree children (#15887)
* Workaround for failing entity tree children

* Fix typo from original PR

* Expose and actually use GetPagedTrashedChildren on EntityService (the default implementation on the interface is currently used).

* Ensure that ID/Key mapping for recycle bins work
2024-03-15 11:21:36 +01:00
2c23e67c65 Fixing locking issues for document type saves. (#15854)
* Added  ExecuteNonQuery(DbCommand command) on database to ensure we call OnExecutingCommand and OnExecutedCommand when executing DbCommands

* Added Cache Instructions lock, to avoid deadlocks

* Optimized read locks for nucache when only one content type is rebuilt

* Optimized the SqlServer locks, so only one command is executed (and thereby roundtrip) per lock instead of two

* Avoid breaking changes

* Cosmetic changes

* Take locks if everything is rebuild

* Use same lock in scopes, to avoid potential deadlocks between the two

* Use eager locks in PublishedSnapshotService.cs

* Added timeouts to some of the application locks

* Revert "Use eager locks in PublishedSnapshotService.cs"

This reverts commit 01873aae97.

* Revert "Added Cache Instructions lock, to avoid deadlocks"

This reverts commit e3fca7c12a.

* Use single readlock call to lock many

* Use eager locks for reads

* Eager write locks

* Ignore test of lazy locks

* Unique timeout exception messages

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-03-15 10:56:02 +01:00
Kenn JacobsenandGitHub 7964f33d0d Removed "type" from tree item response models (#15862) 2024-03-15 10:37:32 +01:00
Bjarke Berg 3718a9cdd4 Revert "Ignore test of lazy locks"
This reverts commit e03ff2661b.
2024-03-15 09:47:18 +01:00
Bjarke Berg e03ff2661b Ignore test of lazy locks 2024-03-15 09:35:19 +01:00
Jacob Overgaard ab3e420cd2 update backoffice submodule 2024-03-15 09:08:52 +01:00
Bjarke Berg d82e262e13 Update imagesharp 3 2024-03-15 08:22:53 +01:00
Bjarke Berg 0e7e16f455 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2024-03-15 08:21:10 +01:00
Bjarke Berg 7585918821 Revert ImageSharp 3 upgrade due to breaking changes 2024-03-15 08:20:50 +01:00
Bjarke Berg 0e43c43609 Update imagesharp 3 2024-03-15 08:09:39 +01:00
Bjarke Berg 233452cb55 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Directory.Packages.props
2024-03-15 08:09:05 +01:00
Bjarke Berg 659e74d831 Update imagesharp 3 2024-03-15 08:08:27 +01:00
Bjarke Berg b4e2191a4d Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Directory.Packages.props
2024-03-15 08:07:14 +01:00
Bjarke Berg fc86f2222c Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Directory.Packages.props
2024-03-15 08:05:53 +01:00
Bjarke Berg 26958df79e Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	src/Directory.Packages.props
2024-03-15 07:58:21 +01:00
Kenn JacobsenandGitHub 072903cb7a Port V13 backoffice cookie validation to V14 (#15886)
* Port V13 backoffice cookie validator to V14

* Don't use ISystemClock
2024-03-15 07:53:06 +01:00
Bjarke Berg 8e837d387d Merge remote-tracking branch 'origin/v10/dev' into release/10.8
# Conflicts:
#	version.json
2024-03-14 14:53:42 +01:00
Bjarke Berg 801fb5f885 Bump version 2024-03-14 14:48:09 +01:00
Bjarke BergandGitHub ed517ecd86 Update Imagesharp (#15885) 2024-03-14 14:31:30 +01:00
6e1924d054 V14: Create member filter (#15877)
* Update filter to include membergroup name

* add filter by isApproved

* Add isLockedOut

* Implement member filter

* Move filter logic to repository

* Add more fields to sort by

* Update openApi

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-03-14 14:24:10 +01:00
Jacob Overgaard 88a1768b1d update backoffice submodule 2024-03-14 11:16:00 +01:00
ffcc4ac170 fix udi leaking in the management api (#15684)
* [WIP] Stop Udi leaking on ConterPicker

* Refined Udi conversion for contentPicker

Cleaned up base construcor usage to move away from the obsoleted one.

* Fixed Udi lieaking in MNTP

* Stopped Udi bleeding for MultiUrlPicker

* Remove unused assignment

* Resolved namespace issue

* Use correct configuration value for MNTP udi parsing

* Turn helper auto props into local helper function to avoid unnecesary serialization

* Remove Newtonsoft.Json from Multi URL picker

* Fixed MNTP configuration serialization

* Changed MNTP editor data from csv guid to EditorEntityReference[]

* Added remarks for the MNTP editor conversion logic

* Reworked MNTPPropertyEditor Unittests

changed intent of one
fixed bug because of 1 rework

* Update OpenApi.json

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
2024-03-14 11:06:46 +01:00
albinjandSebastiaan Janssen 4a977b85a2 Fix UmbracoMapper InvalidOperationException due to concurrent modification of inner dictionary (#15830) 2024-03-14 11:05:18 +01:00
Jacob Overgaard f41a4f1f06 update backoffice submodule 2024-03-14 10:48:03 +01:00
9c3bc4a5c0 V14: Fix FIXMEs (#15869)
* Fix FIXMEs

* Bring AuthorizationPolicies.DenyLocalLoginIfConfigured authz policy to an action level as it doesn't apply to all

* Remove unnecessary policy

* Remove AuthorizationPolicies.DenyLocalLoginIfConfigured from base and apply to specific controllers

* Fix comment

* AllowAnonymous as it doesn't get it from the base anymore

* Reorder

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-03-14 09:02:17 +01:00
ChadandGitHub 2fbda6e64b Dispose IDisposable instances (#15810) 2024-03-13 14:59:28 +00:00
nzdevandJason Elkin ac5539a8be Avoid string.Format allocations when profiler is not enabled. 2024-03-13 14:39:57 +00:00
3fdf43cff5 Make GetByIds in ContentService extensions non nullable (#15736)
* Make GetByIds in MediaService extensions nullable

* Update src/Umbraco.Core/Packaging/PackagesRepository.cs

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

* Update src/Umbraco.Core/Services/MediaServiceExtensions.cs

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

* Update src/Umbraco.Infrastructure/Persistence/Repositories/Implement/CreatedPackageSchemaRepository.cs

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

* Make extensions non nullable

* Update src/Umbraco.Infrastructure/Persistence/Repositories/Implement/CreatedPackageSchemaRepository.cs

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>

---------

Co-authored-by: Jason Elkin <jasonelkin86@gmail.com>
Co-authored-by: Sebastiaan Janssen <sebastiaan@umbraco.com>
2024-03-13 15:20:31 +01:00
36bb1c9d78 Add "is deletable" to relation types + align namespaces for controllers (#15867)
Co-authored-by: Elitsa <elm@umbraco.dk>
2024-03-13 15:01:07 +01:00
MoleandGitHub ae675b28f7 V14: Remove duplicate pagination helper (#15856)
* Remove management PaginationService

* Remove usage of PaginationHelper in FilterMemberFilterController
2024-03-12 12:57:29 +01:00
Bishal TimandGitHub d8b0616434 Update documentation for GetAllContentTags method in ITagQuery interface (#15860) 2024-03-12 10:23:22 +00:00
Zeegaan e84e8fdcec Update sln to include management api 2024-03-12 11:10:15 +01:00
MoleandGitHub 1e59041667 Expose default listview ids in datatype configuration endpoint (#15865) 2024-03-12 10:40:48 +01:00
9c58714343 V14: Rename new projects (#15836)
* Rename Web.UI.New back to Web.UI

* Delete new backoffiec folder

* Rename client project

* Add new submodule

* Update template csproj

* Remove more mentions of new

* Add missing views

* Moving up the "Umbraco.Web.UI" proj reference, so that it is the first project listed in solution file (.sln) since it will be selected as startup one in VS by default.

* don't include grid

* Update with section of how to get started with backoffice

* Update .github/BUILD.md

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Add line about white page

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2024-03-12 10:17:42 +01:00
Kenn JacobsenandGitHub 69a691f315 Removed unused content editing models (#15855) 2024-03-11 13:15:25 +01:00
Bjarne FyrstenborgandGitHub ae541f5636 Webhook paged results (#15802)
* Add controller to fetch paged results of webhooks

* Return OK directly

* Fix total

* Update all languages
2024-03-11 09:56:32 +01:00
Stefan StankovicandMichael Latouche d97cbf486d Show BlockGrid Create Dialog if there are items in clipboard
Default behavior:

If you have only one available module for an area Umbraco will
open a dialog for adding the module. If you have more than one
module you will get a dialog to choose a module and that dialog
will have a Paste option in the top right corner.

New behavior:

If there is a module in the clipboard, Umbraco will open a dialog
with the Paste option even thou there is only one available module
in the area. In other cases, it will work as usual.

Reported issue: https://github.com/umbraco/Umbraco-CMS/issues/15755
2024-03-10 19:55:11 +01:00
Joe DearsleyandMichael Latouche 90864d8e58 Validation messages for blocklists no longer show HTML markup. #15697 2024-03-09 01:23:14 +01:00
Paul SealandBusra Sengul 7813acfa2b Added a check for the runtime mode and showed the relevant error message if 2024-03-08 14:18:50 +03:00
ea31ddea6d Enable member management authorization (#15843)
* Enabled Section authorization on member management endpoints

Changed filter endpoints from tree style auth to section as it returns the same model and be in line with other filter endpoints

* Clean up member filter base inheritance

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
2024-03-08 10:37:46 +01:00
Elitsa MarinovskaandGitHub 90820483d5 Try to parse string as int and return id.ToString(CultureInfo.InvariantCulture) (#15848) 2024-03-08 08:36:00 +01:00
MoleandGitHub eca13ea011 V14: Add additional validation around manipulating groups (#15834)
* Add additional validation when removing a user from usergroup

* Add additional validation to UpdateUserGroups

* Don't re-implement operation results

* Add additional validation to the update user endpoint

* Complete scopes where it's safe to do so
2024-03-07 13:21:48 +01:00
Nikolaj Geisle b86eeb6b52 bumb version 2024-03-07 09:54:14 +01:00
Nikolaj Geisle bf942d17bf Merge branch 'release/13.2' into v13/dev 2024-03-07 09:53:42 +01:00
3344274616 Xpath Query on Multinode Treepicker no longer working for new Nodes (#15159)
* fix for #14698

* Adjust XPath logic so it uses parentId as $current only when nodeContextId is null or 0

---------

Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
2024-03-06 18:45:20 +01:00
Jacob Overgaard 614c384c47 bump version to beta002 2024-03-06 16:28:07 +00:00
Jacob Overgaard 396ee78a51 Merge branch 'v14/dev' into release/14.0 2024-03-06 15:08:00 +00:00
Jacob Overgaard 6f7c94efdb update backoffice submodule 2024-03-06 15:07:27 +00:00
Bjarke Berg 2cdc6fddc7 Merge branch 'v14/dev' into release/14.0 2024-03-06 14:33:52 +01:00
Nikolaj Geisle 7dff3a3755 bump version 2024-03-06 11:01:37 +01:00
Jacob Overgaard a48e7a7452 update backoffice submodule 2024-03-06 10:26:05 +01:00
9e455f9325 Check for duplicate keys on media if we know it's a fresh entity (#15838)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-03-06 08:21:33 +01:00
da6aa7735a V14: add checkboxlist to list of migrations (#15844)
* add checkboxlist to the list of migrations that should be converted

* Adds string-array type-checking

to the `ValueListUniqueValueValidator`.

As `value?.ToString()` would give you a literal string of the
object-type, e.g. `"System.Collections.Generic.List`1[System.String]"`.

* Clean up and add tests

---------

Co-authored-by: leekelleher <leekelleher@gmail.com>
Co-authored-by: kjac <kja@umbraco.dk>
2024-03-06 06:53:17 +01:00
Elitsa MarinovskaandGitHub 04400054ac V14: Cleanup [ApiController] attribute usage (#15842)
* Applying [ApiController] to ManagementApiControllerBase and the rest derive it from it

* Removing [ApiController] from deriving controllers

* Removing [ApiVersion("1.0")] from controller base

* Cleanup

* [ApiController] from deriving DeliveryApiControllerBase controller
2024-03-05 15:49:40 +01:00
Jacob Overgaard 7710d9d66c update backoffice submodule 2024-03-05 14:18:40 +01:00
Kenn JacobsenandGitHub 3830e40eff Remove legacy media picker from install (#15835)
* Remove legacy media picker from install

* Fix bad auth policy
2024-03-05 13:33:04 +01:00
Erik-Jan WestendorpandBusra Sengul ce769ffff4 Add health checks results to payload 2024-03-05 14:24:34 +03:00
Steve MorganandGitHub 3b4ca0b0f5 Media Picker - upload button disabled bug #13383 (#15115) 2024-03-05 11:13:44 +01:00
Jacob Overgaard cc6aa93ee7 update backoffice submodule 2024-03-04 22:01:09 +01:00
Jacob Overgaard 72cda44db0 correct version name replacing the double dashes with a single dash 2024-03-04 21:59:00 +01:00
Jacob Overgaard 28b5113969 update backoffice submodule 2024-03-04 17:44:41 +01:00
Jacob Overgaard fb2b6d446e update backoffice submodule 2024-03-04 17:40:55 +01:00
Jacob Overgaard 1b85341a6d update backoffice submodule 2024-03-04 17:13:46 +01:00
1fd4fce3a8 Rename policies to original names (#15825)
* Removed the "New" from all policy names now that the legacy backoffice is gone.

* more policy renaming

* more policy renaming

* Uncommenting tests

* Cleanup

* Removing unused policy names

* Renaming AdminUserEditsRequireAdmin to a more meaningful UserPermissionByResource

* Completing TODO and some alphabetical rearranging

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-03-04 15:51:24 +01:00
Jacob Overgaard 4c1cd3008c update backoffice submodule 2024-03-04 14:37:03 +01:00
3c36fd5f06 V14: Data type filter endpoint (#15804)
* Implement endpoints

* Update to orderby and orderdirection

* Implement Filter endpoint

* Remove old ByEditorUiAlias endpoint

* Add clarifying comments

* Fix up according to review

* use model in reflection

* Remove leftover sorting

* remove ordering

* Implement skip and take directly in service

* Dont use GetAllAsync

* Update OpenApi

* Refactor get all to return full list if no keys are given

* Revert "Refactor get all to return full list if no keys are given"

This reverts commit 1dd3167e96.

* Use invariant contains

* A little query optimization

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-03-04 13:21:40 +01:00
Kenn JacobsenandGitHub ca9a3bbf1b Use same cache level for MNTP no matter the output channel (#15828) 2024-03-04 13:17:38 +01:00
Kenn JacobsenandGitHub 21126b7ba6 Localize validation messages with user lang files (#15820)
* Localize validation messages with user lang files

* Fixed unit tests
2024-03-04 12:50:24 +01:00
Sven Geusens 3c653d11bb Removed smidge injection in viewImports since we no longer include smidge 2024-03-04 10:11:08 +01:00
Kenn JacobsenandGitHub d523541340 Validate culture codes for document variants (#15818)
* Validate culture codes for document variants

* Validate culture with casing in publish and unpublish

* Fix merge
2024-03-04 10:07:01 +01:00
0208522f79 V14: member group controllers fixes (#15817)
* Remove mention of keys outwards

* Get member group by id

* Update openapi.json

* Rename to align

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-03-04 08:06:20 +01:00
Andreas ZerbstandGitHub 86ed066490 Skipped failing tests. (#15821)
The reasons they are being skipped is because we are timing out on the pipeline
2024-03-03 20:36:32 +01:00
Kenn JacobsenandGitHub 55d8954b0c Align parent contexts (#15819)
* Remove explicit parent context in API outputs

* Rename "folder" to "parent" for consistency

* Regenerate OpenApi.json
2024-03-03 15:53:50 +01:00
Elitsa MarinovskaandGitHub f990ea3693 Removing workaround since we now have the content type and list view binding in place (#15816) 2024-03-01 15:10:50 +01:00
Nikolaj GeisleandGitHub 7c33afa3a9 enable start node calculation (#15813) 2024-03-01 14:18:22 +01:00
Jacob Overgaard a9c0e10595 bump to beta001 2024-03-01 14:16:34 +01:00
Elitsa MarinovskaandGitHub 6010565fab V14: Segments configuration (#15812)
* Adding configuration options for segment settings

* Add "useSegments" to the document type configuration endpoint

* Adding additional configuration for creation of non-existing segments
2024-03-01 13:06:03 +01:00
9cb1d66b10 V14: Remove Newtonsoft from packed projects (#15811)
* Migrate ObjectJsonExtensions

* Use more generic exception to not use Newtonsoft

It should matter if it's a JsonReaderException, if we can't read we can't read

* Remove obsoleted constructors

* Use more generic exception in ContentValueSetBuilder

* Fix constructors

* Remove UdiRangeJsonConverter

* Remove more legacy newtonsoft stuff

* Migrate away from newtonsoft in CacheInstructionService

* Remove unused model binders

* Remove more newtonsoft

* Remove newtonsoft from DatabaseServerMessenger

* Remove now irrelevant benchmark

* Remove the usage of Newtonsoft from ImageCropperTemplateCoreExtensions

The value converter will never return JObject, JsonDocument, or JsonNode

* Remove usages of newtonsoft in ComplexPropertyEditorContentNotificationHandler

JTokens are no longer returned, so we don't need to check for it

* Remove newtonsoft references

* Re-add newtonsoft dependency to Umbraco.Tests.Common

* Fix package references

* move dependency

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-03-01 12:51:21 +01:00
Jacob Overgaard 72d8b02426 bump version.json 2024-03-01 12:43:57 +01:00
Jacob Overgaard dd1c4fb8b7 Merge branch 'v14/dev' into release/14.0 2024-03-01 12:01:39 +01:00
Jacob Overgaard 2080fd5524 update backoffice submodule 2024-03-01 12:01:05 +01:00
Kenn JacobsenandGitHub d8659ca53e Refactor content updates to shift responsibility downwards (#15807) 2024-03-01 10:45:19 +01:00
Elitsa MarinovskaandGitHub 33c1d4e1fb V14: Return all (even nested) compositions when getting a content type by id (#15800)
* Adding a generic implementation to get all content type compositions, even the nested ones

* Modifying mappers to use the generic implementation
2024-03-01 10:23:40 +01:00
Jacob Overgaard 1bcd45f4df update backoffice submodule 2024-03-01 09:23:45 +01:00
Ethan NaganoandBusra Sengul 0cf436fa5c Add handling of failed publish.
When publishing, if the selected page does not yet have a page created,
handle the FailedPublishNothingToPublish error so that the user is not
presented with an exception. A warning is shown to the user that some
languages failed to publish due to nothing to publish and to check that
a page has been created for selected languages. Additionally fixed a
validation issue where publish would always succeed if all languages
were selected.

Issue: 15352
2024-03-01 10:42:59 +03:00
Bjarke Berg efb72b5b49 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Core/Security/ContentPermissions.cs
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/pickdynamicrootcustomstep/pickdynamicrootcustomstep.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/pickdynamicrootorigin/pickdynamicrootorigin.controller.js
#	src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/pickdynamicrootquerystep/pickdynamicrootquerystep.controller.js
#	src/Umbraco.Web.UI.Client/src/views/prevalueeditors/treesourcetypepicker.controller.js
#	version.json
2024-03-01 08:17:06 +01:00
MihailichenkoPavelandMichael Latouche 4f9c793d00 fix user login 2024-03-01 02:31:56 +01:00
Jacob Overgaard add6908e3f update backoffice submodule 2024-02-29 17:17:42 +01:00
Kenn JacobsenandGitHub 976bca456e Remove macros (#15794)
* Remove macros!

* Clean up snippets

* Add migration that deletes all macros

* Review comments
2024-02-29 15:11:06 +01:00
Kenn JacobsenandGitHub 47d07bf2d8 ValueListConfiguration should not use ValueListItem (#15796)
* ValueListConfiguration should not use ValueListItem

* Fix test
2024-02-29 15:10:54 +01:00
b8577e3af2 V14: Unpublish multiple cultures (#15789)
* Refactor to accept multiple cultures

* Add test

* Move logic into service

* Remember to complete scope

* Move scope creation.

* Add test

* Close scope on early return

* Handle invalid cultures with bad request

* Handle valid cultures based on content

* Change return type if a culture is required

* Refactor content publishing service to have 1 unpublish method

* Update tests

* Return better error

* Scope completes

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-29 14:38:47 +01:00
Kenn JacobsenandGitHub 10c18e4162 Swap Newtonsoft.Json dependency for System.Text.Json in BlockEditorPropertyNotificationHandlerBase (#15790)
* Swap Newtonsoft.Json dependency for System.Text.Json in BlockEditorPropertyNotificationHandlerBase

* Review comments
2024-02-29 14:38:32 +01:00
Sebastiaan Janssen eff25b5abe Merge branch 'v13/dev' into contrib 2024-02-29 14:06:35 +01:00
Jacob Overgaard 7d1feb4ad5 update backoffice submodule 2024-02-29 14:05:28 +01:00
Kenn JacobsenandGitHub d7b77b0163 Remove Newtonsoft.Json from ImageCropperPropertyEditor (#15784)
* Remove Newtonsoft.Json from ImageCropperPropertyEditor.cs

* Make the media JSON valid
2024-02-29 13:04:41 +01:00
Kenn JacobsenandGitHub 04849948f1 Fix build errors for user permissions (#15797) 2024-02-29 11:40:47 +01:00
cf9b00bffc Refactor authorizers to be reusable from the core project (#15782)
* Refactored the Authorizers to be reuseable from core by now knowing about principal but only the IUser. Also moved them to core

* Fix multiple enumeration

* Fix more multiple enumerations

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2024-02-29 10:41:56 +01:00
393d178b58 User endpoint additions and corrections (#15773)
* Make create user endpoint work with the supplied id

Return 201 instead of 200 with correct resource identifier

* Add ResetPassword endpoint

* Bring changepassword route inline with other resource actions

* Fixed User endpoints not advertising all their possible response codes/ models

Fixed certain endpoints not authorizing targeted user(s) versus the admin needs admin authorization requirement
Fixed a user not found response bug for the update flow
Fix spacing

* Fixed CurrentUser endpoints not advertising all their possible response codes/ models

Fix incorrect responseStatus in UserService.GetPermissionsAsync

* Update OpenApi definition

Fix smal model oversights in previous commits

* Update incorrect Response type

* Check for duplicate id's in user create validation

* Remove unnecasary returnmodel from changepassword

Renamed the model to it's remaining usage

* rename bad constructor parameter

* Renamed method parameters for better readability and usage

* Fixed wrong userkey being passed down because of (refactored) bad naming

Technically doesn't change anything as the two id's should be the same in this case (reset with token is always for self)

* Fixed resetpassword bug

* Update openapi

* Update src/Umbraco.Core/Services/UserService.cs

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>

* Remove old password from change user password request model

Only makes sense when doing it for the logged in user => current endpoint

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2024-02-29 10:40:48 +01:00
Nikolaj GeisleandGitHub 1e043cbcfb V14: Member group controller (#15669)
* Add models & mapping

* Add controller

* Add create async to service

* Add auth policy

* Implement delete

* Rename response model

* Implement updateAsync

* Refactor update to use own model

* Implement all async counterparts for IMemberService

* Add tests

* Implement update member group mapping

* Dont fail if updating the current user group

* Return not found if not found

* Add missing OperationResults to MemberGroupOperationStatusResult

* Add 404 to response type

* Update openapi

* Update OpenApi

* Update OpenApi.json
2024-02-29 09:16:27 +01:00
Jacob Overgaard 3d5bb07ab1 update backoffice submodule 2024-02-29 09:15:18 +01:00
Nhu DinhandGitHub 9448854942 V14 QA Updated Dashboard acceptance tests (#15787)
* Added tests for Examine Management tab

* Added tests for Heath Check

* Added tests for Models Builder

* Added tests for Profiling

* Added tests for Published Status

* Bumped version

* Added tests for Welcome Dashboard

* Updated test name

* Bumped version of test helper

* Bumped version of test helpers

* Replace " with '

* Fixed comments

* Bumped version of test helper
2024-02-29 07:26:17 +01:00
Owain JonesandMichael Latouche beb431900a Update Welsh lang file 2024-02-29 01:46:28 +01:00
Andreas ZerbstandGitHub 664473d8eb Skips failing test so the pipeline can run (#15793) 2024-02-28 20:43:27 +01:00
Lee KelleherandGitHub ed8df56ff0 Checks that contentType isn't null before checking for .ListView (#15791)
For a collection use at the Media root, the `contentType` will be
`null`, and not have a `.ListView` configured, so would need to
fallback to the default collection configuration (data-type).

This was a small regression in PR #15687.
https://github.com/umbraco/Umbraco-CMS/pull/15687/files#diff-2ad7a39ca3a7e9fd7c4cbc72a2a28b28bf0d24c12449beff76ff8eb3b0a3ce99L192
2024-02-28 17:15:42 +01:00
fg-gscandGitHub 7a7b8461c5 Added the possibility to select all the cultures at once in the save and save&publish dialogs (#15776) 2024-02-28 15:54:50 +00:00
Jacob Overgaard 5d31a23902 update backoffice submodule 2024-02-28 15:39:16 +01:00
fa007ac257 Output notification handler messages as a header (#15786)
* Output notification handler messages as a header

* Make the notification contract public

* Moved the Notification type and added it to swagger schema

* Update swagger docs

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-28 15:09:08 +01:00
Kenn JacobsenandGitHub 4b4b003fc6 Add filter option to the "dictionar overview" endpoint (#15777) 2024-02-28 12:41:32 +01:00
3fea1b441c Removes more old backoffice files + Smidge! (#15788)
* Removes lots of files used by the old backoffice and that is not needed for the management api

* A little clean-up

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-02-28 12:27:54 +01:00
68a101371a Allow operation id selector to work for non-CMS API's (#15771)
* Allow OperationIdSelector to work for non CMS APIs

https://github.com/umbraco/Umbraco-CMS/issues/15716

* Fixed condition to be more readable

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-02-28 12:11:56 +01:00
Nhu DinhandGitHub cc6ebf35fb V14 Added acceptance tests for Dashboard (#15748)
* Added tests for Examine Management tab

* Added tests for Heath Check

* Added tests for Models Builder

* Added tests for Profiling

* Added tests for Published Status

* Bumped version

* Added tests for Welcome Dashboard

* Updated test name

* Bumped version of test helper

* Bumped version of test helpers

* Replace " with '
2024-02-28 08:40:54 +01:00
2494d8c5aa Granular permissions in Management API (#15734)
* It builds..

* Added granular permissions

* Added granular permissions

* Rename content to document

* Added migration

* Fixed issues causing the migration from v13 was not possible.

* Merged Permissions and Granular Permissions in viewmodel

* Prepared the viewmodel to a future where permissions can be more types.

* OpenApi

* Allow to translate a single char to many strings

* Use frontend friendly values for known permissions

* Validate the documents exist

* Allow setting non-document settings

* Add "$type" when required

* Rename to presentation model and update OpenApi.json

* OpenApi.json

* Fix tests

* OpenAPI

* Fixed issues with upgrades

* Add the discriminator name

* Fixed issues that only happended on SqlServer

* Fixed queries for SqlServer

* Clean up

* More cleanup

* Fix issue when migrating sqlserver

* Split fallback permissions into own concept in view model

* Also split on current user

* Added a extenable pattern for mappers between DTO => Granular Permission => ViewModel and ViewModel => Granular Permission

* Fixed issue with new exists method, that did not take duplicate keys into account.

* Added sections to current user response model

* Formatting fixes

* Move class to its own file

* xml comment

---------

Co-authored-by: Zeegaan <skrivdetud@gmail.com>
2024-02-27 21:57:02 +01:00
Kenn JacobsenandGitHub 3c2ae389f4 Remove Newtonsoft.Json from Multi URL picker (#15768) 2024-02-27 17:18:58 +01:00
Bjarke Berg 64bfe88fba Fixes tests after killing of old backoffice 2024-02-27 13:53:45 +01:00
Bjarke Berg 3db8ef029f Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-02-27 13:01:07 +01:00
Bjarke Berg 99ce994a3c disable step for now, as it do not make sense before the client code is in the same repo 2024-02-27 13:01:03 +01:00
595ee242aa V14: Remove old backoffice project. (#15752)
* Move magical route to management api

* Move auth around

* Remove "New" cookies, as they are no longer needed

* Move all installer related

* Remove BackOfficeServerVariables.cs and trees

* Move webhooks to management api

* Remove remainting controllers

* Remove last services

* Move preview to management api

* Remove mroe extensions

* Remove tours

* Remove old Auth handlers

* Remove server variables entirely

* Remove old backoffice controller

* Remove controllers namespace entirely

* Move rest of preview

* move last services

* Move language file extension

* Remove old backoffice entirely (Backoffice and Web.UI projects)

* Clean up unused security classes

* Fix up installer route

* Remove obsolete tests

* Fix up DI in integration test

* Add missing property mapping

* Move core mapping into core

* Add composers to integration test

* remove identity

* Fix up DI

* Outcomment failing test :)

* Fix up remaining test

* Update mapper

* Remove the actual project files

* Remove backoffice cs proj

* Remove old backoffice from yml

* Run belissima before login

* Remove caching

* Refactor file paths

* Remove belle from static assets

* Dont refer to old project in templates

* update gitignore

* Add missing files

* Remove install view as its no longer used

* Fix up failing test

* Remove outcommented code

* Update submodule to latest

* fix build

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-27 12:40:30 +01:00
Elitsa MarinovskaandGitHub 593f1eea6c V14: Align cultures & segments casing (#15745)
* Removing to ToLowerInvariant from culture and segments

* Adding ToLowerInvariant for DeliveryAPIIndex to not modify the stored data

* Fix failing test - remove ToLowerInvariant
2024-02-27 09:56:57 +01:00
Jacob Overgaard 9a274084d6 update backoffice submodule 2024-02-27 09:51:34 +01:00
Kenn JacobsenandGitHub 48d371a9d5 Finalized the data type config migration (#15766) 2024-02-27 09:33:29 +01:00
Jacob Overgaard 9d7aea6da0 update backoffice submodule 2024-02-27 08:45:07 +01:00
Kenn JacobsenandGitHub 4443f8b88a Validate collisions in domain assignments (#15759)
* Validate collisions in domain assignments

* Update OpenApi.json
2024-02-26 15:52:02 +01:00
b320cf1b22 V14: Remove legacy manifest parser (#15744)
* Remove legacy manifest parser

* Remove unused usings

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-26 15:43:48 +01:00
Nikolaj GeisleandGitHub 01a7643164 Add webhooks to openapi schema (#15772) 2024-02-26 15:39:53 +01:00
Kenn JacobsenandGitHub 3f1635d742 Validate data type configuration values (#15757) 2024-02-26 15:25:41 +01:00
f47830b165 V14: Webhook Management API (#15147)
* Add webhook to management api

* Update webhook controllers

* Add ByKey webhook controller

* Fix typo

* Fix typo

* Update multiple webhooks

* Update using

* Remove duplicate constant after merge

* Fix typo in file name

* Update casing of IWebhookService

* Fix typo

* Use Webhook entity type

* Fix ambiguous reference

* Update webhook mapping

* Update after change of CreatedAtAction

* Use CreatedAtId instead

* Update src/Umbraco.Cms.Api.Management/Controllers/Webhook/ByKeyWebhookController.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Cms.Api.Management/Controllers/Webhook/ByKeyWebhookController.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Cms.Api.Management/ViewModels/Webhook/CreateWebhookRequestModel.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Cms.Api.Management/Controllers/Webhook/DeleteWebhookController.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Cms.Api.Management/Controllers/Webhook/CreateWebhookController.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Add Guid to WebhookResponseModel

* Cleanup

* Add Auth

* Move webhook logic from backoffice to management api

* Add mapping

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-02-26 14:35:35 +01:00
Jacob Overgaard 0f6705795a update backoffice submodule 2024-02-26 13:36:19 +01:00
Jacob Overgaard fbfb3ad1f7 update backoffice submodule 2024-02-26 13:18:05 +01:00
Kenn JacobsenandGitHub e3d890ce47 Regenerate OpenApi.json to match current server schema (#15763) 2024-02-26 13:05:59 +01:00
Jacob Overgaard bc5d140640 generate api models before building 2024-02-26 11:23:13 +01:00
Jacob Overgaard 7ffa68e822 update backoffice submodule 2024-02-26 11:20:51 +01:00
Jacob Overgaard 405a494938 update backoffice submodule 2024-02-26 11:09:44 +01:00
Jacob OvergaardandSebastiaan Janssen f17f5522c0 revert changes in Default.cshtml regarding external login providers, as there are still parts of the backoffice using the AngularJS variables 2024-02-26 10:44:25 +01:00
Bjarke Berg 6016ecb9cf Updated openapi and added response type to temp file config 2024-02-26 10:33:59 +01:00
Kenn JacobsenandGitHub afa7c5789b Fix datatype configs for new installs (#15756) 2024-02-26 10:23:33 +01:00
203b003e41 V14 Added missing tests and fixed failed tests for Partial View (#15635)
* Added beforeEach() and remove .skip for the passed tests

* Fixed failed tests and add the tests to cover query builder

* Bumped version of test helper

* Updated api tests for Partial View as the endpoints are changed

* Fixed failed tests and remove .skip tests

* Updated test helper version and api tests for Partial View as the name of method changes

* Changed createButton() to createThreeDotsButton()

* Bumped version

* Bumped version of test helper

* Fixed comments

* Added more waits

* Splited tests out

* Changed verification method

* Added debug

* Removed console.log() and increased wait time

* Changed expect from toEqual to toBeTruthy

* Changed to use "" instead of ''

* more changes

* Updated the expectedPartialViewContent

* Changes

* Removed

* Fixed test

* Update PartialView.spec.ts

* Removed .skip

* Added code to detect os platform

* Updated expectedPartialViewContent varibale

* Added waits

* Bumped version of test helper

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-02-23 12:41:35 +01:00
Kenn JacobsenandGitHub 7b80d59c36 Align tree item namespaces (#15754) 2024-02-23 11:27:48 +01:00
00dade48f6 Document and Media restore endpoints (#15681)
* Added Endpoint to get Document restore information

* Add media version of original paent recycle bin

update document permission
regisered interfaces

* Added restore endpoints

* PR feedback and other cleanup

* Update orignal root parent logic & shrank return model

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-22 17:37:27 +01:00
Jacob Overgaard 8027873438 update backoffice submodule 2024-02-22 17:03:41 +01:00
Kenn JacobsenandGitHub 918457d9f8 Output "operationStatus" for error scenarios whenever possible (#15703) 2024-02-22 15:17:06 +01:00
1bb4fdf43a Do not allow ignoring user start nodes for system data types (#15739)
* Do not allow ignoring start nodes for system data types

* Update OpenApi.json

* Update src/Umbraco.Cms.Api.Management/Mapping/DataType/DataTypeViewModelMapDefinition.cs

Co-authored-by: Sven Geusens <geusens@gmail.com>

* Regenerate OpenApi.json

---------

Co-authored-by: Sven Geusens <geusens@gmail.com>
2024-02-22 15:16:31 +01:00
Jacob Overgaard 641c160e60 update backoffice submodule 2024-02-22 15:13:36 +01:00
Sven Geusens 99f841b7ae Bump rc version 2024-02-22 14:44:01 +01:00
Kenn JacobsenandGitHub ac01abd55f Clean up leftovers from old dictionary pagination (#15747) 2024-02-22 13:03:25 +01:00
Jacob Overgaard 4ca2c814f5 down version to 007 2024-02-22 12:55:46 +01:00
Kenn JacobsenandGitHub 00d1ebe3de Remove the default value constraint on "isContainer" before deleting the column (#15751)
* Remove the default value constraint on "isContainer" before deleting the column

* Swap migrations to avoid targeting missing column
2024-02-22 12:47:07 +01:00
Jacob OvergaardandGitHub da41373f85 V14: Run SQL Server Integration/Acceptance tests manually (#15750)
* temp fix until we stop getting timeouts: sql server tests should only be run manually

* simplify condition
2024-02-22 12:22:28 +01:00
Jacob Overgaard e0e1688e6a update backoffice submodule 2024-02-22 11:41:39 +01:00
MoleandGitHub 7735552877 V14: Migrate Newtonsoft to System.Text in value converters (#15728)
* Force system text json for IJSonSerializer

* Migrate ColorPickerValueConverter

* Move ColorPickerValueConverter

* Clean up ColorPickerValueConverter

* Remove obsoleted property editors

* Migrate FlexibleDropdownPropertyValueConverter to System.Text.Json

* Use IJsonSerializer instead and move the value converter to Core

* Migrate ImageCropperValueConverter to System.Text.Json

* Inject jsonserializer in test and obsolete old constructor

* Migrate JsonValueConverter to System.Text.Json

* Remove ContextualConfigurationEditorJsonSerializer

* Remove JsonNetSerializer

* Remove obsolete DeserializeSubset from JsonSerializer interface

* Fix FlexibleDropdownPropertyValueConverter

* Update test JSON to be actual valid json

* Update more test json

* Update time format to be valid

* Add JsonPropertyName to models
2024-02-22 11:22:57 +01:00
Jacob Overgaard 58bc868374 update backoffice submodule 2024-02-22 10:47:44 +01:00
Jacob Overgaard 9c7949d46f add test to ensure the json converter do not mess with the extensions list 2024-02-22 10:47:43 +01:00
Sebastiaan Janssen 3e1abd1404 Merge branch 'v13/dev' into contrib 2024-02-22 10:34:56 +01:00
Kenn JacobsenandGitHub 1a8797e694 Migrate data type configurations from V7.0+ (#15733)
* Migrate data type configurations from V7.0+

* Update listview defaults to match the install ones
2024-02-22 10:31:48 +01:00
Zeegaan b744f58b58 Order migrations correctly 2024-02-22 10:17:19 +01:00
Nikolaj GeisleandGitHub 4eb1ea6205 V14: List view reference in ContentType (#15687)
* Replace all IsContainer mentions with new ListView property

* Map the list view when creating and updating

* Implement list view migration

* Refactor listview to collection

* Do not assign listview if IsContainer is false

* Fix up HasContainerInPath query

* Update OpenApi.json

* fix up according to review

* Refactor duplicate code to use extension method instead

* Dont make new guid, check for null

* Make extension internal

* Fix up after merge

* Use ReferenceById static method instead of extension
2024-02-22 09:11:31 +01:00
Christian VåganandJason Elkin a7cacc9bb3 Add CultureInfo.InvariantCulture argument to nodeId.ToString() in CheckPermissionsPath() call 2024-02-21 22:29:11 +00:00
Jeavon LeopoldandJason Elkin 5978412b23 Add custom Examine FileSystemDirectoryFactory
So that the Umbraco SiteName property is used when generating the temp folder name hash
2024-02-21 22:14:06 +00:00
Jacob Overgaard ce24845907 allow release tags to reference public releases 2024-02-21 15:57:24 +01:00
Sven Geusens 793b0e591f Merge branch 'v14/dev' of https://github.com/umbraco/Umbraco-CMS into v14/dev 2024-02-21 15:02:55 +01:00
Sven Geusens 1b95679c89 Fix v14 tests 2024-02-21 15:02:48 +01:00
Jacob Overgaard 32117dbfd7 Merge branch 'v14/dev' of https://github.com/umbraco/Umbraco-CMS into v14/dev 2024-02-21 14:46:08 +01:00
Jacob Overgaard aab4acce8d bump to preview008 2024-02-21 14:45:46 +01:00
Sven Geusens 380d3eab6d Merge branch 'v14/dev' of https://github.com/umbraco/Umbraco-CMS into v14/dev 2024-02-21 14:41:21 +01:00
Sven Geusens ed7b4ce44f Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	Directory.Packages.props
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.cs
#	src/Umbraco.Core/Models/Mapping/ContentPropertyDisplayMapper.cs
#	src/Umbraco.Core/Services/DataTypeService.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockValuePropertyValueEditorBase.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MediaPicker3PropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/NestedContentPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs
2024-02-21 14:39:41 +01:00
Jacob Overgaard f2ee2d6c60 update backoffice submodule 2024-02-21 14:39:11 +01:00
Elitsa MarinovskaandGitHub 76e1db87a7 V14: Align routes (#15732)
* Fixing route for temp file

* Adding missing ApiController attribute

* Adding new filter view port

* Creating base classes for member and user filters

* Moving actual filter controllers to correct places

* Update OpenApi.json
2024-02-21 12:29:22 +01:00
Kenn JacobsenandGitHub d9aed7f9a7 Ensure that data types required by the core cannot be deleted. (#15738)
* Ensure that data types required by the core cannot be deleted.

* Update OpenApi.json
2024-02-21 10:22:22 +01:00
Jacob Overgaard c12b88801a update backoffice submodule 2024-02-21 09:13:14 +01:00
608f2e3c76 Scheduled publishing in Management API (#15680)
* Only use datetimeoffset in API

* Updated publish endpoint to take schedule information

* Fixed test builds

* OpenApi updates

* Update OpenApi schema

* Fixed issues with publishing.

* Added validation before publishing. Had to move a lot of classes to core.

* added missing files

* Added validation info to error

* Typo

* Clean up and adding missing result

* Updating to AvailableCultures instead of PublishedCultures

* Handle time needs to be in the future

* validate only cultures that needs to be published

* Fix typos

* Filter out cultures that we are not trying to publish from the validation errors

* Don't filter out only the available cultures, to accommodate non-created variants

* Only allow publish of existing cultures

* Fixed issues found in test

* fixed build

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-02-21 09:10:48 +01:00
129adf2699 Fix excessive datatype load times in propertyValueEditors and backoffice mapping (#15731)
* Introduced IDataTypeConfigurationCache
* Applied IDataTypeConfigurationCache to Property Editors and display mapping
* Invalidate new cache trough DataTypeConfigurationCacheRefresher
* Improve IDatatype service to use cached int path when fetching by guid (using idkeymap)
---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
2024-02-21 09:05:44 +01:00
Elitsa MarinovskaandGitHub 5b1fab1165 V14: Member collection view/filter endpoint (#15727)
* Adding missing members policy

* Adding a member filter endpoint

* Adding response types to user filter endpoint

* Adding create multiple to factory

* Updating OpenApi.json
2024-02-18 16:06:41 +01:00
Jacob Overgaard 638446bd43 update backoffice submodule 2024-02-16 15:10:32 +01:00
b2a9521184 Member response model must not have a name property (#15695)
* Member response model must not have a name (its name is in the variants collection)

* update import map

---------

Co-authored-by: Mads Rasmussen <madsr@hey.com>
Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2024-02-16 14:05:21 +01:00
Sven Geusens 95c0c0adad Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoLogin/Index.cshtml
#	src/Umbraco.Core/Services/DataTypeService.cs
2024-02-16 11:19:15 +01:00
Jacob Overgaard 3c9976d734 update backoffice submodule 2024-02-15 15:38:47 +01:00
d0145ed7e9 V14: generate dynamic importmap (#15710)
* register a new IPackageManifestReader to allow to scan the /umbraco/backoffice path for umbraco packages

* add constant

* add logic to extract the importmap from umbraco package manifests

* add html helper to render an importmap

* replace static importmap with new dynamic importmap

* update tests and be more specific about scopes

* remove recursion from PackageManifestReader.cs

* add extra test to validate the importmap

* combine all string manipulation to produce an importmap into HtmlHelperBackOfficeExtensions.cs

* rename IStaticFileHostGenerator to something reflecting its actual usage, and also fix the file names

* use auto properties where applicable

* add getter for BackOfficeHash and use to simplify BackofficeAssetsPath

* ensure BackOffice is always spelled with capital O

* add a way to replace the cachebuster for assets imported through an importmap and ensure magic strings are encapsulated into business logic or constants

* Review changes

* convert primary constructors to explicit and add comments

* convert primary constructor to explicit

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-02-15 15:23:01 +01:00
Kenn JacobsenandGitHub cc082e191c Clean up datatype configurations for V14 (#15718)
* Clean up datatype configurations for V14

* Fix merge

* Remove ParameterEditorCollection + revert accidental changes to core project file
2024-02-15 12:36:23 +01:00
ec1ba6031f V14: Document and media collection view endpoints (#15696)
* Fix authz status

* Adding another silo for list views

* Adding base classes and handling collection operation statuses

* Change signature to reuse functionality. Fix references

* Adding collection response models

* Adding content and media type collection response models

* Adding mapping

* Adding mapping for document and media types

* Adding list view page model

* Initial implementation

* Moving implementation to service base

* Adding content and media service interfaces for handling list views

* Registering and implementation

* Update controllers to use new services

* Renaming param

* Refactor to pass content type instead of content type key

* Handle the case where only data type is provided

* Add missing operation status

* Update OpenApi.json

* Added comment for a temp workaround

* Removing orderCulture from media interface as it is not yet supported

* Adding a base class for content type collection reference model

* Adding common collection controller base and moving the ContentCollectionOperationStatusResult to there

* Cleaning up controllers after implementing the base class

* Cleaning up concrete controller bases

* OpenApi.json updates

* Changing GetPagedChildren to return a paged model

* Fix ordering

* Adding ,

* Fix wording

* Append operation status to unsuccessful API responses

* A little bit of clean-up

* Update default orderBy value

* Update the default value of orderBy

* Adding missing owner and updater system fields

* Updating OpenApi.json with owner and updater props

* Create base and rename owner to creator

* Update OpenApi.json

* Reordering of properties

* "Owner" will be "creator"

* Fix comment

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-02-14 15:13:56 +01:00
Jacob Overgaard 72e2b20b32 bump to preview007 2024-02-14 14:28:41 +01:00
Andreas ZerbstandGitHub f98599a431 Changed locator (#15714) 2024-02-14 14:08:42 +01:00
Jacob OvergaardandGitHub 12355219d4 V13: The login screen does not display external login errors (#15715)
* show external login errors as a subheadline on the login screen
* fix: migrate error handling from v12 for external login
* cleanup unused client-side javascript
2024-02-14 13:24:10 +01:00
Jacob Overgaard b8d6c3e4fa update backoffice submodule 2024-02-14 13:10:06 +01:00
Bjarne FyrstenborgandGitHub 8145a90094 Content type picker in dynamic root pickers (#15514) 2024-02-14 12:34:18 +01:00
2dcdff5392 V14: Migrate nucache to use System.Text.Json (#15685)
* Create system text serializer

* Assign property names with system text

* Use the new serializer

* Impement AutoInterningStringConverter with System.Text.Json

* Implement TextAutoInterningStringKeyCaseInsensitiveDictionaryConverter

* Make CaseInsensitiveDictionaryConverter

* Force datetimes to be read as UTC

* Remove usages of Newtonsoft.Json

* Remove text prefixes

* Remove unused Newtonsoft converter

* Remove more newtonsoft

* Remove duplicate implementation

* Rmove usage of missing class in tests

* Ignore null values

* Fix tests

* Remove Newtonstoft reference from NuCache

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-02-14 12:10:45 +01:00
Jacob OvergaardandGitHub 3d7e79c3e5 V13: Update Login UI to Lit 3 and update the UI Library to 1.7.1 (#15713)
* update dependencies to latest (lit 3, vite 5) and fix related issues

* update ui library to 1.7.1

* mark all backoffice svg icons with fill="currentColor"

* set label on user.html
2024-02-14 07:38:17 +01:00
Kenn JacobsenandGitHub 4f04669dce Enable reuse of BackOfficeSecurityRequirementsOperationFilter for custom APIs (#15699) 2024-02-13 15:08:42 +01:00
Sebastiaan Janssen 43e373d352 Merge branch 'v13/dev' into contrib
# Conflicts:
#	src/Umbraco.Core/EmbeddedResources/Lang/en_us.xml
#	src/Umbraco.Web.BackOffice/Mapping/WebhookMapDefinition.cs
2024-02-13 14:05:46 +01:00
Bjarne FyrstenborgandGitHub f78c5675ea Use <umb-node-preview> component in dynamic root nodes (#15510) 2024-02-13 13:41:25 +01:00
Andreas ZerbstandGitHub 690bfe3e68 V14 QA fix failing dictionary acceptance tests. (#15709)
* Updated test to work. And skips tests unable to work until frontend is ready

* Decreased time for tests

* Update playwright.config.ts

Decreased to 40 seconds
2024-02-13 13:28:28 +01:00
Jan SkovgaardandGitHub 3553e7546a Bugfix: #14742 - Tabs not coded according to best practice (#14979) 2024-02-13 12:59:29 +01:00
Jacob Overgaard 7577433cd5 update backoffice submodule 2024-02-13 12:18:09 +01:00
Andreas ZerbstandGitHub f92c23438e Decreased retry of test from 5 to 3. (#15705) 2024-02-13 09:04:50 +01:00
Anna GevelandMichael Latouche 37d96db979 Fixed StackOverflow exception when using NoopPropertyIndexValueFactory
Removed recursive call from the GetIndexValues method of NoopPropertyIndexValueFactory for backward compatibility and alignment with other property index value factory classes
2024-02-13 02:03:28 +01:00
Ethan NaganoandGitHub 9ed2e48ff4 15209 media picker shows incorrect date (#15414)
* Trim update date to exclude Z character.

When picking media, the items from an SQL database contain an update
date that is formated in UTC-0 time by way of a Z character at the end
of the string. Removing this string will result in the update date
always displaying local time as expected.

Issue: 15209

* Use dateHelper instead of slicing Z from date string.

For most front end date formatting, dateHelper is used to get the local
date. The dateHelper is now passed in to the media picker controller and
used to format the date.
2024-02-12 23:41:20 +01:00
Jacob Overgaard c27532fe72 update backoffice submodule 2024-02-12 15:33:50 +01:00
d057626f29 V14 Added acceptance tests for DataTypes (#15679)
* Fixed failing tests

* Updated tests to use the updated helpers

* Clean up tests

* Enabled our pipeline for E2E testing

* Updated the CMS URl for our E2E tests

* Bumped version of our testHelpers

* Did some fixing, still a bit more to do

* Updated auth tests to use LoginUiHelper

* Updated Telemetry tests to use TelemetryUiHelper

* Updated LogViewer tests to use LogViewerUiHelper

* Updated api tests to apply AAA pattern and fix failed tests

* Removed unused import

* Fixed comments

* Bumped version of test helper

* Updated the version to 10 instead of 11

* Updated the package-lock.json file to contain the correct versions

* Added a waitForTimeout
The reason for this is that this test is failing on the pipeline

* V14 Added acceptance test for basic functions of Data Type, Approved Color and Label (#15551)

* Updated api tests for DataType

* Added ui tests for basic functions of DataType

* Added ui tests for Approved color

* Added ui tests for Label

* Fixed comments

* V14 Added acceptance tests for Date Picker (#15561)

* Updated api tests for DataType

* Added ui tests for basic functions of DataType

* Added ui tests for Approved color

* Added ui tests for Label

* Added ui tests for Date Picker

* Removed blank line

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

---------

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

* V14 Added acceptance test for List View (#15575)

* Updated api tests for DataType

* Added ui tests for basic functions of DataType

* Added ui tests for Approved color

* Added ui tests for Label

* Added ui tests for Date Picker

* Fix merged

* Updated DatePicker and Label tests to apply best practices

* Added ui tests for ListView

* V14 Added acceptance tests for Image Cropper, Numeric and Radiobox (#15599)

* Added ui tests for ImageCropper

* Added ui tests for Numeric

* Added ui tests for Radiobox

* Updated tests for Approved Color to change the way to arrange test data

* Change "" to '' and updated before/after methods

* V14 Added acceptance test for Textarea, Textstring, Upload (#15606)

* Added ui tests for Textarea

* Added ui tests for Textstring

* Added ui tests for Upload Article, Upload Audio, Upload File, Upload Vector Graphics, Upload Video

* Fixed failing tests due to api changes

* Changed propertyEditorAlias to editorAlias due to api changes

* Removed the step to check notification displays and changed string variables to numeric variables due to api changes

* Updated the skip tests

* Added skip tests and update method name due to test helper changes

* Splited tests out

* Bumped version

* Changed '' to '

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-02-12 13:59:39 +01:00
Jacob Overgaard 629f854bf7 update backoffice submodule 2024-02-12 11:06:10 +01:00
rbottemaandSebastiaan Janssen 14be246802 Fix QR code icon
Strips the width and height from the QR code SVG to ensure display is correct on all sizes. Used https://svgomg.net/ to optimize and minify the SVG.
2024-02-12 10:15:07 +01:00
Lars-ErikandSebastiaan Janssen 3e871f2c33 Add WithIsElement to ContentTypeBuilder 2024-02-12 10:03:02 +01:00
Jeavon LeopoldandSebastiaan Janssen ea7ae74ccb Fix certificate health check so that it validates multiple times
Also switch deprecated request.Properties to request.Options
2024-02-12 09:58:55 +01:00
Jacob Overgaard 6f6405a445 update backoffice submodule 2024-02-12 09:31:39 +01:00
9e5eb2da08 Remove clean xss from datatype name and alias. (#15552)
* Remove clean xss from datatype name and alias.

* Edit / and \ to the exclusions argument

* Forgot to escape the backslash

---------

Co-authored-by: Lucas Bach Bisgaard <lom@novicell.dk>
2024-02-10 01:50:03 +01:00
Jacob Overgaard 21dc62ec22 update backoffice submodule 2024-02-09 15:43:54 +01:00
Jacob Overgaard afff4d7578 update backoffice submodule 2024-02-09 13:55:40 +01:00
Erik-Jan WestendorpandMichael Latouche 7046c3585b Add localization key for 'Cancel and clear query' 2024-02-07 21:19:42 +01:00
Terence BurridgeandGitHub 318d994cf3 Reload the List View after a copy, if to the same parent (#15312) 2024-02-07 18:07:46 +01:00
Jacob Overgaard e1b4d1b982 fix useDotNet task 2024-02-07 14:35:49 +01:00
Jacob Overgaard 10e328afda Merge branch 'release/14.0' into v14/dev 2024-02-07 14:33:19 +01:00
Jacob Overgaard 86bf666faf fix useDotNet job 2024-02-07 14:31:16 +01:00
Jacob Overgaard b67b06bfc3 bump version to 14.0.0--preview006 2024-02-07 13:47:36 +01:00
839b2ff6a2 Fixes #15136: Search includes fields from other cultures (#15148)
* Fixes #15136: Search includes fields from other cultures

Regex was updated to support block list fields
Unpublished nodes on the supplied culture are not filtered out

* Making the code non-breaking

* Fixed failing publish content query integration tests

The tests were not setting the content as publish in the specifed culture
causing the content items to be ignored

---------

Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
2024-02-07 13:43:37 +01:00
Jacob Overgaard da5a95ac22 Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-02-07 12:08:03 +01:00
Jacob Overgaard fdb9b68bc0 update backoffice submodule 2024-02-07 12:07:41 +01:00
024bb8903c V14/feature/delete media in recyblebin (#15636)
* Bugfix: MediaCacheRefresher needs to always clear the mediaCache no matter what the publishedState is

* fix: check correct permissions for deleteDocumentFromRecycleBin

* Fix: ImageCropper propertyValues should not hold invalid values.

* Added media delete endpoints

* PR comment fix: Do not schedule cleanup if we know the file does not exist.

* resolved forward merge build conflicts

namespace cleanup

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-02-07 10:44:20 +01:00
Kenn JacobsenandGitHub 9d07268ead Remove template scaffolding from the API (#15659)
* Remove template scaffolding from the API

* Regenerate OpenApi.json

* Regenerate OpenApi.json after forward merging
2024-02-07 09:07:54 +01:00
Jacob Overgaard 79866e0370 update backoffice submodule 2024-02-07 09:01:01 +01:00
Markus JohanssonandMichael Latouche 2221c4f1c7 #15568 fixed by adding IRichTextEditorIntermediateValue 2024-02-07 02:32:14 +01:00
MehmetandGitHub 5d0486fddc Add missing list view usages to data type references (#14485) (#14617)
* Add missing list view usages to data type references (#14485)

* Added default implementation #14617
2024-02-06 14:50:16 +00:00
Bjarke Berg c1aa526999 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2024-02-06 14:25:12 +01:00
183b5cc454 Management API model mapping take two (#15667)
* Re-modelling API models (take two)

* Do not use "content" - use "document" and "media" instead.

* Move "item" endpoints to their own silo

* Use "Id", not "Key"

* Regenerate OpenApi.json

* Rename user start node IDs from "content" to "document"

* Regererate OpenApi.json after forward merge

* update importmap

---------

Co-authored-by: Mads Rasmussen <madsr@hey.com>
2024-02-06 13:19:30 +01:00
8c6e03d346 V14: Invalidate user tokens (#15651)
* Adding revoke user auth token handler and registering it

* Maintain method clarity by grouping new calls into its own method

* Rename functions to what they do

* Suggested linq function of tripple nesting

* Reduce nesting by early loop continuation

* Fix PR suggestion async typo

* Review suggestions

* Log msg alignment between members and users

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-02-06 13:02:35 +01:00
Bjarke Berg 0e7d5464ae Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2024-02-06 12:56:36 +01:00
Bjarke Berg 073e59c89a Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Cache/DistributedCacheExtensions.cs
#	src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/PublishedCache/PublishedSnapshotServiceCollectionTests.cs
2024-02-06 12:44:23 +01:00
Bjarke Berg 742e12c9c3 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-02-06 12:43:04 +01:00
Bjarke Berg 3a12b6591d Merge remote-tracking branch 'origin/release/13.1' into v13/dev 2024-02-06 11:09:25 +01:00
Bjarke Berg 897af1b013 Merge remote-tracking branch 'origin/release/12.3' into v12/dev 2024-02-06 11:08:16 +01:00
Bjarke Berg b5e46ba880 Merge remote-tracking branch 'origin/release/10.8' into v10/dev 2024-02-06 11:07:16 +01:00
Bjarke Berg cd47bdbb0c Fix breaking change 2024-02-06 10:08:12 +01:00
Nikolaj GeisleandGitHub 1b712fe6ec Merge pull request from GHSA-gvpc-3pj6-4m9w
* Add MarkDownPropertyValueEditor with html sanitizer

* Implement IMarkdownSanitizer.
2024-02-06 09:53:40 +01:00
Nikolaj GeisleandGitHub cbf9f9bcd1 Merge pull request from GHSA-gvpc-3pj6-4m9w
* Add MarkDownPropertyValueEditor with html sanitizer

* Implement IMarkdownSanitizer.
2024-02-06 09:53:40 +01:00
Nikolaj GeisleandGitHub d090176272 Merge pull request from GHSA-gvpc-3pj6-4m9w
* Add MarkDownPropertyValueEditor with html sanitizer

* Implement IMarkdownSanitizer.
2024-02-06 09:53:40 +01:00
Nikolaj GeisleandGitHub 6b8067815c Merge pull request from GHSA-74p6-39f2-23v3
* Don't display exception if not in debug mode

* Only display not OK status code in production
2024-02-06 09:53:17 +01:00
Matthew-WiseandGitHub 3ce438399a Fix UriUtilityCore's handling of anchors and querystrings, also optimized with Span (#15678) 2024-02-05 08:03:42 +01:00
71b3076de9 Members and member types in the Management API (#15662)
* Members and member types in the Management API

* Add validation endpoints for members

* Include validation result in service response + add unit tests

* Regenerate OpenApi.json

* Regenerate OpenApi.json after merge

* Don't throw an exception when trying to set valid variation levels for member types

* Added missing ProducesResponseType

* Remove TODO, as that works

* Allow creation of member with explicit key

* Do not feature "parent" for member creation + add missing response type

* Do not feature a "Folder" in create member type (folders are not supported)

* Added missing build methods

* Fixed issue with mapping

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-05 06:42:07 +01:00
Andreas ZerbstandGitHub dde2ccfd41 V14 QA fix failing acceptance tests on pipeline (#15652)
* Fixes, not done

* Fixed failing tests

* Fixes

* Updated tests

* Bumped version

* Did small adjustments

* Split tests out

* Skips failing package test

* Added missing semicolon

* Updated variables

* Added afterEach to ensureNameNotExists
2024-02-05 09:54:29 +07:00
Ethan NaganoandMichael Latouche ec26e5eabf Update nouislider options for image cropper.
Previous slider min and max values caused home and end keys to behave
incorrectly. Min is now 0 to reflect 0% zoom and max is now 100 to
reflect max zoom. Additionally, adjusted step to 0.01 to avoid slow
adjustments when using arrow keys or page up / page down keys.

Issue: #15578
2024-02-05 03:33:44 +01:00
Jacob Overgaard 52a9939480 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	.artifactignore
#	build/azure-pipelines.yml
#	tests/Umbraco.Tests.AcceptanceTest/misc/umbraco-linux.docker
2024-02-02 13:48:28 +01:00
Jacob Overgaard 36402a149a Merge remote-tracking branch 'origin/v13/dev' into contrib
# Conflicts:
#	build/azure-pipelines.yml
2024-02-02 13:43:49 +01:00
Jacob Overgaard 0765a1d809 force node.js version to 20.x 2024-02-02 13:41:30 +01:00
Ronald BarendseandJacob Overgaard 30c1baecd7 Remove Linux only Docker build for E2E tests (#14042)
* Remove Linux only Docker build for E2E tests

* Fix cmsVersion variable

* Remove custom build number step (already done by Nerdbank.GitVersioning)

* Add and use global.json to configure .NET SDK version

* Only publish tests build output

* Only include unit tests and integration build output (without reference assemblies)

* Added "pr: none" to nightly trigger (#15044)

* Only run SQL Server Acceptance Tests on release builds or when parameter is set

* Use SQLite in-memory database and configure database optimizations (#15461)

* Disable content version cleanup and server election

* Reference Umbraco.Tests.AcceptanceTest.UmbracoProject instead of copying files

* Suspend/disable scheduled publishing

* Ensure all Playwright results are copied to the artifact staging directory

* Update E2E SQL Server job and also run on Linux

* Fix building acceptance test project

* Fix building acceptance test project (suing PrivateAssets)

* Explicitly disable building project references in E2E tests and use pre-built output

* Include obj folder of acceptance test project in build artifacts

* Download build artifacts

* Re-add PrivateAssets

* Revert to copying C# files to E2E application

* Disable Integrated Security for SQL Server on Linux

* Update SQL Server on Linux connection string

* Disable encryption on SQL Server for Linux

* Update SQL Server on Linux steps

* Add Database to SQL Server connection string on Linux

* Update Integration Tests and use SQL Server 2022 Docker image

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
(cherry picked from commit 0e1ca76d6e)
2024-02-02 13:40:09 +01:00
Andy ButlandandGitHub b5b9c13bad Allow methods that call GetCropUrl to be verified in unit tests. (#15674) 2024-02-02 13:12:26 +01:00
0e1ca76d6e Remove Linux only Docker build for E2E tests (#14042)
* Remove Linux only Docker build for E2E tests

* Fix cmsVersion variable

* Remove custom build number step (already done by Nerdbank.GitVersioning)

* Add and use global.json to configure .NET SDK version

* Only publish tests build output

* Only include unit tests and integration build output (without reference assemblies)

* Added "pr: none" to nightly trigger (#15044)

* Only run SQL Server Acceptance Tests on release builds or when parameter is set

* Use SQLite in-memory database and configure database optimizations (#15461)

* Disable content version cleanup and server election

* Reference Umbraco.Tests.AcceptanceTest.UmbracoProject instead of copying files

* Suspend/disable scheduled publishing

* Ensure all Playwright results are copied to the artifact staging directory

* Update E2E SQL Server job and also run on Linux

* Fix building acceptance test project

* Fix building acceptance test project (suing PrivateAssets)

* Explicitly disable building project references in E2E tests and use pre-built output

* Include obj folder of acceptance test project in build artifacts

* Download build artifacts

* Re-add PrivateAssets

* Revert to copying C# files to E2E application

* Disable Integrated Security for SQL Server on Linux

* Update SQL Server on Linux connection string

* Disable encryption on SQL Server for Linux

* Update SQL Server on Linux steps

* Add Database to SQL Server connection string on Linux

* Update Integration Tests and use SQL Server 2022 Docker image

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-02 10:17:40 +01:00
Sven GeusensandBjarke Berg 802758ed59 Fixed nested RTE's index method not being called due to obsolete fallbacks (#15670)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
(cherry picked from commit 1e72b1cf0b)
2024-02-02 08:25:23 +01:00
1e72b1cf0b Fixed nested RTE's index method not being called due to obsolete fallbacks (#15670)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-02-02 08:22:51 +01:00
2193ded62d V14 Added acceptance tests for Relation Types (#15653)
* Fixed failing tests

* Updated tests to use the updated helpers

* Clean up tests

* Enabled our pipeline for E2E testing

* Updated the CMS URl for our E2E tests

* Bumped version of our testHelpers

* Did some fixing, still a bit more to do

* Updated auth tests to use LoginUiHelper

* Updated Telemetry tests to use TelemetryUiHelper

* Updated LogViewer tests to use LogViewerUiHelper

* Updated api tests to apply AAA pattern and fix failed tests

* Removed unused import

* Added api tests for RelationType

* Added ui tests for Relation Type

* Bumped test helper version

* Added api tests for Relation Types

* Updated ui tests for Relation types

* Updated method due to the test helper changes

* Bumped version

* Fixed merged

* Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts

Added ;

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

* Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts

Updated name of method

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

* Update tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Relation Types/RelationTypes.spec.ts

Updated name of method

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-02-01 19:46:49 +01:00
Jacob Overgaard 2f702b28ff update backoffice submodule 2024-02-01 16:13:42 +01:00
Jacob Overgaard 1f636583c3 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2024-02-01 15:58:33 +01:00
Jacob Overgaard 5c33c6fbf6 Login assets should be built independently of the Backoffice (#15668)
* picked from v14/dev to distinguish between Belle and Login so the correct assets are being built when you run Umbraco.Web.UI

* syntax
2024-02-01 15:52:41 +01:00
Jacob OvergaardandGitHub 836d45e5c5 Login assets should be built independently of the Backoffice (#15668)
* picked from v14/dev to distinguish between Belle and Login so the correct assets are being built when you run Umbraco.Web.UI

* syntax
2024-02-01 14:36:37 +00:00
Jacob OvergaardandGitHub 0a6dd9538a add retry count for flaky test (#15632)
* add retry count for flaky test

* add retry to try and have test pass
2024-02-01 14:28:47 +01:00
Sebastiaan Janssen c18ec80e34 Merge branch 'v13/dev' into contrib 2024-02-01 12:45:39 +01:00
Bjarke Berg 3a71eab1ce Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-02-01 12:17:50 +01:00
d29e05efb7 Move document related operations to DocumentControllerBase (#15661)
* Clean up ContentControllerBase and move document related operations to DocumentControllerBase

* Rename content to document

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-02-01 11:29:52 +01:00
Bjarke Berg 9eb36c0234 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Packages.props
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_0_0/AddMemberPropertiesAsColumns.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_2_0/AddHasAccessToAllLanguagesColumn.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_2_0/AddUserGroup2LanguageTable.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_3_0/AddBlockGridPartialViews.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_4_0/AddBlockGridPartialViews.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_5_0/AddPrimaryKeyConstrainToContentVersionCleanupDtos.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_10_7_0/MigrateTagsFromNVarcharToNText.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_11_3_0/AddDomainSortOrder.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_11_4_0/AlterKeyValueDataType.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/ResetCache.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/UseNvarcharInsteadOfNText.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_1_0/AddOpenIddict.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_1_0/TablesIndexesImprovement.cs
#	src/Umbraco.Web.UI.Docs/README.md
#	src/Umbraco.Web.UI.Docs/gulpfile.js
2024-02-01 11:24:43 +01:00
Kenn JacobsenandGitHub 296b7e061a Align presentation model factory naming (#15663) 2024-02-01 11:22:16 +01:00
Bjarke Berg 13299a2c73 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2024-02-01 11:19:12 +01:00
Bjarke Berg 49acf8b35c Merge remote-tracking branch 'origin/release/13.1' into v13/dev
# Conflicts:
#	version.json
2024-02-01 11:18:58 +01:00
Bjarke Berg 23ee6fa83f Merge remote-tracking branch 'origin/release/12.3' into v12/dev
# Conflicts:
#	version.json
2024-02-01 11:11:58 +01:00
Bjarke Berg adb67c709b Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-02-01 11:11:10 +01:00
Bjarke Berg 2735f17ed8 Merge remote-tracking branch 'origin/release/10.8' into v10/dev
# Conflicts:
#	version.json
2024-02-01 11:09:47 +01:00
Ronald BarendseandBjarke Berg 25139dabe0 Skip cache refresher operations for content blueprints (#15633)
* Skip cache refresher operations for content blueprints

* Fix JsonPayload deserialization error by adding a default constructor and property initializers

* Obsolete JsonPayload constructor and update usages
2024-02-01 10:29:31 +01:00
Bjarke Berg e7c53d4768 V10+ version of https://github.com/umbraco/Umbraco-CMS/pull/15638 (#15664) 2024-02-01 10:29:28 +01:00
Ronald BarendseandBjarke Berg 4aed6a1034 Skip cache refresher operations for content blueprints (#15633)
* Skip cache refresher operations for content blueprints

* Fix JsonPayload deserialization error by adding a default constructor and property initializers

* Obsolete JsonPayload constructor and update usages
2024-02-01 10:13:00 +01:00
Bjarke Berg ac02e97e0c V10+ version of https://github.com/umbraco/Umbraco-CMS/pull/15638 (#15664) 2024-02-01 10:01:52 +01:00
Ronald BarendseandBjarke Berg e37cf30690 Skip cache refresher operations for content blueprints (#15633)
* Skip cache refresher operations for content blueprints

* Fix JsonPayload deserialization error by adding a default constructor and property initializers

* Obsolete JsonPayload constructor and update usages

(cherry picked from commit 3e28e10cdf)
2024-02-01 10:00:42 +01:00
Bjarke BergandGitHub 118ac8e230 V10+ version of https://github.com/umbraco/Umbraco-CMS/pull/15638 (#15664) 2024-02-01 09:58:42 +01:00
Ronald BarendseandGitHub 3e28e10cdf Skip cache refresher operations for content blueprints (#15633)
* Skip cache refresher operations for content blueprints

* Fix JsonPayload deserialization error by adding a default constructor and property initializers

* Obsolete JsonPayload constructor and update usages
2024-02-01 09:55:09 +01:00
Elitsa MarinovskaandGitHub a562198520 Rename items to item to be consistent (#15660) 2024-02-01 09:23:10 +01:00
74db02c444 V14: Don't add published culture infos if not published (#15370)
* Don't add published infos if not published

* Unpublish all cultures as a whole

* Added tests

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-02-01 08:33:14 +01:00
Kenn JacobsenandGitHub d631ef1802 Move the ContentControllerBase to the correct location (#15656) 2024-01-31 16:22:15 +01:00
Bjarke Berg 94b8c11f0f Do not dispose EF Core contexts manually (#15649)
* Attempt to fix #15090. Save connection string in private variable after setup.

* Do not dispose ef core contexts when if the connectionstring changes.

A Ef core context is protected from creations when no connection string is present. If it changes that single instance will continue with the connection string it was initialized with.

* Clean up

* Review Equals methods

(cherry picked from commit 5146f05625)
2024-01-31 15:09:32 +01:00
Bjarke BergandGitHub 5146f05625 Do not dispose EF Core contexts manually (#15649)
* Attempt to fix #15090. Save connection string in private variable after setup.

* Do not dispose ef core contexts when if the connectionstring changes.

A Ef core context is protected from creations when no connection string is present. If it changes that single instance will continue with the connection string it was initialized with.

* Clean up

* Review Equals methods
2024-01-31 15:09:12 +01:00
0dd2beb484 V14: Update DataTypeControllerBase to use GetAllAsync() (#15641)
* Update to use GetAllAsync()

* Obsolete GetAll

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-01-31 15:00:47 +01:00
MoleandGitHub 008083f096 V14: Migration Cleanup (#15629)
* Remove obsoleted migrations

* Re-add default log queries

* Remove unused PreValueMigratorCollectionBuilder from DI

* Remove unused unit test

* Obsolete unused migrations

* Remove migrations prior to v13 from UmbracoPlan

* Fix whitespace

* Use array instead of IEnumerable

* Remove unused migrations
2024-01-31 12:45:56 +01:00
MoleandGitHub 7379a752f1 Obsolete old migrations (#15650) 2024-01-31 12:10:07 +01:00
AleksanderandBjarke Berg 5b102e3b8e Pass cache level to properties when creating published content in nucache
(cherry picked from commit d9d2b66e85)

# Conflicts:
#	src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs
(cherry picked from commit 040495f359)
2024-01-31 10:55:34 +01:00
AleksanderandBjarke Berg b18b6cc5e7 Pass cache level to properties when creating published content in nucache
(cherry picked from commit d9d2b66e85)

# Conflicts:
#	src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs
(cherry picked from commit 040495f359)
2024-01-31 10:52:01 +01:00
Sebastiaan Janssen db545a33e1 Merge branch 'v13/dev' into contrib 2024-01-31 10:49:42 +01:00
Kenn JacobsenandGitHub aaf7075313 Property level validation for Management API (#15644)
* Property level validation for content - initial implementation

* Always succeed create/update regardless of property level validation errors

* Move old complex editor validation classes to Web.BackOffice so they will be deleted

* Include operation status and property validation errors in ProblemDetails

* Refactor property validation to its own service(s)

* Make the problem details builder a little more generic towards extensions

* Validation for item and branch publish

* Moved malplaced test

* Get rid of a TODO

* Integration tests for content validation service

* Simplify validation service

* Add missing response types to create and update for document and media

* Remove test that no longer applies

* Use "errors" for model validation errors (property validation errors)

* Split create/update and validation into their own endpoints

* Fix forward merge

* Correct wrong assumption for missing properties

* Remove localization from validation error messages - decreases dependencies, adds a lot of obsolete constructors

* Reuse existing validation service + support custom error messages

* Fix merge errors

* Review comments
2024-01-31 10:40:58 +01:00
Jacob Overgaard e0e6dee896 update lockfile 2024-01-31 10:06:35 +01:00
Elitsa MarinovskaandBjarke Berg 7a04baf9ef V10: Pass in variation context to published cache (#15563)
* Make sure that we always have variation context

* Fix references

(cherry picked from commit 57b3a196bf)
2024-01-30 15:57:33 +01:00
Sven GeusensandBjarke Berg bc1ddaed8c Run the same cleanup with scaffolding content as when copying. (#15541)
* Run the same cleanup with scaffolding content as when copying.

- Added a new ContentScaffoldedNotification
- Published the notification when a new scaffold has been created from a blueprint (content template)
- Linked up the ComplextPEContent handler to do the same cleanup for the new notification as when copying.
- registered handlers to the event for blocklist, blockgrid and nested content

* PR pattern matching suggestion

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
(cherry picked from commit dff90c6ec0)
2024-01-30 15:54:33 +01:00
Bjarke Berg 860afb35f2 Bump version 2024-01-30 15:53:21 +01:00
Bjarke Berg ec25c3a61d Bump version 2024-01-30 15:52:25 +01:00
Bjarke Berg b22c7b5350 Bump version 2024-01-30 15:51:11 +01:00
Bjarne FyrstenborgandGitHub f9bdbb0539 Media picker crop image size (#15574)
* Remove empty comment

* Formatting

* Return full size for image crop like Image Cropper does
2024-01-30 12:43:44 +00:00
8c8405bbbf V14: Fix up install controller (#15646)
* Rename InstallVResponseModel to InstallRequestModel

* Align SettingsInstallController

* Rename split DatabaseInstallResponseModel in two

* Change UserInstallResponseModel to UserInstallViewModel

* Use PresentationModel instead of ViewModel

* Use operation status pattern when validating database

* Prepare for install to return a message

* Begin updating steps

* Make StepBase sharable between upgrade and install

* Update steps

* Use error message from install steps in install controller

* Use error message from upgrade steps in upgrade controller

* Use 500 for install/upgrade failed

It's entirely likely that it has nothing to do with the request

* Updated OpenApi.Json

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2024-01-30 13:12:08 +01:00
Kenn JacobsenandGitHub 9b454bec6b Model mapping PoC (#15546)
* First take at new models for improved mapping between client and server

* Add variants to Media

* Re-introduced lost names

* Start breaking apart "Id" reference properties in request models as well

* Refactor to fix OpenAPI spec

* Discard TODO (not relevant)

* Split recycle bin response models

* Delete unused marker interface

* Use reference properties for content and media type handling

* Rework document and media types to be explicit in relations (do not expose "content type", it is an implementation detail)

* Mapping for document and media type copy + move

* Ensure correct response model for Media

* Regenerate OpenAPI JSON after forward merge

* Fix forward merge issues

* Fix forward merge + regenerate OpenApi.json

* Added unit tests for content state helper

* Move "allowed document types" endpoint to document type silo, refactored services and added "allowed media types"

* Regenerate OpenApi.json after forward merge

* Do not include content state for media items

* Review fix
2024-01-30 12:19:05 +01:00
Rachel DrakeandMichael Latouche 2d2d17d928 Fixing #14088.
Match content finder functionality in the url provider for umbracoUrlAlias.
2024-01-30 03:02:42 +01:00
Erik-Jan WestendorpandGitHub 7256d49761 Use constants for all webhook event aliases (#15492)
* Use constants for all webhook event aliases

* Fix
2024-01-30 02:52:50 +01:00
bb46d23730 V14 Bugfix, fixed some of the document controllers (#15449)
* Updated naming to route correctly

* Added a check for null

* Added another status code for the PublicAccess

* Added a check for null

* Updated naming to match route

* Added attempt pattern

* added a ProblemDetailsBuilder for the EntryNotFound

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-01-29 12:58:03 +01:00
Ronald BarendseandGitHub 9799c550f4 Create shadow file systems in configured LocalTempPath (#15637) 2024-01-29 08:48:45 +01:00
Nikolaj Brask-NielsenandGitHub 860acd7ba1 feat: Make JSON tag value fallback (#14856)
* feat: Make JSON tag value fallback

* feat: Make fix more concise

* feat: Add try catch
2024-01-28 10:40:24 +01:00
Bjarne FyrstenborgandMichael Latouche 62bc748a87 Map webhook id property 2024-01-26 22:29:06 +01:00
MrJackWilsonandGitHub f1db40392f Fix for issue 15598 (#15617)
* Make GetIndexValues virtual

* First try get values as JSON. If empty, try as CSV.
2024-01-26 22:09:56 +01:00
Jacob Overgaard aea9b79513 update backoffice submodule 2024-01-26 15:55:30 +01:00
Nikolaj GeisleandGitHub e7749ecb58 V14/feature/more configuration endpoints (#15603)
* Add template configuration endpoint

* Implement template endpoint

* rename template configuration response model

* Implement package configuration endpoint

* Add media configuration endpoint

* Implement document configuration endpoint

* Refactor enabled to disabled

* implement document type configuratio endpoint

* Add required to view model properties

* Update OpenApi.json
2024-01-26 11:03:22 +01:00
Jacob Overgaard 170d91c183 ignore wwwroot in new ui temp project 2024-01-25 14:22:47 +01:00
Jacob Overgaard 2c13ce8877 add wwwroot/media to .gitignore 2024-01-25 14:20:47 +01:00
Sven Geusens fd8c31908d Merge branch 'release/13.1.0' into v13/dev
# Conflicts:
#	version.json
2024-01-25 12:40:32 +01:00
Andreas ZerbstandGitHub a93980b64c V14 Acceptance Test for the Package Section (#15618)
* In progress tests

* Updated createdPackaged tests

* Added test for checking if we are able to see the marketplace

* Added tests for checking if the correct message is shown

* Made quite a lot of changes, used the locators in the testHelpers. Added additional tests

* Updated to match changes to the Ui TestHelpers

* Fixed test

* added package file

* Bumped versions

* Updated naming

* Fixed Acceptance Test to match patterns

* Updated locator in test.

* Added Act comment

* Followed comments from PR
2024-01-25 16:56:25 +07:00
Jacob Overgaard 802e5a8c27 update apidocs ui section to Umbraco 13 2024-01-24 16:29:00 +01:00
Bjarke Berg d8eef9eca5 Fix build 2024-01-24 11:24:40 +01:00
Bjarke Berg 91119308a2 Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2024-01-24 11:12:45 +01:00
MoleandGitHub 76181a8af4 V14: Migrate JsonConfigManipulator to System.Text.Json (#15609)
* Minor cleanup

* Remove old obsoleted property

* Reimplement save connection string

* Remove old method using newtonsoft

* Implement RemoveConnectionStringAsync

* Implement SaveConfigValue

* Implement SaveDisableRedirectUrlTracking

* Cleanup

* Implement SetGlobalIdAsync

* Fix recursive default implementation

* Split manipulating dom and saving json

Otherwise SaveConnectionStringAsync would write twice.

* Add some documentation strings

* Reduce indentation

* Obsolete non-async methods

* Move JsonConfigManipulator to correct namespace and make it internal
2024-01-24 11:07:18 +01:00
Sven Geusens 0821fb64bb version bump 2024-01-24 10:47:06 +01:00
Bjarke Berg 7a6b316f4b Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/NestedContentPropertyEditor.cs
#	src/Umbraco.Web.BackOffice/Security/BackOfficeSignInManager.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueEditorReuseTests.cs
#	version.json
2024-01-24 08:36:55 +01:00
Jacob Overgaard 80df1d17db Merge branch 'release/14.0' into v14/dev 2024-01-23 18:59:45 +01:00
Bjarke Berg a12361deb5 Fixed test 2024-01-23 18:56:47 +01:00
aaca7a5ff4 2FA for users in management API (#15607)
* Added 2FA management endpoints

* Ensure not found do not lead to forbidden results

* Do not inherit the requirement to have access to users, from the current user base class

* Updated OpenApi.json

* Handle 2FA in login scenario (only backend)

* Added the endpoint to use for client to post 2FA code

* Fixed tests and allow injecting the authentication type settings

* fix test build

* Fallback to use Constants.Security.BackOfficeAuthenticationType

* remove unused variable

* Review fixes

* Build fix

* Update src/Umbraco.Cms.Api.Management/Controllers/User/Current/DisableTwoFactorProviderCurrentUserController.cs

Co-authored-by: Sven Geusens <geusens@gmail.com>

* Handle case where 2fa provider is already setup

---------

Co-authored-by: Sven Geusens <geusens@gmail.com>
2024-01-23 18:07:21 +01:00
Jacob Overgaard e9082dafa6 clean apidocs before upload 2024-01-23 16:43:27 +01:00
Jacob Overgaard 71651decbc variables probably do not work without a real stage dependency 2024-01-23 16:38:16 +01:00
Bjarke Berg 61a28c9b34 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2024-01-23 16:21:59 +01:00
Bjarke Berg c24cd2e53b Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2024-01-23 16:20:48 +01:00
Bjarke Berg 1886553148 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-01-23 16:20:24 +01:00
Ronald BarendseandGitHub b7e43a8def Get references from macro parameters using IDataValueReferenceFactory (#15625) 2024-01-23 16:08:17 +01:00
Jacob Overgaard bfb500612a bump version to 14.0.0--preview005 2024-01-23 15:34:28 +01:00
Bjarke Berg b3d6c60ce2 Revert breaking changes 2024-01-23 14:46:58 +01:00
Bjarke Berg 4421b920f0 Revert breaking changes 2024-01-23 14:26:47 +01:00
Bjarke Berg b853a5e14a Revert breaking changes 2024-01-23 14:11:42 +01:00
Jacob Overgaard 7b99bdea9d remove unused parameter 2024-01-23 13:48:03 +01:00
Bjarke Berg 088f907dcc Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollection.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorPropertyValueEditor.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueEditorReuseTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollectionTests.cs
2024-01-23 13:40:07 +01:00
Jacob Overgaard 789c47eb98 update backoffice submodule (signout) 2024-01-23 09:54:52 +01:00
8bf8483dcb V14 QA Added acceptance tests for Dictionary (#15479)
* Bumped version of TestHelper

* Added .udt test files

* Updated api tests for Dictionary

* Added ui tests for Dictionary

* Updated ui tets for Dictionary as TestHelper is changed

* Updated ui tests of Dictionary

* Updated verify step

* Fixed comments

* Imported crypto into Dictionary.spec.ts

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>

* Fixed format

---------

Co-authored-by: Andreas Zerbst <73799582+andr317c@users.noreply.github.com>
2024-01-23 09:47:23 +01:00
Bjarke Berg 5b44503577 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollection.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/NestedContentPropertyEditor.cs
2024-01-23 09:40:07 +01:00
Bjarke Berg e55921ce80 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-01-23 09:35:52 +01:00
Jacob Overgaard e21932283c update backoffice submodule 2024-01-23 09:07:48 +01:00
Bjarke Berg 0760fbd702 Increase timeout so we can figure out which tests are slow 2024-01-23 08:49:25 +01:00
26761cc04a Implemented culture based authorization for content (#15580)
* Implemented culture based authorization for content

* Implemented culture auth for create/update of documents

* Applied culture authorization to dictionary create/update

* Added an integration test to test an assumption about the ContentTypeEditingService.CreateAsync method

* Fix processing when result is already false;

* Apply suggestions from code review

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Refactor method to async + clarify and consilidate comments regarding dictionary locks

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-01-22 21:08:20 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
e04c4a89ad Bump vite from 4.5.1 to 4.5.2 in /src/Umbraco.Web.UI.Login (#15616)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.1 to 4.5.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.2/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-22 16:59:49 +01:00
acc71b6d45 Add management api delete document endpoints (#15600)
* Added Delete document endpoint

* Added delete from recylebin endpoint

Added/restructured unittests

* Clarifications

* Moved document specific mapping from base recyclebin to document recyclebin

* Refactor OperationStatusResult mapping trough inheritance

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2024-01-22 15:58:18 +01:00
Bjarke BergandGitHub 5940a54585 Updated minor and patch dependencies. (#15619) 2024-01-22 15:40:26 +01:00
Ronald BarendseandGitHub cdbbd6a921 Optimize relation tracking for adding new and keeping existing relations (#15596)
* Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)

* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations (#15160)

* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations

* Always get all automatic relation type aliases

* Do not set relation type alias for unknown entity types

* Get references from recursive (nested/block) properties

* Optimize relation tracking for adding new and keeping existing relations

* Optimize getting references by grouping by property editor alias and avoiding duplicate parsing of the same value
2024-01-22 14:53:20 +01:00
Elitsa MarinovskaandGitHub bb0395349f V14: Fix composition endpoints namespaces (#15620)
* Fix namespace in media type related classes

* Fix namespace in document type composition related classes
2024-01-22 14:11:11 +01:00
Jacob OvergaardandGitHub f3ed935213 allow the blockeditormodelobject.service.js to fall back to -20 for currentPageId if we are not in an editor mode (#15615)
we detect the editor mode by checking for `contentTypeKey` which only exists on content contexts
2024-01-22 13:37:15 +01:00
e4f9f98f2d File system endpoints redo (#15521)
* First stab at a massive remake of file system based endpoints

* Do not prefix system paths with directory separator char

* Ensure correct and consistent response types

* Fix partial view snippets endpoints

* Clean up IO (path) operations

* Update OpenAPI JSON to match new endpoints

* Return 201 when renaming file system resources

* Add "IsFolder" to file system item endpoints

* Replace "parentPath" with a "parent" object for file system creation endpoints

* Update OpenAPI JSON

* Rewrite snippets

* Regenerate OpenAPI JSON after forward merge

* Remove stylesheet overview endpoint

* Regenerate OpenAPI JSON after forward merge

* add server-file-system module to importmap

* Expose generated resource identifier in 201 responses

---------

Co-authored-by: Mads Rasmussen <madsr@hey.com>
2024-01-22 08:20:45 +01:00
Liam LavertyandGitHub dd3ab3a0dc Temp/15591 serilog string conventions (#15592)
* Updaets `MigrationPlanExecutor.cs` to use serilog convention for strings

* Updaets `ExamineManagementController.cs` to use serilog convention for strings

* Updaets `HelpController.cs` to use serilog convention for strings

* Updaets `PreviewAuthenticationMiddleware.cs` to use serilog convention for strings
2024-01-22 02:57:58 +01:00
Bjarke Berg bee20b525f Post merge fix 2024-01-20 11:26:40 +01:00
f5096ba8f3 Now properly checks the lockedoutdate (#14908)
* Now properly checks the lockedoutdate

* Also fix Test (failed constructor)

* Processed feedback

* Added obsolete constructor

---------

Co-authored-by: Ambert van Unen <AvanUnen@ilionx.com>
2024-01-20 01:33:11 +01:00
Bjarke Berg fbf3e6dc71 Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	src/Umbraco.Core/Composing/BuilderCollectionBase.cs
2024-01-19 20:15:50 +01:00
Ronald BarendseandBjarke Berg ce22315520 Backport relation tracking fixes and get references from recursive (nested/block) properties (#15593)
* Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)

* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations (#15160)

* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations

* Always get all automatic relation type aliases

* Do not set relation type alias for unknown entity types

* Get references from recursive (nested/block) properties

(cherry picked from commit 5198e7c52d)
2024-01-19 20:06:41 +01:00
Ronald BarendseandGitHub 5198e7c52d Backport relation tracking fixes and get references from recursive (nested/block) properties (#15593)
* Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)

* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations (#15160)

* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations

* Always get all automatic relation type aliases

* Do not set relation type alias for unknown entity types

* Get references from recursive (nested/block) properties
2024-01-19 20:02:57 +01:00
LFLavertyandLaura Neto 4bc36a7eb8 Updates to the new media article link 2024-01-19 17:51:49 +01:00
Jacob Overgaard 681903a1a7 update backoffice submodule 2024-01-19 13:32:33 +01:00
Søren KottalandSven Geusens bc803ae78b Fix RTE block rendering failing (#15583)
Adds optional class attribute to regex responsible for parsing RTE values to block models
2024-01-19 13:22:46 +01:00
Søren KottalandGitHub b0b98865c6 Fix RTE block rendering failing (#15583)
Adds optional class attribute to regex responsible for parsing RTE values to block models
2024-01-19 13:21:17 +01:00
1fe39de589 Add missing empty recycle bin endpoints (#15602)
* Added empty document recyble bin

* Made EmptyDocumentRecycleBinController leaner

Cleaned up obsolete constructor

* Added empty media recycle bin endpoint

* Cleanup

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2024-01-19 10:58:33 +01:00
Jacob Overgaardandleekelleher 9df6e65552 V13: Rich text editor does not show its toolbar on grid layout rte's (#15595)
* synchronize normal rte with grid-rte

* restore pinToolbar and unpinToolbar from v10 and update to tinymce v6 and apply to grid-rte

* linting

* Reverting `pinToolbar` from v8

* remove unused variable

---------

Co-authored-by: leekelleher <leekelleher@gmail.com>
2024-01-19 09:11:40 +01:00
9196d7ad00 V13: Rich text editor does not show its toolbar on grid layout rte's (#15595)
* synchronize normal rte with grid-rte

* restore pinToolbar and unpinToolbar from v10 and update to tinymce v6 and apply to grid-rte

* linting

* Reverting `pinToolbar` from v8

* remove unused variable

---------

Co-authored-by: leekelleher <leekelleher@gmail.com>
2024-01-18 13:19:36 +01:00
Jacob Overgaard 14299b6674 bump version to 13.2.0-rc 2024-01-17 15:10:14 +01:00
Kenn JacobsenandGitHub 5429aa78a5 "Created at" responses should not have a response body (#15590) 2024-01-17 13:37:24 +01:00
43791c2b33 v14: Merge NewBackOfficeSettings into SecuritySettings. (#15586)
* Merge NewBackOfficeSettings into SecuritySettings.

* Apply suggestions from code review

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>

* Remove hardcoded callback path

---------

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2024-01-17 13:26:09 +01:00
547da0b191 V14: Composition endpoints for Document and Media types (#15584)
* Adding response/request models

* Adding mapping

* Adding factory

* Adding controllers

* Moved to correct (generic domain) namespace

* Renamed to reflect the correct domain + renamed IsAllowed to IsCompatible

* Renaming + TODO

* Removed presentation logic + TODO

* Fixed controller

* Attempt for generic implementation

* Enable composition of media types + refactor content/media type editing tests to prove it (and a little renaming of a mis-named property)

* Remove unused classes

* Introducing GetAvailableCompositionsAsync to EditingServices

* Implement GetAvailableCompositionsAsync

* Base share implementation

* Tests

* Tests

* Renaming

* Clean up controller

* Clean up test

* Remove redundant check

* Create and use generic models

* Add shared implementation

* Fix and rename doc type mapper

* Fix document Type factory

* Add missing response type

* Create a base request model

* Make key nullable when new item

* Media type response models

* Default isElement to false and remove isElement param from media type related things

* Create mappings for media type compositions

* Inject generic base service to reuse implementation amongst concrete services

* Add new composition endpoints for media type

* Use specific type

* Add a reference comment to other test suite

* Add more test cases

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-01-17 08:36:27 +01:00
Erik-Jan WestendorpandMichael Latouche 8088b726b4 localize webhook edit view 2024-01-17 02:09:59 +01:00
40a28a938c Management API for dynamic root and query steps. (#15505)
* Added management API for dynamic root and query steps.

* Open API

* Split models, use required and rename a little

* Rename query steps

* Make request culture and segment optional

* Introduce explicit back-office variation context

* Simplify query endpoint path

* Correct field naming

* Updated OpenApi.json

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-01-16 07:47:43 +01:00
Jacob Overgaard 852f0fb4a6 update backoffice submodule 2024-01-15 14:26:41 +01:00
Kenn JacobsenandGitHub a70c606c27 Do not log direct query inputs (#15577) 2024-01-15 14:14:27 +01:00
Jacob Overgaard 201433fb71 update backoffice submodule 2024-01-15 11:57:59 +01:00
Jacob Overgaard 3f65046a7d update backoffice submodule 2024-01-15 11:45:35 +01:00
Bjarke Berg ea9226f169 Fixed exception type 2024-01-13 22:24:44 +01:00
Bjarke Berg eb8a27016e Fix merge issue with an old package reference 2024-01-13 21:27:24 +01:00
Bjarke Berg 9811eaebeb Post merge fix 2024-01-13 20:47:16 +01:00
Bjarke Berg aa6f704353 Merge remote-tracking branch 'origin/v14/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/BackgroundJobs/Jobs/OpenIddictCleanupJob.cs
2024-01-12 13:34:30 +01:00
664da17c39 V14 QA Fixed the failed acceptance tests (#15527)
* Fixed failing tests

* Updated tests to use the updated helpers

* Clean up tests

* Enabled our pipeline for E2E testing

* Updated the CMS URl for our E2E tests

* Bumped version of our testHelpers

* Did some fixing, still a bit more to do

* Updated auth tests to use LoginUiHelper

* Updated Telemetry tests to use TelemetryUiHelper

* Updated LogViewer tests to use LogViewerUiHelper

* Updated api tests to apply AAA pattern and fix failed tests

* Removed unused import

* Fixed comments

* Bumped version of test helper

* Updated the version to 10 instead of 11

* Updated the package-lock.json file to contain the correct versions

* Added a waitForTimeout
The reason for this is that this test is failing on the pipeline

* Bumped version of testhelpers

* Removed TODO

* Updated EnsurePathExists so we create the stylesheet and scripts folder

* Added a waits for response, otherwise our test would be too fast

* Sometimes it reloads before the save is complete

* Added timeout for locator

* Removed duplicate

* Wait until save

* This was an actual bug, so we should not use a workaround, we should fix it

* Skips the tests for script.

* Bug was fixed, so this can be used again

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2024-01-12 13:32:25 +01:00
Andy ButlandandGitHub 49f5d2e2d4 Updates JSON schema for Umbraco 10 to include details of additional configuration introduced in Forms and Deploy. (#15566) 2024-01-12 13:13:20 +01:00
MoleandGitHub a8fd00a3b4 Make an exception for root path (#15570) 2024-01-12 12:29:23 +01:00
c5c24d36d9 V14: Copy and move endpoints for content and media types (#15553)
* Create new request models

* Create new structural operation status

* Handling of new structural operation status

* New CopyAsync and MoveAsync

* New endpoints

* Update schema

* Adding NotFound status

* Adding BadRequest response type

* Moving getbyid check to service

* Fix signature and implement get by id check in service

* Update OpenApi schema

* Use PUT instead of POST in "move" controllers

* Use PUT instead of POST in some more "move" controllers

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-01-12 08:59:21 +01:00
Ronald BarendseandBjarke Berg 05921ee6cc Refactor System.Runtime.Caching to Microsoft.Extensions.Caching.Memory 2024-01-11 14:26:19 +01:00
Ronald BarendseandBjarke Berg ace5c54da2 Remove unused/untested dependent files support from IAppPolicyCache 2024-01-11 14:25:54 +01:00
Bjarke BergandGitHub e291fae01e Migrated ReportSite, OpenIddictCleanup and TemporaryFileCleanup to background jobs (#15555)
* Migrated ReportSite, OpenIddictCleanup and TemporaryFileCleanup to the new background jobs introduced in v13.

* Fixed delay and period
2024-01-11 13:18:10 +01:00
Nikolaj Geisle 597d8553c0 bump version.json 2024-01-11 12:49:33 +01:00
Elitsa MarinovskaandGitHub 57b3a196bf V10: Pass in variation context to published cache (#15563)
* Make sure that we always have variation context

* Fix references
2024-01-11 12:46:31 +01:00
MoleandGitHub 416c19854d V14: Migrate examine integration tests to V14 (#15536)
* Begin migrating test to use new service calls

* Fix formatting

* Add todo to add timeout so our tests dont stall entirely

* Add timeout so tests can run

Still need to figure out why the index only seems to update sometimes

* Migrate BackOfficeExamineSearcherTests to use new service calls

* Remove unused imports

* Migrate to languageservice in external index searcher test

* Use seperate save and publish calls

* Use scopes in ExamineExternalIndexTests

* Use scopes in BackOfficeExamineSearcherTests
2024-01-11 11:12:47 +01:00
8516a7b2e5 V14: Add security related configurations (#15557)
* Implement user configuration endpoint

* Add password configuration factory

* refactor users to use new password configuration model

* Implement current user configuration endpoint

* Add auth policy

* Refacor current user to use PasswordConfigurationReponseModel

* Implement configuration security controller

* Rename property to less confusing name

* Add version to ConfigurationSecurityController.cs

* Review changes

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-01-11 10:30:22 +01:00
d3dc85f31f Only update security stamp once per request (#15562)
* Add item in requestcache when security stamp is already updated in request

* Propagate constructur obsoletion to implementing services and fix unit tests

---------

Co-authored-by: kjac <kja@umbraco.dk>
2024-01-11 10:20:58 +01:00
Jacob OvergaardandGitHub b916c85738 V13: TinyMCE does not toggle plugin buttons (#15558)
* bump tinymce from 6.8.1 to 6.8.2

* replace stateSelector with appropriate onSetup() functionality and replace addButton() with addToggleButton() to support toggling
2024-01-10 15:30:51 +01:00
Niels LyngsøandGitHub 83a0bf4f4b Fix: No Blocks Mode for RTE when required context for Blocks is not present (#15556)
* noBlocksMode

* another blockEditorApi check
2024-01-10 14:53:26 +01:00
Sven GeusensandZeegaan 9da46462f7 Run the same cleanup with scaffolding content as when copying. (#15541)
* Run the same cleanup with scaffolding content as when copying.

- Added a new ContentScaffoldedNotification
- Published the notification when a new scaffold has been created from a blueprint (content template)
- Linked up the ComplextPEContent handler to do the same cleanup for the new notification as when copying.
- registered handlers to the event for blocklist, blockgrid and nested content

* PR pattern matching suggestion

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
(cherry picked from commit dff90c6ec0)
2024-01-10 12:27:11 +01:00
dff90c6ec0 Run the same cleanup with scaffolding content as when copying. (#15541)
* Run the same cleanup with scaffolding content as when copying.

- Added a new ContentScaffoldedNotification
- Published the notification when a new scaffold has been created from a blueprint (content template)
- Linked up the ComplextPEContent handler to do the same cleanup for the new notification as when copying.
- registered handlers to the event for blocklist, blockgrid and nested content

* PR pattern matching suggestion

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-01-10 12:22:36 +01:00
33f2b26bf6 [v14] Absolute media urls (#15503)
* Made a replaceble solution to support absolute urls for media/user avatars in the management API

* PR suggestion

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* PR suggestion

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* PR suggestion/fix and added missing switch case

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2024-01-10 10:01:06 +01:00
a6ccd5a7a9 Implement temporary file configuration endpoint (#15518)
* Implement temporary file configuration endpoint

* Update MaxfileSize to be a string.

* Make max file size a nullable integer

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-01-10 09:20:29 +01:00
Bjarke Berg 5f4c8ea0bf Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
2024-01-10 08:36:50 +01:00
Bjarke Berg f381e8391c Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs
2024-01-10 08:32:02 +01:00
Bjarke Berg a4f6c5d355 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2024-01-10 07:46:45 +01:00
Bjarke Berg 4463d04850 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2024-01-10 07:44:30 +01:00
3acda751b9 v14: Add Preview controller (#15481)
* Add Preview controller

* Implement PreviewService

* Add tests for endpoints.

* Add Authorization to previews

* Apply suggestions from code review

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2024-01-09 15:51:59 +01:00
dependabot[bot]andSebastiaan Janssen 2e61d6449a Bump follow-redirects in /src/Umbraco.Web.UI.Client
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.9 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.9...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-09 10:57:36 +01:00
dependabot[bot]andSebastiaan Janssen e8eec901d1 Bump follow-redirects in /tests/Umbraco.Tests.AcceptanceTest
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.3 to 1.15.4.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.3...v1.15.4)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-09 10:57:13 +01:00
Sebastiaan Janssen 94e8bc1db6 Merge branch 'v13/dev' into contrib 2024-01-09 08:59:48 +01:00
Markus JohanssonandSebastiaan Janssen 704aebed0c Fixes #15512 to allow curly braces in anchors 2024-01-08 15:23:25 +01:00
AleksanderandSebastiaan Janssen 040495f359 Pass cache level to properties when creating published content in nucache
(cherry picked from commit d9d2b66e85)

# Conflicts:
#	src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs
2024-01-08 14:42:17 +01:00
JesmoDevandGitHub 06fdf8d3dc use opacity instead of hardcoded color (#15534) 2024-01-08 09:41:37 +01:00
Jacob OvergaardandGitHub 77861ae55b V13: Load TinyMCE premium plugins through tiny.cloud (#15367)
* add tinymce cloud api key to configuration

* forward apikey through proxied config object after retrieving it from the server

* load the plugins.min.js file from tiny.cloud if cloud api key is set

* bump tinymce from 6.7.3 to 6.8.1

* disable premium promotion and make plugins unique

* make sure tinymce local assets are loaded before trying to load the plugins.js from cloud and before configuring tinymce
2024-01-08 08:58:57 +01:00
alevak09andGitHub cceabf88cd Update hr.xml (#15413)
Update croatian translation language file
2024-01-05 16:24:54 +00:00
Bjarne FyrstenborgandGitHub 425023f83b Ensure datepicker input is cleared (#15338) 2024-01-05 15:23:57 +00:00
Erik-Jan WestendorpandMichael Latouche 6c725dbd67 Fix aliases 2024-01-03 13:20:12 +01:00
Andy ButlandandGitHub 99119a506f Ensured removal of any auto-relations from custom relation types used in nested property values, to ensure there will be no duplicate error when the relations are saved. (#15447) 2024-01-03 10:50:58 +01:00
Shannon DeminickandGitHub a36c7beabf Decouple Lucene from Content Delivery API (#15493)
* Decouples Lucene from the Content Delivery API

* oops removes other refs
2024-01-02 16:20:53 +01:00
c937d0f2ed V14/feature/management tree count by take zero (#15308)
* Allow Tree endpoints that query entities to return count without entity data

* Apply count by take 0 in FileSystem Endpoints

* Apply count by take 0 in Dictionary Endpoints

* Apply count by take 0 in RootRelationType Endpoints

* Revert PaginationService takeZero flag as it only guards against things that already blow up

* Mark PagedResult as Obsolete as we want to step away from classic pagination system to skip/take

* Pushed management api RelationType pagination and async preperation down to the service layer

* Scope fix and allocation optimizations

* Pushed management api dictionary pagination and down to the service layer

Also did some nice allocation optimizations

* PR feedback + related strange count behaviour

* Moved count by pagesize logic from EntryController to service

* A tiny bit of formatting and comments

* Fix bad count filter logic

* Added integration tests for creating datatypes in a folder

* Added tests for count testing on TreeControllers

- ChildrenDataType
- RootDataType
- ChildrenDictionary
- RootDictionary
- ChildrenDocument
- RootDocument
- RootBluePrint
- RootDocumentType
- ChildrenDocumentType

* Revert "Added tests for count testing on TreeControllers", should be on services

This reverts commit ee2501fe62.
This reverts commit 808d5b276f.

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2024-01-02 13:53:24 +01:00
Elitsa MarinovskaandGitHub f3cb8fe117 V14: User token revocation and session sign-out (#15511)
* Fix token revocation endpoints registration for .well-known

* Add logout and revocation endpoints to OpenIddict permissions

* Register urls for post_logout_redirect_uri

* Create /signout endpoint
2024-01-02 13:42:39 +01:00
Sebastiaan Janssen 6258fa6a35 Merge branch 'v13/dev' into contrib
# Conflicts:
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Core/EmbeddedResources/Lang/en.xml
#	src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
2024-01-02 10:33:35 +01:00
674c48ab9a V14: Add optional key to template create model (#15471)
* Implement Id for request model

* Make key optional

* Add test for use case

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2024-01-02 08:57:07 +01:00
f026010102 Implement server configuration (#15507)
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-12-29 13:47:44 +01:00
Bjarke Berg 1bf13b4ad4 Remove legacy file upload attribute usage 2023-12-22 15:49:33 +01:00
Bjarke Berg 6395feb3a3 Remove the DataTypeSplitDataCollector.cs 2023-12-22 15:48:53 +01:00
Bjarke Berg 1e849ad539 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Build.props
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
2023-12-22 14:19:04 +01:00
Bjarke Berg 8b82addd53 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-12-22 14:11:21 +01:00
Bjarke Berg 3538737681 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-12-22 14:10:57 +01:00
Bjarke Berg b0c5101b2b fix build 2023-12-22 14:10:00 +01:00
Bjarke Berg 23341c8f35 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-12-22 14:06:50 +01:00
Bjarke Berg 4489cf45d1 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-12-22 14:06:05 +01:00
Bjarke Berg 91e37b80e3 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-12-22 14:05:12 +01:00
Bjarke Berg a2ad95d965 Change content 2023-12-22 13:49:57 +01:00
Bjarke Berg 64f2447c0e Added script to update default version 2023-12-22 13:15:13 +01:00
Bjarke Berg b648126d19 Use wildcard as default valid 2023-12-22 12:59:13 +01:00
fc71724386 V14: Server information (#15497)
* Rename information endpoint to troubleshooting

* Rename information endpoint to troubleshooting

* Add new information endpoint

* Fix bad merge

* Add InformationServerController.cs back

* Update serverTime offset to non hard-coded value.

* Add dictionary to swagger models

* Update OpenApi.json file

* Rename map definition

* Add ServerConfigurationBaseModel

* Implement ServerConfigurationBaseModel.cs

* Updated OpenApi

* Updated endpoint to return correct type in openapi

* Use explicit class for server information

* Remove version endpoint, as that is contained in server information.

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-12-22 10:21:11 +01:00
8acb5665e8 Add post and delete methods to user-group/id/users to add/remove user… (#15490)
* Add post and delete methods to user-group/id/users to add/remove users from group

* Update OpenApi contract

* PR feedbac

Moved fetch usergroup logic into service layer
Renamed methods to async

* Naming

* Introduced user not found on UserGroupOperationStatus, as otherwise the return message is wrong

* Added authentication

* Removed authorization from the service layer as its determined that that responsibiliity does not belong there.

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-12-22 08:05:45 +01:00
Bjarke Berg 52810b9ee1 Merge branch 'release/13.0' into v13/dev
# Conflicts:
#	version.json
2023-12-21 19:16:44 +01:00
Bjarke Berg a0f3c158df Bump version 2023-12-21 14:56:26 +01:00
Ronald BarendseandBjarke Berg 1e55ac97cd Ensure artifact dependency keeps correct mode, ordering and checksum values (#15500)
(cherry picked from commit f705479767)
2023-12-21 14:56:06 +01:00
Ronald BarendseandGitHub f705479767 Ensure artifact dependency keeps correct mode, ordering and checksum values (#15500) 2023-12-21 14:55:43 +01:00
812b414d96 Batched more update calls to avoid Sql paramater count error (#15487)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-12-21 09:43:37 +01:00
Bjarke Berg 4b3131fda4 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-12-20 15:17:37 +01:00
Bjarke Berg 5b29843b9f Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-12-20 15:13:55 +01:00
Bjarke Berg c1766b0c57 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-12-20 15:13:24 +01:00
Bjarke Berg 851e060a25 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-12-20 15:13:06 +01:00
Bjarke Berg 0b811d6648 Reenabled package validation and fixed breaking change in test 2023-12-20 13:36:01 +01:00
Bjarke Berg 28fc85a96c Merge remote-tracking branch 'origin/release/13.0' into v13/dev
# Conflicts:
#	version.json
2023-12-20 09:52:57 +01:00
Bjarke Berg b1d9573e47 Merge remote-tracking branch 'origin/release/12.3' into v12/dev
# Conflicts:
#	version.json
2023-12-20 09:52:16 +01:00
Bjarke Berg ec91c47158 Merge remote-tracking branch 'origin/release/10.8' into v10/dev
# Conflicts:
#	version.json
2023-12-20 09:51:14 +01:00
Kenn JacobsenandBjarke Berg e8a81e30b1 Add policies for content template handling (#15482) 2023-12-19 14:22:09 +01:00
Bjarke Berg 11cef81c77 Bump version 2023-12-19 14:21:00 +01:00
Kenn JacobsenandBjarke Berg e34b2c09e0 Add policies for content template handling (#15482) 2023-12-19 14:20:31 +01:00
Kenn JacobsenandGitHub e04a41be45 Add policies for content template handling (#15482) 2023-12-19 14:18:48 +01:00
78850087f8 Added a temporary DataCollector for v14 editorAlias migrations (#15463)
* Added a temporary DataCollector for v14 editorAlias migrations

* PR feedback

Do not run the collector on subscribers or non running instances
Reduced logger noise

* Extra v14 sanity check

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-12-19 14:18:10 +01:00
Jacob Overgaard 7694588c86 update backoffice submodule 2023-12-18 14:32:32 +01:00
Jacob OvergaardandGitHub 650a9dad3b add the cors policy as first item on the pipeline filter (#15472)
this ensures that any assets loaded as "modules" also get the right Access-Control-Allow-* headers
2023-12-18 14:19:53 +01:00
Kenn JacobsenandGitHub c2b970d0de Make "create folder" return HTTP 201 Created for file system folders (#15459)
* Make "create folder" return 201 and add expected return types to "create" and "delete" for all file system folder endpoints

* Update OpenApi.json
2023-12-18 11:01:53 +01:00
Chris Fitz-AvonandBjarke Berg 38f7df2b0c Remove content section access policy from GetAllLanguages endpoint. #15435 (#15450)
(cherry picked from commit cedfdcc9b2)
2023-12-18 08:27:01 +01:00
Bjarke Berg f9ea546c66 Bump version 2023-12-18 08:26:38 +01:00
Chris Fitz-AvonandBjarke Berg d5156aced2 Remove content section access policy from GetAllLanguages endpoint. #15435 (#15450)
(cherry picked from commit cedfdcc9b2)
2023-12-18 08:25:00 +01:00
Bjarke Berg fa9b0e4718 Bump version 2023-12-18 08:23:34 +01:00
Bjarke BergandGitHub bf498b411c RebuildOnStartupHandler should not inject ExamineIndexRebuilder, but only the interface (#15465) 2023-12-18 06:58:12 +01:00
Jacob Overgaard 32cecbe14f update backoffice submodule 2023-12-16 11:01:01 +01:00
Jacob Overgaard 6df3b5bd66 update backoffice submodule 2023-12-16 09:47:06 +01:00
Jacob Overgaard bb43db2601 update backoffice submodule 2023-12-16 09:14:56 +01:00
Jacob Overgaard 786f584de9 update backoffice submodule 2023-12-15 10:29:49 +01:00
Jacob Overgaard 38b4e44479 update backoffice submodule 2023-12-15 09:48:32 +01:00
Nikolaj Geisle 8ecc5552ab Merge branch 'release/13.0' into v13/dev
# Conflicts:
#	version.json
2023-12-14 16:33:27 +01:00
Elitsa MarinovskaandGitHub dbdf3cf03d V14: Tighten permissions for folder controllers (#15457)
* Fixing folder controller policies

* Remove unused policy
2023-12-14 15:03:35 +01:00
Nikolaj GeisleandGitHub 36b7b86384 Remove sections setting authorization policy (#15456) 2023-12-14 13:57:52 +01:00
Chris Fitz-AvonandNikolaj Geisle cedfdcc9b2 Remove content section access policy from GetAllLanguages endpoint. #15435 (#15450) 2023-12-14 13:54:40 +01:00
Chris Fitz-AvonandGitHub c9feaa150e Remove content section access policy from GetAllLanguages endpoint. #15435 (#15450) 2023-12-14 13:49:46 +01:00
b4ca478f2c Required on view models (#15356)
* Added required on view models

* Updated OpenApi.json

* mark all fields required

* Force non-nullable as required.

* Missing import

* Update OpenApi.json

---------

Co-authored-by: Mads Rasmussen <madsr@hey.com>
2023-12-14 11:46:02 +01:00
Niels LyngsøandGitHub d368bd3ebf Update import maps (#15446)
* append 'property' and 'static-file'

* latest front-end commit
2023-12-14 11:45:44 +01:00
Nikolaj GeisleandGitHub c930b91ede 13: Add old databasemodel to ChangeLogStatusCode migration (#15454)
* Add old model to migration and use that instead

* Remove new column
2023-12-14 11:44:55 +01:00
MoleandGitHub db9dc4a20d Rename user controller files to match class names (#15442) 2023-12-14 10:36:43 +01:00
Nikolaj Geisle 02188393f2 bumb version 2023-12-14 09:11:37 +01:00
Bjarke Berg 93fe9f3dea build 2023-12-14 09:04:23 +01:00
Bjarke Berg baf29649c9 Move package to central 2023-12-14 08:42:20 +01:00
Bjarke Berg d1b53c0ec9 Added ignore on new tests (Temporarily) 2023-12-13 16:34:17 +01:00
Bjarke Berg f8dda5a7b5 Post merge fixes 2023-12-13 16:25:28 +01:00
Bjarke Berg 95094361cc Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Packages.props
#	build/azure-pipelines.yml
#	src/Umbraco.Cms.Api.Delivery/Handlers/InitializeMemberApplicationNotificationHandler.cs
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoLogin/Index.cshtml
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.CollectionBuilders.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockListEditorDataConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockListPropertyEditorBase.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockListPropertyValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockListPropertyValueCreator.cs
#	tests/Directory.Packages.props
#	tests/Umbraco.Tests.AcceptanceTest/package.json
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockListEditor/blockListEditorDataType.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/HelpPanel/helpLinks.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListPropertyValueConverterTests.cs
#	version.json
2023-12-13 15:34:22 +01:00
Nhu DinhandGitHub ced1a82c4e Renamed GetRichTextRulesByPath controller (#15443) 2023-12-13 10:58:56 +01:00
Bjarke Berg 38879e11df Merge remote-tracking branch 'origin/release/13.0' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/CreatedPackageSchemaRepository.cs
#	version.json
2023-12-13 10:44:10 +01:00
Bjarke Berg 8a9e6ee82d Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	global.json
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html
#	src/Umbraco.Core/EmbeddedResources/Lang/da.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/en.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/fr.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/tr.xml
#	src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs
#	src/Umbraco.Infrastructure/BackgroundJobs/Jobs/HealthCheckNotifierJob.cs
#	src/Umbraco.Infrastructure/BackgroundJobs/RecurringBackgroundJobHostedServiceRunner.cs
#	src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js
#	src/Umbraco.Web.UI.Client/src/common/services/editor.service.js
#	src/Umbraco.Web.UI.Client/src/views/components/application/umb-login.html
#	src/Umbraco.Web.UI/Startup.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/BackgroundJobs/Jobs/HealthCheckNotifierJobTests.cs
#	version.json
2023-12-13 09:55:34 +01:00
7fdd342643 PropertyEditor(UI)Alias name refactor (#15408)
* PropertyEditor(UI)Alias name refactor

* Updated OpenApi.json

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-12-13 09:50:52 +01:00
Bjarke Berg bd3a26801d Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-12-13 09:36:55 +01:00
Bjarke Berg 5a4aaae7f2 Merge remote-tracking branch 'origin/release/12.3' into v12/dev
# Conflicts:
#	version.json
2023-12-13 09:36:44 +01:00
Bjarke Berg 4e12f1e4e6 Merge remote-tracking branch 'origin/release/12.3.4' into v12/dev 2023-12-13 09:36:25 +01:00
Bjarke Berg 923c98a29f Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	src/Umbraco.Web.BackOffice/Controllers/LanguageController.cs
2023-12-13 09:31:54 +01:00
Bjarke Berg 8915064780 Merge remote-tracking branch 'origin/release/10.8' into v10/dev
# Conflicts:
#	version.json
2023-12-13 09:28:19 +01:00
Bjarke Berg 9dfb3005bc fix build 2023-12-12 17:00:30 +01:00
Bjarke Berg c2c1285d17 Fix json schema 2023-12-12 15:56:54 +01:00
Nikolaj Geisleandkjac 3720b5d930 Merge pull request from GHSA-v98m-398x-269r
Co-authored-by: kjac <kja@umbraco.dk>
2023-12-12 15:56:44 +01:00
Nikolaj GeisleandZeegaan d0c5372c6b Merge pull request from GHSA-cfr5-7p54-4qg8
* Apply authorization policies to controllers

* Return bad request if we urltracking is disabled

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-12-12 15:56:44 +01:00
f7e4832898 Merge pull request from GHSA-8qp8-9rpw-j46c
* Ensure that missing access rules do not break the site (#15081)

(cherry picked from commit 6777145079)

* Added Exception handling and replicated error and info message

* Update auth.resource.js

Fixed the message

* Changed Delay introduction to early phase to avoid repeating code.

---------

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Co-authored-by: jey <jey@umbraco.dk>
Co-authored-by: Jey <cyaqublu@gmail.com>
2023-12-12 15:56:31 +01:00
Nikolaj GeisleandZeegaan b3caf747df Merge pull request from GHSA-6324-52pr-h4p5
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-12-12 15:56:13 +01:00
ZeegaanandNikolaj Geisle 497927303f Suppress flow when queueing background threads 2023-12-12 15:55:05 +01:00
ZeegaanandBjarke Berg 13079eb667 Loosen up policies so editors can get what they need 2023-12-12 15:50:09 +01:00
ZeegaanandBjarke Berg 73fab105d2 Loosen up policies so editors can get what they need 2023-12-12 15:48:37 +01:00
Bjarke Berg 0c355b0cf1 Bump version 2023-12-12 15:47:43 +01:00
Bjarke Berg 0ed0338d8f Merge remote-tracking branch 'origin/release/12.3.4' into release/12.3 2023-12-12 15:47:28 +01:00
ZeegaanandBjarke Berg 677ff59d04 Loosen up policies so editors can get what they need 2023-12-12 15:46:46 +01:00
Bjarke Berg 1fe2ec08be bump version 2023-12-12 15:35:15 +01:00
Jacob OvergaardandGitHub 6f123224de V13: Regression with global window.uui export (#15412)
* revert change to load commonjs version of uui

* revert to load uui

* build login first

* build login assets as iife to support loading inside the backoffice
2023-12-12 12:03:49 +01:00
Zeegaan e37e2b5973 bump version 2023-12-12 11:20:44 +01:00
Kenn JacobsenandGitHub fa0b8c7b4d Ensure thread safety for block editor constructor caches (#15425) 2023-12-12 09:55:56 +01:00
Bjarke Berg fe6d6f7156 Post fix 2023-12-11 16:43:21 +01:00
Bjarke Berg 4a0d364d10 Post fix 2023-12-11 16:33:56 +01:00
Bjarke Berg 5dfa76600a Post fix 2023-12-11 16:32:38 +01:00
Jacob Overgaard 81b23a60a4 update backoffice submodule 2023-12-11 16:05:26 +01:00
Bjarke Berg 4b78fabd54 Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/common/login.controller.js
2023-12-11 14:41:17 +01:00
Bjarke Berg bab22d8b5f Merge remote-tracking branch 'origin/release/12.3.4' into release/13.0
# Conflicts:
#	version.json
2023-12-11 14:39:32 +01:00
Bjarke Berg 9f375ede65 Merge remote-tracking branch 'origin/release/12.3.4' into v12/dev 2023-12-11 14:37:36 +01:00
Bjarke Berg 83bcd37250 Merge remote-tracking branch 'origin/release/10.8' into v10/dev 2023-12-11 14:37:10 +01:00
237e4e56b2 Merge pull request from GHSA-v98m-398x-269r
Co-authored-by: kjac <kja@umbraco.dk>
2023-12-11 14:00:23 +01:00
Kenn JacobsenandGitHub 4a7ad4a562 Merge pull request from GHSA-v98m-398x-269r 2023-12-11 14:00:23 +01:00
42ae37e502 Merge pull request from GHSA-cfr5-7p54-4qg8
* Apply authorization policies to controllers

* Return bad request if we urltracking is disabled

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-12-11 13:59:59 +01:00
cdd4d2a000 Merge pull request from GHSA-cfr5-7p54-4qg8
* Bump version

* Apply authorization policies to controllers

* Return bad request if we urltracking is disabled

* Apply authorization policies to controllers

* Return bad request if we urltracking is disabled

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-12-11 13:59:59 +01:00
3331788c5c Merge pull request from GHSA-8qp8-9rpw-j46c
* Ensure that missing access rules do not break the site (#15081)

(cherry picked from commit 6777145079)

* Added Exception handling and replicated error and info message

* Update auth.resource.js

Fixed the message

* Changed Delay introduction to early phase to avoid repeating code.

---------

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
Co-authored-by: jey <jey@umbraco.dk>
Co-authored-by: Jey <cyaqublu@gmail.com>
2023-12-11 13:59:35 +01:00
be5a740c96 Merge pull request from GHSA-8qp8-9rpw-j46c
* Added Exception handling and replicated error and info message

* Update auth.resource.js

Fixed the message

* Changed Delay introduction to early phase to avoid repeating code.

---------

Co-authored-by: jey <jey@umbraco.dk>
Co-authored-by: Jey <cyaqublu@gmail.com>
2023-12-11 13:59:35 +01:00
50a107f885 Merge pull request from GHSA-6324-52pr-h4p5
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-12-11 13:59:03 +01:00
13cc320f19 Merge pull request from GHSA-6324-52pr-h4p5
* Bump version

* Fix https://github.com/umbraco/Umbraco-CMS/security/advisories/GHSA-6324-52pr-h4p5

* Fix https://github.com/umbraco/Umbraco-CMS/security/advisories/GHSA-6324-52pr-h4p5

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-12-11 13:59:03 +01:00
ZeegaanandBjarke Berg 3a697d90fc Suppress flow when queueing background threads 2023-12-11 12:44:06 +01:00
ZeegaanandBjarke Berg b5544aa520 Suppress flow when queueing background threads 2023-12-11 12:43:25 +01:00
Ronald BarendseandGitHub 406848b76f Remove date header from webhook request and use constants (#15407)
* Remove date header

* Move webhook event header names to constants
2023-12-11 08:49:37 +01:00
fda866fc9e V14: Add authorization policies to Management API controllers - p2 (#15211)
* Making ProblemDetails details more generic

* Adding authorizer that can be replaces for external authz in handlers. Adding handler and requirement for UserBelongsToUserGroupInRequest policy

* Adding method to get the GUID from claims

* Adding service methods to check user group authz

* Porting MustSatisfyRequirementAuthorizationHandler

* Adding controllers authz

* Fix return status code + produced response type

* Moving to folder

* Adding DenyLocalLogin policy scaffold

* Implement a temp DenyLocalLoginHandler

* Introducing a new Fobidden result

* Fix comment

* Introducing a helper class for authorizers

* Changed nullability for GetCurrentUser

* Changes from Attempt to Status + FIXME comments

* Create a UserGroupAuthorizationStatus to be used in the future

* Introduces a new authz status for checking media acess

* Introducing a new permission service for media

* Adding fixme

* Adding more policy configurations

* Adding Media policy requirement and handler

* Adding media authorizer

* Fix order of params

* Adding duplicate code comment

* Adding authz to media controllers

* Migrating more logic from MediaPermissions.cs

* Adding more MediaAuthorizationStatus-es

* Handling of new authorization status

* Fix comment

* Adding NotFound case

* Adding NewDenyLocalLoginIfConfigured policy && commenting [AllowAnonymous] where the policy is applied since it is already handled

* Changed Forbid() to Forbidden() to get the correct status code

* Remove policy that is applied on the base controller already

* Implement and apply NewUmbracoFeatureEnabled policy

* Renaming classes to add Permission in the name

* Register permission services

* Add FIXME

* Introduce new IUserGroupPermissionService and refactor accordingly

* Add single overload with default implementation

* Adding user permission policy and related

* Applying admin policy

* Register all new policies

* Better wording

* Add default implementation for a single overload

* Adding remarks to IContentPermissionService.cs

* Supporting null as key in ContentPermissionService

* Fix namespace

* Reverting back to not supporting null as content key, but having dedicated implementation

* Adding content authorizer with null values to represent root item

* Removing null key support and adding dedicated implementation

* Removing remarks

* Adding content resource with null support

* Removing null support

* Adding requirement and status

* Adding content authorizer + handlers

* Applying policies to content controllers

* Update comment

* Handling of Authorization Statuses

* More authz in controllers

* Fix comments

* New branch handler

* Obsolete old implementation

* Adding dedicated policies to root and bin

* Adding a branch specific namespace

* Bin specific requirement and namespace

* Root specific requirement and namespace

* Changing to new root policy

* Refactoring

* Save policies

* Fix null check/reference

* Add TODO comment

* Create media root- and bin-specific policies, handlers, etc.

* Apply correct policy in create and update media controllers

* Apply root policy to move and sort controllers

* Fix wording

* Adding UserGroupAuthorizationStatusResult

* Remove all AuthorizationStatusResult as we cannot get the specific AuthorizationStatus

* Fixing Umbraco feature policy

* Fix allow anonymous endpoints - the value returned from DenyLocalLoginHandler wasn't enough, we need to succeed DenyAnonymousAuthorizationRequirement as it is required for some of the endpoints that had the attribute

* Apply DenyLocalLoginIfConfigured policy to corresponding re-implementation of PostSetInvitedUserPassword

* Fix comment

* Renaming performingUser to user and fixing comments

* Rename helper method

* Fix references

* Re-add merge conflict deletion

* Adding Backoffice requirement and relevant

* Registering

* Added a simple policy test

* Fixed small test things and clean up

* Temp solution

* Added one more test and fix another static issue

* Fix another merge conflict

* Remove BackOfficePermissionRequirement and handler as they might not be necessary

* Comment out again [AllowAnonymous]

* Remove AuthorizationPolicies.BackOfficeAccessWithoutApproval policy as it might not be necessary

* Fix temp implementation

* Fix reference to correct handler

* Apply authz policy to new publish/unpublish controllers

* Fix comments

* Removing duplicate ProducesResponseTypes

* Added swagger documentation about the 401 and 403

* Added Resources to Media, User and UserGroup

* Handle root, recycle bin and branch in the same handler

* Handle both parent and target when moving

* Check Ids for all sort requests

* Xml docs

* Clean up

* Clean up

* Fix build

* Cleanup

* Remove TODO

* Added missing overload

* Use yield

* Adding some keys to check

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2023-12-11 08:25:29 +01:00
Kenn JacobsenandGitHub d752853d89 Fix disposed DbContext issue (#15090) (#15410) 2023-12-10 19:18:32 +01:00
Sebastiaan Janssen 422218ea15 Merge branch 'v13/dev' into contrib 2023-12-08 15:54:34 +01:00
Sebastiaan Janssen 6f582451ed Merge branch 'release/13.0' into v13/dev
# Conflicts:
#	version.json
2023-12-08 15:54:06 +01:00
Andreas ZerbstandSebastiaan Janssen 258ab59286 Updated the keys for adding a block list 2023-12-08 15:00:47 +01:00
Ronald BarendseandGitHub 9e96bba9bc Disable transitive package version pinning (#15406)
* Disable transitive package version pinning

* Take top-level dependencies on Azure.Identity and System.Net.Http

* Take top-level dependencies on System.Security.Cryptography.Xml and System.Text.RegularExpressions
2023-12-08 15:00:18 +01:00
Bjarke Berg cf2ec50d15 Merge remote-tracking branch 'origin/release/12.3.4' into v12/dev
# Conflicts:
#	version.json
2023-12-08 13:34:41 +01:00
Bjarke Berg 614cb5da20 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-12-08 13:30:20 +01:00
Bjarke Berg 9e3f8c7d0c Merge remote-tracking branch 'origin/release/10.8' into v10/dev
# Conflicts:
#	version.json
2023-12-08 13:12:33 +01:00
Sebastiaan Janssen 75ec1f82ac Merge branch 'contrib' of https://github.com/umbraco/Umbraco-CMS into contrib 2023-12-08 12:42:39 +01:00
Sebastiaan Janssen 67c8f098a0 Add login screen to the readme 2023-12-08 12:42:29 +01:00
Zeegaan f65e76ba5a Bump version 2023-12-08 09:04:51 +01:00
Bjarne FyrstenborgandGitHub 87b8023f2c Fix typo in dictionary (#15380) 2023-12-07 17:51:28 +00:00
Nikolaj Geisle 4b5bbbd531 Change webhook-> logs to Deliveries 2023-12-07 15:23:21 +01:00
Nikolaj GeisleandGitHub b50353b238 V13: Log webhook firing exceptions when they happen (#15393)
* Refactor Webhook logging to handle exceptions

* Add Exception occured property to WebhookLog.
2023-12-07 14:25:26 +01:00
Nikolaj GeisleandGitHub d31bb14f57 Link to log on exception/error (#15391) 2023-12-07 12:11:38 +01:00
Nikolaj GeisleandGitHub 0534c5f776 Log retrycount and properly log request headers (#15390) 2023-12-07 12:10:19 +01:00
Bjarke BergandGitHub 1a93dae0c4 Ensure the toggles return booleans and not integers. (#15354) 2023-12-07 11:25:31 +01:00
Nikolaj GeisleandGitHub 80a6ec44ba Migrate url columms to NVarCharMax (#15331) 2023-12-07 10:26:55 +01:00
Jacob Overgaard f8b95e5c69 update backoffice submodule 2023-12-07 10:06:46 +01:00
4ff2572d78 Use named HttpClients (#15375)
* Use named HttpClients

* Register as named client

* Set headers on request message.

* Add User agent header to http client

* Add headers within Try-catch

* Add using for HttpResponseMessage

* Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs

Co-authored-by: Ronald Barendse <ronald@barend.se>

* Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>

* Log key instead of entire webhook

* Update src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs

Co-authored-by: Ronald Barendse <ronald@barend.se>

* Create constant for User agent header name

* Update src/Umbraco.Infrastructure/BackgroundJobs/Jobs/WebhookFiring.cs

Co-authored-by: Ronald Barendse <ronald@barend.se>

* Use datetime.now

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2023-12-07 09:51:44 +01:00
Bjarke Berg cb76554455 Bugfix: Count existing media correct (#15206)
* https://github.com/umbraco/Umbraco-CMS/issues/15205
Count media correct

* Fix content should be document

(cherry picked from commit d2ff2ea46e)
2023-12-07 09:21:25 +01:00
Jacob Overgaard f5a49d87c3 update backoffice submodule 2023-12-06 15:32:47 +01:00
Bjarne FyrstenborgandSebastiaan Janssen b97564ba3a Fix console errors in content type editor with single block mode 2023-12-06 14:15:15 +01:00
dependabot[bot]andSebastiaan Janssen 4bea40dfb4 Bump vite from 4.5.0 to 4.5.1 in /src/Umbraco.Web.UI.Login
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v4.5.1/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v4.5.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 14:05:39 +01:00
Sebastiaan Janssen 5a159a756d Merge branch 'v13/dev' into contrib
# Conflicts:
#	global.json
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html
#	src/Umbraco.Core/EmbeddedResources/Lang/da.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/en.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/fr.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/tr.xml
#	src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs
#	src/Umbraco.Infrastructure/BackgroundJobs/Jobs/HealthCheckNotifierJob.cs
#	src/Umbraco.Infrastructure/BackgroundJobs/RecurringBackgroundJobHostedServiceRunner.cs
#	src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js
#	src/Umbraco.Web.UI.Client/src/common/services/editor.service.js
#	src/Umbraco.Web.UI/Startup.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/BackgroundJobs/Jobs/HealthCheckNotifierJobTests.cs
2023-12-06 13:06:30 +01:00
Sebastiaan Janssen 024a57e098 Merge branch 'v12/dev' into v13/dev
# Conflicts:
#	global.json
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html
#	src/Umbraco.Core/EmbeddedResources/Lang/da.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/en.xml
#	src/Umbraco.Core/EmbeddedResources/Lang/tr.xml
#	src/Umbraco.Core/Models/PublishedContent/PublishedPropertyType.cs
#	src/Umbraco.Infrastructure/BackgroundJobs/Jobs/HealthCheckNotifierJob.cs
#	src/Umbraco.Infrastructure/BackgroundJobs/RecurringBackgroundJobHostedServiceRunner.cs
#	src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Web.UI.Client/src/common/services/blockeditormodelobject.service.js
#	src/Umbraco.Web.UI.Client/src/common/services/editor.service.js
#	src/Umbraco.Web.UI/Startup.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/BackgroundJobs/Jobs/HealthCheckNotifierJobTests.cs

(cherry picked from commit ef3f2c48198d8baed9d3340f926cd07e80720428)
2023-12-06 12:47:51 +01:00
Bjarke Berg 312276bde7 Bump version 2023-12-06 10:21:46 +01:00
Kenn JacobsenandGitHub 4e6b9af959 Allow specifying root access for user groups (#15364) 2023-12-06 10:18:32 +01:00
Kenn JacobsenandGitHub 370e1cc125 Media Picker 3 should not be used as a macro parameter (#15330) 2023-12-06 10:18:23 +01:00
Sebastiaan Janssen a31d4746b3 Merge branch 'contrib' into v12/dev 2023-12-06 10:00:22 +01:00
Bjarke Berg 9a54b5ed6e Merge remote-tracking branch 'origin/release/13.0' into v13/dev 2023-12-06 08:28:44 +01:00
Ronald BarendseandGitHub 8fefca557f Improve Central Package Management, update dependencies and fix package validation/MSBuild warnings (#15362)
* Use version overrides for ImageSharp 2

* Move Directory.Packages.props to root, use GlobalPackageReference and replace Microsoft.CSharp with Microsoft.CodeAnalysis.CSharp

* Replace NPoco.SqlServer with NPoco and remove unused System dependencies

* Fix package validation and MSBuild warnings

* Add nuget.config and enable package source mapping

* Remove explicitly set C# language version

* Add empty Directory.Packages.props file for acceptance test

* Downgrade SixLabors.ImageSharp back to 3.0.2 because of breaking changes

* Update ImageSharp/ImageSharp.Web to 3.1.0 and use ComputeHMAC
2023-12-06 08:19:46 +01:00
Richard OckerbyandLaura Neto 17eda54bfb Don't overwrite default values in the block list editor if they don't exist in the data model (for new creations) 2023-12-05 21:22:45 +01:00
Sebastiaan JanssenandGitHub a6b53b0a93 Fixing PR #15318 which updated an interface, which is breaking (#15363) 2023-12-05 16:49:55 +01:00
Jacob Overgaard 25e36871d7 use dotnet 8 2023-12-05 13:15:03 +01:00
Jacob Overgaard 1be548b680 Update nightly build (#15359)
* cherry-pick templateParameters from v14/dev

* add isNightly parameter

* remove v9

* add parameter check for myget isNightly
2023-12-05 13:11:15 +01:00
Jacob Overgaard 0a048d9231 Update nightly build (#15359)
* cherry-pick templateParameters from v14/dev

* add isNightly parameter

* remove v9

* add parameter check for myget isNightly
2023-12-05 13:01:19 +01:00
Jacob Overgaard d3f0506f0b Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-12-05 12:58:36 +01:00
Jacob Overgaard 051dfd1fff Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-12-05 12:57:47 +01:00
Jacob Overgaard 37e4d80ce8 Update nightly build (#15359)
* cherry-pick templateParameters from v14/dev

* add isNightly parameter

* remove v9

* add parameter check for myget isNightly
2023-12-05 12:45:23 +01:00
Sebastiaan Janssen 14a64857df Merge branch 'contrib' of https://github.com/umbraco/Umbraco-CMS into contrib 2023-12-05 12:41:21 +01:00
Jacob OvergaardandGitHub 79af9e8e2b Update nightly build (#15359)
* cherry-pick templateParameters from v14/dev

* add isNightly parameter

* remove v9

* add parameter check for myget isNightly
2023-12-05 12:38:14 +01:00
Sebastiaan Janssen 319d98ef23 Merge branch 'v12/dev' into contrib 2023-12-05 12:36:34 +01:00
Kenn JacobsenandGitHub e7279d2ff0 Add range filter options to the Delivery API (#15353)
* Add range filter options to the Delivery API

* Add range filter examples to Swagger docs
2023-12-05 11:01:25 +01:00
Jacob OvergaardandGitHub cd10d5840d V14: Publish Bellissima package to npm via Pipelines (#14926)
* ignore node_modules specifically to limit size of build_output

* build and publish backoffice artifacts

* instruct GitVersioning to output all variables such as npm to use in Pipelines

* use NBGV variables

* prepare npm package for nightlies

* instruct to deploy to MyGet for nightlies

* Deploy to npm only after Myget

* add public access to publish

* write scopes to .npmrc file

* add scope to registry.npmjs.org

* nightly param
2023-12-05 10:54:23 +01:00
Ronald BarendseandGitHub c598171d85 Change WebhookEventCollectionBuilder to set collection (#15351)
* Change WebhookEventCollectionBuilder to set collection

* Fix AddHealthCheck extension method
2023-12-05 10:33:47 +01:00
Ronald BarendseandGitHub 12a43c2406 v13: Update deploy types (add setter to ArtifactDependency.Checksum and TryGetValue()/GetEntityTypes() to IFileTypeCollection) (#15318) 2023-12-04 16:00:54 +01:00
Erik-Jan WestendorpandSebastiaan Janssen d5c137583d AddDynamicRootStep 2023-12-04 15:00:03 +01:00
Sebastiaan Janssen 941705b03d Revert "Grant all users access to the content recycle bin (#14977)"
This reverts commit ed006931a4.
2023-12-04 14:34:47 +01:00
Ronald Barendse 8a65c00279 Fix health check webhook event registration 2023-12-04 14:11:42 +01:00
Erik-Jan WestendorpandGitHub 80dcc04df0 Add HealthCheckCompletedWebhookEvent (#15337) 2023-12-04 14:04:57 +01:00
Ronald BarendseandGitHub c20d96c705 Use fluent API for adding webhook events and add document type events (#15345)
* Move adding webhooks to extension methods

* Clean up WebhookEventCollectionBuilder

* Rename AddAllAvailableWebhooks to AddCmsWebhooks and internalize defaults

* Use fluent CmsWebhookEventCollectionBuilder for adding CMS specific webhook events

* Split media and media type webhook events

* Use fluent CmsUserWebhookEventCollectionBuilder for adding CMS user specific webhook events

* Rename extension methods and add onlyDefault parameter

* Remove duplicate UserForgotPasswordRequestedWebhookEvent

* Add document type webhook events and use fluent builders for content and content types

* Use fluent WebhookEventCollectionBuilderCmsMember for adding member/member group webhook events

* Use fluent WebhookEventCollectionBuilderCmsTemplate for template/partial view webhook events

* Use fluent WebhookEventCollectionBuilderCmsFile for file based webhook events (instead of only template/partial view)

* Move all webhook events to Umbraco.Cms.Core.Webhooks.Events namespace

* Reorder AddFile method and update documentation
2023-12-04 13:25:51 +01:00
Ronald BarendseandGitHub da56f16abf Move helper methods for adding webhooks to extension methods (#15344)
* Move adding webhooks to extension methods

* Clean up WebhookEventCollectionBuilder

* Rename AddAllAvailableWebhooks to AddCmsWebhooks and internalize defaults
2023-12-04 10:58:11 +01:00
2a56d4e376 V12 Integration test for InternalIndex and ExternalIndex Search (#15167)
* Added the possibility for us to search through the external index

* Added ForceInstantExecution

* Added InternalIndex integration tests

* Added External Index integration tests

* Removed comments

* Remove unused internal field

* Add mechanism to wait for index rebuilding

* Remove some of the usages of sleep

* Remove sleeps

* Added comments from review

* Added a method for getting the IndexPath

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-12-04 10:00:26 +01:00
kjac 55c901e2d7 Merge branch 'v13/dev' into release/13.0 2023-12-03 14:54:11 +01:00
Bjarne FyrstenborgandGitHub c6d01178c0 Update z-index of block actions (#15329) 2023-12-01 13:51:42 +00:00
Vitor Rodriguesandkjac a4b4107190 Expose the Delivery API CLR type (#15150)
* Expose the Delivery API CLR type

* Updated field naming and warnings

Addresses PR feedback

* Added default implementation to prevent breaking change

(cherry picked from commit 7f4378066d)
2023-12-01 13:50:18 +01:00
Vitor RodriguesandGitHub 7f4378066d Expose the Delivery API CLR type (#15150)
* Expose the Delivery API CLR type

* Updated field naming and warnings

Addresses PR feedback

* Added default implementation to prevent breaking change
2023-12-01 13:43:39 +01:00
Vitor RodriguesandGitHub d315a1082e Fixed potential NuCache file lock causing unusable website (#14940)
* Fixed potential NuCache file lock causing unusable website

* Remove unnecessary volatile read
2023-12-01 13:05:50 +01:00
48befe730b V14 QA Refactor code of Partial View acceptance tests (#15325)
* Refactor acceptance tests for Partial View

* Refactor api tests for Partial View

* Bumped version of Test Helper

* Added suggestion from review

* Bumped version to testhelpers 2.0.8

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2023-12-01 11:20:57 +01:00
Ronald BarendseandGitHub 50baed151d Use version range on project references (#14719) 2023-12-01 11:12:18 +01:00
Jacob OvergaardandGitHub 8f497c8f7e V13 RC: Fix regression for external login providers (#15334)
* add check for the presence of the ?logout=true parameter on the login screen to avoid autoredirect to external login

* refactor controller to eliminate need for duplicate defaultResponse and externalLoginResponse (they are always the same)

* refactor to reduce nesting
2023-12-01 10:32:54 +01:00
Bjarne FyrstenborgandBjarke Berg da6aaa07db Don't change format in convertToLocalMomentTime (#15223)
(cherry picked from commit 963e57723a)
2023-12-01 10:03:23 +01:00
Kenn JacobsenandGitHub f9ecd9514e Management API should expose if a user group is a system group (#15333) 2023-12-01 09:39:27 +01:00
Bjarke Berg d5d4edbe92 Bump Version 2023-11-30 21:51:54 +01:00
Bjarne FyrstenborgandSebastiaan Janssen 0a718b0585 Fix log message in Verify2FACode 2023-11-30 20:03:20 +01:00
Bjarne FyrstenborgandGitHub 8c23075ec5 Adjust content type picker to support different content types (#15080) 2023-11-30 19:38:56 +01:00
Bjarne FyrstenborgandGitHub 86d98658f1 Make Block List configuration consistent with Block Grid (#15087) 2023-11-30 19:29:06 +01:00
Søren MastrupandSebastiaan Janssen e947daff45 Added password toggle to Umbraco installer form 2023-11-30 19:27:55 +01:00
Bjarne FyrstenborgandGitHub ee8339d563 Add contentTypeEditor to editorService (#15034) 2023-11-30 19:25:03 +01:00
Jan SkovgaardandGitHub 7e26d09f77 Bugfix: #14481 - Landmark roles missing (#14980) 2023-11-30 19:21:48 +01:00
Matthew WiseandSebastiaan Janssen eaf07d2189 Added logging around adding a property value during examine indexing 2023-11-30 19:16:58 +01:00
Kevin FuandSebastiaan Janssen 1d5a684fd5 fixed #14832 user without HasAccessToSensitiveData change sensitive data: IsApproved IsApproved IsTwoFactorEnabled 2023-11-30 19:15:05 +01:00
Amalie WowernandSebastiaan Janssen c893027f7c Added ReSharperTestRunner to KnownAssemblyExclusionFilter 2023-11-30 19:08:17 +01:00
Anders BjernerandSebastiaan Janssen 71a3452361 Added [NotNullWhen(true)] attribute to IPublishedSnapshotAccessor and UmbracoContextPublishedSnapshotAccessor 2023-11-30 17:23:15 +01:00
Brett SmithandGitHub ecc31a308a Added BlockEditorDataConverter method to BlockListPropertyEditorBase … (#14960) 2023-11-30 17:21:09 +01:00
Michael LatoucheandGitHub 212b566214 Add webhook labels to FR file (#15183) 2023-11-30 16:07:15 +01:00
Erik-Jan WestendorpandGitHub feaac58027 localization for webhooks (#15191) 2023-11-30 16:05:38 +01:00
Ronald BarendseandSebastiaan Janssen e7f7492ce9 Configure Angular cookie using defaults from antiforgery options and fix logging 2023-11-30 16:02:17 +01:00
Erik-Jan WestendorpandGitHub c0e0e7bad8 Add HealthCheckCompletedNotification (#15276) 2023-11-30 15:53:05 +01:00
Warren BuckleyandGitHub d088ed8bf6 V13: Webhook all the things (#15161) 2023-11-30 15:41:45 +01:00
Kenn JacobsenandGitHub 42234cdd40 Move system information away from the User API (#15316)
* Move system information away from the User API

* Review comments
2023-11-30 14:29:16 +01:00
Bjarke BergandJacob Overgaard 320310fbc0 Added "pr: none" to nightly trigger (#15044) 2023-11-30 11:43:05 +01:00
Kenn JacobsenandGitHub 528b7d346a Rollback some #14816 changes to fix 2FA (#15317) 2023-11-30 11:32:49 +01:00
Kenn JacobsenandGitHub 016709eecd Add query string info to links in API output (#15327) 2023-11-30 10:36:53 +01:00
Kenn JacobsenandGitHub b596900246 Log meaningful job names and use template based log messages (#15307)
* Log meaningful job names and use template based log messages

* Review changes
2023-11-29 15:35:43 +01:00
6b599b641c Prevent RTE in fullscreen being partially covered by the left menu column (should fix #14890) (#15002)
* Should fix #14890

* Set z-index of #leftcolumn to 0 when Tiny MCE is in fullscreen mode

---------

Co-authored-by: Jannik Anker <jaa@kfforsikring.dk>
Co-authored-by: Jason Elkin <jason@bumpdigital.co.uk>
2023-11-29 14:59:20 +01:00
leekelleherandSebastiaan Janssen b74aadff97 Block editors - replaces hardcoded -20 with current node ID 2023-11-29 14:40:37 +01:00
a8dc058cb5 V13: Delivery API composite id handler (#15305)
* Implement DeliveryApiCompositeIdHandler

* Replace duplicate decomposing with Handler instead

* Add obsolete messages

* Make Id integer instead of string

* Move from examine to core

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-29 14:10:25 +01:00
Bjarke Berg 53d0057ac6 Update test dependencies 2023-11-29 12:46:28 +01:00
Kenn JacobsenandGitHub 88f907912b Cache block item constructors for block based editors (#15264)
* Cache block item constructors for block based editors

* Fix unit tests

* Fixed Grid unit tests

* Clear constructor caches when content types and data types change (to support InMemoryAuto models)
2023-11-29 12:27:07 +01:00
Kenn JacobsenandGitHub c9c234492b Add missing API version attributes to management API controllers (#15310) 2023-11-29 09:23:23 +01:00
Bjarke Berg ddf9f05a8f Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
#	version.json
2023-11-28 15:18:24 +01:00
Bjarke Berg 17ea20ee3d Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoLogin/Index.cshtml
2023-11-28 15:09:48 +01:00
Jacob Overgaard 98e2a1b897 update backoffice submodule 2023-11-28 13:54:03 +01:00
34d6695c89 Don't expect specific .NET feature versions - utilize rollForward instead. (#15304)
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-11-28 13:21:09 +01:00
Kenn JacobsenandGitHub 0a852aeb07 Don't expect specific .NET feature versions - utilize rollForward instead. (#15303) 2023-11-28 13:02:52 +01:00
Bjarke Berg 1f527fefd8 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	tests/Umbraco.Tests.Integration/CompatibilitySuppressions.xml
2023-11-28 11:20:02 +01:00
Bjarke Berg 1176f04caf Updated pacakge-lock files 2023-11-28 09:45:07 +01:00
Bjarke Berg 280518c9d6 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj
#	src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs
#	src/Umbraco.Web.UI.Client/.nvmrc
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
2023-11-28 09:39:31 +01:00
Sven Geusens 87380902f0 Bump version 2023-11-28 09:35:34 +01:00
Sven GeusensandSven Geusens c73b7f42d9 Move localdb file management of PublishedSnapshotService into itself. (#15085)
* Move localdb file management of PublishedSnapshotService into itself.

Added a way for the PublishedSnapshot service to clean up it's local files so (for example) Upgrade migrations have a reliable way of removing known invalid cache files without running into locking issues

* Small rename to differentiate existing method from simple getter

* Fix breaking change

Long live default implementations 🎉

* Another breaking change fix

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-11-28 09:31:11 +01:00
Jacob Overgaard 32493c759a add -login prefix to curves color 2023-11-28 08:48:55 +01:00
Jacob OvergaardandGitHub 8d76e32941 V13: Add more css custom properties to style the login screen (#15301)
* add more css custom properties to control the login screen

* add override for text color

* add variables to control the font-size of the headline
2023-11-28 08:37:59 +01:00
Bjarke Berg 008d797a66 Added <ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally> 2023-11-27 19:54:03 +01:00
Bjarke Berg ab781560bc Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
2023-11-27 19:47:24 +01:00
Bjarke Berg 8d9343b564 Merge branch 'release/10.8' into v10/dev
# Conflicts:
#	version.json
2023-11-27 18:10:40 +01:00
Bjarke Berg 1ee891c8d5 Merge remote-tracking branch 'origin/release/10.8' into release/10.8 2023-11-27 18:09:41 +01:00
Bjarke Berg bf1a5b9b28 Bump version 2023-11-27 18:09:30 +01:00
Bjarke Berg 696b74cdb6 Merge branch 'release/10.8' into v10/dev 2023-11-27 18:08:30 +01:00
Bjarke BergandGitHub bf8af4588e Centralised NuGet packages (#15293)
* Moved to centralized nuget packages

* Handle JsonSchema

* Change PackageReference to PackageVersion

* Opt out of central package management for mangement api (at least for versions less than 14) and the UI project

* ManagePackageVersionsCentrally = false

* Change folder acceptance tests are build, to avoid reading the test Directory.Packages.props

* Change folder acceptance tests are build, to avoid reading the test Directory.Packages.props

* change working directory

* workingDirectory

* Force the template to use local nuget packages

* Force the template to use local nuget packages

* clean up

* added wait on

* added wait on
2023-11-27 15:18:00 +01:00
92a864077b Fixed filter queries for numeric and date based filters (#15286)
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-11-27 14:53:34 +01:00
Zeegaan 7443dd2bdc bump version 2023-11-27 10:36:56 +01:00
bfe8b715d8 V13: Change request column to NVarcharMax (#15252)
* Change request column to NVarcharMax

* Rename migration

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-27 09:06:00 +01:00
Zeegaan be443189e1 Merge branch 'v13/dev' into release/13.0
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/views/webhooks/overlays/details.html
2023-11-27 08:26:41 +01:00
SteveandGitHub ade61f7ec5 Add missing translations in EN (#15257)
And remove the ones that don't exist anymore in the leading dictionary EN-US.
2023-11-23 16:55:19 +00:00
d6f0c33d83 V14 added acceptance tests for the Stylesheets (#15265)
* Added acceptance test for Stylesheets

* Updated api test for stylesheet using new helpers and apply AAA pattern

* Bumped version of Test Helpers

* Updated api and ui tests of Stylesheet after modifying TestHelper

* Updated stylesheets ui tests using openActionMenuAtRoot()

* Added suggestions from review

* Added wait for the flaky tests

* Fixed package-lock.json

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2023-11-23 09:33:51 +01:00
Jacob OvergaardandGitHub 3b518050bd V13: Login page backwards compatibility (#15285) 2023-11-23 08:45:49 +01:00
5ad400184a Fix IWebhook.GetUdi() and IEntity.GetUdi() extension methods (#15288)
* Fix IWebhook and IEntity GetUdi extension method

* Refactor to use switch expressions

* Add GetUdiForWebhook test

* Added a webhook builder for unit tests.

---------

Co-authored-by: Andy Butland <abutland73@gmail.com>
2023-11-23 08:02:57 +01:00
Yuval-AmidrorandGitHub e80d117a2a Redirect is broken with Hebrew chars on Linux (#15261)
* add HttpUtility.UrlPathEncode encode so paths that are not in english will not throw errors of NON-ASCII characters

* remove unnecessary using
2023-11-22 23:43:18 +00:00
dependabot[bot]andJason Elkin 1dacab8b9a Bump axios and wait-on in /tests/Umbraco.Tests.AcceptanceTest
Bumps [axios](https://github.com/axios/axios) to 1.6.2 and updates ancestor dependency [wait-on](https://github.com/jeffbski/wait-on). These dependencies need to be updated together.


Updates `axios` from 0.25.0 to 1.6.2
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.25.0...v1.6.2)

Updates `wait-on` from 6.0.1 to 7.2.0
- [Release notes](https://github.com/jeffbski/wait-on/releases)
- [Commits](https://github.com/jeffbski/wait-on/compare/v6.0.1...v7.2.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: indirect
- dependency-name: wait-on
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-22 22:29:39 +00:00
Bjarne FyrstenborgandJason Elkin 58e693a75d Fix typo in umbImageGravity 2023-11-22 21:53:24 +00:00
1c2602f57c Dynamic root with culture and segment (#15287)
* parse culture and segment for dynamic root.

* Handle new culture and segment parameters

---------

Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
2023-11-22 19:58:06 +01:00
Jacob Overgaard e04b015026 update backoffice submodule 2023-11-22 16:19:55 +01:00
bcd386ac70 V13: Fix missing contenttype in webhook (#15282)
* Create missing node for content type

* Change to Unknown instead of deleted

* Cleared contentTypes and removed console.log

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2023-11-22 13:54:11 +01:00
012b43a1c2 Publishing in the Management API (#14774)
* make CoreScopeProvider available for derived classes

* Create publish controller

* Add publish functionality

* Remove unneeded using

* Implement publish for multiple cultures

* support multiple cultures in controler

* Dont validate properties

* Refactor to use PublishingOperationStatus

* refactor to use proper publish async methods

* Refactor publish logic into own service

* Commit some demo code

* Add notes about what errors can happen when publishing

* Rework ContentPublishingService and introduce explicit Publish and PublishBranch methods in ContentService

* Fix merge

* Allow the publishing strategy to do its job

* Improved check for unsaved changes

* Make the old content controller work (as best possible)

* Remove SaveAndPublish (SaveAndPublishBranch) from all tests

* Proper guards for invalid cultures when publishing

* Fix edge cases for property validation and content unpublishing + add unpublishing to ContentPublishingService

* Clear out a few TODOs - we'll accept the behavior for now

* Unpublish controller

* Fix merge

* Fix branch publish notifications

* Added extra test for publishing unpublished cultures and added FIXME comments for when we fix the state of published cultures in content

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-22 12:52:08 +01:00
ErikandGitHub d34be8ce34 Improved punctuation and sentence structure for better readability. (#15279)
* Improved punctuation and sentence structure for better readability.

* To be coherent with the rest of the written text
2023-11-22 10:11:33 +01:00
Bjarke Berg 6aca62b202 Bump version 2023-11-22 08:22:07 +01:00
Elitsa MarinovskaandGitHub 42dd2da579 V14: Allowing custom backoffice host with CORS policy (#15269)
* Allowing custom backoffice host with CORS policy

* Adding missing allow
2023-11-21 15:49:29 +01:00
b499660101 V13 Bugfix. Added backend validation for checking if a webhook has any events (#15272)
* Added a webhookOperationStatus for noEvents

* Added a method for validating Webhooks. Currently checks if the webhooks has any events or not

* Added WebhookOperationStatus for NoEvents

* Update src/Umbraco.Core/Services/WebhookService.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Core/Services/WebhookService.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-11-21 14:49:40 +01:00
8755703845 V13: Implement webook as i entity (#15267)
* Add webhook service to service context

* Refactor webhooks to implement IEntity

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-21 14:38:47 +01:00
4c3b4752db V13: Change WebhookLog status for clarity (#15247)
* Refactor to show icon and status code to make status more clear

* Fix up migration

* Add change log status migration

* Fix up frontend to display cross when fail

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-21 13:55:52 +01:00
Ronald Barendse 4b60394488 Update ImageSharp2 dependency and add upper version limit 2023-11-21 13:35:36 +01:00
Ronald BarendseandGitHub 524b5ef700 Merge pull request #15268 from umbraco/v13/improvement/update-dependencies
Update and remove unnecessary package dependencies
2023-11-21 13:12:20 +01:00
Ronald Barendse 4b602dc8e2 Fix incorrect merge resolution of package dependencies 2023-11-21 12:08:51 +01:00
Ronald Barendse 28550b88c8 Remove implicitly set EmbedUntrackedSources property 2023-11-21 11:39:04 +01:00
Ronald Barendse 40dd163e3a Update to Microsoft.ICU.ICU4C.Runtime 72.1.0.3 2023-11-21 10:52:25 +01:00
Ronald Barendse e22c43b471 Update to Serilog 8.0.0 2023-11-21 10:51:03 +01:00
Ronald Barendse 49fc7f9786 Update to OpenIddict 4.10.0 2023-11-21 10:51:02 +01:00
Ronald Barendse a77b77d98a Remove AngleSharp package reference 2023-11-21 10:51:02 +01:00
Ronald Barendse 93c46b1d10 Remove explicit SourceLink package reference (included in .NET 8 SDK) 2023-11-21 10:50:52 +01:00
Ronald BarendseandGitHub 48bfbb00cd Clear cached PublishedDataTypes when content types are updated (#15253)
* Clear cached PublishedDataTypes when content types are updated

* Optimize published data type cache initialization
2023-11-21 10:28:26 +01:00
Bjarne FyrstenborgandZeegaan 3ff6bd191a V13: Webhook logs formatting (#15246)
* Use code snippet component for request and response

* Change overlay size to medium

* Format log date

* Handle JS as JavaScript

* Try format JSON

* Update less syntax

* Add word wrap

* Formatting

* Update variable

* Remove unused editorService

* Add missing details controller and fix formatting in catch block

* Set data object

* Update overlay size to match umb-editor overlay

* Use editorService instead to show details on overlay

* Add general box header

(cherry picked from commit 13db9b308e)
2023-11-21 09:30:02 +01:00
Bjarne FyrstenborgandGitHub 13db9b308e V13: Webhook logs formatting (#15246)
* Use code snippet component for request and response

* Change overlay size to medium

* Format log date

* Handle JS as JavaScript

* Try format JSON

* Update less syntax

* Add word wrap

* Formatting

* Update variable

* Remove unused editorService

* Add missing details controller and fix formatting in catch block

* Set data object

* Update overlay size to match umb-editor overlay

* Use editorService instead to show details on overlay

* Add general box header
2023-11-21 09:24:48 +01:00
Kenn JacobsenandGitHub a4c7047a50 Add output caching to the Delivery API (#15216) 2023-11-20 11:01:36 +01:00
dependabot[bot]andJacob Overgaard 7dcef22702 Bump tinymce from 6.7.1 to 6.7.3 in /src/Umbraco.Web.UI.Client
Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.7.1 to 6.7.3.
- [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/6.7.3/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 10:17:27 +01:00
dependabot[bot]andJacob Overgaard 6587ecac2d Bump tinymce from 6.7.1 to 6.7.3 in /src/Umbraco.Web.UI.Client
Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.7.1 to 6.7.3.
- [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/6.7.3/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 10:10:42 +01:00
dependabot[bot]andJacob Overgaard bb9a8fc3be Bump tinymce from 6.7.1 to 6.7.3 in /src/Umbraco.Web.UI.Client
Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.7.1 to 6.7.3.
- [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/6.7.3/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 10:09:53 +01:00
Jacob OvergaardandGitHub 8447123ef3 V13: Allow external login custom views to see where they are being shown (#15251)
* fix: make sure isTimedOut state is forwarded to the login screen

* fix: make umb-custom-view work without attributeChangedCallback

* style subheadline

* add support for userViewState on external login custom views

* fix: subheadline should be a span

* check for isTimedOut on internal login screen

* reformat code

* add args to external login provider custom view

* send args to custom view

* set state to "logout" when clicking the logout button

* force user to new login page /umbraco/login?logout=true if logged out
2023-11-20 08:52:20 +01:00
Erik-Jan WestendorpandGitHub 7bad6b9fd8 Fix button styling in block list & block grid overlay (#14929)
* Update blocklist.blockconfiguration.overlay.less

Change noValue color

* Update blockgrid.blockconfiguration.overlay.less

Change noValue color for block-grid
2023-11-17 15:53:08 +00:00
Jacob Overgaard 77288caeed Revert change to user dialog that accidentally removed user dashboards 2023-11-17 15:59:29 +01:00
dependabot[bot]andJacob Overgaard d709994c61 Bump tinymce from 6.7.1 to 6.7.3 in /src/Umbraco.Web.UI.Client
Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.7.1 to 6.7.3.
- [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/6.7.3/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-17 14:54:32 +01:00
89cdba6b23 V13: login screen design refresh (#15037)
* add new login images

* layout styling

* styling

* fix line height

* use image and logo

* add comments

* remove border and shadow

* change logos and images

* use styleMap and add dark logo property

* add new content setting for dark logo variant

* add loginLogoImageDark to angular server variables

* set logo-dark attribute on the auth element and rename "logo-image" to "logo-light"

* styling

* update auth element

* replace logo files with new brand logos

* use different logo on install screen

* no-nodes: move logo to img file

* use different logo for umb-avatar

* use different logo for backoffice

* use different logo for BootFailed

* tranparent background

* switch dark and light logo

* image flip horizontal

* fix background

* inject native inputs into auth element

* use native inputs in login

* get input values and submit on enter press

* wip validation

* wip custom login input. And inject entire form instead

* use external submit button

* use uui-labels instead

* style inputs

* cleanup

* convert to function

* add translations

* wait for slot update before getting form

* fix divider to work on transparent backgrounds

* background less transparent

* load css from file

* fix logo

* fix mobile padding

* add documentation and fix name of input field for username

* revert to old login background

* revert to old login background

* add labels for login fields

* fix label warning

* fix fallback for messages

* replace background image

* do not transform background image

* add mocked texts

* use new generic "Welcome" title

* use correct user_email for email field

* update "Welcome..." to "Welcome" to use with the new login screen

* reformat code

* update greeting headline

* update actions

* update mocks

* update fallback value

* update texts

* improve query safety

* add logoImageAlternative and ensure naming is correct from backend to frontend

* add remarks to avoid changing the color configuration of an external login button

* format

* update auth styles

* external login provider element

* auth layout

* external login providers layout

* login input element

* invite page

* login page

* new password page

* typesafe

* fix custom view login provider

* divider color

* prevent pink lines from overflowing image

* replace login background

* add umb prefix to css variables

* avoid using 'umbraco' in alt texts and add check for logo alternative

* adjust greeting size

* Revert "add umb prefix to css variables"

This reverts commit 005813cbfd.

* add new blue button color

* font-size on headlines

* align styling on all pages

* use error layout

* ts happy

* adjust divider to work better with rounded buttons

* add overflow to in case of very long forms

* adjust h2 size

* update mocks to match cms

* first headline on a page should be a h1

* first headline on a page should be a h1

* first headline on a page should be a h1

* copy styling to mfa page

* first headline on a page should be a h1

* make the blue logo default for Umbraco 13

* move background-color to auth-layout so it also takes effect inside the cms

* adjust padding on the internal div on the buttons

* reformat code

* fix async text for external login buttons

* align design of mfa page with the other screens

* align logos

* reformat code

* use white logo for nonodes

* add safety measure to returnPath

* lowercase the 'or' text

* force uui-select to use the background-color as other regular inputs

* match uui-select-height with other input fields

* revert back to default look for outline uui-button

* move background-color to layout element to span the entire browser

* align headlines across components

* adjust max-width on #content to better fit headlines

* align line-height on headlines across components

* allow error text a bit of top margin

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2023-11-17 14:53:58 +01:00
Nikolaj GeisleandGitHub 0085f9862e V13: Fix proper serialization of webhook object (#15248)
* deserialize object again before firing

* Dont serialize and already serialized object

* Update to use constant instead of hard coded string
2023-11-17 14:35:43 +01:00
Nikolaj GeisleandGitHub a60ea1f49d V13: Fix AddWebhookDatabaseLock migration (#15250)
* Change to proper constant

* Update with comments
2023-11-17 14:14:41 +01:00
Elitsa MarinovskaandGitHub 8274822577 V14: Start using user group permission service (#15200)
* Adding a replacement to IUserGroupAuthorizationService

* Replacement for the implementation as well

* Adding AuthorizationStatus & mapping it to the corresponding OperationStatus

* Fix references

* Fix another reference

* Fix statuses

* Fix status result messages

* Fix wording

* Moving check for user part of user group earlier

* Review suggestion

* Fix section name
2023-11-17 11:52:29 +01:00
Kenn JacobsenandBjarke Berg 92c23eceae Ensure content types are updated in ContentStore when a data type changes (#15239) 2023-11-17 10:37:56 +01:00
Kenn JacobsenandBjarke Berg 4781fb1d8b Ensure content types are updated in ContentStore when a data type changes (#15239) 2023-11-17 10:37:23 +01:00
Kenn JacobsenandGitHub f286b1168c Ensure content types are updated in ContentStore when a data type changes (#15239) 2023-11-17 10:26:59 +01:00
Nhu DinhandGitHub dc79b84700 V14 added acceptance tests for the Partial Views (#15210)
* add UI acceptance tests for Partial Views

* Added additional timeout

* fixed comments

* Fixed suggestions from review
2023-11-17 08:24:31 +01:00
Andreas ZerbstandGitHub 8b5717500d V14 QA added Scripts acceptance tests (#15212)
* Updated api script tests for using new helpers and the AAA pattern

* Added acceptance tests for the scripts

* updated naming

* Bumped version of testHelpers

* Added suggestions from review
2023-11-17 10:11:43 +07:00
Jacob Overgaard 549b219a8b update backoffice submodule 2023-11-16 15:24:32 +01:00
Jacob Overgaard 30ee7ae045 update backoffice submodule 2023-11-16 15:23:41 +01:00
960d70ec54 V13: Webhook logging cleanup (#15198)
* Add log cleanup settings

* Start implementation of WebhookLoggingCleanup

* Add WebhookLog database locks

* Refactor repository to allow cleanup

* Refactor WebhookLoggingCleanup to fix bugs

* FIx up tests

* WebhookLoggingCleanup PR review suggestions

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-11-16 13:49:05 +01:00
Bjarne FyrstenborgandGitHub 93415a9957 Click row on dictionary list (#15194) 2023-11-16 12:34:17 +01:00
Bjarne FyrstenborgandGitHub 963e57723a Don't change format in convertToLocalMomentTime (#15223) 2023-11-16 10:38:53 +01:00
Bjarke Berg 5b3e9c580a Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	version.json
2023-11-16 09:12:01 +01:00
Bjarke Berg 696867b305 Merge remote-tracking branch 'origin/v14/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
2023-11-16 09:08:30 +01:00
Bjarke Berg eb0c1cd4a9 Merge remote-tracking branch 'origin/release/13.0' into v13/dev 2023-11-16 09:07:36 +01:00
Andy ButlandandGitHub ead7741ee2 Updated rich text parser interfaces to support context cache. (#15220) 2023-11-16 06:33:36 +01:00
Bjarke Berg ab2ebba690 remove imagesharp reference 2023-11-15 12:05:19 +01:00
Bjarke Berg 73eb9e04da bump version 2023-11-15 12:05:09 +01:00
Vitor RodriguesandNikolaj Geisle 44c3c3741e Fix potential NullReferenceException 2023-11-15 11:49:36 +01:00
Bjarke Berg d714741bee Fixed build 2023-11-15 09:53:28 +01:00
Bjarke Berg ea33b73daa Added scope.complete in edge cases. (#15207)
(cherry picked from commit 28e8ac11f0)
2023-11-15 09:46:24 +01:00
Bjarke Berg ba64b46824 Merge remote-tracking branch 'origin/release/10.8' into release/10.8 2023-11-15 09:45:30 +01:00
Bjarke Berg 04e59e9a9d Fixed a couple of occurrences where scopes was auto-completed while modified db state (#14947)
* Fixed a couple of occurrences where scopes was auto-complated while actually modified the state of the database.

* Added temp ctor to fix boot issue

(cherry picked from commit 41f8f03c2c)
2023-11-15 09:45:23 +01:00
Bjarke Berg 6f139ced53 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-11-15 09:37:40 +01:00
Bjarke Berg ecb1b3b9ac Merge remote-tracking branch 'origin/release/12.3' into v12/dev
# Conflicts:
#	version.json
2023-11-15 09:36:10 +01:00
Bjarke BergandGitHub d2ff2ea46e Bugfix: Count existing media correct (#15206)
* https://github.com/umbraco/Umbraco-CMS/issues/15205
Count media correct

* Fix content should be document
2023-11-15 09:34:27 +01:00
Bjarke BergandGitHub 65b7967fed Updated to .NET 8 final (#15204) 2023-11-15 09:29:50 +01:00
Bjarke BergandGitHub 28e8ac11f0 Added scope.complete in edge cases. (#15207) 2023-11-15 09:03:08 +01:00
Erik-Jan WestendorpandGitHub c7e5d94f45 Dynamic root feature translations (Dutch) (#15109)
* Fix typo

* Add Dutch translations
2023-11-15 08:39:01 +01:00
Andreas ZerbstandBjarke Berg b8a1c42660 V12 Bugfix, Added compare provider name extension for Sqlite (#15189)
* Created an extension for comparing the current and the outdated providerName for Sqlite

* Added usages for the CompareProviderNames

* Added another case if the providerName is the outdated SQLite

* Both cases use Sqlite, so there is no need to have duplicate code

(cherry picked from commit d0cd22b09d)
2023-11-14 20:39:33 +01:00
Andreas ZerbstandGitHub d0cd22b09d V12 Bugfix, Added compare provider name extension for Sqlite (#15189)
* Created an extension for comparing the current and the outdated providerName for Sqlite

* Added usages for the CompareProviderNames

* Added another case if the providerName is the outdated SQLite

* Both cases use Sqlite, so there is no need to have duplicate code
2023-11-14 20:38:18 +01:00
Bjarke Berg 8ffddb77ff Bump version 2023-11-14 18:55:52 +01:00
Bjarke Berg 60644fadc0 Update global.json 2023-11-14 13:27:50 +01:00
Bjarke Berg fb55e1b244 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Infrastructure/PropertyEditors/MultiUrlPickerValueEditor.cs
2023-11-14 13:22:10 +01:00
Bjarke Berg 039543ab43 Post merge 2023-11-14 13:19:55 +01:00
Bjarke Berg 2402d2f8f1 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs
2023-11-14 13:17:47 +01:00
Bjarke Berg 46d5db51e8 Post merge fix 2023-11-14 13:16:51 +01:00
Jacob OvergaardandGitHub be39b9c19a V10: Update @umbraco-ui/uui, jQuery, ace-editor, nouislider, spectrum-colorpicker2 (#15197)
* V13: Add support for Node.js 20 (#15022)

* update versionSpec to nodejs 20 and avoid specifying minor and patch versions to improve Azure Pipelines stability

* update engines and package lock files

* update helpful displayNames for npm builds

* add retry to counter nodejs.org timeouts

add retryCountOnTaskFailure as suggested on https://developercommunity.visualstudio.com/t/NodeTool0-task-to-install-nodejs-fails/10455454

* update lockfile

* bump nvm support to latest node.js 20.9 LTS

* build(deps): bump @umbraco-ui/uui from 1.3.0 to 1.5.0

* build(deps): bump public dependencies to latest

* build(deps-dev): bump build dependencies to latest

* build(deps-dev): bump test tools to latest

* build: add script to lint and run --fix

* revert login merge from v13
2023-11-14 13:08:29 +01:00
c5c8a59736 Allow ID for a new dictionary-item to be specified (#15187)
* Allow ID for a new dictionary-item to be specified

* PR: Pattern matching hotness

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-11-14 13:01:59 +01:00
Bjarke Berg 80631e77c9 Post merge fixes with versions and updated nuget packages 2023-11-14 12:49:02 +01:00
Bjarke Berg c22783e45e Merge remote-tracking branch 'origin/release/13.0' into v13/dev 2023-11-14 12:43:11 +01:00
Mads RasmussenandGitHub 7d9db0ab30 update import map for data type (#15199) 2023-11-14 12:27:35 +01:00
Bjarke Berg a1c527dcbd Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-11-14 12:03:09 +01:00
Bjarke Berg 9a143c0850 Merge remote-tracking branch 'origin/release/10.8' into release/10.8 2023-11-14 11:46:26 +01:00
4d98937af9 Delivery API nested property expansion and output limiting (#15124)
* V2 output expansion + field limiting incl. deprecation of V1 APIs

* Performance optimizations for Content and Block based property editors

* A little formatting

* Support API versioning in Delivery API endpoint matcher policy

* Add V2 "expand" and "fields" to Swagger docs

* Renamed route for "multiple items by ID"

* Review changes

* Update src/Umbraco.Cms.Api.Delivery/Controllers/Media/ByIdMediaApiController.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Update src/Umbraco.Cms.Api.Delivery/Filters/SwaggerDocumentationFilterBase.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Update src/Umbraco.Cms.Api.Delivery/Filters/SwaggerDocumentationFilterBase.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Revert "Performance optimizations for Content and Block based property editors"

This reverts commit 0d5a57956b.

* Introduce explicit API cache levels for property expansion

* Friendly handling of bad expand/fields parameters

---------

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2023-11-14 11:16:12 +01:00
Bjarke Berg df4cd63962 https://github.com/umbraco/Umbraco-CMS/issues/15195 Fixed issue with media not cached correct (#15196) 2023-11-14 10:59:30 +01:00
Bjarke Berg 97d8039a21 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-11-14 10:52:06 +01:00
Bjarke Berg 97aa623e87 Fixed smalled things due to nullable refernece types 2023-11-14 10:51:06 +01:00
Bjarke Berg 737104624e Fixed reference 2023-11-14 09:56:34 +01:00
Bjarke Berg 162a6a0085 Post merge 2023-11-14 09:39:39 +01:00
Bjarke Berg cea6c3f20e Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-11-14 09:31:25 +01:00
Bjarke Berg 74f06bd6bd Merge remote-tracking branch 'origin/release/13.0' into v13/dev 2023-11-14 09:30:53 +01:00
Bjarke Berg 2cf2176613 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-11-14 09:30:15 +01:00
Bjarke Berg 4a8ffd1b37 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-11-14 09:29:59 +01:00
Bjarke Berg a17e398f28 Merge remote-tracking branch 'origin/release/10.8' into v10/dev 2023-11-14 09:29:36 +01:00
Bjarke Berg 9af9dd2c02 Merge remote-tracking branch 'origin/release/10.8' into v10/dev 2023-11-14 09:29:09 +01:00
Bjarke Berg 24fef823ba Merge branch 'release/12.3' into v12/dev
# Conflicts:
#	version.json
2023-11-14 09:28:24 +01:00
Bjarke Berg 2b7785fcd3 https://github.com/umbraco/Umbraco-CMS/issues/15195 Fixed issue with media not cached correct (#15196) 2023-11-14 09:14:39 +01:00
Bjarke BergandGitHub 2266a98fc6 https://github.com/umbraco/Umbraco-CMS/issues/15195 Fixed issue with media not cached correct (#15196) 2023-11-14 09:14:01 +01:00
Bjarke Berg d112ba5e40 Bump version 2023-11-14 09:11:58 +01:00
151fccee97 Performance optimisations related to blocks (and multi url picker) (#15184)
* Added content types to property index value factory, because the deep cloning is too expensive to execute often

* Do not use entityservice in ToEditor, as it goes to the database. We need to use something that is cached.

* Small performance optimization for nested content too

* A little formatting and an obsoletion message

---------

Co-authored-by: kjac <kja@umbraco.dk>
2023-11-14 08:12:05 +01:00
Bjarke Berg fee9bf12c0 Updated nuget packages 2023-11-13 18:56:57 +01:00
Bjarke Berg 633f649be9 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Cms.ManagementApi/Umbraco.Cms.ManagementApi.csproj
#	src/Umbraco.Infrastructure/Cache/DistributedCacheBinder_Handlers.cs
2023-11-13 18:40:11 +01:00
Bjarke Berg 74cfd9c9a0 Updated nuget packages 2023-11-13 18:38:15 +01:00
0e8c92a6e7 V13: Refactor webhookservice to attempt pattern (#15180)
* Refactor IWebhookService to attempt pattern

* Remove unwanted file

* Fix up tests

* Fix after merge

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-13 18:36:05 +01:00
Bjarke Berg d6751e2832 Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	version.json
2023-11-13 18:30:50 +01:00
Bjarke Berg abfa07367f Bump version 2023-11-13 18:06:41 +01:00
46df3a05a7 V13: request queueing (#15176)
* Implement persistence

* Start implementing repository

* Implement repository

* Implement request service

* Dont run WebhookFiring if not in runtime mode run

* Refactor repository and service to have full CRUD

* add tests for Request service

* Implement WebhookRequest lock

* Register hosted service

* Add try catch when firing HttpRequest

* Add migration

* Refactor to use renamed IWebhookService

* Refactor tests too

* Add setting to configure webhook firing period

* Update docs

* Review fixes

* Add column renaming migration

* Remove unused service

* run request in parralel

* Refactor to fire parallel in background

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-11-13 15:49:02 +01:00
Bjarke BergandGitHub e5de8bf56b Updated nuget packages (#15192) 2023-11-13 14:59:52 +01:00
Bjarke BergandGitHub 16a27a4c52 use header value instead if present to set culture on request (#15168) 2023-11-13 13:33:02 +01:00
Bjarke Berg 261586f14f Merge branch 'v13/dev' into release/13.0 2023-11-13 12:47:31 +01:00
Andrew McKaskillandBjarke Berg 04ac1542aa Refactor hostedServices into background jobs (#14291)
* Refactor jobs from HostedServices into BackgroundJobs

* Clean up generics and DI setup

* Add RecurringBackgroundJob Unit Tests

* Add ServiceCollection helper

* Add Obsolete attributes

* Add Notification Classes

* Add UnitTests for RecurringBackgroundJob HostedService

* Add NotificationEvents

* Add state to notifications

* Update UnitTests

* Add Obsolete Attributes to old hosted service classes

* Updated xmldoc in IRecurringBackgroundJob.cs

* Update Obsolete attribute messages to indicate classes will be removed in Umbraco 14

(cherry picked from commit c30ffa9ac3)
2023-11-13 11:10:58 +01:00
Bjarne FyrstenborgandGitHub 1d43a67934 Add edit page for webhook (#15175)
* Add edit page for webhook

* Remove function again

* Remove old edit in overlay

* Update language keys

* Update GetByKey to get model as camel case properties

* Localize "select event"

* Localize "create header"

* Don't show input field in header for now

* Add generic class to limit property editor width

* Remove loading check since already checked when loading entire editor view

* Add empty message

* Update col span

* Set edit name

* Map id property

* Return webhook model after update

* Translate speech bubble text

* Resolve content types

* Only push if not already exists

* Check webhook headers

* Set webhook enabled by default
2023-11-13 10:14:40 +01:00
Andreas ZerbstandGitHub 3d6c5850dc V14 added test for the Templates (#15179)
* Updated existing locator as it was prone to failing

* Removed old tests from earlier versions

* Added a timeout and an await. This was because the locator sometimes failed

* Added missing import for crypto

* Updated locator as it sometimes failed.

* Updated the README to include information for using the UI mode for playwright

* Bumped the timeout time for our tests

* We updated the naming for out methods in our testHelpers, so we need to update the usage as well

* Added additional timeout

* Updated the config so it is easier to understand what you need to input

* Added UI acceptance tests for templates

* Added types/node, allows us to use crypto. Updated the testhelpers to use the newest version.

* fixed error with testhelper dependency

* Bumped testhelper version

* Moved to settings instead of templating
2023-11-13 09:36:23 +01:00
e48e7ff146 Add [SpecialType] attributes to request & response (#15103)
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-13 09:11:11 +01:00
Kenn JacobsenandGitHub 589c74e918 Data type icons should not be served from the Management API (#15155)
* Remove data type icons from management API output and add editor UI alias instead

* Update OpenApi.json
2023-11-10 14:17:50 +01:00
Nikolaj GeisleandGitHub 7c87743191 Add Auth attribute to controller (#15178) 2023-11-10 14:14:32 +01:00
Jacob Overgaard a0ff997ab0 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-11-10 13:49:54 +01:00
Jacob Overgaard f4cb7e71fa Cherry-picked c03df2b74e into v13/dev 2023-11-10 13:45:00 +01:00
Jacob Overgaard 81caf2b384 V14: make v13 login screen work initially with Management API (#15170)
* make the login check a bit more robust to be able to handle both old postlogin and new management api response types

* v14 only: update the login url to work with the management api (this will still work with the old backoffice to some extent)

* Revert "v14 only: update the login url to work with the management api (this will still work with the old backoffice to some extent)"

This reverts commit 0639ca80f0.

* V14 only: additionally authenticate with the Management API to set the right cookies
2023-11-10 13:42:28 +01:00
Jacob OvergaardandGitHub c03df2b74e V14: make v13 login screen work initially with Management API (#15170)
* make the login check a bit more robust to be able to handle both old postlogin and new management api response types

* v14 only: update the login url to work with the management api (this will still work with the old backoffice to some extent)

* Revert "v14 only: update the login url to work with the management api (this will still work with the old backoffice to some extent)"

This reverts commit 0639ca80f0.

* V14 only: additionally authenticate with the Management API to set the right cookies
2023-11-10 13:38:08 +01:00
Erik-Jan WestendorpandGitHub 31678bb676 Translate webhooks keys to Dutch (#15091) 2023-11-10 10:41:31 +01:00
Andy ButlandandGitHub 8f8302358a Added notifications to the webhook service (#15174)
* Added webhooks to UdiEntityTypes and UdiGetterExtensions.

* Renamed IWebhookservice and amended signature of CreateAsync to allow returning of null.
Added notifications for webhooks.

* Further renames.

* Fixed failing unit test.

* Removed inadvertently added file.
2023-11-10 10:17:36 +01:00
Ronald BarendseandGitHub b8f5078135 Improve logging of invalid reference relations (#15160)
* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions

* Improve logging of invalid reference relations
2023-11-10 09:07:10 +01:00
e143133bcf V13: Update IWebHookService to proper casing (#15169)
* Update to proper casing

* Fixed naming

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Andreas Zerbst <andr317c@live.dk>
2023-11-10 08:20:22 +01:00
7bde16b4ef V13: Add eventype to webhookevents (#15157)
* Refactor IWebhookEvent to contain event type.

* refactor frontend to filter on eventType.

* Display event names

* refactor to use eventNames

* remove npm from overview

* implement alias for WebhookEvents

* Implement [WebhookEvent] attribute

* Refactor IWebhookService to get by event alias and not name

* Rename parameter to fit method name

* to lower event type to avoid casing issues

* Apply suggestions from code review

Co-authored-by: Ronald Barendse <ronald@barend.se>

* Change event names from constants to hard coded. And give more friendly names

* Refactor to not use event names, where it was not intended

* Add renaming column migration

* display event alias in logs

* Update migration to check if old column is there

* Apply suggestions from code review

Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>

* add determineResource function to avoid duplicate code

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
Co-authored-by: Kenn Jacobsen <kja@umbraco.dk>
2023-11-09 14:18:34 +01:00
Bjarke Berg 00bb5170a0 Merge remote-tracking branch 'origin/v10/dev' into release/10.8
# Conflicts:
#	version.json
2023-11-09 13:53:46 +01:00
919138c299 #14835 Update link on permissionsreport.html (#14872)
* #14835 Update link on permissionsreport.html

Updated link to permissions page to point to 10-LTS documentation

* retrigger checks

---------

Co-authored-by: Rasmus Berntsen <rasmus.berntsen@isobar.com>
2023-11-09 13:53:18 +01:00
Ronald BarendseandGitHub ed65645a33 Add global.json and cleanup UI project file (#14900)
* Add global.json with minimum .NET 6.0.5 SDK version and roll forward policy

* Clean up UI project file
2023-11-09 13:52:21 +01:00
Ronald BarendseandGitHub d0be4ab263 Publish ContentTreeChangeNotification after saving/deleting blueprints (#14898) 2023-11-09 13:51:05 +01:00
Bjarke Berg ddb26632f9 Bump to rc 2023-11-09 13:38:34 +01:00
Bjarke Berg d5b1f5875b Bump version 2023-11-09 13:38:13 +01:00
Bjarke Berg f8c1a560ff Bump version 2023-11-09 13:36:57 +01:00
Jacob Overgaard 1fcb96288f correct localization key of 2fa view 2023-11-09 11:14:55 +01:00
Bjarke Berg e13ab13183 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Build.props
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Web.BackOffice/CompatibilitySuppressions.xml
#	src/Umbraco.Web.Common/CompatibilitySuppressions.xml
#	tests/Umbraco.Tests.Common/CompatibilitySuppressions.xml
#	tests/Umbraco.Tests.Integration/CompatibilitySuppressions.xml
2023-11-09 09:41:39 +01:00
Bjarke Berg 836f173925 Merge remote-tracking branch 'origin/release/13.0' into v13/dev 2023-11-09 09:23:44 +01:00
Ronald BarendseandGitHub 9f062e38eb Include automatic relation type aliases from factory and fix SQL parameter overflow (#15141)
* Include automatic relation type aliases from factory

* Remove unnessecary distinct and fix SQL parameter overflow issue

* Fixed assertions and test distinct aliases

* Simplified collection assertions
2023-11-09 08:42:22 +01:00
Ronald BarendseandGitHub d301679e53 Include Umbraco.Web.UI.Login project, update compatibility suppressions and remove unnecessary package references (#15163)
* Fix Umbraco.Web.UI.Login not showing up in solution

* Update PackageValidationBaselineVersion  to 13.0.0-rc1 and remove all CompatibilitySuppressions.xml files

* Remove unnecessary package references

* Move Microsoft.EntityFrameworkCore.Design reference and add comment

* Disable package validation and fix override in tests

* Inherit package validation setting for EF Core projects
2023-11-09 08:39:42 +01:00
Bjarke Berg e9857c800a Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2023-11-09 07:57:00 +01:00
Ronald BarendseandGitHub 915b63db29 Fix rendering and parsing new RTE markup object in backoffice (#15166)
* Render RTE markup in custom view

* Fix ncRichText filter to support RTE markup object
2023-11-09 06:30:25 +01:00
Jacob Overgaard 1f4bbe2f06 update backoffice submodule 2023-11-08 14:39:46 +01:00
Bjarke Berg fd0c233362 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-11-08 05:53:03 +01:00
Bjarke Berg 5e37b997af Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2023-11-08 05:52:35 +01:00
Bjarke Berg 1ba025cf8b Merge remote-tracking branch 'origin/v12/dev' into release/13.0
# Conflicts:
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
#	version.json
2023-11-07 20:17:17 +01:00
Bjarke Berg e0220cb47f Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-11-07 20:14:55 +01:00
Bjarke Berg 81063d083c Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-11-07 20:14:04 +01:00
2f4f2ae384 V14/feature/custom generic swagger (#15025)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-11-07 16:15:56 +01:00
997434cebb Move localdb file management of PublishedSnapshotService into itself. (#15085)
* Move localdb file management of PublishedSnapshotService into itself.

Added a way for the PublishedSnapshot service to clean up it's local files so (for example) Upgrade migrations have a reliable way of removing known invalid cache files without running into locking issues

* Small rename to differentiate existing method from simple getter

* Fix breaking change

Long live default implementations 🎉

* Another breaking change fix

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-11-07 16:02:20 +01:00
kasparboelkjeldsenandGitHub e5c8627abf Add strict contextual escaping on the $scope for grid controller (#14923)
* Add strict contextual escaping on the $scope for grid controller

* use safe_html filter instead
2023-11-07 11:44:11 +00:00
Bjarke Berg c90f05c57c bump version 2023-11-07 11:55:06 +01:00
Bjarne FyrstenborgandGitHub a648dda61b Add tree access to webhooks (#15156)
* Add tree access to webhooks

* Update authorize attribute

* Add webhooks tree policy
2023-11-07 11:17:31 +01:00
Bjarne FyrstenborgandGitHub 90ddd63742 Add comments to methods in IWebHookService (#15151)
* Add comments to methods in IWebHookService

* Inherit doc
2023-11-07 11:14:06 +01:00
9e5ff305c8 Batched bulk WhereIn query to avoid To mana paramaters error (#15004)
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-11-07 10:49:46 +01:00
Kenn JacobsenandBjarke Berg 80fac866c9 Ensure invariant properties return the correct cache value at source level (#15145)
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-11-07 09:02:08 +01:00
06d61094cc Ensure invariant properties return the correct cache value at source level (#15145)
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-11-07 09:01:27 +01:00
Jacob OvergaardandGitHub 613ed5955c V13 RC: Fix issue with 2FA login (#15140)
* add returnPath to 2fa custom views so they know where to redirect the user to

* fix(2fa): send back the user details in the login-success event emitter in case the login happens inside the backoffice overlay
2023-11-07 08:42:13 +01:00
Bjarke Berg 3306fe53e8 Fix build 2023-11-06 20:15:34 +01:00
Warren BuckleyandBjarke Berg c8dff604a0 Changes PackageMigrationsPlans to be a weighted collection like dashboards 2023-11-06 18:22:32 +01:00
Ronald BarendseandGitHub 289ab6740b Fix WithCollectionBuilder helper methods nullability (#15143)
* Fix WithCollectionBuilder helper methods nullability

* Remove unnecessary lamba expressions
2023-11-06 18:10:09 +01:00
Ronald BarendseandGitHub e7bab6995a Move IContextCache parameter to base Deploy interfaces and add checksum to artifact dependency (#15144)
* Move IContextCache parameter to base interfaces

* Add checksum to artifact dependency
2023-11-06 18:05:02 +01:00
Andy ButlandandGitHub 8d3883df14 Aligned parameters on sync and async methods on IFileSource. (#15128) 2023-11-06 17:59:30 +01:00
fee32bd6ec Remove parameter value/return nullability in IImageSourceParser, ILocalLinkParser and IMacroParser (#15130)
* Align nullability of ILocalLinkParser with other rich text content parsers (IMacroParser and IImageSourceParser).

* Remove value/return nullability in IImageSourceParser, ILocalLinkParser and IMacroParser

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
2023-11-06 17:58:01 +01:00
Elitsa MarinovskaandBjarke Berg d35c6f0e94 Update correct action (#15142)
(cherry picked from commit ffaa77eb25)
2023-11-06 17:56:08 +01:00
Bjarke Berg b12d88818d bump version 2023-11-06 17:54:38 +01:00
Elitsa MarinovskaandGitHub ffaa77eb25 Update correct action (#15142) 2023-11-06 17:54:16 +01:00
Andreas ZerbstandGitHub 66ea4fe29a V14 QA Added Log Viewer Tests (#15108)
* Added log viewer tests, not done yet

* Updated auth to work

* Updated the authentication test

* Cleaned up the Logviewer tests

* Removed old acceptance tests

* Fixed failing test

* Updated old tests and added additional log viewer tests

* Bumped version and deleted duplicate dependencies

* Fixed naming

* Added a TODO
2023-11-06 11:33:25 +01:00
Erik-Jan WestendorpandGitHub c0ca4685e8 Fix FurthestAncestorOrSelfDynamicRootQueryStep and FurthestDescendantOrSelfDynamicRootQueryStep (#15113)
* Rename FarthestDescendantOrSelfDynamicRootQueryStep to FurthestDescendantOrSelfDynamicRootQueryStep

* Rename FarthestAncestorOrSelfDynamicRootQueryStep to FurthestAncestorOrSelfDynamicRootQueryStep

* Update integration test and repo
2023-11-06 10:44:12 +01:00
Erik-Jan WestendorpandGitHub 913f48806a AddWebhookEvent to UmbracoBuilderExtensions (#15099) 2023-11-06 08:54:29 +01:00
Bjarne FyrstenborgandZeegaan 5f3c0c56cc Update webhook log table using constant (#15101)
(cherry picked from commit f7d1ef722e)
2023-11-06 08:24:11 +01:00
Bjarne FyrstenborgandZeegaan 79d9ac759b V13: Webhook corrections (#15077)
* Update icons

* Update tree headers

* Cleanup and change icon name

* Use button element instead

* Disable button instead

* Fix overlay title

* Simplify labels

* Add datalist for common headers

* Use Utilties function

* Events in plural form

* Cleanup and formatting

* Formatting

* More formatting

* Stop event bubbling when clicking delete button

* Sync tree node and show loading indicator

* Add webhook icon

* Remove globe icon to not confuse with languages

* Update logs

* Remove extra column with delete button which shouldn't be there

* Use umb-icon and update titles

* Use content type picker

(cherry picked from commit 29be27ba46)
2023-11-06 08:24:10 +01:00
Kevin JumpandZeegaan c31df57bdc New WebhookEventBase class (#15129)
(cherry picked from commit 145107be45)
2023-11-06 08:23:34 +01:00
Matthew WiseandEmma L Garland a2a2680def String comparision was using current culture which resulting in incorrect resuts for some languages 2023-11-03 14:00:59 +00:00
Vitor RodriguesandEmma L Garland 53b152d501 Fix potential NullReferenceException 2023-11-03 13:31:01 +00:00
Kevin JumpandGitHub 145107be45 New WebhookEventBase class (#15129) 2023-11-03 14:30:13 +01:00
Vitor RodriguesandEmma L Garland 5c514ca6c6 Fixed open api enum schema filter not setting type
By not setting the type and format, it would remain integer is this case, which would result in an invalid specification as the enum members are strings.
2023-11-03 13:14:20 +00:00
Bjarne FyrstenborgandGitHub e17fa957d6 Don't allow to select folder in create dialog under media type (#14840)
* Only allow creating folder at root or under another folder

* Fix typos in error message

* Add data-element to member type create dialog
2023-11-03 12:49:41 +00:00
Jacob Overgaard b11e13f8cd bump nvm support to latest node.js 20.9 LTS 2023-11-03 11:25:55 +01:00
Jacob OvergaardandGitHub 74a32fe0c0 V13 RC: Avoid duplicate id's on the login screen (#15111)
* avoid duplicate id's on the login screen

this removes the id attr from the inner input element of umb-login-input

* disallow form to validate

the validate behavior is controlled by the UI library
2023-11-03 09:36:38 +01:00
Mike MaseyandMichael Latouche a907be54b4 fix: add select all sr-only text to umb table select all button 2023-11-02 17:02:14 +01:00
Jacob Overgaard 3f4bb50a98 update backoffice submodule 2023-11-02 16:50:12 +01:00
Mike MaseyandJason Elkin 7886af4397 fix: ensure alt tag isn't remove on build
There seems to be an odd bug where on build, the alt tag is removed is it is alt="". Simply adding a space fixes this.
2023-11-02 15:50:04 +00:00
Jacob Overgaard 2bbd5fa541 update backoffice submodule 2023-11-02 16:32:06 +01:00
Jason ElkinandMichael Latouche c7f9417063 Remove legacy test project 2023-11-02 16:30:20 +01:00
Zeb SadiqandMichael Latouche 7b0ae3c5d9 Fixed one warning for Umbraco.Infrastructure . 'AesCryptoServiceProvider' is obsolete. 2023-11-02 16:26:29 +01:00
Richard JacksonandMichael Latouche 7a57e8861d Removed parenthesis from compiler directive
Removes warning from Umbraco.Web.UI as part of #15015
2023-11-02 16:08:45 +01:00
ff05886e43 Remove setter from WebhookEvent (#15106)
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-11-02 14:37:28 +01:00
Jacob Overgaard 0a65f0a576 lockfile 2023-11-02 14:06:21 +01:00
Bjarne FyrstenborgandMichael Latouche 69139eda52 Allow dashboard content to grow 2023-11-02 13:29:20 +01:00
Bjarne FyrstenborgandGitHub f7d1ef722e Update webhook log table using constant (#15101) 2023-11-02 13:27:48 +01:00
Andrew McKaskillandGitHub c30ffa9ac3 Refactor hostedServices into background jobs (#14291)
* Refactor jobs from HostedServices into BackgroundJobs

* Clean up generics and DI setup

* Add RecurringBackgroundJob Unit Tests

* Add ServiceCollection helper

* Add Obsolete attributes

* Add Notification Classes

* Add UnitTests for RecurringBackgroundJob HostedService

* Add NotificationEvents

* Add state to notifications

* Update UnitTests

* Add Obsolete Attributes to old hosted service classes

* Updated xmldoc in IRecurringBackgroundJob.cs

* Update Obsolete attribute messages to indicate classes will be removed in Umbraco 14
2023-11-02 13:15:14 +01:00
Bjarke Berg 83ed42998a Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-11-02 13:12:46 +01:00
Kenn JacobsenandGitHub 0f91ed895d Merge pull request #15100 from umbraco/v14/feature/merge-01-11-2023
V13 to V14 merge 01-11-2023
2023-11-02 12:38:26 +01:00
Jeroen BreuerandJason Elkin 67fe7e7e11 Fix warning CS0618: 'IHostingEnvironment.MapPathContentRoot(string)' is obsolete. 2023-11-02 11:05:53 +00:00
kjac e864f3eb05 Fix merge errors and port blocks in RTE implementation to V14 format (strongly typed, no magic JObjects) 2023-11-02 11:55:12 +01:00
Zeegaan 10264f244b bump version 2023-11-02 09:14:18 +01:00
Zeegaan 609a3ebca1 Merge branch 'release/12.3.0' into v12/dev 2023-11-02 08:53:11 +01:00
Kenn JacobsenandGitHub 6777145079 Ensure that missing access rules do not break the site (#15081) 2023-11-02 08:45:27 +01:00
Bjarne FyrstenborgandGitHub 29be27ba46 V13: Webhook corrections (#15077)
* Update icons

* Update tree headers

* Cleanup and change icon name

* Use button element instead

* Disable button instead

* Fix overlay title

* Simplify labels

* Add datalist for common headers

* Use Utilties function

* Events in plural form

* Cleanup and formatting

* Formatting

* More formatting

* Stop event bubbling when clicking delete button

* Sync tree node and show loading indicator

* Add webhook icon

* Remove globe icon to not confuse with languages

* Update logs

* Remove extra column with delete button which shouldn't be there

* Use umb-icon and update titles

* Use content type picker
2023-11-01 16:55:03 +01:00
Nikolaj Geisle c42eb28129 Bump version 2023-11-01 14:40:51 +01:00
Bjarke Berg ef80e25aa6 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.Core/Constants-Configuration.cs
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Configuration.cs
#	src/Umbraco.Core/Factories/IDatabaseSettingsFactory.cs
#	src/Umbraco.Core/Factories/IInstallSettingsFactory.cs
#	src/Umbraco.Core/Factories/IUpgradeSettingsFactory.cs
#	src/Umbraco.Core/Factories/InstallSettingsFactory.cs
#	src/Umbraco.Core/Factories/UpgradeSettingsFactory.cs
#	src/Umbraco.Core/Factories/UserSettingsFactory.cs
#	src/Umbraco.Core/Installer/IInstallStep.cs
#	src/Umbraco.Core/Installer/IUpgradeStep.cs
#	src/Umbraco.Core/Installer/NewInstallStepCollection.cs
#	src/Umbraco.Core/Installer/NewInstallStepCollectionBuilder.cs
#	src/Umbraco.Core/Installer/Steps/FilePermissionsStep.cs
#	src/Umbraco.Core/Installer/Steps/RestartRuntimeStep.cs
#	src/Umbraco.Core/Installer/Steps/TelemetryIdentifierStep.cs
#	src/Umbraco.Core/Installer/UpgradeStepCollection.cs
#	src/Umbraco.Core/Installer/UpgradeStepCollectionBuilder.cs
#	src/Umbraco.Core/Models/Blocks/RichTextBlockLayoutItem.cs
#	src/Umbraco.Core/Models/Blocks/RichTextEditorBlockDataConverter.cs
#	src/Umbraco.Core/Models/Configuration/NewBackOfficeSettings.cs
#	src/Umbraco.Core/Models/Configuration/NewBackOfficeSettingsValidator.cs
#	src/Umbraco.Core/Models/Installer/ConsentLevelModel.cs
#	src/Umbraco.Core/Models/Installer/DatabaseInstallData.cs
#	src/Umbraco.Core/Models/Installer/DatabaseSettingsModel.cs
#	src/Umbraco.Core/Models/Installer/InstallData.cs
#	src/Umbraco.Core/Models/Installer/InstallSettingsModel.cs
#	src/Umbraco.Core/Models/Installer/PasswordSettingsModel.cs
#	src/Umbraco.Core/Models/Installer/UpgradeSettingsModel.cs
#	src/Umbraco.Core/Models/Installer/UserInstallData.cs
#	src/Umbraco.Core/Models/Installer/UserSettingsModel.cs
#	src/Umbraco.Core/Models/OutOfDateType.cs
#	src/Umbraco.Core/PaginationHelper.cs
#	src/Umbraco.Core/Services/Installer/IInstallService.cs
#	src/Umbraco.Core/Services/Installer/IUpgradeService.cs
#	src/Umbraco.Core/Services/Installer/InstallService.cs
#	src/Umbraco.Core/Services/Installer/UpgradeService.cs
#	src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs
#	src/Umbraco.Infrastructure/Factories/Installer/DatabaseSettingsFactory.cs
#	src/Umbraco.Infrastructure/Installer/Steps/CreateUserStep.cs
#	src/Umbraco.Infrastructure/Installer/Steps/DatabaseConfigureStep.cs
#	src/Umbraco.Infrastructure/Installer/Steps/DatabaseInstallStep.cs
#	src/Umbraco.Infrastructure/Installer/Steps/DatabaseUpgradeStep.cs
#	src/Umbraco.Infrastructure/Installer/Steps/RegisterInstallCompleteStep.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Infrastructure/Models/Blocks/BlockEditorDataConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorValidator.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorValues.cs
#	src/Umbraco.Infrastructure/PropertyEditors/RichTextPropertyEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockGridPropertyValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockListPropertyValueConverter.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/BlockPropertyValueConverterBase.cs
#	src/Umbraco.Infrastructure/Security/IBackOfficeApplicationManager.cs
#	src/Umbraco.Infrastructure/Services/IIndexingRebuilderService.cs
#	src/Umbraco.Infrastructure/Services/IndexingRebuilderService.cs
#	src/Umbraco.New.Cms.Core/Umbraco.New.Cms.Core.csproj
#	src/Umbraco.New.Cms.Infrastructure/Umbraco.New.Cms.Infrastructure.csproj
#	src/Umbraco.New.Cms.Web.Common/Umbraco.New.Cms.Web.Common.csproj
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/content.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/BlockListPropertyValueConverterTests.cs
#	version.json
2023-11-01 13:50:38 +01:00
Bjarke Berg e159124643 Merge branch 'v14/feature/merge-29-10-2023' into v14/dev 2023-11-01 12:41:12 +01:00
Bjarke Berg 6bd4642bb2 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Web.UI.Client/package-lock.json
#	src/Umbraco.Web.UI.Client/package.json
2023-11-01 12:26:08 +01:00
Bjarke Berg c6e760c114 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-11-01 12:24:04 +01:00
Bjarke Berg 2856dc19a4 revert wrong merge for installer 2023-11-01 12:22:52 +01:00
Bjarke Berg 1ce71b6760 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-11-01 12:21:12 +01:00
Elitsa MarinovskaandNikolaj Geisle fc81cc8f38 Check content permissions before performing action (#15043)
* Setting actionContext.Result when authz wasn't successful

* Taking into account permissions when it is a new node

* Cleanup

* Passing nodeId as path when new item
2023-11-01 11:50:24 +01:00
Nikolaj GeisleandGitHub 52fd853d52 Move to core (#15084) 2023-11-01 11:47:27 +01:00
Elitsa MarinovskaandGitHub 92af8ac881 Check content permissions before performing action (#15043)
* Setting actionContext.Result when authz wasn't successful

* Taking into account permissions when it is a new node

* Cleanup

* Passing nodeId as path when new item
2023-11-01 11:30:32 +01:00
Nikolaj Brask-NielsenandNikolaj Geisle d5ff80352e Fix custom dbcontexts extention methods (#14937)
* test: Create failing test

* feat: New extension methods for adding Umbraco DBContexts

* test: Cleaned up integration tests
2023-11-01 10:06:17 +01:00
Nikolaj Brask-NielsenandGitHub c19e747bbe Fix custom dbcontexts extention methods (#14937)
* test: Create failing test

* feat: New extension methods for adding Umbraco DBContexts

* test: Cleaned up integration tests
2023-11-01 09:59:32 +01:00
Bjarke Berg aaf7171f75 Bump version 2023-10-31 19:36:43 +01:00
Bjarke Berg 890da5f57b Fixed login tests 2023-10-31 18:45:09 +01:00
Bjarne FyrstenborgandGitHub b1b48ec5cd Set max height of media item in grid (#15066)
* Set max height of media item in grid to avoid portrait images of take up much of height

* Style image preview in for SVG

* Set max height instead
2023-10-31 17:23:15 +00:00
Bjarke Berg 15fb4205ff Fixed issue with member creation and fixed test with non-breakable-space issue 2023-10-31 17:14:25 +01:00
Jacob Overgaard 985799068b update backoffice submodule 2023-10-31 16:46:28 +01:00
Jacob Overgaard fe8fe821d4 update backoffice submodule 2023-10-31 15:14:18 +01:00
Bjarke Berg d4dad9cb5b Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-31 15:10:49 +01:00
Jacob OvergaardandGitHub 78f46abe63 V13/bugfix/login screen autofill (#15075)
* pass in fields from outside login-page to make autofill APIs work

* remove unused property

* disable spellcheck for login form

* add name to login form

* remove unused property

* clean-up imports

* use inputmode instead of type=email

* refactor arguments into opts object
2023-10-31 15:10:27 +01:00
Bjarke Berg 8e7edde564 Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-31 12:52:54 +01:00
ae84d324ab V13/feature/blocks in rte (#15029)
* insert umb rte block web component in rte

* First stab at moving the RTE markup to a nested "markup" property in the property value.

* initial work

* only rewrite markup

* transform RTE into component

* parse scope in grid.rte

* revert use a fallback instead

* block insertion and sync in place

* block picker partly impl

* remove test of old controller

* remove test of old controller

* block with block data

* proper block with api connection

* remove log

* styling

* Persist blocks data (still a temporary solution)

* styling allows for interaction

* block actions

* tinyMCE styling

* paste feature

* prevalue display Inline toggle

* inline mode in RTE

* todo note

* fixes wording

* preparation for editor communication

* remove val-server-match for now

* clean up blocks that does not belong in markup

* remove blocks not used in the markup

* liveEditing

* displayAsBlock formatting

* clean up

* TODO note

* Serverside handling for RTE blocks (incl. refactor of Block List and Block Grid)

* ensure rich text loads after block editor

* trigger resize on block init

* Handle RTE blocks output in Delivery API

* sanitize ng classes

* simplify calls to init blocks

* move sanitisation

* make validation work

* only warn when missing one

* clean up

* remove validation border as it does not work

* more clean up

* add unsupported block entry editor

* Revert breaking functionality for Block List and Grid

* prevent re-inits of blocks

* make sure delete blocks triggers an update

* Refactor RichTextPropertyIndexValueFactory to index values from blocks + clean up RichTextPropertyEditor dependencies

* first working cursor solution

* inline element approach

* Handle both inline and block level blocks

* Fix the RTE block parser regex so it handles multiple inline blocks.

* Fix reference and tags tracking, add tests, make the editor backwards compatible and make deploy happy

* Use RichTextPropertyEditorHelper serialization in tests

* Ensure correct model in Block Grid value converter (incl unit test to prove it)

* do not include umbblockpicker in grid

* make blocks the new default, instead of macros

* only send value of body from DOMParser

* Blocks of deleted ElementTypes shows unsupported

* do not edit a unsupported block

* remove trying to be smart on the init

* fix missing culture issue

* set dirty

* alert when no blocks

* Revert "make blocks the new default, instead of macros"

This reverts commit 283e8aa473.

---------

Co-authored-by: kjac <kja@umbraco.dk>
2023-10-31 12:52:35 +01:00
Bjarke Berg a3a4917a94 Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-31 12:40:12 +01:00
Andy ButlandandGitHub d08d141bcf Updates and support for re-use of CMS logic in Deploy (#14990)
* Adds additional parameter to IFileSource.GetFilesAsync allowing the caller to continue on a file not found exception.

* Moved redirect tracking and creation logic out of handler into a service, allowing for re-use in Deploy.

* Reverted breaking change in IFileSource by obsoleting old method and
2023-10-31 12:38:44 +01:00
Jacob OvergaardandGitHub 53b87cb78c V13: npm updates (ace-editor) (#15033)
* bump vite from 4.4.11 to 4.5.0

* bump ace editor from 1.30.0 to 1.31.0

* bump eslint from 8.51.0 to 8.52.0

* update lockfile
2023-10-31 12:34:52 +01:00
Bjarke Berg 5665ad2b75 Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-31 12:31:26 +01:00
Zeegaan eb355f4ab6 Compare invariant to string instead, as SqlServer rounds DateTime 2023-10-31 12:30:12 +01:00
Ronald BarendseandGitHub 7677708917 Fix JsonNetSerializer settings leaking into derived implementations (#14814)
* Change settings static field to instance property

* Rename property to Settings
2023-10-31 12:18:51 +01:00
Jeffrey SchoemakerandGitHub 8e7831f4b8 Update NestedContentPropertyEditor.cs - Update obsolete message (#14953)
Nested Content is removed in v14, not in v13 anymore. This makes sure developers won't get confused / in panic mode
2023-10-31 12:17:34 +01:00
Jacob Overgaard 0281b71dc8 update importmap 2023-10-31 11:50:35 +01:00
Bjarke Berg 2cf839f686 Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-31 11:39:05 +01:00
6658a521b2 Dynamic Root (Alternative to XPath in MNTP) (#15035)
* Temp commit.. Initial work on XPath alternative for dymamically finding start nodes

* First commit that goes all the way from ui to db for NearestAncestorOrSelf

* Added more filters + return null from controller instead of not found

* Bugfix

* rewrite query to make sqlserver happy?

* Added more tests

* clean up initial step

* Added tests and refactor

* Update endpoint to take model instead of json

* pick origin

* Use model for config instead of string

* append add filter button

* fix

* default filter

* rename json fields

* correct field names

* minor corrections

* Renaming..

* Rename endpoint

* initial work for appending query steps

* query steps ui

* more localization

* query step UI

* Use doc type keys instead of alias

* only for Documents

* change to send keys to anyOfDocTypeKeys

* Fix potential bug

* Fix when level is impossible to get

* correct prop to dynamicRoot

* noValidStartNode dialog

* custom query step

* Renaming

* Rollback unintended file change

* Fixed issue if no doc type is chosen

* Remove unintended file changes

* More unintended changes

* Renaming

* Optimizations

- IDE Recommendation for better source
- Renaming for better clarity
- Improving spacing/formatting
- Typo corrections
- Remove warnings concerning IEnumerable

* Fix failed attempt bug

---------

Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-10-31 11:38:24 +01:00
Bjarke Berg 892e4a5678 Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-31 10:07:38 +01:00
6c5d38eb1a V14/feature/resend user invite endpoint (#14985)
* Added endpoint to resend invites for users.

* improve async return signatures + usings cleanup

* Improve/fix controller details

* Small improvements/clarifications

* Minor whitespace and naming fixes

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-10-31 10:07:30 +01:00
1b34d33eb7 Webhooks administration from Backoffice (#15050)
* Create webhook models

* Define interfaces for service and repository

* Create Webhook dto and corresponding factory

* implement WebhookRepository.cs

* Remove entity name from models, as that should be resolved in mapping instead

* Add new table to schema creator

* Register repo for DI

* Remove more mentions of entityname

* Refactor repository to guids

* Implement WebhookService

* Use scopes in service

* Start creating tests for service

* Refactor delete to use Id and not entire entity

* Rework Webhooks to be able to have multiple entity keys

* Implement GetAll functionality

* Implement webhook controller

* Imeplement get all events action

* Add equalityComparer deletegate to Webhook

* Add datacontract attirbutes to properties

* Implement backoffice webhooks tree

* Implement first webhooks menu

* Make WebHookController authorized

* Update to have tabs with webhooks and logs

* Enable create overlay

* Push to entityKeys array

* Fix up pagination

* Implement delete functionality

* remove pagination

* add log view

* Fix create to be able to select more than one content type

* implement type name resolving for content

* Refactor to use less duplication

* Implement update functionality in frontend

* Rename database table

* Make multiple events possible

* create new event picker

* Refactor to actually add new database table with proper name

* Make it possible to select multiple events

* Fix updating current items

* Fix up update functionality after db rework

* Add webhook icon

* Switch to match heartcore icons

* Refactor to use bases instead of Enum

* Refactor to make IWebhookEvent to Collection, so it can be injected instead of using reflection

* Fix up frontend to match new models

* Fix integration tests

* Remove obsolete entity key from webhookdto

* Introduce constants instead of hard coded strings

* Start implementation of firing mechanism

* Add new GetByEventName method

* Add 1 to many list on WebhookDto

* Implement new repository pattern

* Implement GetByEventName

* Fix up repository to use all async

* Refactor events to fire

* Refactor WebhookEvents to be more DRY

* Add custom header

* Start implementing log repository

* Implement GetPaged

* Implement WebhookLogService

* Implement GetLogs

* Add url to webhook log

* Implement log overview

* Formatting

* Implement details view

* Refactor to get actual retry count

* Refactor firing to fire only when Enabled

* Add Status code to detailed view

* Add configuration to disable webhooks entirely

* Implement custom headers frontend

* Implement persistence of custom headers

* Refactor retry service to also retry on non success status codes.

* Refactor registration of Webhooks, to also register as NotificationHandler

* Add webhooks migration

* Add key for adding webhook headers

* Fix up test

* Change event icon to flag

* Remember event, when editing what events you have chosen

* Refactor reflection to check if INotificationAsyncHandler instead

* Formatting

* Refactor webhook model to no longer derive from EntityBase

* Rename entityKeys to content keys

* Rename controller to lowercase H

* Add null check before trying to access selectedEvents

* Add configuration for maximum number of retries

* Add index to date

* Add webhook Key to logs

* Check for SchedulingPublisher before sending webhooks

* rename requestObject to payload

* Refactor event to send appropriate payloads

* Refactor logging to happen for every try.

* Order date by descending

* Add todo

* Change firing service to use String not ByteContent

* Update Headers to Interface instead of concrete implementation

* Dont return if a table exists already

* Rename updateModel to webhook

* Annotate WebhookController.cs with PluginController attribute

* Add danish translations

* Do not check if fail

* Dont filter when selecting custom items

* Remove delay from WebhookFiringService

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-10-31 10:06:14 +01:00
Jacob Overgaard bf6b2b1939 add new imports 2023-10-31 09:19:46 +01:00
Jacob Overgaard 7a750da8aa update build markers for StaticAssets to support Belle, Bellissima, Auth, and Login 2023-10-31 08:01:24 +01:00
Jacob Overgaard 8e925cb44c add condition to allow V13 and V14 login screens to work simultaneously 2023-10-30 15:58:29 +01:00
Jacob Overgaard 230164efd8 update backoffice submodule to ensure "auth app" is set to output its files properly 2023-10-30 15:45:38 +01:00
Jacob Overgaard 060ce40475 set new v14 "auth app" to output its files into a new "auth" folder to ensure it doesnt conflict with v13 login screen 2023-10-30 15:44:02 +01:00
Jacob Overgaard ca03034afb Add UmbracoLogin/Index.cshtml from V13 into the Umbraco.Web.UI executable to override the V14 login screen 2023-10-30 15:43:02 +01:00
Jacob Overgaard ebef3e2359 The default login view should be the v14 compliant login component until the v13 login screen is migrated properly 2023-10-30 15:42:31 +01:00
Bjarke Berg bd0a8bfdf7 post merge 2023-10-30 15:13:12 +01:00
Jacob Overgaard d40797b91b Merge remote-tracking branch 'origin/v13/dev' into release/13.0 2023-10-30 14:58:06 +01:00
Jacob Overgaard 107a70ad31 bump @umbraco-ui/uui from 1.4.0 to 1.5.0 2023-10-30 14:54:53 +01:00
Jacob Overgaard 5bfd7d405f bump @umbraco-ui/uui from 1.4.0 to 1.5.0 2023-10-30 14:50:09 +01:00
Jacob Overgaard bab06b7749 bump @umbraco-ui/uui from 1.4.0 to 1.5.0 2023-10-30 14:50:00 +01:00
Bjarke Berg 73fd3c02fe use dotnet 8 for docs 2023-10-30 13:55:26 +01:00
Bjarke Berg f1a12e2a50 Update docfx and use dotnet global tool 2023-10-30 13:13:32 +01:00
Bjarke Berg 60e910e7e5 Remove the parts later moved to v14 2023-10-30 12:31:17 +01:00
Bjarke Berg 761088c0e9 Update version 2023-10-30 08:59:38 +01:00
Chriztian SteinmeierandGitHub 8e609af901 Updates to Danish translations (#15057)
* Updates to Danish translations

Typo fixes & grammar fixes

* Updating as discussed in the PR
2023-10-28 17:19:34 +02:00
Marc GoodsonandGitHub 51553e0270 Make clearer where to go to see build documentation (#15054)
* Make clearer where to go to see build documentation

* lose a bracket
2023-10-27 11:47:42 +01:00
MichaelandEmma L Garland 38a0417ef3 Correct typo's... 2023-10-27 11:26:59 +01:00
MichaelandEmma L Garland d5859669f6 Updated FR file 2023-10-27 11:26:59 +01:00
Lucas Bach BisgaardandSebastiaan Janssen bde88caf14 Fixes #14351 - Using Fallback to default langauge on a specific item changes the whole VariationContext (#14620)
(cherry picked from commit 738749b705)
2023-10-26 11:47:44 +02:00
Bjarke Berg dfe5dfa4c1 Merge remote-tracking branch 'origin/v14/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderAuthExtensions.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryProvider.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryService.cs
#	src/Umbraco.Core/Services/ITagService.cs
#	src/Umbraco.Core/Services/UserService.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
2023-10-26 09:50:08 +02:00
Bjarke Berg e147c93cf9 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Build.props
#	build/azure-pipelines.yml
#	src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderAuthExtensions.cs
#	src/Umbraco.Cms.Api.Common/OpenApi/SwaggerRouteTemplatePipelineFilter.cs
#	src/Umbraco.Cms.Api.Common/Security/Paths.cs
#	src/Umbraco.Cms.Api.Delivery/Controllers/Security/MemberController.cs
#	src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Cms.Api.Delivery/Handlers/InitializeMemberApplicationNotificationHandler.cs
#	src/Umbraco.Cms.Api.Delivery/Handlers/RevokeMemberAuthenticationTokensNotificationHandler.cs
#	src/Umbraco.Cms.Api.Delivery/Security/MemberApplicationManager.cs
#	src/Umbraco.Cms.Api.Delivery/Services/RequestMemberAccessService.cs
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoLogin/Index.cshtml
#	src/Umbraco.Core/Constants-OAuthClaims.cs
#	src/Umbraco.Core/Constants-OAuthClientIds.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryProvider.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryService.cs
#	src/Umbraco.Core/DeliveryApi/IRequestMemberAccessService.cs
#	src/Umbraco.Core/DeliveryApi/NoopRequestMemberAccessService.cs
#	src/Umbraco.Core/Models/DeliveryApi/ProtectedAccess.cs
#	src/Umbraco.Core/Services/ITagService.cs
#	src/Umbraco.Core/Services/UserService.cs
#	src/Umbraco.Infrastructure/Security/IMemberApplicationManager.cs
#	src/Umbraco.Infrastructure/Security/OpenIdDictApplicationManagerBase.cs
#	src/Umbraco.Web.BackOffice/Controllers/BackOfficeController.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/HelpPanel/systemInformation.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Login/login.spec.ts
#	version.json
2023-10-26 09:48:05 +02:00
de12019fea Bugfix: UI for preview bug related to single language & non variant content (#15032)
* Bump tinymce from 6.7.0 to 6.7.1

* Ensure PackageVersion is set correctly before transforming template.json

* rerun watchers every time we reinit the data

* handle variant content with only one language

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
Co-authored-by: Ronald Barendse <ronald@barend.se>
2023-10-26 09:25:50 +02:00
Sebastiaan Janssen 634afc4b18 Add "unwanted changes" doc back 2023-10-26 09:15:54 +02:00
Bjarke Berg 1ad5b05ef5 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-10-26 09:03:04 +02:00
Bjarke Berg e7f4d321c5 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-10-26 09:02:42 +02:00
Bjarke Berg 610080afc4 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-10-26 09:02:04 +02:00
8dff55fced Update nuget packages (#15039)
* Update nuget packages

* Update to use latest rc2 version of packages instead of specific

* Update src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj

* dont add private/include assets

* Remove duplicate serilog reference

* Revert Moq update

* Update src/Umbraco.Web.UI/Umbraco.Web.UI.csproj

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-10-26 09:01:29 +02:00
Bjarke BergandGitHub f4ac6cdded Added "pr: none" to nightly trigger (#15044) 2023-10-26 09:01:25 +02:00
Bjarke Berg af39733a96 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-10-25 20:26:18 +02:00
Sebastiaan JanssenandGitHub ca5dce571c Update CONTRIBUTING.md 2023-10-25 16:45:38 +02:00
Busra SengulandGitHub 31e22710f0 Contributing section seperation (#14849) 2023-10-25 16:43:04 +02:00
Sebastiaan Janssen d1da22b665 Merge branch 'v12/dev' into contrib 2023-10-25 14:23:58 +02:00
Nikolaj GeisleandGitHub e1a1dedfb9 Dont explicitly index nested property by default (#15028) 2023-10-24 14:43:57 +02:00
Jacob OvergaardandGitHub 922be1c416 V13: Add support for Node.js 20 (#15022)
* update versionSpec to nodejs 20 and avoid specifying minor and patch versions to improve Azure Pipelines stability

* update engines and package lock files

* update helpful displayNames for npm builds

* add retry to counter nodejs.org timeouts

add retryCountOnTaskFailure as suggested on https://developercommunity.visualstudio.com/t/NodeTool0-task-to-install-nodejs-fails/10455454
2023-10-24 13:59:42 +02:00
Kenn JacobsenandGitHub b7a1cd5ab4 Cleaned up V14 TODOs from ContentApiItemControllerBase (#15026) 2023-10-24 10:08:28 +02:00
b423329d97 Turkish language support changes (#15005)
* Turkish language support changes

* small updates and corrections

---------

Co-authored-by: Nurhak Kaya <nurhak.kaya@greatstate.co>
2023-10-24 00:20:04 +02:00
kjac 37082ac53d Remove duplicate reference to Core
(cherry picked from commit 304a64be5a)
2023-10-23 19:34:38 +02:00
Ronald Barendseandkjac ebc6e38b86 Ensure PackageVersion is set correctly before transforming template.json
(cherry picked from commit 0170ecaec1)
(cherry picked from commit 69c1bcec3a)
2023-10-23 19:34:30 +02:00
kjac e30a87d1fd Merge branch 'v13/dev' into v14/dev
# Conflicts:
#	Directory.Build.props
#	build/azure-pipelines.yml
#	src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderAuthExtensions.cs
#	src/Umbraco.Cms.Api.Common/OpenApi/SwaggerRouteTemplatePipelineFilter.cs
#	src/Umbraco.Cms.Api.Common/Security/Paths.cs
#	src/Umbraco.Cms.Api.Delivery/Controllers/Security/MemberController.cs
#	src/Umbraco.Cms.Api.Delivery/DependencyInjection/UmbracoBuilderExtensions.cs
#	src/Umbraco.Cms.Api.Delivery/Handlers/InitializeMemberApplicationNotificationHandler.cs
#	src/Umbraco.Cms.Api.Delivery/Handlers/RevokeMemberAuthenticationTokensNotificationHandler.cs
#	src/Umbraco.Cms.Api.Delivery/Security/MemberApplicationManager.cs
#	src/Umbraco.Cms.Api.Delivery/Services/RequestMemberAccessService.cs
#	src/Umbraco.Core/Constants-OAuthClaims.cs
#	src/Umbraco.Core/Constants-OAuthClientIds.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryProvider.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryService.cs
#	src/Umbraco.Core/DeliveryApi/IRequestMemberAccessService.cs
#	src/Umbraco.Core/DeliveryApi/NoopRequestMemberAccessService.cs
#	src/Umbraco.Core/Models/DeliveryApi/ProtectedAccess.cs
#	src/Umbraco.Core/Services/ITagService.cs
#	src/Umbraco.Core/Services/UserService.cs
#	src/Umbraco.Infrastructure/Security/IMemberApplicationManager.cs
#	src/Umbraco.Infrastructure/Security/OpenIdDictApplicationManagerBase.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/HelpPanel/systemInformation.spec.ts
#	version.json
2023-10-23 19:03:13 +02:00
kjac 304a64be5a Remove duplicate reference to Core 2023-10-23 14:00:33 +02:00
Ronald Barendseandkjac 69c1bcec3a Ensure PackageVersion is set correctly before transforming template.json
(cherry picked from commit 0170ecaec1)
2023-10-23 13:06:21 +02:00
Ronald BarendseandGitHub 0170ecaec1 Ensure PackageVersion is set correctly before transforming template.json 2023-10-23 11:17:40 +02:00
Jacob Overgaard dcdc4d9a48 run npm audit fix 2023-10-23 10:57:41 +02:00
a27267e5d3 V13: New login screen (#14780)
* implement interface

* add build targets for login screen

* package lock

* move components to pages folder

* load logo and background from property

* styling

* move mocks around

* remove unused vars

* add backoffice handlers

* install rxjs

* add mock data

* add element and context for localization

* mock data

* use umb-localize

* remove the extra logic with check for section_

* change key for login button

* add base to vite environment

* login styling

* cleanup and button styling

* use correct reset url

* change body of reset request

* validate password reset code

* redirect to /login/new on reset password code verify

* add obsolete messages

* remove inline scripts for old backoffice

* remove shadowdom from localize element

* Revert "remove shadowdom from localize element"

This reverts commit 46ae282f7c.

* hook up reset password to api

* rename pages to state as it is not actually used as different pages

* reset password styling

* more styling

* add confirmation page to new password

* set router to firstUpdated to avoid rAF

* set a custom baseUrl on the router to make sure it works without trailing slash

* use route parameters to redirect on the login page to ensure correct escaping

* add server variables

* make sure auth layout uses the provided properties for images

* format

* redirect to code expired page

* add missing properties

* use allowPasswordReset and allowInvite properties in routing and layout

* make ts happy

* cleanup

* init invite page

* hook up usernameIsEmail

* init external login providers

* add mock provider

* add padding to buttons

* replace uui button with normal button

* add external login providers as slot

* add disableLocalLogin property

* add form to external login providers

* remove unused method

* fix build errors

* add attributes for external login

* add custom view to external login

* add new custom icon registry

* attach two icon registries

* use relative paths

* use relative paths

* use main registry instead of providing directly

* add look and color to external login

* implement getIcons() method

* use getIcons() to request icons

* install remixicon to supplement backoffice icons (replacing font-awesome eventually)

* move icon registries to auth element

* Revert "install remixicon to supplement backoffice icons (replacing font-awesome eventually)"

This reverts commit 0c6659d8d9.

* add icons for common external providers

* add more icons

* remove resetCode hack as it is no longer needed

* add validation to new password

* get gretting from translation file

* add hack to get text left aligned in uui-button

* add custom router

* WIP Use router

* also change the URL during an action

* update login action to redirect to /new when needed

* redirect to login from reset and new if not allowed

* fix new password button href

* use property on login element instead of context

* check for redirect on invite-user

* move fake external login providers to index.html for use in dev server

* allow password reset on dev server

* add look and color

* only set styles for default view buttons

* suppress vite import warning

* check and inform for errors and show 'nothing' if a custom view fails to load

* fix mock path for localizedtext

* fix build errors

* ensure that msw (and all its dependencies) do not end up in the production bundle (saved ~500 KB)

* Revert AngularValueExternalLoginInfoScriptAsync removal

* forward the providerName to custom views

* change default icon

* add button look and color to external login provider options

* add obsolete to ButtonStyle and add a mapper to new values

* add required xml comments

* map external login providers to <umb-login-external />

* fix typo

* only show external login layout if there are slotted children

* pass on name as "provider"

* send externalLoginUrl to custom views

* cleanup

* global import

* hide external logins completely when empty

* cleanup

* setup redirect to invite

* rename pages to name-page

* fix names and paths

* use new password layout for invite and new password

* add comments

* cleanup and use confirmation element

* set parameters after successful verifyinvite

* map display-name and provider-name to the external element

* map display-name

* set up external login to handle correct display- and provider-name with documentation

* add support for disabling local login

* update path to handlers

* add more localization

* add handlers for 2fa

* router should support a factory for component

* push login to ?flow=mfa on 402 codes

* add page to handle 2fa/mfa

* add support for custom routing

* add fallback for welcome greeting

* handle AngularJS silliness

* fix typo

* fix router and replace custom umbroute:statechange  event with native pushState

* simplify code and cleanup

* a11y improvements

* you can now navigate to anywhere from anywhere with pushState

* access the "twoFactorView" from the backend

* set the default implemented twoFactorView to NULL

* add initial logic to handle a custom mfa view

* roll back custom pushState changes

* add mocks for 2fa custom view

* use router redirect

* re-enable click url change

* cleanup

* remove debug buttons

* add unsafeHTML to localize element

* load mfa custom views

* load custom view

* improve external login custom views

* using optimisation

* add current culture

* only show mfa page if 402 code has been encountered in same session

* format

* remove unnesesary action

* add new user invite password

* remove console log

* fix getting stuck at new password page if you've triggered custom validity

* unify layouts

* add styling to buttons in error layout

* remove unused css

* add error message to new password page

* add error message to reset password

* add error message to invite page

* fix invite page not being rendered

* cleanup

* add obsolete notice to PostSetInvitedUserPassword

* add request model to set a new password for an invited user

* add new method to handle invited user password

* add get password config api call

* fix password config parameters and add invite call

* get invited user

* get password config

* assign unique guid to login project

* add userId to get password config and use the config as validation

* fix

* add alerts

* fix the new password layout

* auth redirects invite error to error page

* use password config on new password page

* remove console log

* move file and remove unused extension

* make ts happy

* file structure

* rename login-extern to external-login-provider

* update element name

* update dependencies

* export custom-view.element.ts

* remove debug

* use umb-custom-view to load custom views

* build types

* move @umbraco/uui to the login app and import from there in backoffice

* make the ui library and icon registry generally available as exports from the login app

* add mock handler for icons

* cleanup package

* use uui for external login providers in the backoffice

* add imports and enable the backoffice icon registry globally

* disable shadowdom

* default background image

* use undefined

* revert angular values

* remove legacy sys variables

* add logic to handle mfa in an overlay scenario without routing

* add new login screen to replace the overlay when logged in to the backoffice

* update spec to work with locators

* cleanup of legacy context

* ViewData is not always required

* add method to solely return the default view of the backoffice to simply BackofficeController as well as unit tests

* add test for the login view

* cleanup usings

* Apply suggestions from code review

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* remove 'remember me'

* add more contrast to external login divider

* update dependencies

* set "lang" attribute to lowercase

* remove default headline

* localize the "Or" divider and add aria-hidden

* remove Umbraco reference from logo and add aria-hidden

* add aria-hidden to uui-icon inside external login buttons

* format code

* update dependencies

* update dependencies

* add translations to invite user page

* use back to login button

* update localization-context.ts to match api from old LocalizeService in Angular

* add tsc to watch

* formatting

* add missing localizations

* fix a11y issues with muted text

* refresh current user after login

* remove unused variable

* add localization

* add localization for error messages

* remove unused var

* return user after login and set successful auth

* retry request queue after login

* add language keys for failed login

* add language keys for failed login

* render the views without a router so that it works inside a modal in the backoffice

* add autocomplete to reset password fields

* add autocomplete to login screen

* add generic error layout to new-password-page

* new-password-layout should be able to handle with and without username

* update language keys

* check for userId before trying to request invited user

* show error when no invited user is found

* place back-to-login button on all error layouts

* update lockfile

---------

Co-authored-by: Jesper Møller Jensen <26099018+JesmoDev@users.noreply.github.com>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-10-23 10:06:17 +02:00
Jacob Overgaard f8f58eacd2 Merge branch 'v12/dev' into v13/dev 2023-10-23 09:43:59 +02:00
Jacob Overgaard 3936fec57f Bump tinymce from 6.7.0 to 6.7.1 2023-10-23 09:41:15 +02:00
dependabot[bot]andJacob Overgaard 223598b037 Bump tinymce from 6.5.1 to 6.7.1 in /src/Umbraco.Web.UI.Client
Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 6.5.1 to 6.7.1.
- [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/6.7.1/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 09:36:30 +02:00
Lucas Bach BisgaardandEmma L Garland 7c59a81e5c Bug fix for compistion on member and media give 404 2023-10-22 19:22:00 +01:00
Ambert van UnenandMichael Latouche 71c00579e4 Added aria-labelledby so no longer 'empty' 2023-10-22 19:48:09 +02:00
d749731413 Condition on the userState instead of the dates. (#14950)
Co-authored-by: Lucas Bach Bisgaard <lom@novicell.dk>
2023-10-22 19:25:51 +02:00
Richard ThompsonandGitHub ed006931a4 Grant all users access to the content recycle bin (#14977)
* Grant all users access to the content recycle bin

If users don't have access to the root node of the content section they now get access to the recycle bin.

* Content editors get access to their nodes and recycle bin

All users with access to the content section will get access to the recycle bin as well as the nodes they have access to, even if they don't have access to the root of the content section
2023-10-22 18:48:52 +02:00
kjac 6a8f8a48ed Fixed merge conflicts and ensured same version of OpenIddict abstractions across the solution 2023-10-22 11:48:27 +02:00
kjac 3169ff9581 Merge branch 'v12/dev' into v13/dev
# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.Core/Configuration/Models/SecuritySettings.cs
#	version.json
2023-10-22 11:23:04 +02:00
Emma GarlandandMichael Latouche 16c5c4c4e8 Fixed warning SA1116 (The parameters should begin on the line after the declaration...), whenever in ctor 2023-10-22 02:20:45 +02:00
Emma GarlandandMichael Latouche f3028a00b3 Added word-wrap so block item doesn't extend over the whole line 2023-10-22 02:03:53 +02:00
Matthew CareandMichael Latouche f8b66aaf50 Fix issue with pressing enter on color picker labels
Prevent form submission when pressing enter in color picker labels, instead execute "add" code.
Improve validation highlights.
2023-10-20 01:57:06 +02:00
Richard ThompsonandGitHub 0c82b9b700 Stopped the second tab being highlighted by default (#14969)
* The second button shouldn't be highlighted automatically if it's in the second tab otherwise both the first and second tabs are highlighted

* Corrected the logic
2023-10-19 17:00:54 +01:00
Ronald BarendseandGitHub 2c572c6f72 Only pack transformed template.json file
When building and packaging at the same time, the original template.json file was still included in the generated NuGet package, which resulted in duplicate files with the same name. This change explicitly disables packaging the original file, ensuring only the transformed template.json file (containing the current Umbraco version) is included.
2023-10-19 10:49:10 +02:00
Dave WoestenborghsandGitHub b26709b0af Fix permissions for assign hostname (#14896)
* Fix permissions for assign hostname

* Reduced code duplication
2023-10-19 03:30:35 +02:00
dependabot[bot]andJason Elkin 74af2a0700 Bump @babel/traverse from 7.22.5 to 7.23.2 in /src/Umbraco.Web.UI.Client
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.22.5 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-18 23:50:24 +01:00
georgebidandGitHub c0b01807a4 New login page playwright test - Ensure Show/hide password button works as expected. (#14970) 2023-10-18 23:13:48 +01:00
Georgina BidderandJason Elkin 74d01c6573 our umbraco link works as expected. 2023-10-18 23:10:40 +01:00
Jan SkovgaardandGitHub d4d594bdb5 14523: Return focus to trigger element when close event occurs (#14991)
* Return focus to trigger element when close event occurs

* Add missing semi colon
2023-10-18 22:44:58 +01:00
Marc GoodsonandJason Elkin b9c7de39ed don't overwrite linkpicker title when you pick from tree IF
the editor has just typed into the linktitle
2023-10-18 20:57:30 +01:00
Ronald BarendseandGitHub 0c7f9ec64f Fix unrecognized value stageDependencies in jobs 2023-10-18 14:58:44 +02:00
Ronald BarendseandGitHub eac6af6878 Use correct stage to stage condition dependencies 2023-10-18 14:52:08 +02:00
Ronald BarendseandGitHub fb73a6a66b Remove duplicate/incorrect Umbraco.Core project reference 2023-10-18 12:17:29 +02:00
Kenn JacobsenandGitHub 684508643f Ensure additional preview URLs work on non-variant content (#14995) 2023-10-18 10:45:16 +02:00
Jacob OvergaardandGitHub 4a63788079 V12: Update Backoffice dependencies: jQuery, TinyMCE, SignalR, Ace Editor, Umbraco UI Library (#14994)
* bump @microsoft/signalr to 7.0.12

* bump @umbraco-ui/uui to 1.4.0

* bump ace editor to 1.30.0

* bump frontend build dependencies

* bump jquery to 3.7.1

* bump tinymce to 6.7.0

* bump frontend test suite tools
2023-10-18 10:44:06 +02:00
Sebastiaan Janssen 9c1abf23b0 Merge branch 'contrib' into v12/dev 2023-10-17 13:27:10 +02:00
Lucas Bach BisgaardandGitHub 738749b705 Fixes #14351 - Using Fallback to default langauge on a specific item changes the whole VariationContext (#14620) 2023-10-17 13:24:24 +02:00
b0ca3444f4 V13: Add config to limit concurrent logins (#14989)
* Add config to limit concurrent logins (#14967)

* Add new config options

* Change validation interval + related changes

* Fix typo

* Temp fix

* Set new setting to false for new dotnet projects

* Added logic to update security stamp on sign in + fixed wierd code calling handle signIn twice

* Cleanup

* Adding empty ctors

---------

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

* Set default setting to false + remove it from templates

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-10-17 12:58:02 +02:00
0a8b12793e Add config to limit concurrent logins (#14967)
* Add new config options

* Change validation interval + related changes

* Fix typo

* Temp fix

* Set new setting to false for new dotnet projects

* Added logic to update security stamp on sign in + fixed wierd code calling handle signIn twice

* Cleanup

* Adding empty ctors

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2023-10-17 10:23:52 +02:00
Kenn JacobsenandGitHub ea4f07bd08 Create matcher policy to pick the correct item endpoint (#14987) 2023-10-17 08:55:09 +02:00
7cf1ad7592 add Audit Trail to the media info tab just alike the conten (#14781)
* add Audit Trail to the media info tab just alike the conten

* Change the tranlation from "content ..." to "Media ..."

---------

Co-authored-by: Lucas Bach Bisgaard <lom@novicell.dk>
2023-10-16 16:55:30 +01:00
Sebastiaan Janssen 13913cd9fb Merge branch 'v12/dev' into contrib
# Conflicts:
#	version.json
2023-10-16 12:53:07 +02:00
Kenn JacobsenandGitHub 4bd9baa2eb Backport Delivery API member auth from V14 (#14964)
* Backport Delivery API member auth from V14

* Add default implementations to avoid breakage

* Review changes
2023-10-16 11:25:29 +02:00
4520fbe5b8 Out-of-date models status flag is created when using SourceCodeManual and Development Runtime (#14966)
* Update UmbracoBuilderDependencyInjectionExtensions.cs

* Remove duplicate OutOfDateModelStatus handlers

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
2023-10-16 10:46:58 +02:00
Owain JonesandGitHub 1b3642e7f3 Updated Welsh lang file (#14978)
* Added missing Welsh translations

* added missing mfa en_us keys

* Removed outdated lang keys from the cy lang file

* Fixed some instances of &lt;/&gt; to use actual angle brackets in the cy lang file.
2023-10-15 01:09:09 +02:00
0b5d1f8aa6 Fix for fallback file upload (#14892)
* Added check for file type

* Removed unneeded null checks and fixed tabs

* Cleaning

* Cleanups, cleanups, and removal of unneeded null checks

* Reverted removal of relationshipservice

* Revert null check removals (too risky)

---------

Co-authored-by: Ambert van Unen <AvanUnen@ilionx.com>
Co-authored-by: Laura Neto <12862535+lauraneto@users.noreply.github.com>
2023-10-14 17:13:26 +02:00
Georgina BidderandSebastiaan Janssen 8b1191c332 help links tests + clean up of system info 2023-10-14 16:04:15 +02:00
Bjarne FyrstenborgandEmma L Garland 70d36301ab Remove duplicate name attribute in 2FA login form 2023-10-14 10:56:34 +01:00
Bram HovenandGitHub b8928e9de0 Add IExceptionHandlerFeature check to dynamic route check (#14905)
* Add IExceptionHandlerFeature check to dynamic route check

* Decrease code complexity
2023-10-14 02:01:59 +02:00
Erik-Jan WestendorpandEmma L Garland 73fc6bdcdf a11y improvement 2023-10-13 13:47:53 +01:00
b850cd3ee0 Add SetMemberSignInManager builder extension (#14761)
* Add SetMemberSignInManager builder extension

* Added required using statement

---------

Co-authored-by: Emma Garland <emma.garland@rocksolidknowledge.com>
2023-10-13 12:30:13 +01:00
Lucas Bach BisgaardandGitHub 0ece94bf46 Bug fix whre mediapicker dont load before an event fires elsewhere #14250 (#14803) 2023-10-13 10:34:45 +01:00
Andreas ZerbstandGitHub ace8d80183 Refactored from ISystemClock to TimeProvider (#14963)
* Removed obsolete ISystemClock. The SecurityStampValidator provides the TimeProvider.

* Removed obsolete ISystemClock.

* Refactored obsolete ISystemClock with TimeProvider
2023-10-12 13:58:51 +02:00
6fb2550690 V14/feature/response model trash tracking (#14948)
* Clearify UmbracoMapper functionality trough comment

* Add trash tracking to doc/media(item) response models

* Add mapping for ITracksTrashing

* Removed uneccesary abstraction and seperation

* Cleanup after removing abstractions

* Cleanup unused DI item

* Clean up and formatting

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: kjac <kja@umbraco.dk>
2023-10-12 07:00:06 +02:00
Michael 0362dcffc8 Remove submodule 2023-10-12 03:21:53 +02:00
KNOWIT\anndal3andMichael Latouche 612b6039f2 Add aria label to umbraco property 2023-10-12 02:22:21 +02:00
Elitsa MarinovskaandGitHub 517e0e9d19 Removing dev certificates and adding enc and signing keys that are required by OpenIddict but won't be used when we calling UseDataProtection() (#14958) 2023-10-11 14:15:08 +02:00
Ronald BarendseandGitHub b6f0db7b73 Fix build logging of warnings/errors during packaging step (#14933)
* Use DotNetCoreCLI for dotnet pack command

* Use NBGV to get major version and set build number

* Use NBGV_PublicRelease to determine stable build

* Use latest Node patch versions

* Generate NuGet packages during build
2023-10-11 11:25:05 +02:00
Nikolaj GeisleandGitHub 443f03688e Fix update to update foreach Group (#14945) 2023-10-11 10:46:25 +02:00
Mads RasmussenandGitHub 332ef6fa7e align user import map (#14952) 2023-10-11 10:01:22 +02:00
Bjarke Berg 838fd95f41 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
#	tests/Umbraco.Tests.AcceptanceTest/package.json
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAdvanced.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAreasContent.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorSettings.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Datatype/BlockGridEditorDataTypeBlocks.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockListEditor/blockListEditorDocument.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/content.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/routing.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/partialViews.spec.ts
2023-10-10 13:47:18 +02:00
Bjarke Berg 42bc50eccf Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-10-10 13:44:46 +02:00
Bjarke Berg 0844cb8b29 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Core/Services/ContentService.cs
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
#	tests/Umbraco.Tests.AcceptanceTest/package.json
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAdvanced.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAreasContent.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorSettings.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Datatype/BlockGridEditorDataTypeBlocks.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/content.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/ModelsBuilder/modelsbuilder.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/partialViewMacroFiles.spec.ts
2023-10-10 12:49:22 +02:00
Bjarke Berg e6a1640c1b Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Content/content.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/DataTypes/dataTypes.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/ModelsBuilder/modelsbuilder.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/partialViews.spec.ts
2023-10-10 12:27:33 +02:00
Bjarke BergandGitHub 41f8f03c2c Fixed a couple of occurrences where scopes was auto-completed while modified db state (#14947)
* Fixed a couple of occurrences where scopes was auto-complated while actually modified the state of the database.

* Added temp ctor to fix boot issue
2023-10-10 11:51:47 +02:00
Jacob Overgaard 7995df6cfd update backoffice submodule 2023-10-09 17:33:53 +02:00
Mads RasmussenandGitHub 99a1aa9301 update event path in importmap (#14844) 2023-10-09 16:15:40 +02:00
Elitsa MarinovskaandGitHub 132935c2d7 Handle corrupted index (#14889) 2023-10-09 10:19:36 +02:00
Richard OckerbyandEmma L Garland 6e154e0a0f Corrected mark-up
An extra closing div tag was lurking around
2023-10-09 08:48:15 +01:00
Vitor RodriguesandLaura Neto 39492f9654 Fixed URL tracking not working for invariant pages with culture variant ancestors 2023-10-06 18:30:02 +02:00
Erik-Jan WestendorpandEmma L Garland 6e937692be Update MemberService.cs 2023-10-06 13:54:48 +01:00
Erik-Jan WestendorpandEmma L Garland 7aa246b855 Update MediaController 2023-10-06 13:46:07 +01:00
JamesandEmma L Garland cd2855634e Update umbBlockGridPropertyEditor.component.js
currently checks the first group or tab (index 0) that was added to see if there are properties.

This doesn't work well when the tab has a single group, and the group is created after the tab, as the tab will be empty, even though the group has the properties. 

there is also some interactions when composing tabs from other doc types, but I didn't have a good amount of time to test this.
2023-10-06 13:22:29 +01:00
Bjarne FyrstenborgandEmma L Garland 46b0833d52 Pass in format parameter 2023-10-06 12:13:22 +01:00
Bjarne FyrstenborgandEmma L Garland d3ceeb0ace Update keywords 2023-10-06 12:13:22 +01:00
Bjarne FyrstenborgandEmma L Garland b917d64eec Allow to specify format and parsing format in dateHelper functions 2023-10-06 12:13:22 +01:00
Jacob Overgaard 5b57234b52 update backoffice submodule 2023-10-06 12:04:21 +02:00
Mads RasmussenandGitHub ded1cbb9fa update import map to repository module (#14845) 2023-10-06 12:03:45 +02:00
justinbotgerandMichael Latouche 9e168f6502 Updated Dutch translation for "import"
Updated Dutch translation for "import"
2023-10-06 10:44:44 +02:00
Kenn JacobsenandGitHub 05522010d8 Default value editors for all (meaningful) value types (#14928)
* Expose editor UI alias in published property type, so custom value converters can use it

* Add default property value converters for all value types (#14869)

* Add default property value converters for all value types

* Clean up some left-over stuff

(cherry picked from commit ce86abe8ac)

* Added "plain" property editors for all (meaningful) value types
2023-10-06 10:42:23 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
961f6a0bab Bump postcss from 8.4.24 to 8.4.31 in /src/Umbraco.Web.UI.Client (#14920)
Bumps [postcss](https://github.com/postcss/postcss) from 8.4.24 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.24...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-05 15:41:17 +02:00
Kenn JacobsenandGitHub 04b05714e5 Add notification state to "final" published notification when publishing with descendants (#14922)
* Revert "V10/bugfix/14543 publish descendants (#14763)"

This reverts commit f750bca453.

* Add notification state to "final" published notification when publishing with descendants
2023-10-05 14:39:00 +02:00
thomashdkandLaura Neto ced8e0582d Update umb-tabs-nav.html
Added data-element="tab-{{tab.alias}}" to the dropdown tabs list
2023-10-03 19:29:56 +02:00
Laura NetoandGitHub 44a4abdfbd Updating contributing docs to add unwanted changes section (#14853)
* Updating contributing docs to add unwanted changes section

* Added new section to table of contents
2023-10-03 17:44:10 +01:00
1cac8ffe88 made link to umbraco learning base youtube visible with underline sty… (#14884)
* made link to umbraco learning base youtube visible with underline style as per the other links on other dashboards.

* Update membersdashboardvideos.html

---------

Co-authored-by: Georgina Bidder <georgina.bidder@truedigital.co.uk>
Co-authored-by: georgebid <91198628+georgebid@users.noreply.github.com>
2023-10-03 17:42:29 +01:00
Bjarne FyrstenborgandGitHub 34892101a9 Ensure focus on specific action in block card (#14846)
* Ensure focus on specific action in block card

* Move if statement to parent

* Change buttons in groups as well

* Adjust styling
2023-10-03 17:02:20 +01:00
Erik-Jan WestendorpandMichael Latouche 930f9f6704 Translate dictionary_noItemsFound 2023-10-03 16:19:59 +02:00
Anders BjernerandGitHub 4932119807 Replaced [MaybeNullWhen(false)] with [NotNullWhen(true)] for UdiParser.TryParse method (#14880)
* Replaced [MaybeNullWhen(false)] with [NotNullWhen(true)] for UdiParser.TryParse method

* Removing some empty lines
2023-10-03 14:43:54 +02:00
Kenn JacobsenandGitHub 7be1852827 Make sure to sign out external users if an error occurs during sign-in (#14867) 2023-09-28 13:25:11 +02:00
Kenn JacobsenandGitHub ce86abe8ac Add default property value converters for all value types (#14869)
* Add default property value converters for all value types

* Clean up some left-over stuff
2023-09-28 13:20:03 +02:00
Jacob Overgaard 5c63561629 update backoffice submodule 2023-09-28 12:41:29 +02:00
83321a8fad Add member auth to the Delivery API (#14730)
* Refactor OpenIddict for shared usage between APIs + implement member authentication and handling within the Delivery API

* Make SwaggerRouteTemplatePipelineFilter UI config overridable

* Enable token revocation + rename logout endpoint to signout

* Add default implementation of SwaggerGenOptions configuration for enabling Delivery API member auth in Swagger

* Correct notification handling when (un)protecting content

* Fixing integration test framework

* Cleanup test to not execute some composers twice

* Update paths to match docs

* Return Forbidden when a member is authorized but not allowed to access the requested resource

* Cleanup

* Rename RequestMemberService to RequestMemberAccessService

* Rename badly named variable

* Review comments

* Hide the auth controller from Swagger

* Remove semaphore

* Add security requirements for content API operations in Swagger

* Hide the back-office auth endpoints from Swagger

* Fix merge

* Update back-office API auth endpoint paths + add revoke and sign-out endpoints (as of now they do not exist, a separate task will fix that)

* Swap endpoint order to maintain backwards compat with the current login screen for new back-office (will be swapped back again to ensure correct .well-known endpoints, see FIXME comment)

* Make "items by IDs" endpoint support member auth

* Add 401 and 403 to "items by IDs" endpoint responses

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-09-26 09:22:45 +02:00
Kenn JacobsenandGitHub ccd54bfb0e Fix property variance cache issue (#14824)
* Property variance should be the union of variance between content type and property type

* Fix a few comments in the tests

* Review changes
2023-09-25 13:45:28 +02:00
Bjarke Berg 624f9a0508 Checkout submodule for v14 integration tests 2023-09-25 11:35:29 +02:00
Bjarke Berg c653dff3c0 Cleanup duplicate package references 2023-09-25 11:21:58 +02:00
Bjarke Berg d2410d5150 Bump version 2023-09-22 10:56:28 +02:00
Bjarke Berg 866ef1a886 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-22 10:56:05 +02:00
Bjarke Berg 06272d9337 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-09-22 10:54:25 +02:00
CarlandJason Elkin 511ee96c9e Fix spelling mistake, and add details of additional packages
Notices this spelling mistake, quick fix
2023-09-22 09:53:12 +01:00
Bjarke BergandGitHub d39502674e Added our own db context pool, that basically bypass the bool until umbraco is in Run mode (#14852) 2023-09-22 10:38:55 +02:00
Bjarke Berg 3184bdf5a9 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-22 10:24:40 +02:00
Bjarke Berg 43cc3b8314 Rollback unintended changes to imagesharp 2 2023-09-22 10:22:25 +02:00
Jason Elkin 336b7ff499 Revert ""big PR" github action"
This reverts commit a3cfbbf56a.
2023-09-21 15:04:14 +01:00
Jason Elkin a3cfbbf56a "big PR" github action 2023-09-21 15:02:06 +01:00
Nikolaj Geisle 4ee21f19f9 Merge remote-tracking branch 'origin/release/12.2' into v12/dev
# Conflicts:
#	version.json
2023-09-21 09:59:07 +02:00
Kenn JacobsenandGitHub 2335924b57 Ensure that value type JSON is translated correctly for Delivery API output (#14839) 2023-09-21 09:25:29 +02:00
b8f948785a Added necesary classes to define the StringPropertyEditor (#14769)
* Added necesary classes to define the StringPropertyEditor

* Removed unnecesary code, baseclass takes care of everything

* More cleanup and added a propertyValueConverter

* Upped the expected default dataEditors in tests by 1 since we added one.

* Fixed a bad undo action

* PR feedback Removed unnecesary code and simplified methods

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-09-20 14:49:53 +02:00
Bjarke Berg 49c71b1989 Merge 2023-09-20 14:13:21 +02:00
Bjarke Berg 03108f4af4 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-09-20 13:12:57 +02:00
Andreas ZerbstandGitHub 158cef1692 V10 fixed up failing acceptance test (#14829)
* Updated playwright, our builders, and our helpers

* Updated the use of our testhelper methods, we removed the need for sending umbracoApi through the methods as a parameter since it was unnecessary

* Added a timeout

* Updated successNotifications and added a locator

* Removed timeout from successNotification

* Added additional timeouts and updated old locators which were failing

* Updated locator so it only finds one element

* Removed timeouts and added a waitForTimeout

* Removed timeouts

* Removed timeouts

* Added timeouts

* Updated locator

* Added a timeout

* Updated locators for clicking button

* Changed locator for adding the image, sometimes the old locator would find 2 locators
2023-09-20 12:15:24 +02:00
Bjarke Berg 9f0f6279b4 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	tests/Umbraco.Tests.Integration/CompatibilitySuppressions.xml
2023-09-20 10:11:12 +02:00
Bjarke Berg aa7632b271 Merge remote-tracking branch 'origin/v11/dev' into v12/dev 2023-09-20 10:03:39 +02:00
Bjarke Berg e263db7b3b post merge fix 2023-09-20 10:02:58 +02:00
Bjarke Berg 912e9f277e post merge fix 2023-09-20 10:02:25 +02:00
Bjarke Berg ed73b82fd0 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	tests/Umbraco.Tests.Integration/NewBackoffice/OpenAPIContractTest.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Core/Services/ContentServiceTests.cs
2023-09-20 09:51:56 +02:00
Bjarke Berg 4dd3c295e0 Merge remote-tracking branch 'origin/v10/dev' into v11/dev 2023-09-20 09:43:41 +02:00
Bjarke Berg 1a4f3981eb Merge remote-tracking branch 'origin/v10/dev' into v10/dev 2023-09-20 09:42:28 +02:00
Bjarke Berg 7765f98ee1 Added random delay in forgot password to lessen the risk the response times can be use to determine whether the mail exist or not. 2023-09-20 09:02:32 +02:00
Bjarke Berg 8050bb97af Merge remote-tracking branch 'origin/release/14.0' into v14/dev 2023-09-19 15:31:20 +02:00
Bjarke Berg 964e3b5797 Fixed test 2023-09-19 15:30:48 +02:00
Bjarke Berg c0e378cc41 fixed issue after minimal hosting model 2023-09-19 14:59:46 +02:00
Bjarke Berg 463068c07b Updated to latest .net and fixes small issues with installer after 2023-09-19 14:57:24 +02:00
Bjarke Berg 4f98b546c5 Merge branch 'release/14.0' into v14/dev 2023-09-19 14:53:27 +02:00
Bjarke Berg ac8663ea13 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-19 13:02:53 +02:00
Bjarke BergandGitHub 989759fa20 Updated NuGet Dependencies (#14795)
* Updated nuget packages and fixed breaking changes in ImageSharp

* Update to .net8 rc1
2023-09-19 11:23:20 +02:00
Bjarke Berg e059ac2e5b Add missing ImportMap replacement 2023-09-19 10:55:10 +02:00
Andreas ZerbstandGitHub e132bcb2a6 We updated our locator to use data-element instead of alias (#14828) 2023-09-19 10:50:58 +02:00
Bjarke Berg c4f5a2aca8 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-19 10:44:02 +02:00
Bjarke Berg a133a4b57b We need to explicty call UseAntiforgery, otherwise it is called automatically before our middleware that will lead to UmbracoRouteValueTransformer being called instead of static file middleware. 2023-09-19 10:22:42 +02:00
Bjarke Berg 96397adf1f UseDeveloperExceptionPage is called automatically in minimal hosting model 2023-09-19 10:21:32 +02:00
6b72880c0b fix: ensured that allowed user name characters are supported in backoffice users as well (#14810) (#14825)
Co-authored-by: Arkadiusz Biel <bielu@bielu.com.pl>
2023-09-19 09:01:35 +02:00
Andy ButlandandGitHub d9f3936a43 Updated dependencies to Forms and Deploy for JSON schema generation. (#14826) 2023-09-19 08:54:41 +02:00
Arkadiusz BielandGitHub 86697ff137 fix: ensured that allowed user name characters are supported in backoffice users as well (#14810) 2023-09-18 14:55:59 +02:00
bf09c87f87 Mention MultiUrlPickerValueConverter instead (#14818)
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-09-18 13:48:11 +02:00
Jacob Overgaard 4b918cbb3a update backoffice submodule 2023-09-15 14:06:43 +02:00
Sven GeusensandGitHub ec2134dea0 Disabled nighly build branch trigger (#14807) 2023-09-15 10:02:29 +02:00
Mads RasmussenandGitHub cb4d8e34ce Feature: Add buttons for additional preview URLs (#14773)
* add button group for multiple preview urls

* generate default + sub buttons for urls

* allow button group to render label without a localisation key

* remove the existing preview button

* add data-element attr for buttons for tours + tests

* use info button style

* set the target of the new window

* get the additional preview urls from the active variant
2023-09-15 09:44:50 +02:00
Nikolaj GeisleandGitHub 8ccc2faee0 Add UsePagedSqlQuery setting to NucacheSettings (#14806)
* imlement UsePagedSqlQuery

* Remove unneccesary spacing
2023-09-14 20:11:08 +02:00
Jacob Overgaard 7bbe994fc9 Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	src/Umbraco.Web.UI.Client/src/less/components/umb-property-editor.less
2023-09-14 13:20:55 +02:00
Jacob Overgaard 0a4cc27a5d V12: Property editors should only contain layout when in preview mode (#14796)
* Revert "Make sure the property editor layout is contained within its container (prevent Z-index bleed-through) (#13583)"

This reverts commit 8463d906a7.

* remove seemingly unused attribute readonly

* contain everything with contain:layout

this is set if the property editor is in preview mode to make sure all overlays work

* Revert "remove seemingly unused attribute readonly"

This reverts commit 7a2743e8f6.
2023-09-14 13:19:36 +02:00
Jacob OvergaardandGitHub 614aee2fec V12: Property editors should only contain layout when in preview mode (#14796)
* Revert "Make sure the property editor layout is contained within its container (prevent Z-index bleed-through) (#13583)"

This reverts commit 8463d906a7.

* remove seemingly unused attribute readonly

* contain everything with contain:layout

this is set if the property editor is in preview mode to make sure all overlays work

* Revert "remove seemingly unused attribute readonly"

This reverts commit 7a2743e8f6.
2023-09-14 13:17:35 +02:00
Kenn JacobsenandGitHub 981bf09325 Minor Management API changes from FE (#14804)
* Change document delete into move-to-recycle-bin

* Make it possible to supply an explicit ID when creating content and media

* Change media delete into move-to-recycle-bin

* Merge "allowed child content types" controllers into one + fixed a bug that allowed all types if none were defined

* Update OpenAPI JSON to reflect merged endpoints
2023-09-14 10:07:08 +02:00
Andreas ZerbstandGitHub 8ae4c6bf5b V12 Fixed flaky tests (#14789)
* Added a longer timeout for the tests. Also bumped the timeout for isSuccessNotificationVisible

* Added a longer timeout for our tests and the isSuccessNotificationVisible method

* Updated the locator for the flaky test. The locator we had before could sometimes find two elements, which resulted in flaky tests.

* Bumped version of playwright

* Updated to use isSuccessNotificationVisible()

* Added a wait for timeout

* Updated to use isSuccessNotificationVisible()

* Bumped the timeouts

* Bumped our timeouts

* Bumped version of our testhelpers

* Updated the button for save and publish and added an wait for timeout

* Added a missing save for the test

* The test could sometimes find two locators. It should be fixes now

* Removed old usage of notification to be visible

* Removed unnecessary timeouts since we have defined the timeouts in the test helpers
2023-09-13 14:01:08 +02:00
Sebastiaan JanssenandGitHub 1f24b79531 Update README.md 2023-09-13 08:38:54 +02:00
Johan MöllerandGitHub 0bbda02931 Fixes #14722 - DateTime picker calendar does not get updated when custom date format (#14767)
* Seperate properties for input ng-model and datepicker.

Since flatpickr can't handle custom formatting.

* Set picker format to default.
2023-09-12 17:22:29 +01:00
c8e054baa2 V10/feature/pipeline test filters (#14766)
* Add configuration/code to not run certain tests based on variables/release builds

* Applied longrunning testAttribute to the worst offenders (>200ms on my machine)

* Fix yaml notation

* split up windows/non windows test runs

* Added supression for moved tests

* Fix yaml validation issues

* Change yaml string parameter null value to empty string

* Convert empty strings to whitespace strings

* Rename and cleanup some paramater to better reflect why we use them

* Nightly build test

* Change nightly build authentication type

* template paramater fix

* Update nightly pipeline name

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-09-12 14:16:27 +02:00
Bjarke Berg 925b195e4c Updated submodule and fixed import map 2023-09-12 10:40:05 +02:00
Bjarke Berg 45abec6e88 Merge remote-tracking branch 'origin/v14/feature/front-end-importmap-update' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoBackOffice/Default.cshtml
#	src/Umbraco.Cms.StaticAssets/umbraco/UmbracoInstall/Index.cshtml
2023-09-12 10:35:53 +02:00
Bjarke Berg 8ca57c50c2 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-12 10:22:37 +02:00
Bjarke Berg 8af8a2b755 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-09-12 09:57:41 +02:00
Bjarke Berg 3fe34d520f Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	version.json
2023-09-12 09:57:30 +02:00
Bjarke Berg 2d76e447bb Post merge build fix 2023-09-12 09:53:10 +02:00
Bjarke Berg 2ce0505784 Merge remote-tracking branch 'origin/v11/dev' into v12/dev
# Conflicts:
#	src/Umbraco.Core/Services/ContentService.cs
2023-09-12 09:50:35 +02:00
Bjarke Berg d47d79af6a Merge remote-tracking branch 'origin/release/12.2' into v12/dev 2023-09-12 09:50:05 +02:00
Bjarke Berg bd9b30f143 Merge remote-tracking branch 'origin/v10/dev' into v11/dev
# Conflicts:
#	version.json
2023-09-12 09:46:24 +02:00
Bjarke Berg ca8c260b6c Bump version 2023-09-12 09:46:07 +02:00
Bjarke Berg f332fe325e Merge branch 'release/11.5' into v11/dev 2023-09-12 09:45:23 +02:00
Bjarke Berg 95ffdae475 Merge remote-tracking branch 'origin/v10/dev' into v10/dev 2023-09-12 09:43:52 +02:00
trba1810andMichael Latouche 7f318e8993 added validation messages in swedish language 2023-09-12 09:00:51 +02:00
Johan MöllerandGitHub 916e495dc4 Fixes: #14486 - Some sr-only texts not localized (#14750)
* Add visuallyHiddenTexts area and keys to swedish

Translations contributed by @plannero

* Add missing localizations.

* Revert prettier formatting

* Format in visual studio

* Change default UpgradeUnattended value to true (#13281)

* add labels to default en.xml + small glitch fix
2023-09-12 08:26:49 +02:00
Mads RasmussenandJacob Overgaard db98f88773 add culture module 2023-09-11 15:24:04 +02:00
Mads RasmussenandJacob Overgaard 622041fabc rename context module to app module 2023-09-11 15:23:45 +02:00
Andreas ZerbstandJacob Overgaard c42ca63b8d Added test for checking if settings model contains default value (#14513)
* Added test for checking if a settings model contains default value.
Fixed tests

* Bumped version

* Moved createSliderWithDefaultValue function to our testHelpers. Removed the use of count in test since there was only one
2023-09-11 15:16:41 +02:00
Jacob Overgaard cee485c6db Render all tabs in the background to ensure they register their initial state on any $scope.model in the stack. (#14493)
Sometimes a tab, e.g. a "block list settings model" might register some default values, but if the user never clicks on the tab then they are not registered due to how AngularJS renders views with "ng-if".
2023-09-11 15:16:20 +02:00
Andreas ZerbstandJacob Overgaard ca8ac21f4b Added test for checking if settings model contains default value (#14513)
* Added test for checking if a settings model contains default value.
Fixed tests

* Bumped version

* Moved createSliderWithDefaultValue function to our testHelpers. Removed the use of count in test since there was only one
2023-09-11 15:13:08 +02:00
Jacob Overgaard f85a0d1715 Render all tabs in the background to ensure they register their initial state on any $scope.model in the stack. (#14493)
Sometimes a tab, e.g. a "block list settings model" might register some default values, but if the user never clicks on the tab then they are not registered due to how AngularJS renders views with "ng-if".
2023-09-11 15:12:48 +02:00
Bjarne FyrstenborgandEmma L Garland 417e37ab1e Clean output 2023-09-11 12:02:20 +01:00
Bjarne FyrstenborgandEmma L Garland 2ea4b5793d Fallback to value in case no label exists 2023-09-11 12:02:20 +01:00
Bjarne FyrstenborgandEmma L Garland bfdd71944a Cleanup 2023-09-11 12:02:20 +01:00
Bjarne FyrstenborgandEmma L Garland 0296e70b30 Update syntax 2023-09-11 12:02:20 +01:00
Bjarne FyrstenborgandEmma L Garland da92c38dec Newer JS syntax 2023-09-11 12:02:20 +01:00
Bjarne FyrstenborgandEmma L Garland 65321e8f68 Simplify radiobuttonlist prevalue editor 2023-09-11 12:02:20 +01:00
Bjarne FyrstenborgandEmma L Garland 1f97c62a1b Update class name 2023-09-11 12:00:36 +01:00
Bjarne FyrstenborgandEmma L Garland c285caf260 Add dropdown prevalue editor 2023-09-11 12:00:36 +01:00
Jacob Overgaard 4e0f6a5696 update backoffice submodule 2023-09-08 13:58:26 +02:00
Niels LyngsøandJacob Overgaard 8cb0862142 append 3 more things to the import maps of C# 2023-09-08 13:49:13 +02:00
Jacob Overgaard 597b0a2be2 update submodule 2023-09-08 13:39:35 +02:00
Jacob Overgaard 420503fe40 bump to preview003 2023-09-08 13:39:11 +02:00
Niels Lyngsø ff0c2ef57c append 3 more things to the import maps of C# 2023-09-08 13:33:09 +02:00
Niels LyngsøandJacob Overgaard 10047c7ea8 update sub module 2023-09-08 10:08:04 +02:00
Andreas ZerbstandGitHub 2fc29e638c Limbo models builder changes the content to element when using Compositions (#14776) 2023-09-07 17:18:57 +02:00
Andreas ZerbstandGitHub 56486b1ace V10 Cherrypicked issuu RTE embed (#14777)
* Added a UserAgent to header

* Added the use of iframe. This allows us to see the issuu embed in the RTE
2023-09-07 16:28:11 +02:00
Nikolaj Brask-NielsenandGitHub 6d48091328 docs: XML warnings (#14663)
* chore: Fix XML warnings

* docs: Fix XML warnings

* docs: Fix XML in resource designer

* docs: Fix XML warnings

* Revert "docs: Fix XML in resource designer"

This reverts commit 8ea61c51ac.
2023-09-06 20:08:17 +02:00
Elitsa MarinovskaandGitHub eef0da096e Being able to specify a start item in preview through Start-Item header (#14757) 2023-09-06 10:18:04 +02:00
Kenn JacobsenandGitHub 280d0a236b Breaking changes for the Delivery API (#14745)
* Use interfaces for API media return values + introduce dedicated models for crops and focal points

* Move content and media controllers to their own namespaces
2023-09-06 09:49:44 +02:00
Bjarke Berg 28d16f69ba bump version 2023-09-06 08:51:36 +02:00
147b46440f V10/bugfix/14543 publish descendants (#14763)
* WIP: Fix publish descendants and related notifications

* Removed related entitities from publish notification

* Fixed root not being saved when publishingWithDescendants

* Updated integrationtests to reflect the update view on when to save the root when its part of a branch

* PR formatting fix

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* PR Cleanup

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Spicing up the codebase with some PR pattern matching

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-09-05 10:25:21 +02:00
Bjarke Berg fd043f6ecf Merge remote-tracking branch 'origin/v10/dev' into release/10.7 2023-09-05 10:19:13 +02:00
Bjarke Berg 39a102ed8a rollback version 2023-09-05 10:14:21 +02:00
f750bca453 V10/bugfix/14543 publish descendants (#14763)
* WIP: Fix publish descendants and related notifications

* Removed related entitities from publish notification

* Fixed root not being saved when publishingWithDescendants

* Updated integrationtests to reflect the update view on when to save the root when its part of a branch

* PR formatting fix

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* PR Cleanup

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Spicing up the codebase with some PR pattern matching

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-09-05 10:14:06 +02:00
Bjarke Berg 297b954df4 Merge remote-tracking branch 'origin/v11/dev' into release/11.5
# Conflicts:
#	version.json
2023-09-05 08:05:18 +02:00
Bjarke Berg fd8f809524 bump version 2023-09-05 08:04:16 +02:00
e4cc2a0550 Fix/in browser postman auth & editor config boolean serialization (#14739)
* Add in-browser postman callback url

* Added a jsonconverter for property editor configuration boolean values that are persisted as numbers and serialized as strings...

---------

Co-authored-by: Sven Geusens <sge@umbraco.dk>
2023-09-04 14:24:37 +02:00
Bjarke Berg dede983941 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-04 10:50:18 +02:00
Bjarke Berg c21530e17a Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-09-04 10:50:00 +02:00
Bjarke Berg ffa664f217 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-09-04 10:45:50 +02:00
Bjarke Berg 134ec4ece9 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-09-04 10:30:56 +02:00
Bjarke Berg 7e36203f60 Merge remote-tracking branch 'origin/release/10.7' into v10/dev
# Conflicts:
#	version.json
2023-09-04 10:24:22 +02:00
Bjarke Berg 334dff8645 bump version number 2023-09-04 10:23:44 +02:00
4f5fc0b8a1 Bulk delete functionality for management api (#14735)
* Bulk delete

* Bulk delete

* Added bulk delete user groups

* Clean

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-08-29 15:51:20 +02:00
Bjarke Berg a07d29b76a Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2023-08-28 12:17:40 +02:00
Bjarke Berg 1b3f7afe20 Use the IFileStreamSecurityValidator in the temporary file service 2023-08-28 12:17:34 +02:00
b8af4bab7d User forgot password functionality for Management API (#14704)
* Added attribute filter to ensure a request is taking a minimum time to response

* Added functionality to management api to send forgot password emails and verify these + do the actual reset using the token

* Renamed UserKey to UserId and updated OpenApi.json

* Update src/Umbraco.Core/Services/IUserService.cs

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Cleanup

* Renaming param

* Fixing send user username instead of email + wrong EmailTypes

* Fixed issue with forgot password functionality after reusing other functionality

* Rename prop

* Adding docs and renaming param

* Handle password validation return types

* More cleanup

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2023-08-28 12:14:16 +02:00
Bjarke Berg 6fbf04592c Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	build/azure-pipelines.yml
#	src/Umbraco.Cms.Api.Delivery/Controllers/DeliveryApiControllerBase.cs
#	src/Umbraco.Core/DependencyInjection/UmbracoBuilder.cs
#	src/Umbraco.Infrastructure/PropertyEditors/FileUploadPropertyValueEditor.cs
#	src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Packaging/PackageDataInstallationTests.cs
#	tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/LocalizationServiceTests.cs
2023-08-28 11:46:22 +02:00
Bjarke Berg d43e6abc8b Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-08-28 11:40:36 +02:00
Bjarke BergandGitHub b17a7689ab Fixed up the relation management api endpoints to use guids and paging (#14706)
* Fixed up the relation management api endpoints to use guids and paging

* Cleanup

* Updated OpenApi.json
2023-08-28 11:16:56 +02:00
f2d11e3095 Add content and media sorting to the Management API (#14712)
* Add content and media sorting to the Management API

* Rename "id" to "key" throughout the ContentEditingService

* Update Open API json file

* Use "key" instead of "id" in ContentEditingServiceBase

* Use "key" instead of "id" in IMediaEditingService and MediaEditingService

* Turn delegates into abstracts + fix bug that allowed deleting items outside of the recycle bin

* Use PUT instead of POST

* Update src/Umbraco.Core/Services/MediaEditingService.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Core/Services/MediaEditingService.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

* Update Open API JSON

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-08-28 08:56:57 +02:00
Kenn JacobsenandGitHub a9d7f3cbbb Content type and media type container CRUD controllers and services (#14682)
* CRUD for content and media type folders + refactor data type folder CRUD controllers and services to match

* Correct response types + update OpenAPI JSON

* Review changes

* Review changes

* Update OpenAPI JSON after merge
2023-08-24 09:32:36 +02:00
Andreas ZerbstandGitHub 98bcf15373 Added missing scope (#14711) 2023-08-23 13:24:16 +02:00
b1e42e334d Move to Minimal Hosting Model in a backwards compatible way (#14656)
* Use minimal hosting model

* Make CoreRuntime backward compatible to the old hosting model

* Remove unneccessary methods from interface again

* Pushed the timeout for E2E test to 120 minutes instead of 60

* Updated the preview version from 6 to 7

* Explicitly call BootUmbracoAsync

* Add CreateUmbracoBuilder extension method

* Do not add IRuntime as hosted service when using WebApplication/WebApplicationBuilder

* Set StaticServiceProvider.Instance before booting

* Ensure Umbraco is booted and StaticServiceProvider.Instance is set before configuring middleware

* Do not enable static web assets on production environments

* Removed root namespace from viewImports

---------

Co-authored-by: Andreas Zerbst <andr317c@live.dk>
Co-authored-by: Ronald Barendse <ronald@barend.se>
2023-08-21 12:24:17 +02:00
Bjarke Berg 6f10517fc6 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	build/azure-pipelines.yml
2023-08-21 08:05:22 +02:00
Bjarke Berg 84cd7a163c Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-08-21 08:03:18 +02:00
0096addcb9 Content and media type CRUD controllers and services (#14665)
* Add GetAsync method

* Fix up delete document type controller

* Add scope to delete async

* Add some scaffolding

* Add create model

* Start working on validation

* Move validation to its own service

* Use GetAllAsync instead of GetAsync

* Add initial composition support

Still need to figure out some kinks

* Validate compositions when creating

* Add initial folder support

* Initial handling of generic properties

* Add operation status responses

* Move create operation into service

* Add first test

* Fix issued shown by test

* Ensure a specific key can be specified when creating

* Rename container id to container key

Let's try and be consistent

* Create basic composition test

* Ensure new property groups are created with the correct key

* Add test showing property type issue

* Fix property types not using the expected key.

* Validate against model fetched from content type service

Just to make sure nothing explodes on the round trip

* Make helper for creating create models

* Add helper for creating container

* Make helper methods simpler to use

* Add test for compositions using compositions

* Add more composition tests

* Fix bug allowing element types to be composed by non element types

* Remove validators

This can just be a part of the editing service

* Minor cleanup

* Ensure that multiple levels of inheritance is possible

* Ensure doctype cannot be used as both composition and inheritance on the same doctype

* Ensure no duplicate aliases from composition and that compositions exists

* Minor cleanup

* Address todos

* Add SaveAsync method

* Renamed some models

* Rename from DocumentType to ContentType

* Clarify ParentKey as being container only + untangle things a tiny bit

* Clean out another TODO (less duplicate code) + more tests

* Refactor for reuse across different content types + add media type editing service + unit tests

* Refactor in preparation for update handling

* More tests + fixed bugs found while testing

* Simplify things a bit

* Content type update + a lot of unit tests + some refactor + fix bugs found while testing

* Begin building presentation factories for mapping view models to editing models

* Use async save

* Mapping factories and some clean-up

* Rename Key to Id (ParentKey to ParentId)

* Fix slight typo

* Use editing service in document type controllers and introduce media type controllers

* Validate containers and align container aliases with the current backoffice

* Remove ParentId from response

* Fix scope handling in DeleteAsync

* Refactor ContentTypeSort

* A little renaming for clarity + safeguard against changes to inheritance

* Persist allowed content types

* Fix bad merge + update controller response annotations

* Update OpenAPI JSON

* Update src/Umbraco.Cms.Api.Management/Controllers/DocumentType/DocumentTypeControllerBase.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Fix review comments

* Update usage of MapCreateAsync to ValidateAndMapForCreationAsync

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-08-17 12:28:16 +02:00
a1f6531453 V14: Consistently refer to user key (#14685)
* Fixup UserService

* Fixup PartialViewService

* Fixup ScriptService

* Fixup StylesheetService

* Use keys with usergroups instead of IDs

* Fix missed instances of performingUser

* Fixup DataTypeFolderControllerBase

---------

Co-authored-by: kjac <kja@umbraco.dk>
2023-08-17 08:35:48 +02:00
Bjarke Berg fb3ead87b8 Post merge fixes 2023-08-15 11:18:10 +02:00
Bjarke Berg 822d57135e Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.Persistence.EFCore/Composition/UmbracoEFCoreComposer.cs
#	src/Umbraco.Infrastructure/PropertyEditors/BlockEditorValues.cs
#	src/Umbraco.Web.UI.Docs/gulpfile.js
2023-08-15 11:14:00 +02:00
Bjarke Berg 7eda978cb1 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-08-15 11:07:06 +02:00
Bjarke Berg b668fd47c6 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-08-15 10:59:44 +02:00
Jacob Overgaard 826ec6a94f update backoffice submodule 2023-08-11 15:38:23 +02:00
Jacob Overgaard f540fe59ed update backoffice submodule 2023-08-11 15:36:43 +02:00
Bjarke Berg 843d41e564 Update .net 8 to preview 7 2023-08-09 15:53:31 +02:00
Bjarke Berg 5327413092 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	version.json
2023-08-09 15:28:49 +02:00
Jacob Overgaard 6fcb67e319 bump to preview002 2023-08-09 10:21:13 +02:00
Jacob Overgaard 6ccf825c48 outcomment c# docs for now (they do not work with .NET 8) 2023-08-09 10:21:04 +02:00
Jacob Overgaard d1547ffe0b typo 2023-08-09 10:20:51 +02:00
Jacob Overgaard 9e9c299cf8 update backoffice preview002 2023-08-08 15:41:16 +02:00
Jacob Overgaard 7e25f1b55f update importmap 2023-08-08 15:37:46 +02:00
Bjarke Berg d9f528f3ae Post merge fixes 2023-08-08 12:19:29 +02:00
Bjarke Berg 2839131033 Merge remote-tracking branch 'origin/v13/dev' into v14/dev 2023-08-08 12:10:18 +02:00
Bjarke Berg dce320839c Updated .net 8 to preview 6 2023-08-08 12:05:53 +02:00
Bjarke Berg df16f4fbd2 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-08-08 11:40:45 +02:00
Jacob Overgaard 9b26aec4c3 set default culture for backoffice 2023-08-08 09:54:54 +02:00
Jacob Overgaard 9274c3fad9 update backoffice submodule 2023-08-08 09:49:42 +02:00
Bjarke BergandGitHub 45033437a2 Updated all 404 and 500 responses to use problem details model (#14634)
* Updated all 404 and 500 responses to use problem details

* Updated OpenApi.json

* Add missing ProducesResponseType

* Updated OpenApi.json
2023-08-04 10:51:20 +02:00
Jacob Overgaard 7b78fe9ced update backoffice submodule 2023-08-02 17:04:02 +02:00
Bjarke Berg 254e471d9b post merge fixes 2023-08-02 10:27:39 +02:00
Bjarke Berg bd0f20f4e4 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Web.BackOffice/CompatibilitySuppressions.xml
#	src/Umbraco.Web.Common/CompatibilitySuppressions.xml
#	tests/Umbraco.Tests.Common/CompatibilitySuppressions.xml
#	tests/Umbraco.Tests.Integration/CompatibilitySuppressions.xml
2023-08-02 10:23:53 +02:00
Bjarke Berg 6d64cfbbc4 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-08-02 10:23:32 +02:00
Bjarke Berg bbaa2a2212 Added CompatibilitySuppressions for .NET7 2023-08-02 09:46:31 +02:00
Bjarke Berg 41625e3ad2 Updated template to .net8 2023-08-02 09:46:14 +02:00
Bjarke Berg 68475a97d6 Do not sign in user after install, like in v12 2023-07-31 14:02:48 +02:00
Bjarke Berg 42ffb3b7d8 Reimplement fix from v12 to allow newlines in invite email 2023-07-31 13:59:53 +02:00
Nikolaj Geisle ea3712fb96 Remove v10 fix, as it hopefully should not be relevant for 14 2023-07-25 11:56:46 +02:00
Nikolaj Geisle 2ecee0ca32 Merge branch 'v13/dev' into v14/dev 2023-07-25 11:44:03 +02:00
Nikolaj Geisle 8797e93f2e Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-07-25 11:37:04 +02:00
Jacob Overgaard 9e0344d85a update backoffice submodule 2023-07-24 10:45:34 +02:00
MoleandGitHub e1281afb71 Merge pull request #14589 from umbraco/v14/merge
V14/merge
2023-07-21 13:47:06 +02:00
nikolajlauridsen 7ed856ae8e Comment out richtext test
This should no longer be nececary in new backoffice
2023-07-21 12:21:56 +02:00
nikolajlauridsen 473c27213e Undo props changes 2023-07-21 11:38:15 +02:00
nikolajlauridsen 90598dce0b Re-add package validation skips 2023-07-21 11:28:35 +02:00
nikolajlauridsen a4c287f1e8 Try re-adding submodule 2023-07-21 11:14:52 +02:00
nikolajlauridsen 7753df40ce Merge v13/dev 2023-07-21 10:59:47 +02:00
nikolajlauridsen 28dae0387f Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	Directory.Build.props
2023-07-21 10:20:08 +02:00
Nikolaj GeisleandGitHub 963151a1c1 V14: Rename folder response model (#14576)
* Rename FolderResposneModel

* Update OpenApi.json
2023-07-19 13:54:17 +02:00
Jacob Overgaard 43b44b1004 remove submodule 2023-07-19 10:06:12 +02:00
Elitsa MarinovskaandGitHub 036876f349 V14: Add authorization policies to new Backoffice API controllers - p1 (#14551)
* AuditLog policies

* DataType policies

* Dictionary policies

* Document controllers policies

* DocumentBlueprint controllers policies

* DocumentType controllers policies

* HealthCheck controllers policies

* Language controllers policies

* LogViewer controllers policies

* Media controllers policies

* MediaType controllers policies

* Member controllers policies

* MemberGroup controllers policies

* MemberType controllers policies

* ModelsBuilder controllers policies

* Package controllers policies

* PartialView controllers policies

* Profiling controllers policies

* PropertyType controllers policies

* RedirectUrlManagement controllers policies

* Relation controllers policies

* RelationType controllers policies

* Script controllers policies

* Stylesheet controllers policies

* Telemetry controllers policies

* Template controllers policies

* TrackedReference controllers policies

* Upgrade controllers policies

* User controllers policies

* UserGroup controllers policies

* Other controllers cleanup

* Moved CreatePolicies to its own Extensions class

* Added TreeAccessScripts and TreeAccessStylesheets policies

* Remove comments

* Forgotten "New" prefix

* Duplicate Auth Policy

* Removed comment since we are using reference tokens and this is no longer a problem

* Fix AdminUserEditsRequireAdmin auth policy to use a constant

* Revert change

* Revery UpgradeControllerBase attribute

* Removed AdminUserEditsRequireAdmin policy as it will be implemented later on

* Adding RequireAdminAccess policy for Upgrade controller

* Wrong claim type
2023-07-19 08:02:51 +02:00
Jacob Overgaard 33f926853b update backoffice submodule 2023-07-18 13:47:48 +02:00
MoleandGitHub d306a65bd4 V14: Fix pipelines (#14566)
* Try undoing inheritance change

Just to see if the issue stems from there

* Try specifying order again

* Log something

* Maybe it's a culture thing

* That wasn't it

* Maybe content deliver need to exist as an applicationPart

* Order found types

* Cleanup
2023-07-18 10:18:31 +02:00
b31c59d2a5 V14: refactor property editor aliases (#14536)
* Rename migrations folder to v14

* Add renaming migration

* Add missing namespace to migration in plan

* Rename Tiny to richtext

* Obsolete old TinyMce

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-07-14 15:31:09 +03:00
nikolajlauridsen f533d923d8 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	tests/Umbraco.Tests.AcceptanceTest/package-lock.json
#	tests/Umbraco.Tests.AcceptanceTest/package.json
#	tests/Umbraco.Tests.AcceptanceTest/playwright.config.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAdvanced.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAreasContent.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorContent.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorRendering.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorSettings.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockListEditor/blockListEditorContent.spec.ts
#	version.json
2023-07-14 10:04:53 +02:00
nikolajlauridsen f902b83940 Fix version 2023-07-14 09:59:56 +02:00
nikolajlauridsen 4df770aa76 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-07-14 09:59:26 +02:00
Jacob Overgaard 6f417722ac Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-07-12 15:06:29 +02:00
e40f1839c4 V14: Refactor LogViewerService (#14511)
* Refactor GetPagedLogsAsync to not use ILogViewer

* Refactor GetPagedLogsAsync to not use ILogViewer

* Reorder using statements

* Introduce ILogViewerRepository

* Remove skip and take from repository

* Return IEnumerable instead of pagedModel

* Remove local GetLogs

* Return IEnumerable instead of pagedmodel

* Remove serilog entirely from ILogViewerService

* Move LogViewerService

* Inject LogViewerService as core service instead

* Implement LogViewerServiceTests.cs

* Add more happy path tests

* Add saved query tests

* Refactor private path fields  to normal variables in setup method

* Capitalize logs for Unix systems

* Added missing documentation

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-07-10 15:36:20 +03:00
Jacob Overgaard 82f79cafe8 update backoffice submodule 2023-07-10 11:22:37 +02:00
MoleandGitHub 578ced2778 Enable inheritance after merge (#14512)
* Enable inheritance after merge

* Update OpenApi.json
2023-07-10 10:13:46 +02:00
Jacob Overgaard 11dd958a33 update backoffice submodule 2023-07-07 15:49:40 +02:00
Bjarke Berg 47d5ef88c4 Post merge fixes - Including temp workaround for .net8 efcore breaking change (Should be fixed again in preview 7) 2023-07-07 10:55:29 +02:00
Bjarke Berg d991285466 Merge remote-tracking branch 'origin/v13/dev' into v14/dev
# Conflicts:
#	Directory.Build.props
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
2023-07-07 08:56:17 +02:00
Bjarke Berg fe6cdb0f17 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-07-07 08:48:33 +02:00
c7a38cdac4 V14: Public access controller (#14501)
* Implement GetEntryByContentKey

* Implement PublicAccessResponseModel

* Implement IPublicAccessPresentationFactory

* Rename MemberGroupItemReponseModel to MemberGroupItemResponseModel

* Refactor PublicAccessResponseModel to use Ids instead of entire content items

* Return attempt instead of PresentationModel

* Add missing statuses to PublicAccessOperationStatusResult

* Implement PublicAccessDocumentController.cs

* Refacotr PublicAccessResponseModel to use a base model

* Add CreatePublicAccessEntry method

* Refactor AccessRequestModel to use names not ids :(

* Rename ErrorPageNotFound to ErrorNodeNotFound

* Implement new SaveAsync method

* Introduce more OperationResults

* Implement PublicAccessEntrySlim

* Implement SaveAsync

* Remove CreatePublicAccessEntry from presentation factory

* Rename to CreateAsync

* Implement UpdateAsync

* Rename to async

* Implement CreatePublicAccessEntry

* Implement update endpoint

* remove PublicAccessEntrySlim mapping

* implement CreatePublicAccessEntrySlim method

* Refactor UpdateAsync

* Remove ContentId from request model as it should be in the request

* Use new service layer

* Amend method name in update controller

* Refactor create public access entry to use async method and return entity

* Refactor to use saveAsync method instead of synchronously

* Use presentation factory instead of mapping

* Implement deleteAsync endpoint

* Add produces response type

* Refactor mapping to not use UmbracoMapper, as that causes errors

* Update OpenApi.json

* Refactor out variables to intermediate object

* Validate that groups and names are not specified at the same time

* Make presentation factory not async

* Minor cleanup

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-07-05 14:56:51 +02:00
ed83b65de3 V14: Refactor icons for tree items (#14477)
* Remove icons from base models

* Update OpenApi spec

* Updated schema

* Cleanup

* Fix Response Type

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-07-05 15:09:39 +03:00
0ad0f86e6e Update to dotnet 8 preview 5 (#14492)
* Update to .net 8 preview 1

* Update npoco to 5.7.0

* Update pipeline to use .net 8

* Revert "Update npoco to 5.7.0"

This reverts commit f7795afa77.

* Fix tests and updated OpenApi.json

* use dotnet 8 in linux container

* Updated templates and docker image to dotnet 8

* Bugfix

* R
Updated docker images to 8.0 preview 1

* linux docker images updated

* Force use c# 11, in hope of the acceptance tests will pass

* Do not use C# 8 :)

* Update to preview 2

* CompatibilitySuppressions

* updated templates

* Disable package validation

* Update to .net8 preview 4

* change EnableStrictModeForCompatibleFrameworksInPackage to false

* Package validation

* Added CompatibilitySuppressions.xml

* Fix up IP networks

* Updated to preview 5

* Update docker images

* Post merge fixes

* Try to update dotnet version of codeql

* Delete empty suppression files

* Remove dependency

* Cleanup

---------

Co-authored-by: Elitsa <elm@umbraco.dk>
2023-07-05 14:13:52 +03:00
59df7439db Verify user invite token (#14491)
* Added functionality to verify user invite tokens and create the initial password

* Add response types

* Fail ValidateCredentialsAsync when user is not approved

* Enable user as part of initial password creating using validation token

* Adds documentation to badrequest and changed nocontent to ok, to align with other APIs

* Fixed tests and added a new one

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2023-07-05 12:42:52 +02:00
Jacob Overgaard 8bccab3b60 update backoffice submodule 2023-07-03 14:14:09 +02:00
Kenn JacobsenandGitHub 0496fba70b Fix EFCore.Sqlite and EFCore.SqlServer project load in solution file (#14480) 2023-06-29 18:36:29 +02:00
Jacob Overgaard 113b1ff216 update backoffice submodule 2023-06-29 14:12:52 +02:00
Elitsa MarinovskaandGitHub cdfae0ce0b V14: Skip and take updates (#14478)
* Adding default values to skip and take to align with the rest of the controllers

* Changing skip and take type from long to int to align with the rest

* Fixing wrong response type

* Remove double skip and take

* Update json file
2023-06-29 12:33:31 +02:00
d5a0dda89a V14: allowed children endpoints (#14434)
* Implement allowed children of root

* Allow children by key controller

* Update to be document controlller instead

* Fix AllowedChildrenOfRootDocumentController

* Create GetAllAsync method in ContentTypeServiceBaseOfTRepositoryTItemTService

* Revert "Create GetAllAsync method in ContentTypeServiceBaseOfTRepositoryTItemTService"

This reverts commit b01b5b9240.

* Implement attemp pattern in IContentTypeService

* Create IContentCreatingService

* Use new contentCreatingService in controller

* Revert if statement

* Use total from attempt

* Throw exceptions instead of returning attempt

* Wrap in scope

* Rename to GetAllowedChildrenContentTypesAsync

* Fix summary

* Removed unneccessary await Task.FromResult

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-06-29 09:38:05 +02:00
Andreas ZerbstandGitHub 85ad419cb7 Updated our API acceptance tests to use our updated testHelpers (#14476)
* Updated our dataType API tests to use our updated testHelpers

* Updated our dataTypeFolder API tests to use our updated testHelpers

* Updated our dictionary API tests to use our updated testHelpers

* Updated our language API tests to use our updated testHelpers

* Updated our partialView API tests to use our updated testHelpers

* Updated our partialViewFolder API tests to use our updated testHelpers

* Updated our script API tests to use our updated testHelpers

* Updated our scriptFolder API tests to use our updated testHelpers

* Updated our stylesheet API tests to use our updated testHelpers

* Updated our stylesheetFolder API tests to use our updated testHelpers

* Updated our telemetry API tests to use our updated testHelpers

* Updated our template API tests to use our updated testHelpers

* Updated our temporaryFile API tests to use our updated testHelpers

* Updated our user API tests to use our updated testHelpers

* Updated our userAvatar API tests to use our updated testHelpers

* Updated our userGroup API tests to use our updated testHelpers

* Fixed failing text

* Bumped to use the newest version of our testHelpers
2023-06-29 07:16:33 +02:00
ddca33337b v14: Rewrite static assets for the backoffice (#14472)
* add extension method to rewrite requests meant for backoffice static assets

* add backoffice rewrites to application builder

* embed the umbraco hash into the static assets requested on the backoffice

* Added a IStaticFileHostGenerator so its possible to replace our logic

* add docs and ensure the path is uniform with single slashes

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-06-28 14:55:19 +02:00
7265d5c3be Use OpenIddict with real db instead of inmemory (#14465)
* Add OpenIddict tables to database (#14449)

* Added migrations to install EF Core OpenIddict tables

* Handle Install of ef core data (Needs to be outside of transaction

* Cleanup and renaming, as these things will be reused for more than openiddict in the future

* Cleanup

* Extract db context setup

* Minor cleanup

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>

* Use OpenIddict from DB instead of InMemoryDb

* Do not try to clean up, while not it run mode

* Fixed tests

* Clean up

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-06-28 09:40:28 +03:00
dfc7054720 V14: refactor GetPermissions to use attempt pattern (#14470)
* Refactor GetPermissions to take params

* Rework GetPermissionsAsync to attempt pattern

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-06-27 14:34:02 +02:00
Bjarke Berg 135a43f5a4 Add Microsoft.EntityFrameworkCore.Design to UI.New 2023-06-27 10:20:19 +02:00
Jacob Overgaard 44a3d86986 package-lock sync 2023-06-27 10:03:04 +02:00
Jacob Overgaard 8bb43a8eda Merge branch 'v13/dev' into v14/dev 2023-06-27 10:02:46 +02:00
Jacob Overgaard 2511be61cc package-lock sync 2023-06-27 10:01:45 +02:00
Bjarke Berg 4aa7001fbf Merge remote-tracking branch 'origin/v12/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Core/Services/ContentService.cs
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
2023-06-27 09:50:37 +02:00
Andreas ZerbstandGitHub de235c224a Added missing scope (#14460) 2023-06-26 16:43:22 +02:00
Andreas ZerbstandGitHub 437db52e5e Added UI acceptance for the telemetry section (#14456)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section

* Added simple acceptance tests for testing the API for the Script section

* Added acceptance tests for testing the API for the Stylesheet section.

* Added acceptance tests for testing the API for the User section

* Bumped the version of our testhelpers!

* Added acceptance tests for testing the API for the Dictionary section.

* Added acceptance tests for testing the API for the Language section.

* Added acceptance tests for testing the API for the UserGroups section.

* Added acceptance tests for testing the API for the Template section

* Added acceptance tests for testing the API for the TemporaryFiles section

* Our first UI test for v14

Added acceptance tests for the telemetry section

* Removed page.pause
2023-06-26 15:05:50 +02:00
Andreas ZerbstandGitHub acf8f575a8 Added acceptance tests for testing the API for the UserGroups section. (#14448)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section

* Added simple acceptance tests for testing the API for the Script section

* Added acceptance tests for testing the API for the Stylesheet section.

* Added acceptance tests for testing the API for the User section

* Bumped the version of our testhelpers!

* Added acceptance tests for testing the API for the Dictionary section.

* Added acceptance tests for testing the API for the Language section.

* Added acceptance tests for testing the API for the UserGroups section.

* Added acceptance tests for testing the API for the Template section (#14450)

* Added acceptance tests for testing the API for the Template section

* Added acceptance tests for testing the API for the TemporaryFiles section (#14451)
2023-06-26 13:09:41 +02:00
Andreas ZerbstandGitHub ad419dd460 Added acceptance tests for testing the API for the Language section. (#14447)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section

* Added simple acceptance tests for testing the API for the Script section

* Added acceptance tests for testing the API for the Stylesheet section.

* Added acceptance tests for testing the API for the User section

* Bumped the version of our testhelpers!

* Added acceptance tests for testing the API for the Dictionary section.

* Added acceptance tests for testing the API for the Language section.
2023-06-26 12:23:01 +02:00
Andreas ZerbstandGitHub fbc8d453e3 Added acceptance tests for testing the API for the Dictionary section. (#14446)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section

* Added simple acceptance tests for testing the API for the Script section

* Added acceptance tests for testing the API for the Stylesheet section.

* Added acceptance tests for testing the API for the User section

* Bumped the version of our testhelpers!

* Added acceptance tests for testing the API for the Dictionary section.
2023-06-26 12:21:09 +02:00
Jacob Overgaard ca6f9ffadb Merge remote-tracking branch 'origin/v14/dev' into v14/dev 2023-06-26 10:19:46 +02:00
Jacob Overgaard 7a8c4af161 update backoffice submodule 2023-06-26 10:19:38 +02:00
Andreas ZerbstandGitHub b0b29f05af Added acceptance tests for testing the API for the Users section. (#14445)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section

* Added simple acceptance tests for testing the API for the Script section

* Added acceptance tests for testing the API for the Stylesheet section.

* Added acceptance tests for testing the API for the User section

* Bumped the version of our testhelpers!
2023-06-26 10:13:36 +02:00
Andreas ZerbstandGitHub 87a66c064f Added acceptance tests for testing the API for the Script section (#14441)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section

* Added simple acceptance tests for testing the API for the Script section

* Added acceptance tests for testing the API for the Stylesheet section. (#14442)
2023-06-23 12:00:16 +02:00
Andreas ZerbstandGitHub ea520cb851 Added acceptance tests for testing the API for the PartialView section (#14438)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes

* Added simple acceptance tests for testing the API for the PartialView section
2023-06-23 11:09:47 +02:00
Andreas ZerbstandGitHub 893e00f100 Added acceptance test for testing our api for the DataTypes section (#14437)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user

* Added simple acceptance test for testing our api for the DataTypes
2023-06-23 10:32:17 +02:00
Andreas ZerbstandGitHub 1d215aa1b1 V14/qa/new acceptance tests (#14435)
* Added auth to gitignore

* Added a setup for logging in which allows us to save the token for the user
2023-06-23 08:56:30 +02:00
Bjarke Berg 1149cddc09 Update openAPI 2023-06-22 12:46:25 +02:00
Bjarke Berg 053f2e6dff Merge remote-tracking branch 'origin/v12/dev' into v14/dev 2023-06-22 11:37:44 +02:00
Bjarke Berg b7df9f2357 Post merge, add missing swagger UI options 2023-06-22 11:28:22 +02:00
Bjarke Berg 4f93542909 Updated OpenApi.json 2023-06-21 10:18:36 +02:00
Bjarke Berg 37d8513b42 Remove wrong obsolete message that have been merged up 2023-06-21 09:14:55 +02:00
Bjarke Berg 2ed2fc3533 Added TrustServerCertificate to install apis 2023-06-21 09:12:00 +02:00
Bjarke Berg 22b2f79d15 Merge remote-tracking branch 'origin/v12/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderApiExtensions.cs
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Web.Common/Profiler/WebProfiler.cs
2023-06-21 09:06:42 +02:00
Bjarke Berg 7a4a4f60c4 Merge remote-tracking branch 'origin/release/14.0' into v14/dev 2023-06-21 09:05:31 +02:00
Jacob Overgaard 95f7cdd418 add dependency on 'Build' stage to get output parameter 2023-06-20 13:56:45 +02:00
dependabot[bot]andJacob Overgaard 8d6d933600 Bump socket.io-parser from 4.2.1 to 4.2.4 in /src/Umbraco.Web.UI.Client
Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.1 to 4.2.4.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.1...4.2.4)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-20 13:30:43 +02:00
dependabot[bot]andJacob Overgaard 0fa42a10b5 Bump socket.io-parser from 4.2.1 to 4.2.4 in /src/Umbraco.Web.UI.Client
Bumps [socket.io-parser](https://github.com/socketio/socket.io-parser) from 4.2.1 to 4.2.4.
- [Release notes](https://github.com/socketio/socket.io-parser/releases)
- [Changelog](https://github.com/socketio/socket.io-parser/blob/main/CHANGELOG.md)
- [Commits](https://github.com/socketio/socket.io-parser/compare/4.2.1...4.2.4)

---
updated-dependencies:
- dependency-name: socket.io-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-20 13:30:31 +02:00
dependabot[bot]andJacob Overgaard 8622344b96 Bump fast-xml-parser and is-svg in /src/Umbraco.Web.UI.Client
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [is-svg](https://github.com/sindresorhus/is-svg). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 3.20.3 to 4.2.4
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/commits)

Updates `is-svg` from 4.3.1 to 4.4.0
- [Release notes](https://github.com/sindresorhus/is-svg/releases)
- [Commits](https://github.com/sindresorhus/is-svg/compare/v4.3.1...v4.4.0)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: indirect
- dependency-name: is-svg
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-20 13:24:20 +02:00
dependabot[bot]andJacob Overgaard c665ab453d Bump fast-xml-parser and is-svg in /src/Umbraco.Web.UI.Client
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) and [is-svg](https://github.com/sindresorhus/is-svg). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 3.20.3 to 4.2.4
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/commits)

Updates `is-svg` from 4.3.1 to 4.4.0
- [Release notes](https://github.com/sindresorhus/is-svg/releases)
- [Commits](https://github.com/sindresorhus/is-svg/compare/v4.3.1...v4.4.0)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: indirect
- dependency-name: is-svg
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-20 13:24:13 +02:00
Jacob Overgaard b4ab76c2a8 update backoffice submodule 2023-06-20 13:17:26 +02:00
Jacob Overgaard 2cb1d31375 Merge branch 'v14/dev' of https://github.com/umbraco/Umbraco-CMS into v14/dev 2023-06-20 11:02:41 +02:00
Jacob Overgaard 645345a51b v11: Backoffice JS Updates (#14407)
* update @umbraco-ui/uui to 1.3.0

* update @microsoft/signalr to 7.0.7

* update ace editor to 1.22.1

* update jQuery to 3.7.0

* update nouislider to 15.7.1

* update tinymce to 6.5.1

* update spectrum-colorpicker2 to 2.0.10

* update build dependencies
2023-06-20 11:02:32 +02:00
Jacob Overgaard 43fb128292 v11: Backoffice JS Updates (#14407)
* update @umbraco-ui/uui to 1.3.0

* update @microsoft/signalr to 7.0.7

* update ace editor to 1.22.1

* update jQuery to 3.7.0

* update nouislider to 15.7.1

* update tinymce to 6.5.1

* update spectrum-colorpicker2 to 2.0.10

* update build dependencies
2023-06-20 11:02:20 +02:00
MoleandGitHub dd90ef2d81 Update OpenApi.json (#14417) 2023-06-20 10:23:41 +02:00
Jacob OvergaardandGitHub 5900f5bede v14: update package templates with new umbraco-package.json format (#14412)
* update package templates with new umbraco-package.json format

* remove $schema for now because we dont know where people will locate this file (refer to documentation)
2023-06-19 15:29:27 +02:00
Jacob Overgaard a463415b47 update backoffice submodule 2023-06-19 14:47:32 +02:00
Jacob Overgaard c512039083 upload api docs after myget release 2023-06-13 12:52:16 +02:00
Jacob Overgaard 3ed89c9a6d Merge branch 'v14/dev' into release/14.0 2023-06-13 12:50:14 +02:00
Jacob Overgaard 2c3c86a55d update backoffice submodule 2023-06-13 12:49:45 +02:00
Jacob Overgaard 0fcb2890aa Merge remote-tracking branch 'origin/v14/dev' into release/14.0 2023-06-12 14:20:51 +02:00
Jacob Overgaard d9c1de928b update backoffice submodule 2023-06-12 14:17:06 +02:00
Jacob OvergaardandGitHub da0ad33818 V14: frontend ui docs (#14374)
* update script to compile frontend api docs

* update backoffice submodule

* set the base path for the ui docs

* update env syntax

* remove Umbraco.Web.UI.Docs

* replace BASE_PATH in assets

* Make Upload API step able to run without releasing on nuget

* add dependOn Build to get major version number
2023-06-12 14:12:02 +02:00
Bjarke Berg 520309e3f8 Merge remote-tracking branch 'origin/v12/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/UserRepository.cs
#	src/Umbraco.Web.BackOffice/Controllers/MediaController.cs
#	src/Umbraco.Web.BackOffice/Filters/FileUploadCleanupFilterAttribute.cs
2023-06-12 10:10:08 +02:00
Jacob Overgaard 1e95437a0a update backoffice submodule 2023-06-09 11:18:38 +02:00
MoleandGitHub 64c7c6b439 Fetch GUID directly and make it non async (#14358) 2023-06-08 14:49:52 +02:00
MoleandGitHub 040bf2c1e3 Replace use of SortedSet with HashSets and ISets (#14353) 2023-06-08 10:30:23 +02:00
Bjarke Berg 9a8edbabb3 Merge remote-tracking branch 'origin/v12/dev' into v14/dev 2023-06-08 10:12:10 +02:00
Bjarke Berg 63b1865053 Merge remote-tracking branch 'origin/release/14.0' into v14/dev 2023-06-08 10:12:02 +02:00
Bjarke Berg c84a3e2fe4 Merge remote-tracking branch 'origin/v12/dev' into release/14.0
# Conflicts:
#	src/Umbraco.Core/Manifest/PackageManifest.cs
#	src/Umbraco.Core/Telemetry/TelemetryService.cs
#	src/Umbraco.Infrastructure/Manifest/LegacyManifestParser.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/ResetCache.cs
#	src/Umbraco.Infrastructure/Persistence/Repositories/Implement/CreatedPackageSchemaRepository.cs
#	src/Umbraco.Infrastructure/Services/Implement/PackagingService.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Core/Telemetry/TelemetryServiceTests.cs
2023-06-08 10:07:29 +02:00
MoleandGitHub fdf5beb22a Add get ByEditorUiAlias datatype item endpoint (#14352) 2023-06-08 09:04:48 +02:00
Bjarke Berg 498eb083dd Updated version number 2023-06-07 16:12:47 +02:00
Niels LyngsøandGitHub fe714805bb Add location header for CORS requests (#14349) 2023-06-07 10:15:16 +02:00
MoleandGitHub 582b784ffe V14: Update template controllers (#14326)
* Add alias to document item response

* Add master template key to detailed model

* Add mater template key as optiona parameter to Scaffolding

* Check for duplicate alias when creating templates directly

* Clean

* Ensure integration tests creates templates with unique aliases

* Perform mapping in presentation factory
2023-06-06 13:45:39 +02:00
Jacob Overgaard 9947d4a15a update backoffice submodule 2023-06-06 10:44:18 +02:00
Kenn JacobsenandGitHub fe0cbc50c8 Temporary CRUD API for content types (#14334)
* Add temporary controllers for document type CRUD

* Update OpenAPI json

* Review comments

* Add comment for future refactoring
2023-06-06 09:32:02 +02:00
4180170acf Get current user endpoint in management api (#14336)
* Add current user data endpoint

* Add Change password endpoint

* Add SetAvatar

* Add get node permissions

* Add endpoint for getting currently logged in users linked logins

* Add tour service

* Add get tours

* Add set tour endpoint

* Added PermissionNames to IReadOnlyUserGroup

* Only require backend auth on management api

* Use ISet in response model

* Fixed issue with saving null as startMediaId, where it was ignored

* Add get current user endpoint

* Fix missing linebreak

* Append "New" keyword to policies

* Update OpenApi

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-06-05 15:20:18 +02:00
MoleandGitHub 0ad0179cd6 V14: Current user controller (#14323)
* Add current user data endpoint

* Add Change password endpoint

* Add SetAvatar

* Add get node permissions

* Add endpoint for getting currently logged in users linked logins

* Add tour service

* Add get tours

* Add set tour endpoint

* Split permissions endpoint in two, one for media and one for document
2023-06-05 08:42:29 +02:00
Jacob Overgaard 4a07f9a839 update backoffice submodule 2023-06-02 12:08:34 +02:00
Jacob Overgaard ef0e085c74 add login build to azure 2023-06-02 11:46:47 +02:00
Jacob Overgaard 6c731ca4ec update backoffice submodule 2023-06-02 11:23:01 +02:00
Jacob Overgaard 1e76ace11a add asp-append-version to static assets for backoffice 2023-06-01 11:29:10 +02:00
Jacob Overgaard 7839e14163 update backoffice submodule 2023-06-01 08:52:01 +02:00
Jacob OvergaardandGitHub 43ffeb673b v14: login app (#14318)
* ignore output files

* add new umb-login element

* allow to build and clean 'login' assets

* remove unused AuthUrl since this is now coded into the frontend code for each context

* ensure the ReturnUrl has a fallback to the default installation directory, since if you accidentally hit the login page and login, nothing happens if there is no return url

* switch to DependsOnTargets to account for if this is the only target being run (we need node_modules installed)

* add UmbracoUrl property

* add taghelper to use asp-append-version on login static assets
2023-06-01 08:50:21 +02:00
Jacob OvergaardandGitHub 33cb74dff1 V14: umbraco-package.json schema (#14319)
* copy umbraco-package-schema.json over from the New.Client build

* when a project referencing Cms.Targets is  building, we want to copy out the umbraco-package-schema.json file to the project directory if it does not exist

* ignore built output files

* fix typo

* add PackageReference to Umbraco.Cms.Targets to ensure dependent json schema files are copied over

* add to gitignore

* add target to remove the _UmbracoCmsPackageSchemaReference on clean

* Revert "add PackageReference to Umbraco.Cms.Targets to ensure dependent json schema files are copied over"

This reverts commit 339043a36f.

* generate umbraco-package-schema.json on demand in Cms.Targets

* add generated file to .gitignore
2023-05-31 19:12:00 +02:00
Jacob Overgaard cdd3adfd3c update backoffice submodule 2023-05-31 14:41:23 +02:00
Bjarke Berg dbfedf31bd Merge remote-tracking branch 'origin/v12/dev' into v14/dev 2023-05-31 09:46:59 +02:00
Jacob Overgaard 61c4aac0c9 update backoffice submodule 2023-05-30 16:10:56 +02:00
Jacob Overgaard 917b227294 update backoffice submodule 2023-05-30 14:13:23 +02:00
MoleandGitHub 138148481d V14: Add information to tree items (#14301)
* Add variant information to the document tree model

* Add content type key to document tree and item

* Add sort order to PropertyTypeResponseModelBase
2023-05-30 11:00:22 +02:00
Jacob Overgaard 3c3ab83411 update backoffice submodule 2023-05-26 16:10:36 +02:00
Jacob Overgaard 2d7a62eac5 update backoffice submodule 2023-05-26 11:22:59 +02:00
Bjarke Berg b9c0e18fb1 Merge remote-tracking branch 'origin/v12/dev' into v14/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Delivery/Services/ApiContentQueryService.cs
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryProvider.cs
#	src/Umbraco.Core/DeliveryApi/IApiContentQueryService.cs
#	src/Umbraco.Core/DeliveryApi/NoopApiContentQueryService.cs
2023-05-25 14:51:28 +02:00
Bjarke Berg 32b3b3b4a0 Updated version number 2023-05-25 13:35:11 +02:00
Bjarke Berg e04bb9d18d Fix tests by updating OpenApi.json 2023-05-25 12:34:26 +02:00
Jacob Overgaard b245f319d9 update backoffice submodule 2023-05-25 11:20:16 +02:00
Bjarke Berg 803e1be7dd Add PKCE to swagger.. Missing after refactor 2023-05-25 11:04:02 +02:00
Bjarke Berg b5ed4ea43a Rename the security definition as this is only for users.. 2023-05-25 11:03:56 +02:00
Bjarke BergandGitHub 28712bd5cd Make new backoffice packable (#14286)
* This moves around files and deletes the temp projects with files that are not moved to Core, Infrastructure etc.

Also moves the from new backoffice to static access, and override those with the old views in the legacy executeable

* Removes old files from the new executeable.

* Added missing files

* Added EF Core project to solution file

* fix build
2023-05-25 10:38:44 +02:00
714cf374f0 Management API: Property editor temporary file handling (#14244)
* Use new temporary files handling for property editors

* Add compat suppressions

* Add missing compat suppressions

* Don't discard valid file upload values

* Rename cuid and puid to contentKey and propertyTypeKey

* Update src/Umbraco.Infrastructure/PropertyEditors/MediaPicker3PropertyEditor.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Fetch user async + remove unnecessary dependency

---------

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2023-05-24 12:31:19 +02:00
Jacob Overgaard fc0e2cbf00 update backoffice submodule 2023-05-23 13:08:56 +02:00
Bjarke Berg b4e7d55e4d Align versions 2023-05-23 12:29:56 +02:00
Bjarke Berg 8f5f7f72fa Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	version.json
2023-05-23 12:23:27 +02:00
Jacob Overgaard 38aacfc30a update backoffice submodule 2023-05-22 13:27:56 +02:00
Jacob Overgaard c5f1af8adc update backoffice submodule 2023-05-17 11:11:37 +02:00
Andreas ZerbstandGitHub ac0f76f162 Changed so we are checking if the FolderExits (#14196) 2023-05-15 09:05:22 +02:00
Bjarke Berg f2def5307c Fix build 2023-05-15 09:02:53 +02:00
Bjarke Berg 979e023d73 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Content/blockGridEditorAdvanced.spec.ts
2023-05-15 08:51:50 +02:00
Bjarke Berg ebbd3f0e51 Compatibility files 2023-05-12 12:33:03 +02:00
Bjarke Berg 2922c1fc92 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Common/DependencyInjection/UmbracoBuilderApiExtensions.cs
#	src/Umbraco.Cms.Api.Delivery/Controllers/DeliveryApiControllerBase.cs
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Web.Common/Configuration/ConfigureApiVersioningOptions.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Tabs/tabs.spec.ts
2023-05-12 11:42:15 +02:00
Jacob Overgaard efe03d328a update backoffice submodule 2023-05-11 10:00:10 +02:00
MoleandGitHub f615e7bcfc Only consider alias duplicate if the key matches (#14169) 2023-05-09 10:46:31 +02:00
Bjarke Berg 0391c1d0c7 Merge remote-tracking branch 'origin/v13/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Common/Configuration/ConfigureApiExplorerOptions.cs
2023-05-09 09:21:36 +02:00
Bjarke Berg 5dd945f372 Reintroduced management api after v12 merge 2023-05-09 09:21:16 +02:00
Bjarke BergandGitHub 417e92dad0 Updated API version package and moved attribute to each controller (#14209)
* Updated API version package and moved attribute to each controller as it cannot be inherited.

* Ignore "$type" on types implementing interfaces in the delivery api
2023-05-09 08:38:07 +02:00
Bjarke Berg 6ce895e9ac Cherry picked removal of management api and rolled back. 2023-05-08 17:44:44 +02:00
Bjarke Berg 839999e76f Ensure no management api for v12 (#14197)
* Remove management api

* Remove actual files

And rolled both back again
2023-05-08 17:42:43 +02:00
Jacob Overgaard 25df33b9c1 update backoffice submodule 2023-05-08 15:58:00 +02:00
Jacob Overgaard 6bab6e8a0d update backoffice submodule 2023-05-08 09:42:44 +02:00
MoleandGitHub a5744c50ae Merge pull request #14206 from umbraco/v13/bugfix/rename_usergroup_controller
New Backoffice: Rename UserGroup Controllers
2023-05-04 11:22:47 +02:00
Nikolaj 0a64ac5485 Update OpenApi 2023-05-04 10:42:00 +02:00
Nikolaj f71a4fa968 Rename SaveUserGroupRequestModel to CreateUserGroupRequestModel 2023-05-04 10:09:39 +02:00
Nikolaj abdfcf4e14 Rename UserGroupPresentationModel to UserGroupResponseModel 2023-05-04 10:02:07 +02:00
Jacob Overgaard d6aa10cc55 update backoffice submodule 2023-05-02 10:41:41 +02:00
Jacob Overgaard cced44a72f update backoffice submodule 2023-04-28 10:23:22 +02:00
b411452f79 New backoffice: Add new codefile controllers and services (#14157)
* Add scaffolding

* Entities not Entitys

* Remove unececary obsoleted constructor

* Implement create script

* Return a simplified ScriptFile instead of IScript

That file abstraction seems way too bloated, containing a lot of stuff that's not relevant for files, such as IDs and keys.

* Use IScript instead of custom return model

* Add validation when creating script

* Add Get script endpoint

* Add response types

* Add Delete

* Throw if user key not found

* Remove unused maapper

* Add update endpoint

* Add Get by path

* Add create folder endpoint

* Don't pass performingUserId to folder creation

* Remove update folder

* Add delete folder endpoint

* Use specific ScriptFolderOperationStatus instead of ScriptOperationStatus

* Add OperationStatusResult

* Check folder for invalid name

* Check name for invalid characters

* Add partial view snippet endpoint

* Start working on CreatePartialView

* Add create partial view endpoint

* Retrieve key from audit method

* Add operation status results

* Add Get endpoint

* Return 201 when creating

* Add update partial view endpoint

* Add delete endpoint

* Add response types

* Add folder base implementation

* Add folder endpoints

* User property for allowed file extensions

* Rename async method to async

* Break snippet into endpoint in two

* Make content non-nullable

* Remove IService

* Add get by path

* Add viewmodels

* Add create and update models

* Add create stylesheet

* Add update endpoint

* Rename StylesheetControllerBase to StylesheetControllerBase

* Add stylesheet delete

* Rename controller bases

* Add stylesheet folders

* Add status results

* Add response types to folders

* Add richtext rules endpoints

* Add Get all endpoint

* Add get rules by path endpoint

* Aling validates so they're not async

These are private methods, so there's no reason to make them preemptively async

* Add template obsoletions to interface

* Add stream methods

This is evidently used by deploy 🤷

* Obsolete stylesheet operations

* Add get and getall across all services

* Obsolete script operations

* Obsolete old partial view methods

* Add some method docs

* Add compatibility suppression

* Update OpenApi.json

* Rename action

* formatting

* Fix import

* add expression body

* Invert if

* Move base on own line

* Rename file

* Rename to all

* Change to stylesheet instead of script

* Add Umbraco.Code.MapAll to map definitions

* Add comment about auditing

* use publish cancelable async

* use expression body

* formatting

* fix to use pattern matching

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-04-26 13:47:47 +02:00
Jacob Overgaard 17fef47450 backoffice submodule update 2023-04-26 08:07:06 +02:00
Jacob Overgaard 2ce9e338dc update backoffice submodule 2023-04-25 16:23:20 +02:00
Bjarke Berg bde0714b34 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockGridEditor/Document/BlockGridEditorInDocument.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/BlockListEditor/blockListEditorContent.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Languages/languages.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/mediaFiles.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/mediaSection.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/ModelsBuilder/modelsbuilder.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/partialViews.spec.ts
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Tour/tours.spec.ts
2023-04-25 15:46:10 +02:00
Kenn JacobsenandGitHub d98f635eed Fix DataValueEditor configuration handling + update naming to be more explicit (#14104) 2023-04-25 15:32:29 +02:00
MoleandGitHub d96346313e Return created from invite (#14158) 2023-04-25 14:19:31 +02:00
MoleandGitHub dfa7eff7c2 New backoffice: Fix typo on user model (#14154)
* LastLockoutDate not LastlockoutDate

* Update open api
2023-04-25 10:58:38 +02:00
Kenn JacobsenandGitHub 57377a8f7a Make Block Grid and Block List use System.Text.Json instead of Json.NET (#14125)
* Make block grid and block list use System.Text.Json instead of Json.NET

* Add compat suppressions

* Move block editor models to Core
2023-04-25 10:48:48 +02:00
MoleandGitHub 2e23c81677 New backoffice: Updated missed controller paths (#14130)
* Updated missed controller paths

* Update openapi
2023-04-24 15:22:42 +02:00
f3df3e600f Only add non default version to operation id (#14146)
* Only add version to operationId when the version is not the default version

* Updated OpenApi.json

* A little code formatting

* Update OpenAPI JSON so the tests pass

---------

Co-authored-by: kjac <kja@umbraco.dk>
2023-04-24 14:15:36 +02:00
Jacob Overgaard db70750bba add picker-input importmap 2023-04-20 14:39:24 +02:00
38947e0870 Added functionality to split det swagger doc into multiple definitions (#14126)
* Added functionality to split det swagger doc into multiple definitions. Most (maybe too much) is still shared between the apis.

* Fixed issue with duplicate operation ids when we have multiple versions of an endpoint

* use strong types instead of var

* Updated OpenApi.json

* Formatting

* formatting

* Delete old files that is not implemented in api.common

* Updated openAPi after merge

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-04-20 12:38:31 +02:00
518bb60a45 New backoffice: Use singular name for user and user group controllers (#14121)
* Rename UsersController to UserController

* Rename namespace to User

* Rename UserGroupsControllerBase to UserGroupControllerBase

* Rename namespace to UserGroup

* New backoffice: User and member item endpoints (#14079)

* Implement ByKeys in MemberService

* Implement member item endpoint

* Add routing to static file item controller

* Implement user item endpoint

* Implement user group item endpoint

* return proper response model

* update OpenApi.json

* Add CompatibilitySuppressions

* Cleanup

* Update OpenApi

---------

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

* Make user-group item endpoint singular

* Make user item endpoint singular

* Renamer user and user group folders

* Move from Users namespace to user

* Move from UserGroups namespace to UserGroup

* Update OpenApi.json

* Fix namespace after merge

* Move user item endpoint to singular namespace

* Move user group item endpoint to singular namespace

* Fix open api schema

---------

Co-authored-by: Nikolaj Geisle <70372949+zeegaan@users.noreply.github.com>
Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-04-20 09:40:48 +02:00
Andreas ZerbstandGitHub b43d3ff98e Updated so it now shows the parentId instead of null (#14123) 2023-04-20 09:11:35 +02:00
7b62fb282f Dedicated cookie setup for new backoffice login (#14122)
* Add a dedicated (temporary) cookie setup for new backoffice logins, so old and new backoffice can co-exist behind separate logins

* use temp management api login endpoint for authentication

* Update OpenAPI JSON

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2023-04-19 13:32:11 +02:00
Bjarke Berg fff393c9ed Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
2023-04-19 11:42:01 +02:00
cb682e2f3e New backoffice: User and member item endpoints (#14079)
* Implement ByKeys in MemberService

* Implement member item endpoint

* Add routing to static file item controller

* Implement user item endpoint

* Implement user group item endpoint

* return proper response model

* update OpenApi.json

* Add CompatibilitySuppressions

* Cleanup

* Update OpenApi

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Elitsa <elm@umbraco.dk>
2023-04-19 09:43:01 +02:00
MoleandGitHub cbb8f62457 Fix iso code validator (#14107) 2023-04-17 15:23:34 +02:00
861b883d29 Throw from IUserIdKeyResolver if id/key not found. (#14101)
* Throw from IUserIdKeyResolver if id/key not found. This is too critical to not throw.

* Fixed tests

* Explicitly test that we can resolve super user key/ID from their counterparts

---------

Co-authored-by: kjac <kja@umbraco.dk>
2023-04-14 12:03:25 +02:00
Bjarke Berg d625fee1ad Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/Migrations/MigrationPlanExecutor.cs
#	src/Umbraco.Infrastructure/Migrations/UnscopedMigrationBase.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationPlanTests.cs
remove double request to get init status
2023-04-14 10:35:30 +02:00
c2af43d9d9 Copy and move API for content and media (#14040)
* Copy and Move API for Content and Media

* Update OpenAPI JSON schema

* Update OpenApi JSON file after merge

* Rename key to id

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-04-14 09:44:52 +02:00
Jacob Overgaard a188844a68 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-04-13 15:52:17 +02:00
Jacob Overgaard d01c95b3d5 simplify return url 2023-04-13 15:52:10 +02:00
Jacob Overgaard b8813aed3d set the path of the login page to /<backofficeurl>/login 2023-04-13 15:51:56 +02:00
Jacob Overgaard 5b94b3051f update temp login page to handle a POST to the authentication url and handle the returnUrl 2023-04-13 15:51:19 +02:00
f26e5d12a0 Management API: Data type or property is used endpoints (#14078)
* Added is-used endpoints

* Updated CompatibilitySuppressions.xml

* Minor cleanup

* Fix issue where only document types was supported. Now also media and member types is supported

* CompatibilitySuppressions.xml

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-04-13 14:58:16 +02:00
Jacob Overgaard 7be31a5305 update backoffice submodule 2023-04-13 11:23:10 +02:00
Jacob Overgaard a7c082e522 ignore umbraco-package-schema.json 2023-04-12 14:43:46 +02:00
MoleandGitHub f32dcb0823 V13: Ensure Predictable User-Group Keys (#14075)
* Add user group keys to constants

* Update migration to assign the right keys

* Update DataCreator

* Fix FIXME with removing ExcludedUserGroupAliases

* Obsolete group aliases
2023-04-12 11:22:50 +02:00
0f1e7f64ff New backoffice: Tag controller (#14072)
* Implement ByQueryEndpoint

* Implement new async methods on tag service

* dont have nullable query

* Formatting

* Add default implementation to interface

* Allow nullable query in api

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-04-12 09:39:02 +02:00
Jacob Overgaard 507102348d update backoffice submodule 2023-04-12 09:20:42 +02:00
Andreas ZerbstandGitHub bd0fd4237b Removed the acceptance tests from v13 (#14073)
* Removed the acceptance tests from v13

* commented out the pipeline for e2e tests because there are no test left
2023-04-11 15:34:59 +02:00
Bjarke Berg b6c16afeea Fix OpenApi.json 2023-04-05 13:45:51 +02:00
Bjarke Berg b34b1906de Rename key to id 2023-04-05 13:43:54 +02:00
Jacob Overgaard ee1cac68e8 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-04-05 13:18:03 +02:00
Jacob Overgaard 4ead24edc9 add importmap to installer 2023-04-05 13:17:14 +02:00
9fadb3a926 V13: Entity viewports (#14050)
* Add language entity

* Refactor LanguageEntities

* Rename ItemsLanguageController.cs to ItemsLanguageEntityController.cs

* Change route to match old pattern

* Implement datatype item endpoint

* Rename controllers to item instead of entity

* Implement dictionary item endpoint

* Add DocumentItemControllerBase.cs

* Implement ItemDocumentItemController.cs

* Implement documnent-type controller

* Implement media type controller

* Move to item folder

* Implement MemberGroupItem viewport

* Implement member type item viewport

* Implement partial view viewport

* Implement partial view viewport

* Implement Relation type viewport

* Implement script items endpoint

* Refactor FileItemPresentationModelFactory

* Implement StaticFile viewport

* Implement stylesheet viewport

* Implement template item viewport

* Fix up routing

* Implement taking start nodes into account

* Implement filtering by culture too

* Delete old endpoints

* Implement document blueprint endpoint

* Implement media item viewport

* remove unneccesary $

* add fixme comment

* Fix response moedl

* update OpenApi.json

* Update OpenApi.json

* Update openapi file

* filter languages på isocode

* Change to sorted set to avoid duplicates

* Implement GetMultipleAsync for ILanguageService

* Fixed issue with params from GET needs to be querystring

* Removed Icon from base and only return Icon if explicitly set

* Fixed openAPI spec

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-04-05 12:50:41 +02:00
21b0a7ffae New Backoffice: Fix feedback to users controller (#14031)
* Add specific not found results

* Add tests for the enable/disable not found tweak

* Cache ids and key in UserIdKeyResolver

* Don't cache null keys

* BackOffice not Backoffice

* Move fetching the user out of the ChangePasswordUsersController

* Move resolving user out of SetAvatar

* Move resolving user out of Update

* Return more specific notfound in bykey

* Use ErrorResult for all endpoints with unknown errors

* Split integration tests

* Add mappers

* Use ?: consistently

* Add reuseable iso code validator

* Validate ISO code

* Update supressions

* Use method from base to get current user key

* Rename ISo to Iso

* Use keys in services instead of user groups + Added a couple of new validations

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-04-04 15:41:12 +02:00
Bjarke BergandGitHub 6313b8b3a1 Changed "Key" to "Id" in management API (#14045) 2023-04-04 13:20:29 +02:00
Bjarke Berg c8f4ae2e29 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-04-04 09:25:39 +02:00
Jacob Overgaard dbbfc0c69e add https support for development CORS 2023-04-03 14:58:37 +02:00
b981f53254 Fix key names to id and allow sending id on create for datatypes (#14035)
* Changed some keys to ids and fixed so users can provide Ids when creating

* updated OpenApi.json

* Fixed issue with datatypes when wrong propertyEditorAlias was used and allow creating with key

* Updated OpenApi.json

* Handle duplicate names correct

* Fix for parent not found

* Handle if parent is not a container

* Update CompatibilitySuppressions

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-03-31 13:59:44 +02:00
Bjarke Berg 1f83e9ab19 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-03-29 11:08:53 +02:00
Kenn JacobsenandGitHub fd3bb0fcb8 Add content notifications API (#14010) 2023-03-29 10:48:30 +02:00
9b626d02c8 New backoffice: User controller (#13947)
* Add UserResponseModel

* Add factory to created UserResponseModel

* Add GetByKey controller

* Add GetAllUsers endpoint

* User proper response model

* Make naming consistent

* Order by username in GetAll

* Add user filter endpoint

* Fix includer user states

* Remove gravatar from the backend

* Send user avatars in response

* Add create user model

* start working on create

* Validate the create model

* Add authorization to create

* Use UserRepository instead of UserService to ValidateSessíonId

* Create IBackofficeUserStore interface

This is essentially a core-friendly version of the BackOfficeUserStore, additionally it contains basic methods for managing users, I.E. Get users, save users, create users, etc.

* Remove more usages of user service

* Remove usages of IUserService in BackofficeUserStore

* Add documentation

* Fix tests and DI

* add IBackOfficeUserStoreAccessor to resolve it in singleton services

* Resolve circular dependency

* Remove obsolete constructor

* Add core friendly user manager

* Finish createasync in user service

* Add WIP create endpoint

* Save newly creates users user groups

* Use service scope for user service

* Remove now unnecessary accessors

* Add response types

* Add update user endpoint

* Add EmailUserInviteSender

* Add technology free way of creating confirmation token

* Add invite uri provider

* Add invite user to user service

* Add invite user controller

* Add delete endpoint

* Add operation status responses

* Add operation status responses

* Added temporary file uploads including a repository implementation using local temp folder.

* Add Disable users endpoint

* missing files

* Fixed copy paste error

* Fix create users return type

* Updated OpenApi.json

* Updated OpenApi.json

* Handle if created failed in identity

* Add enable user

* Make users plural in enable/disable

We're doing the operation on multiple entities

* Added file extension check

* Add unlock user endpoint

* Clean up. Removed old TemporaryFileService and UploadFileService and updated dictionary items to use this new items

* Clean up

* Add reset password

* Add UpdateUserGroupsOnUsers method

* Add UpdateUserGroups

* Get rid of stream directly on TemporaryFileModel, and use delegate to open stream instead.

* Fix post merge

* Use keys instead of IDs

* Add ClearAvatar endpoint

* Review changes

* Moved models to their own files

* Reverted launch settings

* Move enlist extension to its own namespace

* Create set avatar endpoint

* Add reponse types

* Remove infrastructure extension after merge

* Add Cmapatibility suppressions

* Add test suppression

* Add integration tests

* Fix issue found in tests

* Add invited user to UserInvitationResult

* Add more tests

* Add update tests

* Hide different tests under parent

* Return DuplicatUserName user operation status if username matches an email

* Add update tests

* Change sorted set to HashSet

It doesn't work if it's not IComparable

* Change ID to Key when checking super

* Add get tests

* Add more GetAllTests

* Move tests to the right namespace

* Add filter test

* Fix including disabled users bug found by test

* Add test to ensure invited user state

* Add test case for UserState.All

* Add more filter tests

* Add enable disable tests

* Add resolver for keys and ids

* Replace usages of IUserService with IUserIdKeyResolver

* Add CompatibilitySuppressions

* Add UserIdKeyResolverTests

* Fix UserIdKeyResolver

* Add missing user operation results

* Updates from review

* ID not key

* Post instead of patch

* Use set instead of params for enable/disable

* Don't call to array

* Use sets for usergroup keys and user keys instead

* LanguageIsoCode instead of Language

* Update CompatibilitySuppressions after changin enumerable to set

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
Co-authored-by: kjac <kja@umbraco.dk>
2023-03-29 08:14:47 +02:00
kjac 313eed96b9 Revert "Add content notifications API"
This reverts commit 8202879ba7.
2023-03-27 07:55:55 +02:00
kjac 8202879ba7 Add content notifications API 2023-03-27 07:55:18 +02:00
af24f304be New Backoffice: Fix total number of items (health checks, log viewer, packages) (#14003)
* Fix total number of items for health check controllers

* Fix total amount of items for log viewer controller

* Fixing AllMigrationStatusPackageController

* Fixing total items for package controllers

* Adding default implementation

* Update Nerdbank.GitVersioning dependency to 3.5.119

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
2023-03-24 11:47:59 +01:00
Jacob Overgaard 91d4389d2c add router lib to importmap 2023-03-24 11:01:33 +01:00
Jacob OvergaardandGitHub 03f1ff65fe V13: build new backoffice on Azure (#14005)
* add build scripts for new BO so it doesn't run through msbuild

* add node config for max_old_space_size to increase allowed heap size
2023-03-24 10:19:42 +01:00
Jacob Overgaard 5e721da35e bump memory for node.js builds 2023-03-22 16:05:49 +01:00
Jacob Overgaard 7bc5e0e3a1 update backoffice git submodule 2023-03-22 16:00:48 +01:00
Jacob Overgaard 458229a6ee update backoffice git submodule 2023-03-22 15:46:44 +01:00
93da4371e3 V13: Rework attempt pattern to use userkey (#13964)
* Add default super user key to migrations

* Start refactoring all interfaces signatures with ids

* Refactor datatype service to use userKey pattern instead

* Refactor ContentEditingService to use userkeys

* Refactor services to userKey

* Refactor more services to use userkey instead of id

* Refactor RelationService to use userKeys

* Refactor template service to use keys instead of ids

* Refactor fileservice to use keys instead of ids

* Refactor LocalizationService to use keys instead of ids

* Refactor PackagingService to use keys instead of ids

* Refactor TemplateController to use current user keys

* Refactor DataTypeContainerService.cs

* Refactor DataTypeService to use keys instead of ids

* Fix up tests

* Fix up media editing service to use userkey instead of ID

* Update service ctor to avoid ambigious ctors

* refactor DataTypeService

* Refactor DataTypeService to not have a default value for parentKey

* Apply suggestions from code review

Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>

* Update comment

* Add suppression file

* Add backoffice CompatibilitySuppressions

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Elitsa Marinovska <21998037+elit0451@users.noreply.github.com>
2023-03-21 12:41:20 +01:00
Jacob Overgaard 8a8421c841 backoffice git submodule 2023-03-21 12:11:29 +01:00
Jacob Overgaard c26c00474c update importmap to reflect latest backoffice libraries 2023-03-21 12:11:19 +01:00
Bjarke Berg ec9b873fac Added CompatibilitySuppressions files 2023-03-20 09:55:40 +01:00
Bjarke Berg 03afef299d Added CompatibilitySuppressions files 2023-03-20 09:53:22 +01:00
Bjarke Berg 27103355a5 Post merge fixes 2023-03-20 09:37:11 +01:00
Bjarke Berg 8a99222e26 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Core/Routing/UmbracoRequestPaths.cs
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Web.BackOffice/Controllers/ContentController.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/ContentControllerTests.cs
2023-03-20 08:49:27 +01:00
835388ced0 Temporary files endpoints for management api (#13944)
* Added temporary file uploads including a repository implementation using local temp folder.

* missing files

* Fixed copy paste error

* Updated OpenApi.json

* Updated OpenApi.json

* Added file extension check

* Clean up. Removed old TemporaryFileService and UploadFileService and updated dictionary items to use this new items

* Clean up

* Get rid of stream directly on TemporaryFileModel, and use delegate to open stream instead.

* Review changes

* Moved models to their own files

* Reverted launch settings

* Update open API JSON file

---------

Co-authored-by: kjac <kja@umbraco.dk>
2023-03-16 08:25:15 +01:00
1e4c17a5f9 V13: Add default superuser key (#13955)
* Add default super user key to migrations

* Minor tweaks

* Obsolete superuser id

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-03-15 10:32:00 +01:00
Kenn JacobsenandGitHub 4fb011e0fc Domains and hosts API (#13963)
* API for domains and hostnames incl. unit tests

* Update Open API json

* Update other unit tests to use new domain service methods where applicable

* Fix merge + update models to new naming scheme

* Handle attempts to add the same domain twice + unit tests for duplicate domain handling

* Review fixes
2023-03-15 10:28:23 +01:00
Jacob Overgaard ea1402de52 update git submodule 2023-03-15 08:06:22 +01:00
Jacob Overgaard 28e41f7cdc update git submodule 2023-03-14 12:52:00 +01:00
Jacob Overgaard 4d24312fe2 update git submodule 2023-03-13 15:32:23 +01:00
Jacob Overgaard 3b49e34e79 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-03-13 15:32:10 +01:00
Jacob Overgaard 6878334c3e add notification as separate library 2023-03-13 15:32:01 +01:00
5ac0087013 Rename data to values (#13892)
* Rename data to values

* Rename data to values

* Update OpenApi.json

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-03-13 15:03:54 +01:00
Kenn JacobsenandGitHub c0975f341c CRUD API for media + get-by-id for media type (#13934)
* CRUD API for media + get by ID for media types

* A little housekeeping for documents (align with media)

* Update Open API json

* Add messages to NotFound results (both content and media)

* Review changes; use same model for content and media URLs + return bad request when trying to move something to trash that is already in trash

* Fix bad merge + rename base (response) classes appropriately between both media and content types
2023-03-13 15:02:30 +01:00
Jacob Overgaard 8df3bca5fe git submodule update 2023-03-13 11:50:06 +01:00
5107375cd8 V13/feature/rename viewmodels to request response (#13952)
* Rename DocumentType/ContentType models

* Rename all viewmodels

* Rename factories

* Update OpenApi.json

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-03-13 10:49:21 +01:00
Jacob Overgaard 44bbf48540 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-03-13 09:57:27 +01:00
Jacob Overgaard 22937cb550 optimise importmaps 2023-03-08 14:23:46 +01:00
Andreas ZerbstandGitHub 4d6e1e9531 Removed test file because the test are broken (#13924)
* Removed test file because the test are broken

* Removed outdated failing tests
2023-03-08 14:04:59 +01:00
Bjarke Berg 381c0e0978 Fixed issue with serializing structured values from serilog. 2023-03-08 13:30:58 +01:00
Bjarke Berg de6df01485 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-03-08 11:12:21 +01:00
1b8ce54e49 Remove Json.NET dependencies for more property editors (#13912)
* Make the Tags property editor JSON serialization agnostic

* Make the Multiple Value editor JSON serializer agnostic

* Make Media Picker 3 value converter work with System.Text.Json instead of Json.NET

* Make Image Cropper value converter work with System.Text.Json instead of Json.NET

* Remove Json.NET dependencies from ImageCropperTemplateExtensions

* Update src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Infrastructure/PropertyEditors/ImageCropperPropertyValueEditor.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Infrastructure/PropertyEditors/MediaPicker3PropertyEditor.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Infrastructure/PropertyEditors/TagsPropertyEditor.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Infrastructure/PropertyEditors/TagsPropertyEditor.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Update src/Umbraco.Infrastructure/PropertyEditors/TagsPropertyEditor.cs

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

---------

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-03-07 14:31:27 +01:00
Jacob Overgaard 3b77debbfb update git submodule 2023-03-03 11:29:05 +01:00
Jacob Overgaard 25ac2253b5 Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-03-02 14:51:09 +01:00
Jacob Overgaard 7316a0e82c add importmap to Default.cshtml 2023-03-02 14:50:51 +01:00
Nikolaj GeisleandGitHub f3ca18ccbf Apply skip take after (#13903) 2023-03-02 14:09:22 +01:00
Jacob Overgaard cbfa841413 add gitignore stuff from old executable 2023-03-02 13:52:35 +01:00
Bjarke Berg d53ecc16dd Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Media/mediaSection.spec.ts
2023-03-02 08:50:05 +01:00
27ca36db53 V13: relation type controller (#13856)
* Create RelationTypeControllerBase.cs

* Implement ByKey endpoint

* Move controllers

* Implement ByRelationTypeKeyRelationController

* Refactor relation service to use skip/take in interface

* change httpget

* Implement object types endpoint

* Add ObjectTypeViewModelFactory.cs

* Change signature to IActionResult

* Implement CreateRelationTypeController.cs

* Implement CreateRelationTypeController.cs

* Add optional key parameter to RelationType

* Add optional key to RelationTypeSavingViewModel

* Update ProducsResponseType

* Implement UpdateRelationTypeController

* Update routes

* Implement DeleteRelationTypeController

* Remove key from UpdatingViewmoDel

* Implement UpdatingViewModel factory method

* Update relationType factory

* Fix paging for object types

* Implement CreateAsync

* Update create action to use CreateAsync

* Implement update async

* Add default implementations to avoid breaking changes

* actually use userIds

* Add ProducesResponseType status 400 to endpoints

* Implement new DeleteAsync method

* Update OpenApi.json

* Add mapping to DI

* Update 404 to return proper HTTP status

* Add not found to ByKey action

* Rename viewmodels to request/response

* Update OpenApi.json

* All RelationServiceTests.cs

* Add allowed object types test

* Fix grouping

* Implement AllowedRelationObjectTypesService.cs

* Refactor view model factory to use new service

* Implement non-happy path tests

* Implement allowed child/parent object types

* refactor test to return proper relationTypeOperationStatus

* Add can create relation type with key

* Add Id test

* formatting

* Refactor service to have validation logic in save method

* move object types endpoint to own silo

* Delete unused using

* Update OpenApi.json

* Update OpenApi.json

* Update tests to user proper child/parent

* Implement RelationTypeBaseModel

* Update OpenApi.json

* Use array instead of enumerable

* Rename view model factory to presentation factory

* Rename GetPagedByRelationTypeKey

* Rename IRelationViewModelFactory

* Rename IRelationTypeViewModelFactory

* Update error description

* Update OpenApi.json

* Update OpenApi.json

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-03-01 08:51:17 +01:00
Bjarke BergandGitHub a00421602e Merge pull request #13891 from umbraco/v13/feature/content-create-update-delete
Create/update/delete API for Document
2023-02-28 16:00:48 +01:00
Bjarke BergandGitHub 1d8941cf28 Merge pull request #13884 from umbraco/v13/feature/extension-model
Add extension model for new backoffice
2023-02-28 10:26:26 +01:00
b9ffd01f69 Update src/Umbraco.Core/Configuration/Models/PackageManifestSettings.cs
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-28 09:43:00 +01:00
kjac 0f95dbbfa6 Review changes and fixes 2023-02-28 08:36:48 +01:00
459e6f5421 Update src/Umbraco.Infrastructure/Manifest/PackageManifestReader.cs
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-28 08:01:17 +01:00
b5de843b84 Update src/Umbraco.Infrastructure/Manifest/PackageManifestService.cs
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-28 07:55:10 +01:00
Bjarke Berg 8bce0074c0 Merge branch 'v13/dev' into v13/feature/content-create-update-delete 2023-02-28 07:51:24 +01:00
Jacob Overgaard 7535576edf update git submodule 2023-02-27 14:43:16 +01:00
Jacob Overgaard 95a56238c9 update git submodule 2023-02-27 14:42:49 +01:00
kjac 51bb7b01bd Update open API JSON with renamed model names 2023-02-27 11:28:26 +01:00
kjac 207c1b6dde Rename ViewModel to ResponseModel + rename ViewModel factory to Presentation factory 2023-02-27 11:27:26 +01:00
kjac 9152d05613 Update open API JSON 2023-02-27 11:19:17 +01:00
kjac 34fa4aa5fc Clean up models 2023-02-27 09:25:35 +01:00
kjac 7d15e6d5ea Merge branch 'v13/dev' into v13/feature/content-create-update-delete 2023-02-27 08:42:13 +01:00
5e90fa26c1 V13: Add parentkey to notifications (#13832)
* Add parent key to CopyingNotification

* Use parentkey on notifications

* Implement ParentKeys for Copying notification

* Obsolete parentId

* Implement MoveToEventInfoBase

* Refactor MovingToRecycleBinNotification to use the new MoveEVentInfoBase

* Refactor MediaMovingToRecycleBinNotification

* Refactor MovedToRecycleBinNotification to use new MoveEventInfo

* Refactor ContentMovedToRecycleBinNotification to use new MoveEventInfo

* Start implementing parent key in moveinfo

* Add FIXME's to move methods

* Refactor Move to get parentKey for descendants

* Add FIXME for move method

* Use MoveToRecycleBinEventInfo in RelateOnTrashNotificationHandler

* Add fixme's to DataTypeRepository

* Add obsolete messages

* Revert changes in ContentTypeServiceBaseOfTRepositoryTItemTService.cs

* Fix bad indentation

* Pass the recursive variable

* Revert changes in ContentService.cs

* Refactor MoveEventInfo to not duplicate equals method

* Refactor Equals to not duplicate code

* Add UnitTests of Equals

* make equals public and add non-happy path tests

* Remvoe duplicate call to base

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-02-27 08:40:17 +01:00
kjac 502713fdbb Rename models as per new naming conventions + clean up duplicate models 2023-02-23 16:57:49 +01:00
kjac 9e8a0645cd Merge branch 'v13/dev' into v13/feature/content-create-update-delete 2023-02-23 16:50:19 +01:00
kjac 997f568303 Make the package manifest endpoint non-paginated 2023-02-23 16:49:20 +01:00
kjac 583b10562d Add missing compat suppression 2023-02-23 15:37:47 +01:00
kjac a70d76e4b5 Renamed controller for consistency 2023-02-23 15:37:15 +01:00
kjac e3b216c087 Re-apply missing legacy manifest renaming + re-generate compat suppressions after merge 2023-02-23 15:36:59 +01:00
kjac 5d2a90f974 Merge branch 'v13/dev' into v13/feature/extension-model
# Conflicts:
#	src/Umbraco.Cms.Api.Management/Controllers/Package/PackageControllerBase.cs
#	src/Umbraco.Cms.Api.Management/DependencyInjection/PackageBuilderExtensions.cs
#	src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs
#	src/Umbraco.Core/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/CompatibilitySuppressions.xml
#	src/Umbraco.Infrastructure/Serialization/ContextualJsonSerializer.cs
#	src/Umbraco.Web.BackOffice/CompatibilitySuppressions.xml
2023-02-23 15:28:44 +01:00
c2ecc8dc33 New Backoffice: Package controller (#13578)
* Adding migration to update the default GUID value of created packages

* Updating the GUID if it is the default value when a package is saved

* Adding PackageDefinitionViewModel for representing a package

* Adding a mapping for package representation

* Adding PackageControllerBase, GetAllCreated and GetEmpty endpoints

* Adding GetCreatedByKey endpoint

* Adding GetByKey implementation for created packages

* Include MapAll comment

* Adding Download package endpoint

* Saving created package endpoint

* Adding a factory to create a PackageDefinition from view model

* Cleanup

* Fix error message

* Check for duplicate package name

* Remove commented out DuplicateNameException

* Moving created packages to /created folder/base

* Implement delete endpoint

* Update OpenApi.json

* Fix package route

* Fix OpenApi.json

* Add Ok() around the result

* Create PackageBuilderExtensions

* Adding suppression changes

* Cleanup

* Use ProblemDetailsBuilder

* Extract collecting installed packages from package migration plans into its own method

* Use GetInstalledPackagesFromMigrationPlans to return all migration statuses

* Add Status to DictionaryControllerBase ProblemDetails

* Implement RunMigrationPackageController

* Adding more information to the log message

* Update OpenApi.json

* Change param name

* Fix OpenApi.json

* Fix response type for Log viewer endpoint

* Remove EmptyPackageController

* Rename to RunPendingPackageMigrations

* Introduce new PackageOperationStatus

* Making methods async and introducing new Create, Update and Delete methods

* Fix async calls

* Fix Mapper - multiple enumeration and cleanup

* Creating special action models

* Fixing the factory with new models changes

* Service implementation changes

* Removing SaveCreatedPackageController as the functionality is split between Create and UpdateCreatedPackageController

* Utilize the new DeleteCreatedPackageAsync

* Refactor DownloadCreatedPackageController as some responsibility is moved to the service

* Refactor PackagingService to use auditService

* Refactor PackagingService to use skip/take

* Refactor services to return pagedmodel

* Refactor controller to use new return value

* update OpenApi.json

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-02-23 14:36:21 +01:00
b96302a9da V13: Audit log controller (#13842)
* Implement AuditLogByTypeViewModel

* Add GetLogs endpoint

* Implement AuditLogViewModelFactory and use it

* Remove mapping and do that in ViewModelFactory

* Add Skip take pagination to AuditService.cs

* Get entity key from repository

* Only create filter if sincedate has value

* Refactor to handle enitity not being found

* Add by type route

* Rename AuditLogViewModel.cs

* Add CreateAuditLogWithUsernameViewModel method to factory

* Rename method in factory

* Fix up controllers to use async service

* Refactor to use pagedModel

* Update sincedate query

* Add FIXME

* Move entity call in scope

* Rename methods to async

* Update src/Umbraco.Core/PaginationHelper.cs

* Refactor to use IActionResult

* Audit log in two words

* Fix up by key

* Fix routing

* Fix ByType

* Update ByType routing

* Refactor to also pass DateStamp

* Add Key to WithUserNameViewModel

* Refactor extension method to call new GetAsync method

* use new GetAsync method

* Rename models and implement base class

* Update OpenApi.json

---------

Co-authored-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-02-23 11:32:24 +01:00
kjac 93149160a7 Make various value editors handle their respective data as concrete types rather than strings or otherwise strange legacy data formats 2023-02-23 09:12:10 +01:00
kjac 710ae3c788 Make the JSON object converter return generic lists of types whenever applicable - and JsonArray for JSON objects. 2023-02-23 09:09:08 +01:00
kjac 767e3cd9eb Add tests for content editing service 2023-02-23 07:31:05 +01:00
Bjarke Berg 37ac85ee96 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-02-23 07:18:25 +01:00
46cc9d6a97 V13: Add Guids to Users (#13868)
* Add MSSQL migration

* Make upgrade possible when user doesn't have a key yet

* Migrate SQLite

* Migrate the external login column

* Fix logging in after migration

* Handle fake GUID correctly

* Make GetByKey async

* Resolve external logins by key instead of id

* Remove usage of naive UserIdToInt

* Dont use ToGuid for property type defaults

* Use constant GUID for user groups

* Ensure that the same GUID is used to create the root user.

* Add migration for two factor logins

* Add default implementations

* Fix unit test

* Remove TODO

* Fix integration tests

* Add default implementation instead of throwing

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

* Make SQLServer migration idempotent

* Add comment about SQLite

* Fix typo

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-22 12:33:41 +01:00
kjac 95ec06e119 Fix model name clash in Swagger 2023-02-22 11:39:14 +01:00
kjac 6a0f6267f1 Add missing JSON converters to configuration editor serializer 2023-02-22 11:28:21 +01:00
Bjarke BergandGitHub f734f1fc6a Merge pull request #13861 from umbraco/v13/bugfix/fixed_profiling_endpoints
Fixed profiling status endpoints and added an update endpoint
2023-02-22 07:27:52 +01:00
Nikolaj 74f7ab4e1a Check if value is false consistently 2023-02-21 15:37:49 +01:00
Nikolaj 3608540d45 Use is false instead of negation 2023-02-21 15:35:36 +01:00
0619a7de41 Use keys for tracked references (#13849)
* Use Keys for tracked references instead of int id's.

* Updated OpenApi.json

* Handle filterMustBeIsDependency consistently

---------

Co-authored-by: Nikolaj <nikolajlauridsen@protonmail.ch>
2023-02-21 15:20:34 +01:00
kjac cf12b9540e Merge branch 'v13/dev' into v13/feature/content-create-update-delete
# Conflicts:
#	src/Umbraco.Cms.Api.Management/Controllers/Document/ByKeyDocumentController.cs
#	src/Umbraco.Cms.Api.Management/Controllers/Document/DocumentControllerBase.cs
#	src/Umbraco.Cms.Api.Management/DependencyInjection/DocumentBuilderExtensions.cs
#	src/Umbraco.Cms.Api.Management/Mapping/Content/ContentMapDefinition.cs
#	src/Umbraco.Cms.Api.Management/Mapping/Document/DocumentMapDefinition.cs
#	src/Umbraco.Cms.Api.Management/ViewModels/Content/ContentViewModelBase.cs
#	src/Umbraco.Cms.Api.Management/ViewModels/Content/VariantViewModelBase.cs
#	src/Umbraco.Cms.Api.Management/ViewModels/Document/DocumentViewModel.cs
#	src/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializer.cs
2023-02-21 14:07:36 +01:00
2eebd0558c Document and document type read API (#13853)
* Basic structure for document and document type read API

* Handle unpublished, non-variant content

* Expose content type key on ContentTypeSort

* Add the remaining properties to document type (minus list view info, still pending)

* Obsolete more ILocalizationService usage

* Add URLs and template data to document view model

* Clean up + add proprety type appearance

* update submodule commit

* front-end commit

* latest front-end commit

* latest commit

* latest front-end commit

* Rename content property to content value in view model layer

* Add contextual JSON serialization as default JSON serializer

* Add FIXME to content type sort + rearrange constructor parameters

* Fix broken remark tag

* Whitelist breakage for ContentTypeSort

* Add variance info to property type output

* Update src/Umbraco.Cms.Api.Management/Controllers/Document/ByKeyDocumentController.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

* Update src/Umbraco.Cms.Api.Management/Controllers/DocumentType/ByKeyDocumentTypeController.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

* Update src/Umbraco.Cms.Api.Management/Factories/ContentUrlFactory.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

* Add a few FIXME comments about async entity retrieval

---------

Co-authored-by: Niels Lyngsø <niels.lyngso@gmail.com>
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-21 13:40:41 +01:00
Bjarke Berg 14d9fe796a Fix test 2023-02-21 12:19:56 +01:00
Bjarke Berg ed25342311 Fixed tess 2023-02-21 11:28:21 +01:00
kjac d7ad194a5b Merge branch 'v13/dev' into v13/feature/content-create-update-delete 2023-02-21 09:47:44 +01:00
kjac ff90e2a865 Add async get method to content editing service 2023-02-21 09:46:23 +01:00
kjac 9b63d33b33 Merge branch 'v13/feature/content-and-content-type-read-api' into v13/feature/content-create-update-delete 2023-02-21 09:33:21 +01:00
kjac 8541919880 Add a few FIXME comments about async entity retrieval 2023-02-21 09:32:49 +01:00
6982b38ebd Update src/Umbraco.Cms.Api.Management/Factories/ContentUrlFactory.cs
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-21 09:22:19 +01:00
ee4bfa8f5a Update src/Umbraco.Cms.Api.Management/Controllers/DocumentType/ByKeyDocumentTypeController.cs
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-21 09:22:09 +01:00
c269ebc347 Update src/Umbraco.Cms.Api.Management/Controllers/Document/ByKeyDocumentController.cs
Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-21 09:22:00 +01:00
kjac a541e24508 Add variance info to property type output 2023-02-21 09:18:57 +01:00
Bjarke Berg be8f120851 Updated OpenApi.json 2023-02-20 15:08:29 +01:00
Bjarke Berg 0d29ad9333 Moved logic from all around into the repository 2023-02-20 14:42:12 +01:00
Bjarke Berg 0ce5a5bb29 Fixed nonodes page css 2023-02-20 14:25:58 +01:00
Bjarke Berg 3587172e02 Fixed and added profiling endpoints 2023-02-20 14:22:35 +01:00
kjac 51189febfb Make Multi URL Picker value editor able to utilize System.Text.Json 2023-02-20 11:09:57 +01:00
kjac 361db0ed3c Add create, update and delete (move to recycle bin) operations for Document 2023-02-20 11:08:22 +01:00
kjac e12fbdf5b7 Add Udi and GuidUdi support in JSON serializer 2023-02-20 11:05:56 +01:00
kjac ec46cbcd71 Make JSON object converter return JsonArray for arrays of JSON items 2023-02-20 11:04:57 +01:00
kjac df7cb851e8 Whitelist breakage for ContentTypeSort 2023-02-18 14:15:19 +01:00
kjac 6f726c3e67 Fix broken remark tag 2023-02-18 14:14:46 +01:00
kjac 0bc08e6a91 Add FIXME to content type sort + rearrange constructor parameters 2023-02-18 13:58:02 +01:00
kjac 323a1b731b Add contextual JSON serialization as default JSON serializer 2023-02-18 13:41:54 +01:00
Andreas ZerbstandGitHub 1f7874dfc8 Removed failing test (#13846) 2023-02-17 11:46:38 +01:00
Bjarke BergandGitHub 8d1218374f Merge pull request #13843 from umbraco/v13/feature/website_assets_directly_from_static_assets
V13: website assets directly from static assets
2023-02-17 10:02:39 +01:00
Bjarke Berg 889f87f2ae Added missing files and updated gitignore 2023-02-17 08:32:07 +01:00
Bjarke Berg 85436ee7c9 check out submodules too 2023-02-16 15:30:52 +01:00
Bjarke Berg 8f9c67ffee Handle static assets for the website directly in static assets project. These should not be build by the backoffice scripts as they are not owned by backoffice 2023-02-16 15:15:59 +01:00
Bjarke BergandGitHub d7ef924c32 Miniprofiler for v13 (#13841)
* Updated miniprofiler and added a few configurations

* added fixme

* Remove file that should not have been committed

* added ignore list. We check the entire path and ignore client requests anyway
2023-02-16 13:08:57 +01:00
Bjarke Berg a8b6eb714d Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-02-16 11:16:30 +01:00
5182f46bdb New Backoffice: User Groups Controller (#13811)
* Add key to UserGroupDto

* Fix renaming table in sqlite

The SqliteSyntaxProvider needed an overload to use the correct query

* Start work on user group GUID migration

* Add key index to UserGroupDto

* Copy over data when migrating sqlite

* Make sqlite column migration work

* Remove PostMigrations

These should be replaced with Notification usage

* Remove outer scope from Upgrader

* Remove unececary null check

* Add marker base class for migrations

* Enable scopeless migrations

* Remove unnecessary state check

The final state of the migration is no longer necessarily the final state of the plan.

* Extend ExecutedMigrationPlan

* Ensure that MigrationPlanExecutor.Execute always returns a result.

* Always save final state, regardless of errors

* Remove obsolete Execute

* Add Umbraco specific migration notification

* Publish notification after umbraco migration

* Throw the exception that failed a migration after publishing notification

* Handle notification publishing in DatabaseBuilder

* Fix tests

* Remember to complete scope

* Clean up MigrationPlanExecutor

* Run each package migration in a separate scope

* Add PartialMigrationsTests

* Add unhappy path test

* Fix bug shown by test

* Move PartialMigrationsTests into the correct folder

* Comment out refresh cache in data type migration

Need to add this back again as a notification handler or something.

* Start working on a notification test

* Allow migrations to request a cache rebuild

* Set RebuildCache from MigrateDataTypeConfigurations

* Clean MigrationPlanExecutor

* Add comment explaining the need to partial migration success

* Fix tests

* Allow overriding DefinePlan of UmbracoPlan

This is needed to test the DatabaseBuilder

* Fix notification test

* Don't throw exception to be immediately re-caught

* Assert that scopes notification are always published

* Ensure that scopes are created when requested

* Make test classes internal.

It doesn't really matter, but this way it doesn't show up in intellisense

* Add notification handler for clearing cookies

* Add CompatibilitySuppressions

* Use unscoped migration for adding GUID to user group

* Make sqlite migration work

It's really not pretty, square peg, round hole.

* Don't re-enable foreign keys

This will happen automatically next time a connection is started.

* Scope database when using SQLServer

* Don't call complete transaction

* Tidy up a couple of comment

* Only allow scoping the database from UnscopedMigrationBase

* Fix comment

* Remove remark in UnscopedMigrationBase as it's no longer true

* Add keys when creating default user groups

* Map database value from DTO to entity

* Fix migration

Rename also renamed the foreign keys, making it not work

* Make migration idempotent

* Fix unit test

* Update CompatibilitySuppressions.xml

* Add GetUserGroupByKey to UserService

* Add ByKey endpoint

* Add UniqueId to AppendGroupBy

Otherwise MSSQL grenades

* Ensure that languages are returned by PerformGetByQuery

* add POC displaying model

* Clean up by key controller

* Add GetAllEndpoint

* Add delete endpoint

* Use GetKey to get GUID from id

Instead of pulling up the entire entity.

* Add UserGroup2Permission table

* Fetch the new permissions when getting user groups

* Dont ToString int to parse it to a short

I'm pretty sure this is some way old migration type code that doesn't make any sense anymore

* Add new relation to GetDeleteClauses

* Persist the permissions

* Split UserGroupViewModel into multiple models

This is to make it possible to make endpoints more rest-ish

* Bootstrap create and update endpoints

* Make GetAllUserGroupController paged

* Add method to create IUserGroup from UserGroupSaveModel

* Add sanity check version of endpoint

* Fix persisting permissions

* Map section aliases to the name the frontend expects

This is a temporary fix till we find out how we really want to handle this

* Fix up post merge

* Make naming more consistent

* Implement initial update endpoint

* Fix media start node

* Clean name for XSS when mapping to IUserGroup

* Use a set instead of a list for permission names

We don't want dupes

* Make permission column nvarchar max

* Add UserGroupOperationStatuses

* Add IUserGroupAuthorizationService

* Add specific user group creation method to user service

* Move validating and authorizing into its own methods

* Add operation result to action result mapping

* Update create controller to use the create method

* Fix create end point

* Comment out getting current user untill we have auth

* Add usergroup service

* Obsolete usergroup things from IUserService

* Add update to UserGroupService interface

* User IUserGroupService in controllers

* User async notifications overloads

* Move authorize user group creation into its own service

* Add AuthorizeUserGroupUpdate method

* Make new service implementations internal and sealed

* Add update user

* Add GetAll to usergroup service

* Remove or obsolete usages of GetAllUserGroups

* Add usergroup service to DI

* Remove usage of GetGroupsByAlias

* Remove usages of GetUserGroupByAlias

* Remove usage of GetUserGroupById

* Add new table when creating a new database

* Implement Delete

* Add skip and take to getall

* Move skip take into the service

* Fixup suggestions in user group service

* Fixup unit tests

* Allow admins to change user groups they're not a part of

* Add CompatibilitySuppressions

* Update openapi

* Uppdate OpenApi.json

again

* Add missing compatibility suppression

* Added missing type info in ProducesResponseTypeAttribute

* Added INamedEntityViewModel and added on the relevant view models

* Fixed bug, resulting in serialization not being the same as swagger reported. Now all types objects implementing an interface, is serialized with the $type property

* updated OpenApi.json

* Added missing title in notfound response

* Typo

* .Result to .GetAwaiter().GetResult()

* Update comment to mention it should be implemented on CurrentUserController

* Validate that start nodes actually exists

* Handle not found consistently

* Use iso codes instead of ids

* Update OpenAPI

* Automatically infer statuscode in problemdetails

* Ensure that the language exists

* Fix usergroup 2 permission index

* Validate that group name and alias is not too long

* Only return status from validation

We're just returning the same usergroups, and this is less boilerplate code

* Handle empty and null group names

* Remove group prefix from statuses

* Add some basic validation tests

* Don't allow updating a usergroup to having a duplicate alias

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-16 09:39:17 +01:00
kjac 41fbaa2343 Merge branch 'v13/dev' into v13/feature/content-and-content-type-read-api 2023-02-16 09:27:35 +01:00
kjac e0c396afd6 Rename PluginConfiguration to PackageManifest + a little more legacy manifest renaming 2023-02-15 15:17:50 +01:00
kjac d2ed03a5d8 Rename old manifest stuff to legacy manifest 2023-02-15 14:58:10 +01:00
Bjarke Berg 808d563aa0 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs
2023-02-15 14:19:19 +01:00
kjac 04ea016293 Merge branch 'v13/dev' into v13/feature/extension-model 2023-02-15 14:06:15 +01:00
Bjarke BergandGitHub bf4e745b6a Updated OpenIddict to v4 (#13830)
* Updated OpenIddict to v4 and when through the migration guide.

(SetAuthorizationEndpointUris and SetTokenEndpointUris should not start with a leading / anymore)

* Fixed issue where the old backoffice did not build

* Fixed build

* Fake a change - hopefully npm can see the file now?

* try using npm install instead of npm ci

* Another trial

* remove build of old backoffice

* Oops build new backoffice - not the old

* rollback changes to static assets

* Foreach csproj file instead. Fix for breaking change in dotnet sdk 7.0.200
2023-02-15 13:56:45 +01:00
kjac e4223ef2de Use async telemetry report in ReportSiteTask 2023-02-14 19:08:21 +01:00
kjac 4087f7805e Rename ExtensionManifest to PluginConfiguration 2023-02-14 16:59:08 +01:00
Jacob Overgaard a04ae368c8 update git submodule 2023-02-14 15:43:35 +01:00
kjac 92e53c236e Rename extension file to umbraco-package.json 2023-02-14 14:22:23 +01:00
kjac ba87025de8 Cache manifests in service layer 2023-02-14 11:39:56 +01:00
kjac bdffbb49ae Add async caching extension methods 2023-02-14 11:39:39 +01:00
kjac 341db24ec0 Rename manifest reader method 2023-02-14 10:52:30 +01:00
kjac 51f2b6cd88 Rename content property to content value in view model layer 2023-02-14 10:47:16 +01:00
kjac 1868269905 Merge branch 'v13/dev' into v13/feature/content-and-content-type-read-api
# Conflicts:
#	src/Umbraco.Web.UI.New.Client
2023-02-14 10:33:51 +01:00
kjac bd61ac14e4 Add unit tests 2023-02-14 10:19:23 +01:00
Bjarke BergandGitHub 3e8247f324 add response location header for 201 (#13829)
* Fixed issues where we returned incorrectly 201 with CreatedResultViewModel

* Updated OpenAPI Spec

* Fixed OpenApi

* Added response header to swagger when 201 result

* Clean up
2023-02-14 09:48:09 +01:00
kjac b34f0280c5 Move System.Text.Json serializer to Infrastructure project 2023-02-14 07:03:25 +01:00
kjac eb0ec7bee8 Initial implementation for extension manifests 2023-02-13 19:03:58 +01:00
Kenn JacobsenandGitHub 620a673fa3 A little Monday cleanup (#13823)
* Introduce root key constant

* Do not enforce ProblemDetails on every non-success response from the API + remove invalid NotFoundResult response types from various endpoints

* Update OpenAPI JSON contract to reflect the new NotFound results
2023-02-13 15:16:21 +01:00
Jacob Overgaard 233be8dc8f update git submodule 2023-02-13 10:07:25 +01:00
Jacob Overgaard 66118e556a update git submodule 2023-02-13 09:06:15 +01:00
Niels Lyngsø 89a3243771 latest front-end commit 2023-02-10 16:29:16 +01:00
Niels Lyngsø fb47b02ed0 latest commit 2023-02-10 16:27:35 +01:00
Niels Lyngsø 84c6d3b204 latest front-end commit 2023-02-10 16:23:35 +01:00
Niels Lyngsø b70491a782 front-end commit 2023-02-10 15:28:39 +01:00
Niels Lyngsø 5722108454 Merge remote-tracking branch 'origin/v13/dev' into v13/feature/content-and-content-type-read-api 2023-02-10 15:17:02 +01:00
Niels Lyngsø 72c5ec696d update submodule commit 2023-02-10 15:16:41 +01:00
50f19549b6 Add move/copy operations to datatype API (#13791)
* Add move/copy operations to datatype API

* Add compat suppressions for new interface methods

* Regenerate OpenAPI JSON

* Update OpenApi.json

* Ensure we can copy a datatype to root + make the target key nullable (explicit) for move and copy operation models

* Handle parent not found status

* Update the OpenAPI spec to reflect new nullability

* Cleanup

---------

Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2023-02-10 15:11:49 +01:00
Jacob Overgaard 525d73d205 update git submodule 2023-02-10 11:25:37 +01:00
Kenn JacobsenandGitHub 36dc35f8aa Add "move" to dictionary API (#13810)
* Sanitize dictionary overview and export actions

* Amend dictionary services with async and attempt pattern + isolate temporary file handling in its own service.

* Update OpenAPI schema to match new dictionary bulk actions

* Implement move API for dictionary items.

* Add unit tests for dictionary item move

* Fix merge

* Update OpenAPI json after merge
2023-02-10 08:32:24 +01:00
Jacob Overgaard 42f8cde259 update to backoffice directory 2023-02-09 13:32:20 +01:00
9b7bf81ad1 Serialization and deserialziation with polymorphism (#13762)
* Support polymophism when sending or receiving interfaces

* Handle attempts to deserialize interfaces nicer

* updated OpenApi.json

* Update src/Umbraco.Cms.Api.Common/Json/NamedSystemTextJsonInputFormatter.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Cms.Api.Management/ManagementApiComposer.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Cms.Api.Management/OpenApi/ConfigureUmbracoSwaggerGenOptions.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Infrastructure/Serialization/UmbracoJsonTypeInfoResolver.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Invert to avoid nesting

* Updated OpenApi.json

* Update schema

---------

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
2023-02-08 18:29:30 +01:00
Elitsa MarinovskaandGitHub 20534b7a97 New Backoffice: Health check controller refactor (#13763)
* Refactor AllHealthCheckGroupController to return just the names of the groups + changes in the HealthCheckFactory

* Introduce a new "get by name without results" endpoint

* Create a "check" endpoint

* View models changes

* Factory renaming changes

* Remove Task.FromResult

* Update OpenApi.json

* Minor updates

* Inject HealthCheckCollection directly into the factory
2023-02-08 14:16:21 +01:00
fdf416550a Refactor dictionary bulk action APIs (#13786)
* Sanitize dictionary overview and export actions

* Amend dictionary services with async and attempt pattern + isolate temporary file handling in its own service.

* Update OpenAPI schema to match new dictionary bulk actions

* Update src/Umbraco.Cms.Api.Management/Services/DictionaryItemImportService.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Cms.Api.Management/Services/DictionaryItemImportService.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Cms.Api.Management/Services/TemporaryFileService.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Update src/Umbraco.Cms.Api.Management/ViewModels/Dictionary/DictionaryImportModel.cs

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>

* Refactor - split dictionary import handling into smaller methods

* Rename view model due to name clash in new SwaggerGen + update OpenAPI JSON file

---------

Co-authored-by: Mole <nikolajlauridsen@protonmail.ch>
2023-02-08 13:18:08 +01:00
Bjarke Berg b582bfa39b Merge remote-tracking branch 'origin/v13/dev' into v13/dev 2023-02-08 12:55:31 +01:00
Bjarke Berg e5609592cd Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Core/Models/ContentEditing/Language.cs
#	src/Umbraco.Core/Models/DictionaryItem.cs
#	src/Umbraco.Core/Models/DictionaryItemExtensions.cs
#	src/Umbraco.Core/Models/DictionaryTranslation.cs
#	src/Umbraco.Core/Models/IDictionaryTranslation.cs
#	src/Umbraco.Core/Models/Language.cs
#	src/Umbraco.Core/Models/Membership/ReadOnlyUserGroup.cs
#	src/Umbraco.Core/Models/Membership/UserGroupExtensions.cs
#	src/Umbraco.Core/Services/DataTypeService.cs
#	tests/Umbraco.Tests.Common/Builders/LanguageBuilder.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Editors/UserEditorAuthorizationHelperTests.cs
2023-02-08 12:38:43 +01:00
Kenn JacobsenandGitHub 59448aeaac Add "Model" postfix for all models in the Swagger output (#13806) 2023-02-08 12:34:11 +01:00
Nathan Woulfe b5e87a82f2 Merge branch 'v13/dev' of https://github.com/umbraco/umbraco-cms into v13/dev 2023-02-08 09:47:02 +10:00
Nathan Woulfe 41a03f4b8b uses correct constant for dictionary icon (needs to be added to uui icon registry) 2023-02-08 09:46:58 +10:00
6808a63e73 New backoffice: Add GUIDS to user groups (#13672)
* Add key to UserGroupDto

* Fix renaming table in sqlite

The SqliteSyntaxProvider needed an overload to use the correct query

* Start work on user group GUID migration

* Add key index to UserGroupDto

* Copy over data when migrating sqlite

* Make sqlite column migration work

* Remove PostMigrations

These should be replaced with Notification usage

* Remove outer scope from Upgrader

* Remove unececary null check

* Add marker base class for migrations

* Enable scopeless migrations

* Remove unnecessary state check

The final state of the migration is no longer necessarily the final state of the plan.

* Extend ExecutedMigrationPlan

* Ensure that MigrationPlanExecutor.Execute always returns a result.

* Always save final state, regardless of errors

* Remove obsolete Execute

* Add Umbraco specific migration notification

* Publish notification after umbraco migration

* Throw the exception that failed a migration after publishing notification

* Handle notification publishing in DatabaseBuilder

* Fix tests

* Remember to complete scope

* Clean up MigrationPlanExecutor

* Run each package migration in a separate scope

* Add PartialMigrationsTests

* Add unhappy path test

* Fix bug shown by test

* Move PartialMigrationsTests into the correct folder

* Comment out refresh cache in data type migration

Need to add this back again as a notification handler or something.

* Start working on a notification test

* Allow migrations to request a cache rebuild

* Set RebuildCache from MigrateDataTypeConfigurations

* Clean MigrationPlanExecutor

* Add comment explaining the need to partial migration success

* Fix tests

* Allow overriding DefinePlan of UmbracoPlan

This is needed to test the DatabaseBuilder

* Fix notification test

* Don't throw exception to be immediately re-caught

* Assert that scopes notification are always published

* Ensure that scopes are created when requested

* Make test classes internal.

It doesn't really matter, but this way it doesn't show up in intellisense

* Add notification handler for clearing cookies

* Add CompatibilitySuppressions

* Use unscoped migration for adding GUID to user group

* Make sqlite migration work

It's really not pretty, square peg, round hole.

* Don't re-enable foreign keys

This will happen automatically next time a connection is started.

* Scope database when using SQLServer

* Don't call complete transaction

* Tidy up a couple of comment

* Only allow scoping the database from UnscopedMigrationBase

* Fix comment

* Remove remark in UnscopedMigrationBase as it's no longer true

* Add keys when creating default user groups

* Map database value from DTO to entity

* Fix migration

Rename also renamed the foreign keys, making it not work

* Make migration idempotent

* Fix unit test

* Update CompatibilitySuppressions.xml

* Add UniqueId to AppendGroupBy

Otherwise MSSQL grenades

* Cleanup

* Update CompatibilitySuppressions

* Rename UniqueId to Key

* Cleanup

---------

Co-authored-by: Elitsa Marinovska <elm@umbraco.dk>
2023-02-07 08:30:33 +01:00
kjac ad1797eb41 Clean up + add proprety type appearance 2023-02-06 11:11:24 +01:00
kjac c88d00797a Add URLs and template data to document view model 2023-02-04 13:21:34 +01:00
kjac 0d7d8edaae Obsolete more ILocalizationService usage 2023-02-04 13:20:01 +01:00
kjac 8c2fa7274c Add the remaining properties to document type (minus list view info, still pending) 2023-02-04 12:03:43 +01:00
kjac 43c10a7fc0 Expose content type key on ContentTypeSort 2023-02-04 12:02:58 +01:00
kjac 54e76b74c4 Handle unpublished, non-variant content 2023-02-02 09:29:36 +01:00
kjac d04c50b988 Basic structure for document and document type read API 2023-02-01 15:35:38 +01:00
Andreas ZerbstandAndreas Zerbst fdd059fb2b Updated the ID of the locator in the test 'can set a minimum of required blocks in content with a block list editor' to match the correct ID. (#13769) 2023-02-01 15:21:33 +01:00
70aa626991 Fix sln file for the new backoffice (#13765)
* Fix sln file and add README commands to get started

* expand the docs a bit

---------

Co-authored-by: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com>
2023-02-01 10:37:21 +01:00
8caee5297b Use ISO codes instead of language IDs for fallback languages and translations (#13751)
* Use language ISO code for language fallback instead of language ID

* Remove language and language ID from dictionary item and dictionary item translation

* ADd unit test for dictionary item translation value extension

* Make the internal service implementations sealed

* Rename translation ISO code to be more explicit in its origin (Language)

* Add breaking changes suppression

* Handle save of invalid fallback iso code

* Fixed test

* Only allow non-UserCustomCulture's

* Fixed and added tests

* Rename ISO code validation method

* Fix language telemetry test (create Swedish with the correct ISO code)

---------

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-02-01 09:37:37 +01:00
Kenn JacobsenandGitHub 641cae7fb5 Align the data type API (#13760)
* Make data type CRUD operations async using Attempt pattern

* Refactor data type container management to its own service + add unit tests for it

* Add compatability suppression for new interface methods and unit test changes
2023-02-01 08:38:36 +01:00
Kenn JacobsenandGitHub ac8cfcf634 Align template API with dictionary API (#13714)
* Align the template services and API with the dictionary ones (use attempt pattern)

* A little controller clean-up

* Mimic old file service behavior, make unit tests happy

* Align CreateForContentTypeAsync return value with the rest of the TemplateService API

* Scaffold endpoint should no longer feature master templates

* Update the OpenAPI JSON
2023-01-31 12:20:46 +01:00
Bjarke Berg 5f8ef4cfff Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-01-30 08:02:44 +01:00
Jacob Overgaard 219940f523 update backoffice submodule 2023-01-27 09:08:55 +01:00
Kenn JacobsenandGitHub 0297152249 Split localization service into dedicated services (#13731)
* Rework language service and API

* Revert unintended commit of Directory.Build.props

* Create OS conditional test for invalid ISO codes

* Reintroduce and obsolete old Delete method on ILocalizationService + make new Delete method delete by ISO code + add obsoletion attrs to service implementation

* Review comments + utilize new Delete method

* Do not allow model reuse when creating a new language

* Fix bad merge

* Split localization service into dedicated services for language and dictionary item handling

* Replaced ILocalizationService usage in management API (as much as can be done for now)

* Ensure we can create dictionary items with explicit keys (but no duplicates)

* Fix culture controller so it works properly with pagination

* Update OpenAPI JSON

* Actually update the language being updated...

* Unit test for invalid ISO now no longer needs to differ between OS :)

* A little bit of code health improvements

* A litte less code duplication

* Remove duplicate validation
2023-01-26 13:34:11 +01:00
aa90efa5b7 New Backoffice: Log viewer controller (#13648)
* Fixing a few nullable reference types for log viewer (#13634)

(cherry picked from commit b4ca2a6636)

* Adding LogControllerBase

* Migrating GetLogLevels()

* Migrating GetNumberOfErrors()

* Migrating GetLogLevelCounts()

* Migrating GetCanViewLogs()

* Migrating GetMessageTemplates()

* Migrating GetLogs()

* Migrating GetSavedSearches()

* Migrating PostSavedSearch()

* Migrating DeleteSavedSearch()

* Adding LoggerViewModel

* Adding LogViewModelMapDefinition

* Update OpenApi.json

* Cleanup

* V12: Change nullability for the log searches (#13647)

* Changing nullability

* Obsolete DeleteSavedSearch since the query param is not used

* Fix a bit more referenced

* Add default implementation for the new overload of DeleteSavedSearch

(cherry picked from commit 5e06f5a8a0)

* Updates based on nullability fix

* Adding GetSavedSearchByName

* Implementing ByName endpoint

* Refactoring Delete endpoint based on GetSavedSearchByName

* Refactoring Create endpoint to return the item's location

* Suppress new GetSavedSearchByName in ILogViewer interfaces

* Update OpenApi.json

* Adding github initials to FIXME

* Renaming

* Moving files to Core proj

* Adding GetLogs with skip and take

* Introducing ILogViewerService

* Supressing xml for ILogViewer.GetLogsAsPagedModel()

* Changing to our own Enum representation of LogLevel

* Creating ILogEntry needed for GetPagedLogs()

* Refactoring controllers to use the new logViewerService

* Removing base class methods since those have been moved to the new service

* Removing ErrorCountLogViewerController since the result can be calculated from another endpoint

* Refactoring the MapDefinition because of the new return types from the service

* Update OpenApi.json

* Obsoleting old methods in favor of the ILogViewerService

* Cleanup

* Fixing enum representation as strings for Swagger

* Adding documentation

* Changing enum representation to string in OpenApi.OpenApi.json

* Fix FIXME (use CreatedAtAction)

* Removing JsonStringEnumConverter as there should be another way to fix enum representation for Swagger

* Removing MappingBuilderExtensions and making specific LogViewerBuilderExtensions

* Changes to the .sln file

* Take only the result in the response

* Register the LogViewer extensions

* Update OpenApi.json

* Fix the supressions.xml

* Add inheritdoc

* Remove GetSavedSearchByName as it isn't necessary to introduce it anymore

* Obsolete interfaces

* Rename ViewPermission controller to ValidateLogFileSize

* Make rest of the methods async

* Route name change

* Remove methods obsoletion

* Introduce the "attempt" pattern

* Refactoring of ILogViewerService

* Refactoring controllers

* Another OpenApi.json update

* Adding fixme

* Re-add new client project

Co-authored-by: nikolajlauridsen <nikolajlauridsen@protonmail.ch>
2023-01-25 11:53:42 +01:00
Bjarke Berg 0fd90c1294 Merge remote-tracking branch 'origin/v12/dev' into v13/dev 2023-01-24 12:04:01 +01:00
Kenn JacobsenandGitHub ff2d90d775 Rework dictionary CRUD operations (#13688)
* Rework dictionary CRUD operations

* Update OpenAPI json

* Move responsibility to localization service, introduce new attempt pattern for create and update operations, update unit tests accordingly

* Fix merge

* Rollback assumption that we can map entities from scratch (entity relations got in the way)

* Update OpenAPI JSON

* Add breakage supressions

* Add compat suppressions for integration test project

* Make dictionary item deletion follow same pattern as create and update

* Review comments + update delete to use new pattern

* Update breakage suppressions to match the new Delete method
2023-01-20 13:40:24 +01:00
Bjarke Berg 4be798ddfb Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Infrastructure/Install/PackageMigrationRunner.cs
#	src/Umbraco.Infrastructure/Migrations/IMigrationContext.cs
#	src/Umbraco.Infrastructure/Migrations/IMigrationPlanExecutor.cs
#	src/Umbraco.Infrastructure/Migrations/Install/DatabaseBuilder.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationContext.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationPlan.cs
#	src/Umbraco.Infrastructure/Migrations/MigrationPlanExecutor.cs
#	src/Umbraco.Infrastructure/Migrations/PostMigrations/ClearCsrfCookies.cs
#	src/Umbraco.Infrastructure/Migrations/PostMigrations/DeleteLogViewerQueryFile.cs
#	src/Umbraco.Infrastructure/Migrations/PostMigrations/RebuildPublishedSnapshot.cs
#	src/Umbraco.Infrastructure/Migrations/Upgrade/Upgrader.cs
#	src/Umbraco.Web.BackOffice/Controllers/MacroRenderingController.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/MigrationPlanTests.cs
#	tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Migrations/PostMigrationTests.cs
2023-01-19 10:43:07 +01:00
9c00c95f01 v13: New Backoffice in CMS (POC) (#13664)
* Added a new executeable to new backoffice

* add new backoffice client as submodule

* add new backoffice client as project

* add bootstrap of backoffice client

* experimentally allow CORS from local vite app running the backoffice

* fix base path

* move new backoffice projects to NewBackoffice folder

* add support for redirect urls to login page (temporary)

* update references to v13

* override databaseinstall/index.cshtml

* copy ignore lines from normal project

* remove redirect to AuthorizeUpgrade

* codeql: checkout submodules

* Section catch-all route

* fixed tests

* remove starter-kit file

* remove grid views

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-01-18 15:02:59 +01:00
Kenn JacobsenandGitHub 4640a317b8 Support non-nullable reference types in OpenAPI doc (#13685)
* Refactored ManagementApiComposer into several extension classes

* ADd support for non-nullable reference types in OpenAPI doc

* Update OpenAPI JSON to reflect new (lack of) nullability

* Don't add factories twice :)

* Rework composing + move backoffice route detection for management API to core
2023-01-18 13:11:42 +01:00
Elitsa MarinovskaandGitHub 2c8927c2e9 Rename old FIXME to TODO (#13646)
* Rename old FIXME to TODO, so we can track new FIXME starting v13

* Remove empty TODO
2023-01-18 12:28:54 +01:00
Kenn JacobsenandGitHub de8e307295 Add "is trashed" data for content and media tree controllers (#13687) 2023-01-17 14:04:22 +01:00
Kenn JacobsenandGitHub 25f66e7413 Turn the indexer health status into an enum + rearrange the view models according to controller namespaces (#13686) 2023-01-17 14:04:13 +01:00
13fb2a4f52 New Backoffice: Refactor migrations to allow for unscoped migrations (#13654)
* Remove PostMigrations

These should be replaced with Notification usage

* Remove outer scope from Upgrader

* Remove unececary null check

* Add marker base class for migrations

* Enable scopeless migrations

* Remove unnecessary state check

The final state of the migration is no longer necessarily the final state of the plan.

* Extend ExecutedMigrationPlan

* Ensure that MigrationPlanExecutor.Execute always returns a result.

* Always save final state, regardless of errors

* Remove obsolete Execute

* Add Umbraco specific migration notification

* Publish notification after umbraco migration

* Throw the exception that failed a migration after publishing notification

* Handle notification publishing in DatabaseBuilder

* Fix tests

* Remember to complete scope

* Clean up MigrationPlanExecutor

* Run each package migration in a separate scope

* Add PartialMigrationsTests

* Add unhappy path test

* Fix bug shown by test

* Move PartialMigrationsTests into the correct folder

* Comment out refresh cache in data type migration

Need to add this back again as a notification handler or something.

* Start working on a notification test

* Allow migrations to request a cache rebuild

* Set RebuildCache from MigrateDataTypeConfigurations

* Clean MigrationPlanExecutor

* Add comment explaining the need to partial migration success

* Fix tests

* Allow overriding DefinePlan of UmbracoPlan

This is needed to test the DatabaseBuilder

* Fix notification test

* Don't throw exception to be immediately re-caught

* Assert that scopes notification are always published

* Ensure that scopes are created when requested

* Make test classes internal.

It doesn't really matter, but this way it doesn't show up in intellisense

* Add notification handler for clearing cookies

* Add CompatibilitySuppressions

* Rename Execute to ExecutePlan

We have to do this to be able to obsolete :(

* Update CompatibilitySuppressions

* Update src/Umbraco.Infrastructure/Migrations/MigrationPlanExecutor.cs

Co-authored-by: Bjarke Berg <mail@bergmania.dk>

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-01-16 14:52:51 +01:00
01224fce89 Template API for new backoffice (#13642)
* Template query builder API

* Create a dedicated template service (copy template operations from file service)

* CRUD API for templates

* Make file service consume the template service (remove duplicated code)

* Use the template service in the old template controller so we can track changes better (note: this is breaking, but it doesn't matter as the controller will be deleted)

* Add scaffolding to the template API

* Make the route differ between query settings and execution

* Get rid of ugly string constants

* Refactor query execution a little to improve code health

* Fix build checks (compat)

* Deduce the master template from the template contents

* Make template service async, move master template parsing into template service

* Fix open API test

* Make sure the unit tests use new template parsing

* Add FIXME for SetMasterTemplate

* added obsolete attributes

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
2023-01-11 14:40:41 +01:00
c81918c9ee Return true if connectionstring configured (#13640)
Signed-off-by: Zeegaan <nge@umbraco.dk>

Signed-off-by: Zeegaan <nge@umbraco.dk>
Co-authored-by: Zeegaan <nge@umbraco.dk>
2023-01-09 08:53:31 +01:00
Bjarke Berg 08c1708730 Merge remote-tracking branch 'origin/v12/dev' into v13/dev
# Conflicts:
#	src/Umbraco.Cms.Api.Management/Controllers/ManagementApiControllerBase.cs
2023-01-06 10:30:58 +01:00
c44fa56661 New backoffice: Data type API (#13633)
* Add PropertyEditorUiAlias to datatype incl. migration for persistence

* Add configuration validation

* Folder CRUD (reusable for other folder trees) + datatype delete + more RESTish response from datatype create and update

* API for datatype references

* Clean up response types, swagger metadata and fix OpenAPI test

* Allow breakage in the build

* Use yield return pattern

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>

* Fix incorrect return type from references API

Co-authored-by: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
2023-01-06 08:45:06 +01:00
Kenn JacobsenandGitHub a8f070d834 Datatype configuration refactor (#13605)
* Moved refactor from V12 based branch

* Remove obsolete config property to avoid obsoletion warnings

* Clean up test models

* Make the datatype API a little less confusing by introducing explicit models for create and update

* Remame "Configuration" to "Data" to make FE happy :)

* Safeguard deserialization of empty configs

* Less strict number handling for deserialization

* Prepare for data type config migrations

* Attempt to have contextual config serializers

* Update OpenAPI spec with (temporary) data type controller

* Fix unit tests

* Update compat suppressions (allow breakage for datatype and configuration editor)

* Make the duplicate JsonObjectConverter implementation private
2022-12-21 14:29:59 +01:00
7014 changed files with 210285 additions and 381842 deletions
+3 -2
View File
@@ -1,3 +1,4 @@
**/*
!**/bin/**
!**/obj/**
!tests/Umbraco.Tests.Integration/bin/**
!tests/Umbraco.Tests.UnitTests/bin/**
**/node_modules
+19 -5
View File
@@ -13,6 +13,16 @@ If the answer is yes, please read on. Otherwise, make sure to head on over [to t
↖️ You can jump to any section by using the "table of contents" button ( ![Table of contents icon](img/tableofcontentsicon.svg) ) above.
## Getting Started:
To run umbraco, we first need to initialize the client git submodule:
* Execute `git submodule update --init` to get the files into Umbraco.Web.UI.Client project
* If you are going to work on the Backoffice, you can either go to the Umbraco.Web.UI.Client folder and check out a new branch or set it up in your IDE, which will allow you to commit to each repository simultaneously:
* **Rider**: Preferences -> Version Control -> Directory Mappings -> Click the '+' sign
* If you get a white page delete Umbraco.Cms.StaticAssets\wwwroot\umbraco folder and run `npm ci && npm run build:for:cms` inside Umbraco.Web.UI.Client folder to clear out any leftover files from older versions.
### Latest version
* If you want to get the latest changes from the client repository, run `git submodule update` again which will pull the latest main branch.
## Debugging source locally
@@ -40,18 +50,22 @@ You can also run the tasks manually on the command line:
```
cd src\Umbraco.Web.UI.Client
npm install
npm i
npm run dev
```
or
If you just want to build the UI Client to `Umbraco.Web.UI` then instead of running `dev`, you can do: `npm run build`.
The login screen is a different frontend build, for that one you can run it as follows:
```
cd src\Umbraco.Web.UI.Client
npm install
gulp dev
cd src\Umbraco.Web.UI.Login
npm i
npm run dev
```
If you just want to build the Login screen to `Umbraco.Web.UI` then instead of running `dev`, you can do: `npm run build`.
**The initial Gulp build might take a long time - don't worry, this will be faster on subsequent runs.**
You might run into [Gulp quirks](#gulp-quirks).
+23 -215
View File
@@ -4,248 +4,56 @@
These contribution guidelines are mostly just that - guidelines, not rules. This is what we've found to work best over the years, but if you choose to ignore them, we still love you! 💖 Use your best judgement, and feel free to propose changes to this document in a pull request.
## Coding not your thing? Or want more ways to contribute?
## Getting Started
We have a guide on [what to consider before you start](contributing-before-you-start.md) and more detailed guides at the end of this article.
This document covers contributing to the codebase of the CMS but [the community site has plenty of inspiration for other ways to get involved.][get involved]
If you don't feel you'd like to make code changes here, you can visit our [documentation repository][docs repo] and use your experience to contribute to making the docs we have, even better.
We also encourage community members to feel free to comment on others' pull requests and issues - the expertise we have is not limited to the Core Collaborators and HQ. So, if you see something on the issue tracker or pull requests you feel you can add to, please don't be shy.
## Table of contents
- [Before you start](#before-you-start)
* [Code of Conduct](#code-of-conduct)
* [What can I contribute?](#what-can-i-contribute)
+ [Making larger changes](#making-larger-changes)
+ [Pull request or package?](#pull-request-or-package)
+ [Ownership and copyright](#ownership-and-copyright)
- [Finding your first issue: Up for grabs](#finding-your-first-issue-up-for-grabs)
- [Making your changes](#making-your-changes)
+ [Keeping your Umbraco fork in sync with the main repository](#keeping-your-umbraco-fork-in-sync-with-the-main-repository)
+ [Style guide](#style-guide)
+ [Questions?](#questions)
- [Creating a pull request](#creating-a-pull-request)
- [The review process](#the-review-process)
* [Dealing with requested changes](#dealing-with-requested-changes)
+ [No longer available?](#no-longer-available)
* [The Core Collaborators team](#the-core-collaborators-team)
## Before you start
### Code of Conduct
This project and everyone participating in it, is governed by the [our Code of Conduct][code of conduct].
### What can I contribute?
We categorise pull requests (PRs) into two categories:
| PR type | Definition |
| --------- | ------------------------------------------------------------ |
| Small PRs | Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files. |
| Large PRs | New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGets packages.config, NPMs packages.json, etc.). |
Were usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly [as per the described process][review process].
We would love to follow the same process for larger PRs but this is not always possible due to time limitations and priorities that need to be aligned. We dont want to put up any barriers, but this document should set the correct expectations.
Not all changes are wanted, so on occasion we might close a PR without merging it but if we do, we will give you feedback why we can't accept your changes. **So make sure to [talk to us before making large changes][making larger changes]**, so we can ensure that you don't put all your hard work into something we would not be able to merge.
#### Making larger changes
[making larger changes]: #making-larger-changes
Please make sure to describe your larger ideas in an [issue (bugs)][issues] or [discussion (new features)][discussions], it helps to put in mock up screenshots or videos. If the change makes sense for HQ to include in Umbraco CMS we will leave you some feedback on how wed like to see it being implemented.
If a larger pull request is encouraged by Umbraco HQ, the process will be similar to what is described in the small PRs process above, we strive to feedback within 14 days. Finalizing and merging the PR might take longer though as it will likely need to be picked up by the development team to make sure everything is in order. Well keep you posted on the progress.
#### Pull request or package?
[pr or package]: #pull-request-or-package
If you're unsure about whether your changes belong in the core Umbraco CMS or if you should turn your idea into a package instead, make sure to [talk to us][making larger changes].
If it doesnt fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and fix bugs. Eventually, a package could "graduate" to be included in the CMS.
#### Ownership and copyright
It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.
Similarly, if your contribution is copied or adapted from somewhere else, make sure that the license allows you to reuse that for a contribution to Umbraco-CMS.
If you're not sure, leave a note on your contribution and we will be happy to guide you.
When your contribution has been accepted, it will be [MIT licensed][MIT license] from that time onwards.
## Finding your first issue: Up for grabs
Umbraco HQ will regularly mark newly created issues on the issue tracker with [the `community/up-for-grabs` tag][up for grabs issues]. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. We encourage anyone to pick them up and help out.
If you do start working on something, make sure to leave a small comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has.
## Making your changes
Great question! The short version goes like this:
The following steps are a quick-start guide:
1. **Fork**
Create a fork of [`Umbraco-CMS` on GitHub][Umbraco CMS repo]
Create a fork of [`Umbraco-CMS` on GitHub](https://github.com/umbraco/Umbraco-CMS)
![Fork the repository](img/forkrepository.png)
1. **Clone**
2. **Clone**
When GitHub has created your fork, you can clone it in your favorite Git tool
When GitHub has created your fork, you can clone it in your favorite Git tool or on the command line with `git clone https://github.com/[YourUsername]/Umbraco-CMS`.
![Clone the fork](img/clonefork.png)
1. **Switch to the correct branch**
3. **Switch to the correct branch**
Switch to the `contrib` branch
1. **Build**
4. **Build**
Build your fork of Umbraco locally as described in the build documentation: you can [debug with Visual Studio Code][build - debugging with code] or [with Visual Studio][build - debugging with vs].
Build your fork of Umbraco locally [as described in the build documentation](BUILD.md), you can build with any IDE that supports dotnet or the command line.
1. **Branch**
5. **Branch**
Create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case issue number `12345`. Don't commit to `contrib`, create a new branch first.
Create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp/12345`. This means it's a temporary branch for the particular issue you're working on, in this case issue number `12345`. Don't commit to `contrib`, create a new branch first.
1. **Change**
6. **Change**
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback][questions].
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback](contributing-first-issue.md#questions).
1. **Commit and push**
7. **Commit and push**
Done? Yay! 🎉
Remember to commit to your new `temp` branch, and don't commit to `contrib`. Then you can push the changes up to your fork on GitHub.
#### Keeping your Umbraco fork in sync with the main repository
[sync fork]: #keeping-your-umbraco-fork-in-sync-with-the-main-repository
8. **Create pull request**
Once you've already got a fork and cloned your fork locally, you can skip steps 1 and 2 going forward. Just remember to keep your fork up to date before making further changes.
On GitHub, in your forked repository (`https://github.com/[YourUsername]/Umbraco-CMS`) you will see a banner saying that you pushed a new branch and a button to make a pull request. Tap the button and follow the instuctions.
To sync your fork with this original one, you'll have to add the upstream url. You only have to do this once:
Want to read further? [Creating a pull request and what happens next](contributing-creating-a-pr.md).
```
git remote add upstream https://github.com/umbraco/Umbraco-CMS.git
```
## Further contribution guides
Then when you want to get the changes from the main repository:
- [Before you start](contributing-before-you-start.md)
- [Finding your first issue: Up for grabs](contributing-before-you-start.md)
- [Contributing to the new backoffice](https://docs.umbraco.com/umbraco-backoffice/)
- [Unwanted changes](contributing-unwanted-changes.md)
- [Other ways to contribute](contributing-other-ways-to-contribute.md)
```
git fetch upstream
git rebase upstream/contrib
```
In this command we're syncing with the `contrib` branch, but you can of course choose another one if needed.
[More information on how this works can be found on the thoughtbot blog.][sync fork ext]
#### Style guide
To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up.
That said, the Umbraco development team likes to follow the hints that ReSharper gives us (no problem if you don't have this installed) and we've added a `.editorconfig` file so that Visual Studio knows what to do with whitespace, line endings, etc.
#### Questions?
[questions]: #questions
You can get in touch with [the core contributors team][core collabs] in multiple ways; we love open conversations and we are a friendly bunch. No question you have is stupid. Any question you have usually helps out multiple people with the same question. Ask away:
- If there's an existing issue on the issue tracker then that's a good place to leave questions and discuss how to start or move forward.
- If you want to ask questions on some code you've already written you can create a draft pull request, [detailed in a GitHub blog post][draft prs].
- Unsure where to start? Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"][contrib forum] forum. The team monitors that one closely, so one of us will be on hand and ready to point you in the right direction.
## Creating a pull request
Exciting! You're ready to show us your changes.
We recommend you to [sync with our repository][sync fork] before you submit your pull request. That way, you can fix any potential merge conflicts and make our lives a little bit easier.
GitHub will have picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go.
![Create a pull request](img/createpullrequest.png)
We like to use [git flow][git flow] as much as possible, but don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to `contrib`. This is the branch you should be targeting.
Please note: we are no longer accepting features for v8 and below but will continue to merge security fixes as and when they arise.
## The review process
[review process]: #the-review-process
You've sent us your first contribution - congratulations! Now what?
The [Core Collaborators team][Core collabs] can now start reviewing your proposed changes and give you feedback on them. If it's not perfect, we'll either fix up what we need or we can request that you make some additional changes.
You will get an initial automated reply from our [Friendly Umbraco Robot, Umbrabot][Umbrabot], to acknowledge that weve seen your PR and well pick it up as soon as we can. You can take this opportunity to double check everything is in order based off the handy checklist Umbrabot provides.
You will get feedback as soon as the [Core Collaborators team][Core collabs] can after opening the PR. Youll most likely get feedback within a couple of weeks. Then there are a few possible outcomes:
- Your proposed change is awesome! We merge it in and it will be included in the next minor release of Umbraco
- If the change is a high priority bug fix, we will cherry-pick it into the next patch release as well so that we can release it as soon as possible
- Your proposed change is awesome but needs a bit more work, well give you feedback on the changes wed like to see
- Your proposed change is awesome but... not something were looking to include at this point. Well close your PR and the related issue (well be nice about it!). See [making larger changes][making larger changes] and [pull request or package?][pr or package]
### Dealing with requested changes
If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco!
#### No longer available?
We understand you have other things to do and can't just drop everything to help us out.
So if were asking for your help to improve the PR well wait for two weeks to give you a fair chance to make changes. Well ask for an update if we dont hear back from you after that time.
If we dont hear back from you for 4 weeks, well close the PR so that it doesnt just hang around forever. Youre very welcome to re-open it once you have some more time to spend on it.
There will be times that we really like your proposed changes and well finish the final improvements wed like to see ourselves. You still get the credits and your commits will live on in the git repository.
### The Core Collaborators team
[Core collabs]: #the-core-collaborators-team
The Core Contributors team consists of one member of Umbraco HQ, [Sebastiaan][Sebastiaan], who gets assistance from the following community members who have committed to volunteering their free time:
- [Busra Sengul][Busra Sengul]
- [Emma Garland][Emma Garland]
- [George Bidder][George Bidder]
- [Jason Elkin][Jason Elkin]
- [Laura Neto][Laura Neto]
- [Michael Latouche][Michael Latouche]
- [Sebastiaan][Sebastiaan]
These wonderful people aim to provide you with a reply to your PR, review and test out your changes and on occasions, they might ask more questions. If they are happy with your work, they'll let Umbraco HQ know by approving the PR. HQ will have final sign-off and will check the work again before it is merged.
<!-- Reference links for easy updating -->
<!-- Local -->
[MIT license]: ../LICENSE.md "Umbraco's license declaration"
[build - debugging with vs]: BUILD.md#debugging-with-visual-studio "Details on building and debugging Umbraco with Visual Studio"
[build - debugging with code]: BUILD.md#debugging-with-vs-code "Details on building and debugging Umbraco with Visual Studio Code"
<!-- External -->
[Busra Sengul]: https://github.com/busrasengul "Busra's GitHub profile"
[Emma Garland]: https://github.com/emmagarland "Emma's GitHub profile"
[George Bidder]: https://github.com/georgebid "George's GitHub profile"
[Jason Elkin]: https://github.com/jasonelkin "Jason's GitHub profile"
[Kyle Eck]: https://github.com/teckspeed "Kyle's GitHub profile"
[Laura Neto]: https://github.com/lauraneto "Laura's GitHub profile"
[Michael Latouche]: https://github.com/mikecp "Michael's GitHub profile"
[Sebastiaan]: https://github.com/nul800sebastiaan "Sebastiaan's GitHub profile"
[ Umbrabot ]: https://github.com/umbrabot
[git flow]: https://jeffkreeftmeijer.com/git-flow/ "An explanation of git flow"
[sync fork ext]: http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated "Details on keeping a git fork updated"
[draft prs]: https://github.blog/2019-02-14-introducing-draft-pull-requests/ "Github's blog post providing details on draft pull requests"
[contrib forum]: https://our.umbraco.com/forum/contributing-to-umbraco-cms/
[get involved]: https://community.umbraco.com/get-involved/
[docs repo]: https://github.com/umbraco/UmbracoDocs
[code of conduct]: https://github.com/umbraco/.github/blob/main/.github/CODE_OF_CONDUCT.md
[up for grabs issues]: https://github.com/umbraco/Umbraco-CMS/issues?q=is%3Aissue+is%3Aopen+label%3Acommunity%2Fup-for-grabs
[Umbraco CMS repo]: https://github.com/umbraco/Umbraco-CMS
[issues]: https://github.com/umbraco/Umbraco-CMS/issues
[discussions]: https://github.com/umbraco/Umbraco-CMS/discussions
-18
View File
@@ -1,18 +0,0 @@
# New backoffice
> **Warning**:
> This is an early WIP and is set not to be packable since we don't want to release this yet. There will be breaking changes in these projects.
This solution folder contains the projects for the new backoffice. If you're looking to fix or improve the existing CMS, this is not the place to do it, although we do very much appreciate your efforts.
### Project structure
Since the new backoffice API is still very much a work in progress, we've created new projects for the new backoffice API:
* Umbrao.Cms.ManagementApi - The "presentation layer" for the management API
* "New" versions of existing projects, should be merged with the existing projects when the new API is released:
* Umbraco.New.Cms.Core
* Umbraco.New.Cms.Infrastructure
* Umbraco.New.Cms.Web.Common
This also means that we have to use "InternalsVisibleTo" for the new projects since these should be able to access the internal classes since they will when they get merged.
+27 -21
View File
@@ -2,46 +2,52 @@
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](../LICENSE.md)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
[![Follow Umbraco on Twitter](https://img.shields.io/badge/Follow-blue?logo=twitter&logoColor=fff)](https://twitter.com/intent/follow?screen_name=umbraco)
![Mastodon Follow](https://img.shields.io/mastodon/follow/110661369750014952?domain=https%3A%2F%2Fumbracocommunity.social)
[![Chat about Umbraco on Discord](https://img.shields.io/discord/869656431308189746?logo=discord&logoColor=fff)](https://discord.gg/umbraco)
[![Read what's going on in the Umbraco Discord chat now](https://img.shields.io/badge/read-discord-blue)](https://discord-chats.umbraco.com)
[![Build status](https://img.shields.io/azure-devops/build/umbraco/Umbraco%2520Cms/301?logo=azurepipelines&label=Azure%20Pipelines)](https://umbraco.visualstudio.com/Umbraco%20Cms/_build?definitionId=301)
[![Open in GitHub Codespaces](https://img.shields.io/badge/Open%20in%20GitHub%20Codespaces-525252?logo=github)](https://github.com/codespaces/new?hide_repo_select=true&ref=contrib&repo=10601208&machine=basicLinux32gb&devcontainer_path=.devcontainer%2Fdevcontainer.json&location=WestEurope)
Umbraco is the friendliest, most flexible and fastest growing ASP.NET CMS, and used by more than 500,000 websites worldwide. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social.
### Umbraco is a free and open source .NET content management system. Our mission is to help you deliver delightful digital experiences by making Umbraco friendly, simpler and social.
Learn more at [umbraco.com](https://umbraco.com)
<p align="center">
<img src="img/logo.png" alt="Umbraco Logo" />
<img src="img/logo.png" alt="Umbraco Logo" />
</p>
See the official [Umbraco website](https://umbraco.com) for an introduction, core mission and values of the product and team behind it.
## <a name="install"></a>Looking to install Umbraco?
- [Getting Started](#getting-started)
- [Documentation](#documentation)
- [Community](#join-the-umbraco-community)
- [Contributing](#contributing)
You can get started using the following commands on Windows, Linux and MacOS (after installing the [.NET Runtime and SDK](https://docs.umbraco.com/umbraco-cms/fundamentals/setup/requirements)):
Please also see our [Code of Conduct](https://github.com/umbraco/.github/blob/main/.github/CODE_OF_CONDUCT.md).
## Getting Started
[Umbraco Cloud](https://umbraco.com/cloud) is the easiest and fastest way to use Umbraco yet, with full support for all your custom .NET code and integrations. You're up and running in less than a minute, and your life will be made easier with automated upgrades and a built-in deployment engine. We offer a free 14-day trial, no credit card needed.
If you want to DIY, then you can [download Umbraco]((https://our.umbraco.com/download)) either as a ZIP file or via NuGet. It's the same version of Umbraco CMS that powers Umbraco Cloud, but you'll need to find a place to host it yourself, and handling deployments and upgrades will be all up to you.
```
dotnet new install Umbraco.Templates
dotnet new umbraco --name MyProject
cd MyProject
dotnet run
```
## Documentation
The documentation for Umbraco CMS can be found [on Our Umbraco](https://docs.umbraco.com/). The source for the Umbraco docs is [open source as well](https://github.com/umbraco/UmbracoDocs) and we're happy to look at your documentation contributions.
Our [comprehensive documentation](https://docs.umbraco.com/umbraco-cms) takes you from the fundamentals on how to start with Umbraco to deploying it to production.
## Join the Umbraco community
Some important documentation links to get you started:
Our friendly community is available 24/7 at the community hub, we call ["Our Umbraco"](https://our.umbraco.com/). Our Umbraco features forums for questions and answers, documentation, downloadable plugins for Umbraco, and a rich collection of community resources.
- [Installing Umbraco CMS](https://docs.umbraco.com/umbraco-cms/fundamentals/setup/install)
- [Getting to know Umbraco](https://docs.umbraco.com/umbraco-cms/fundamentals/get-to-know-umbraco)
- [Tutorials for creating a basic website and customizing the editing experience](https://docs.umbraco.com/umbraco-cms/tutorials/overview)
Besides "Our", we all support each other in our [Community Discord Server](https://discord.gg/umbraco) and on Twitter: [Umbraco HQ](https://twitter.com/umbraco), [Release Updates](https://twitter.com/umbracoproject), [#umbraco](https://twitter.com/hashtag/umbraco)
## Get help
If you need a bit of feedback while building your Umbraco projects, we are [chatty on Discord](https://discord.umbraco.com). Our Discord server serves both a social space but also has channels for questions and answers. Feel free to lurk or join in with your own questions. Or just post your daily Wordle score, up to you!
## Looking to contribute back to Umbraco?
## Contributing
You came to the right place! Our GitHub repository is available for all kinds of contributions:
- [Create a bug report](https://github.com/umbraco/Umbraco-CMS/issues)
- [Create a feature request](https://github.com/umbraco/Umbraco-CMS/discussions)
Umbraco is contribution-focused and community-driven. If you want to contribute back to the Umbraco source code, please check out our [guide to contributing](CONTRIBUTING.md).
### Tip: You should not run Umbraco from source code found here. Umbraco is extremely extensible and can do whatever you need. Instead, [install Umbraco as noted above](#looking-to-install-umbraco) and then [extend it any way you want to](https://docs.umbraco.com/umbraco-cms/extending/).
+54
View File
@@ -0,0 +1,54 @@
## Before you start
### Code of Conduct
This project and everyone participating in it, is governed by the [our Code of Conduct][code of conduct].
### What can I contribute?
We categorise pull requests (PRs) into two categories:
| PR type | Definition |
| --------- | ------------------------------------------------------------ |
| Small PRs | Bug fixes and small improvements - can be recognized by seeing a small number of changes and possibly a small number of new files. |
| Large PRs | New features and large refactorings - can be recognized by seeing a large number of changes, plenty of new files, updates to package manager files (NuGets packages.config, NPMs packages.json, etc.). |
Were usually able to handle small PRs pretty quickly. A community volunteer will do the initial review and flag it for Umbraco HQ as “community tested”. If everything looks good, it will be merged pretty quickly [as per the described process][review process].
We would love to follow the same process for larger PRs but this is not always possible due to time limitations and priorities that need to be aligned. We dont want to put up any barriers, but this document should set the correct expectations.
Not all changes are wanted, so on occasion we might close a PR without merging it but if we do, we will give you feedback why we can't accept your changes. **So make sure to [talk to us before making large changes][making larger changes]**, so we can ensure that you don't put all your hard work into something we would not be able to merge.
#### Making larger changes
[making larger changes]: #making-larger-changes
Please make sure to describe your larger ideas in an [issue (bugs)][issues] or [discussion (new features)][discussions], it helps to put in mock up screenshots or videos. If the change makes sense for HQ to include in Umbraco CMS we will leave you some feedback on how wed like to see it being implemented.
If a larger pull request is encouraged by Umbraco HQ, the process will be similar to what is described in the small PRs process above, we strive to feedback within 14 days. Finalizing and merging the PR might take longer though as it will likely need to be picked up by the development team to make sure everything is in order. Well keep you posted on the progress.
#### Pull request or package?
[pr or package]: #pull-request-or-package
If you're unsure about whether your changes belong in the core Umbraco CMS or if you should turn your idea into a package instead, make sure to [talk to us][making larger changes].
If it doesnt fit in CMS right now, we will likely encourage you to make it into a package instead. A package is a great way to check out popularity of a feature, learn how people use it, validate good usability and fix bugs. Eventually, a package could "graduate" to be included in the CMS.
#### Ownership and copyright
It is your responsibility to make sure that you're allowed to share the code you're providing us. For example, you should have permission from your employer or customer to share code.
Similarly, if your contribution is copied or adapted from somewhere else, make sure that the license allows you to reuse that for a contribution to Umbraco-CMS.
If you're not sure, leave a note on your contribution and we will be happy to guide you.
When your contribution has been accepted, it will be [MIT licensed][MIT license] from that time onwards.
[MIT license]: ../LICENSE.md "Umbraco's license declaration"
[issues]: https://github.com/umbraco/Umbraco-CMS/issues
[discussions]: https://github.com/umbraco/Umbraco-CMS/discussions
+28
View File
@@ -0,0 +1,28 @@
### The Core Collaborators team
[Core collabs]: #the-core-collaborators-team
The Core Contributors team consists of one member of Umbraco HQ, [Sebastiaan][Sebastiaan], who gets assistance from the following community members who have committed to volunteering their free time:
- [Busra Sengul][Busra Sengul]
- [Emma Garland][Emma Garland]
- [George Bidder][George Bidder]
- [Jason Elkin][Jason Elkin]
- [Laura Neto][Laura Neto]
- [Kyle Eck][Kyle Eck]
- [Michael Latouche][Michael Latouche]
- [Sebastiaan][Sebastiaan]
These wonderful people aim to provide you with a reply to your PR, review and test out your changes and on occasions, they might ask more questions. If they are happy with your work, they'll let Umbraco HQ know by approving the PR. HQ will have final sign-off and will check the work again before it is merged.
<!-- External -->
[Busra Sengul]: https://github.com/busrasengul "Busra's GitHub profile"
[Emma Garland]: https://github.com/emmagarland "Emma's GitHub profile"
[George Bidder]: https://github.com/georgebid "George's GitHub profile"
[Jason Elkin]: https://github.com/jasonelkin "Jason's GitHub profile"
[Kyle Eck]: https://github.com/teckspeed "Kyle's GitHub profile"
[Laura Neto]: https://github.com/lauraneto "Laura's GitHub profile"
[Michael Latouche]: https://github.com/mikecp "Michael's GitHub profile"
[Sebastiaan]: https://github.com/nul800sebastiaan "Sebastiaan's GitHub profile"
+51
View File
@@ -0,0 +1,51 @@
## Creating a pull request
Exciting! You're ready to show us your changes.
We recommend you to [sync with our repository][sync fork] before you submit your pull request. That way, you can fix any potential merge conflicts and make our lives a little bit easier.
GitHub will have picked up on the new branch you've pushed and will offer to create a Pull Request. Click that green button and away you go.
![Create a pull request](img/createpullrequest.png)
We like to use [git flow][git flow] as much as possible, but don't worry if you are not familiar with it. The most important thing you need to know is that when you fork the Umbraco repository, the default branch is set to `contrib`. This is the branch you should be targeting.
Please note: we are no longer accepting features for v8 and below but will continue to merge security fixes as and when they arise.
## The review process
[review process]: #the-review-process
You've sent us your contribution - congratulations! Now what?
The [Core Collaborators team][Core collabs] can now start reviewing your proposed changes and give you feedback on them. If it's not perfect, we'll either fix up what we need or we can request that you make some additional changes.
You will get an initial automated reply from our [Friendly Umbraco Robot, Umbrabot][Umbrabot], to acknowledge that weve seen your PR and well pick it up as soon as we can. You can take this opportunity to double check everything is in order based off the handy checklist Umbrabot provides.
You will get feedback as soon as the [Core Collaborators team][Core collabs] can after opening the PR. Youll most likely get feedback within a couple of weeks. Then there are a few possible outcomes:
- Your proposed change is awesome! We merge it in and it will be included in the next minor release of Umbraco
- If the change is a high priority bug fix, we will cherry-pick it into the next patch release as well so that we can release it as soon as possible
- Your proposed change is awesome but needs a bit more work, well give you feedback on the changes wed like to see
- Your proposed change is awesome but... not something were looking to include at this point. Well close your PR and the related issue (well be nice about it!). See [making larger changes][making larger changes] and [pull request or package?][pr or package]
### Dealing with requested changes
If you make the corrections we ask for in the same branch and push them to your fork again, the pull request automatically updates with the additional commit(s) so we can review it again. If all is well, we'll merge the code and your commits are forever part of Umbraco!
#### No longer available?
We understand you have other things to do and can't just drop everything to help us out.
So if were asking for your help to improve the PR well wait for two weeks to give you a fair chance to make changes. Well ask for an update if we dont hear back from you after that time.
If we dont hear back from you for 4 weeks, well close the PR so that it doesnt just hang around forever. Youre very welcome to re-open it once you have some more time to spend on it.
There will be times that we really like your proposed changes and well finish the final improvements wed like to see ourselves. You still get the credits and your commits will live on in the git repository.
[ Umbrabot ]: https://github.com/umbrabot
[git flow]: https://jeffkreeftmeijer.com/git-flow/ "An explanation of git flow"
[making larger changes]: contributing-before-you-start.md#making-large-changes
[pr or package]: contributing-before-you-start.md#pull-request-or-package
[Core collabs]: contributing-core-collabs-team.md
+93
View File
@@ -0,0 +1,93 @@
## Finding your first issue: Up for grabs
Umbraco HQ will regularly mark newly created issues on the issue tracker with [the `community/up-for-grabs` tag][up for grabs issues]. This means that the proposed changes are wanted in Umbraco but the HQ does not have the time to make them at this time. We encourage anyone to pick them up and help out.
If you do start working on something, make sure to leave a small comment on the issue saying something like: "I'm working on this". That way other people stumbling upon the issue know they don't need to pick it up, someone already has.
## Making your changes
Great question! The short version goes like this:
1. **Fork**
Create a fork of [`Umbraco-CMS` on GitHub][Umbraco CMS repo]
![Fork the repository](img/forkrepository.png)
1. **Clone**
When GitHub has created your fork, you can clone it in your favorite Git tool
![Clone the fork](img/clonefork.png)
1. **Switch to the correct branch**
Switch to the `contrib` branch
1. **Build**
Build your fork of Umbraco locally as described in the build documentation: you can [debug with Visual Studio Code][build - debugging with code] or [with Visual Studio][build - debugging with vs].
1. **Branch**
Create a new branch now and name it after the issue you're fixing, we usually follow the format: `temp-12345`. This means it's a temporary branch for the particular issue you're working on, in this case issue number `12345`. Don't commit to `contrib`, create a new branch first.
1. **Change**
Make your changes, experiment, have fun, explore and learn, and don't be afraid. We welcome all contributions and will [happily give feedback][questions].
1. **Commit and push**
Done? Yay! 🎉
Remember to commit to your new `temp` branch, and don't commit to `contrib`. Then you can push the changes up to your fork on GitHub.
#### Keeping your Umbraco fork in sync with the main repository
[sync fork]: #keeping-your-umbraco-fork-in-sync-with-the-main-repository
Once you've already got a fork and cloned your fork locally, you can skip steps 1 and 2 going forward. Just remember to keep your fork up to date before making further changes.
To sync your fork with this original one, you'll have to add the upstream url. You only have to do this once:
```
git remote add upstream https://github.com/umbraco/Umbraco-CMS.git
```
Then when you want to get the changes from the main repository:
```
git fetch upstream
git rebase upstream/contrib
```
In this command we're syncing with the `contrib` branch, but you can of course choose another one if needed.
[More information on how this works can be found on the thoughtbot blog.][sync fork ext]
#### Style guide
To be honest, we don't like rules very much. We trust you have the best of intentions and we encourage you to create working code. If it doesn't look perfect then we'll happily help clean it up.
That said, the Umbraco development team likes to follow the hints that ReSharper gives us (no problem if you don't have this installed) and we've added a `.editorconfig` file so that Visual Studio knows what to do with whitespace, line endings, etc.
#### Questions?
[questions]: #questions
You can get in touch with [the core contributors team][core collabs] in multiple ways; we love open conversations and we are a friendly bunch. No question you have is stupid. Any question you have usually helps out multiple people with the same question. Ask away:
- If there's an existing issue on the issue tracker then that's a good place to leave questions and discuss how to start or move forward.
- If you want to ask questions on some code you've already written you can create a draft pull request, [detailed in a GitHub blog post][draft prs].
- Unsure where to start? Did something not work as expected? Try leaving a note in the ["Contributing to Umbraco"][contrib forum] forum. The team monitors that one closely, so one of us will be on hand and ready to point you in the right direction.
<!-- Local -->
[build - debugging with vs]: BUILD.md#debugging-with-visual-studio "Details on building and debugging Umbraco with Visual Studio"
[build - debugging with code]: BUILD.md#debugging-with-vs-code "Details on building and debugging Umbraco with Visual Studio Code"
[sync fork ext]: http://robots.thoughtbot.com/post/5133345960/keeping-a-git-fork-updated "Details on keeping a git fork updated"
[draft prs]: https://github.blog/2019-02-14-introducing-draft-pull-requests/ "Github's blog post providing details on draft pull requests"
[contrib forum]: https://our.umbraco.com/forum/contributing-to-umbraco-cms/
[Umbraco CMS repo]: https://github.com/umbraco/Umbraco-CMS
[up for grabs issues]: https://github.com/umbraco/Umbraco-CMS/issues?q=is%3Aissue+is%3Aopen+label%3Acommunity%2Fup-for-grabs
@@ -0,0 +1,10 @@
## Coding not your thing? Or want more ways to contribute?
This document covers contributing to the codebase of the CMS but [the community site has plenty of inspiration for other ways to get involved.][get involved]
If you don't feel you'd like to make code changes here, you can visit our [documentation repository][docs repo] and use your experience to contribute to making the docs we have, even better.
We also encourage community members to feel free to comment on others' pull requests and issues - the expertise we have is not limited to the Core Collaborators and HQ. So, if you see something on the issue tracker or pull requests you feel you can add to, please don't be shy.
[get involved]: https://community.umbraco.com/get-involved/
[docs repo]: https://github.com/umbraco/UmbracoDocs
+18
View File
@@ -0,0 +1,18 @@
## Unwanted changes
While most changes are welcome, there are certain types of changes that are discouraged and might get your pull request refused.
Of course this will depend heavily on the specific change, but please take the following examples in mind.
- **Breaking changes (code and/or behavioral) 💥** - sometimes it can be a bit hard to know if a change is breaking or not. Fortunately, if it relates to code, the build will fail and warn you.
- **Large refactors 🤯** - the larger the refactor, the larger the probability of introducing new bugs/issues.
- **Changes to obsolete code and/or property editors ✍️**
- **Adding new config options 🦾** - while having more flexibility is (most of the times) better, having too many options can also become overwhelming/confusing, especially if there are other (good/simple) ways to achieve it.
- **Whitespace changes 🫥** - while some of our files might not follow the formatting/whitespace rules (mostly old ones), changing several of them in one go would cause major merge conflicts with open pull requests or other work in progress. Do feel free to fix these when you are working on another issue/feature and end up "touching" those files!
- **Adding new extension/helper methods ✋** - keep in mind that more code also means more to maintain, so if a helper is only meaningful for a few, it might not be worth adding it to the core.
While these are only a few examples, it is important to ask yourself these questions before making a pull request:
- How many will benefit from this change?
- Are there other ways to achieve this? And if so, how do they compare?
- How maintainable is the change?
- What would be the effort to test it properly?
- Do the benefits outweigh the risks?
+38
View File
@@ -0,0 +1,38 @@
# .github/release.yml
changelog:
exclude:
labels:
- ignore-for-release
- duplicate
- wontfix
categories:
- title: 🙌 Notable Changes
labels:
- category/notable
- title: 💥 Breaking Changes
labels:
- category/breaking
- title: 🐛 Bug Fixes
labels:
- type/bug
- category/bug
- type/improvement
- title: 📄 Documentation
labels:
- category/documentation
- title: 🏠 Internal
labels:
- internal
- title: 📦 Dependencies
labels:
- dependencies
- title: 🌈 A11Y
labels:
- category/accessibility
- title: 🚀 New Features
labels:
- type/feature
- title: Other Changes
labels:
- '*'
+3 -1
View File
@@ -15,7 +15,7 @@ permissions:
contents: read
env:
dotnetVersion: 7.x
dotnetVersion: 8.x
dotnetIncludePreviewVersions: true
solution: umbraco.sln
buildConfiguration: SkipTests
@@ -23,6 +23,7 @@ env:
DOTNET_GENERATE_ASPNET_CERTIFICATE: false
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
NODE_OPTIONS: --max_old_space_size=16384
jobs:
CodeQL-Build:
@@ -37,6 +38,7 @@ jobs:
uses: actions/checkout@v3
with:
fetch-depth: 0
submodules: true
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
+11 -5
View File
@@ -50,10 +50,6 @@ tools/docfx/
# Ignore rule for clearing out Belle (avoid rebuilding all the time)
preserve.belle
# Ignore rule for output of generated documentation files from grunt docserve
/src/Umbraco.Web.UI.Docs/api/
/src/Umbraco.Web.UI.Docs/package-lock.json
# csharp-docs
/build/csharp-docs/api/
/build/csharp-docs/_site/
@@ -68,7 +64,13 @@ preserve.belle
/build/docs.zip
/build/ui-docs.zip
/build/csharp-docs.zip
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/auth
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/backoffice
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/assets
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/js
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/lib
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/views
/src/Umbraco.Cms.StaticAssets/wwwroot/umbraco/login
# Environment specific data
/src/Umbraco.Web.UI.Client/[Bb]uild/
@@ -91,6 +93,7 @@ preserve.belle
# Tests
/tests/Umbraco.Tests.AcceptanceTest/.env
/tests/Umbraco.Tests.AcceptanceTest/playwright/.auth
/tests/Umbraco.Tests.Integration.SqlCe/DatabaseContextTests.sdf
/tests/Umbraco.Tests.Integration.SqlCe/[Uu]mbraco/[Dd]ata/TEMP/
/tests/Umbraco.Tests.Integration/appsettings.Tests.Local.json
@@ -103,10 +106,13 @@ preserve.belle
# Ignore auto-generated schema
/src/Umbraco.Cms.Targets/tasks/
/src/Umbraco.Cms.Targets/appsettings-schema.*.json
/src/Umbraco.Cms.Targets/umbraco-package-schema.json
/src/Umbraco.Web.UI/appsettings-schema.json
/src/Umbraco.Web.UI/appsettings-schema.*.json
/src/Umbraco.Web.UI/umbraco-package-schema.json
/tests/Umbraco.Tests.Integration/appsettings-schema.json
/tests/Umbraco.Tests.Integration/appsettings-schema.*.json
/tests/Umbraco.Tests.Integration/umbraco-package-schema.json
/src/Umbraco.Cms/appsettings-schema.json
playwright-report
trace.zip
+3
View File
@@ -0,0 +1,3 @@
[submodule "src/Umbraco.Web.UI.Client"]
path = src/Umbraco.Web.UI.Client
url = https://github.com/umbraco/Umbraco.CMS.Backoffice.git
+17 -14
View File
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>latest</LangVersion>
<TargetFramework>net8.0</TargetFramework>
<Company>Umbraco HQ</Company>
<Authors>Umbraco</Authors>
<Copyright>Copyright © Umbraco $([System.DateTime]::Today.ToString('yyyy'))</Copyright>
@@ -15,14 +14,15 @@
<NeutralLanguage>en-US</NeutralLanguage>
<Nullable>enable</Nullable>
<WarningsAsErrors>nullable</WarningsAsErrors>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<ImplicitUsings>enable</ImplicitUsings>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<WarnOnPackingNonPackableProject>false</WarnOnPackingNonPackableProject>
</PropertyGroup>
<!-- SourceLink -->
<PropertyGroup>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>
@@ -31,24 +31,27 @@
<PropertyGroup>
<GenerateCompatibilitySuppressionFile>false</GenerateCompatibilitySuppressionFile>
<EnablePackageValidation>true</EnablePackageValidation>
<PackageValidationBaselineVersion>12.0.0</PackageValidationBaselineVersion>
<PackageValidationBaselineVersion>14.0.0</PackageValidationBaselineVersion>
<EnableStrictModeForCompatibleFrameworksInPackage>true</EnableStrictModeForCompatibleFrameworksInPackage>
<EnableStrictModeForCompatibleTfms>true</EnableStrictModeForCompatibleTfms>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="all" IsImplicitlyDefined="true" />
<PackageReference Include="Nerdbank.GitVersioning" Version="3.5.113" PrivateAssets="all" IsImplicitlyDefined="true" />
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.406" PrivateAssets="all" IsImplicitlyDefined="true" />
<PackageReference Include="Umbraco.Code" Version="2.0.0" PrivateAssets="all" IsImplicitlyDefined="true" />
<PackageReference Include="Umbraco.GitVersioning.Extensions" Version="0.2.0" PrivateAssets="all" IsImplicitlyDefined="true" />
</ItemGroup>
<!-- Calculate version only once for the whole repository -->
<PropertyGroup>
<GitVersionBaseDirectory>$(MSBuildThisFileDirectory)</GitVersionBaseDirectory>
</PropertyGroup>
<!-- Include icon in generated NuGet packages -->
<ItemGroup>
<Content Include="$(MSBuildThisFileDirectory)icon.png" Pack="true" PackagePath="" Visible="false" />
</ItemGroup>
<PropertyGroup>
<GitVersionBaseDirectory>$(MSBuildThisFileDirectory)</GitVersionBaseDirectory>
</PropertyGroup>
<!-- Use version range on project references (to limit on major version in generated packages) -->
<Target Name="_GetProjectReferenceVersionRanges" AfterTargets="_GetProjectReferenceVersions">
<ItemGroup>
<_ProjectReferencesWithVersions Condition="'%(ProjectVersion)' != ''">
<ProjectVersion>[%(ProjectVersion), $([MSBuild]::Add($([System.Text.RegularExpressions.Regex]::Match('%(ProjectVersion)', '^\d+').Value), 1)))</ProjectVersion>
</_ProjectReferencesWithVersions>
</ItemGroup>
</Target>
</Project>
+95
View File
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<!-- Global packages (private, build-time packages for all projects) -->
<ItemGroup>
<GlobalPackageReference Include="Nerdbank.GitVersioning" Version="3.6.139" />
<GlobalPackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
<GlobalPackageReference Include="Umbraco.Code" Version="2.2.0" />
<GlobalPackageReference Include="Umbraco.GitVersioning.Extensions" Version="0.2.0" />
</ItemGroup>
<!-- Microsoft packages -->
<ItemGroup>
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.11" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.11" />
<PackageVersion Include="Microsoft.Extensions.Caching.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.11" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="8.0.11" />
<PackageVersion Include="Microsoft.Extensions.Identity.Stores" Version="8.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="8.0.0" />
</ItemGroup>
<!-- Umbraco packages -->
<ItemGroup>
<PackageVersion Include="Umbraco.JsonSchema.Extensions" Version="0.3.0" />
<PackageVersion Include="Umbraco.CSharpTest.Net.Collections" Version="15.0.0" />
</ItemGroup>
<!-- Third-party packages -->
<ItemGroup>
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
<PackageVersion Include="Dazinator.Extensions.FileProviders" Version="2.0.0" />
<PackageVersion Include="Examine" Version="3.5.0" />
<PackageVersion Include="Examine.Core" Version="3.5.0" />
<PackageVersion Include="HtmlAgilityPack" Version="1.11.71" />
<PackageVersion Include="JsonPatch.Net" Version="3.1.1" />
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
<PackageVersion Include="MailKit" Version="4.8.0" />
<PackageVersion Include="Markdown" Version="2.2.1" />
<PackageVersion Include="MessagePack" Version="2.5.192" />
<PackageVersion Include="MiniProfiler.AspNetCore.Mvc" Version="4.3.8" />
<PackageVersion Include="MiniProfiler.Shared" Version="4.3.8" />
<PackageVersion Include="ncrontab" Version="3.3.3" />
<PackageVersion Include="NPoco" Version="5.7.1" />
<PackageVersion Include="NPoco.SqlServer" Version="5.7.1" />
<PackageVersion Include="OpenIddict.Abstractions" Version="5.7.0" />
<PackageVersion Include="OpenIddict.AspNetCore" Version="5.7.0" />
<PackageVersion Include="OpenIddict.EntityFrameworkCore" Version="5.7.0" />
<PackageVersion Include="Serilog" Version="3.1.1" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageVersion Include="Serilog.Enrichers.Process" Version="2.0.2" />
<PackageVersion Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<PackageVersion Include="Serilog.Expressions" Version="4.0.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="8.0.0" />
<PackageVersion Include="Serilog.Formatting.Compact" Version="2.0.0" />
<PackageVersion Include="Serilog.Formatting.Compact.Reader" Version="3.0.0" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="8.0.4" />
<PackageVersion Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageVersion Include="Serilog.Sinks.Map" Version="1.0.2" />
<PackageVersion Include="SixLabors.ImageSharp" Version="3.1.7" />
<PackageVersion Include="SixLabors.ImageSharp.Web" Version="3.1.3" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.9.0" />
</ItemGroup>
<!-- Transitive pinned versions (only required because our direct dependencies have vulnerable versions of transitive dependencies) -->
<ItemGroup>
<!-- Both Microsoft.EntityFrameworkCore.SqlServer and NPoco.SqlServer bring in a vulnerable version of Azure.Identity -->
<PackageVersion Include="Azure.Identity" Version="1.13.1" />
<!-- Dazinator.Extensions.FileProviders brings in a vulnerable version of System.Net.Http -->
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<!-- Examine brings in a vulnerable version of System.Security.Cryptography.Xml -->
<PackageVersion Include="System.Security.Cryptography.Xml" Version="8.0.2" />
<!-- Both Dazinator.Extensions.FileProviders and MiniProfiler.AspNetCore.Mvc bring in a vulnerable version of System.Text.RegularExpressions -->
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
<!-- Both OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer bring in a vulnerable version of Microsoft.IdentityModel.JsonWebTokens -->
<PackageVersion Include="Microsoft.IdentityModel.JsonWebTokens" Version="7.7.1" />
<!-- Examine.Lucene bring in a vulnerable version of Lucene.Net.Replicator -->
<PackageVersion Include="Lucene.Net.Replicator" Version="4.8.0-beta00017" />
</ItemGroup>
</Project>
+538 -209
View File
@@ -5,6 +5,10 @@ parameters:
displayName: Run SQL Server Integration Tests
type: boolean
default: false
- name: sqlServerLinuxAcceptanceTests
displayName: Run SQL Server Linux Acceptance Tests
type: boolean
default: false
- name: myGetDeploy
displayName: Deploy to MyGet
type: boolean
@@ -13,6 +17,10 @@ parameters:
displayName: Deploy to NuGet
type: boolean
default: false
- name: npmDeploy
displayName: Deploy to Npm
type: boolean
default: false
- name: buildApiDocs
displayName: Build API docs
type: boolean
@@ -21,11 +29,33 @@ parameters:
displayName: Upload API docs
type: boolean
default: false
- name: forceReleaseTestFilter
displayName: Force to use the release test filters
type: boolean
default: false
- name: integrationNonReleaseTestFilter
displayName: TestFilter used for non-release type builds
type: string
default: '--filter TestCategory!=LongRunning&TestCategory!=NonCritical'
- name: integrationReleaseTestFilter
displayName: TestFilter used for release type builds
type: string
default: ' '
- name: nonWindowsIntegrationNonReleaseTestFilter
displayName: TestFilter used for non-release type builds on non Windows agents
type: string
default: '--filter TestCategory!=LongRunning&TestCategory!=NonCritical'
- name: nonWindowsIntegrationReleaseTestFilter
displayName: TestFilter used for release type builds on non Windows agents
type: string
default: ' '
- name: isNightly
displayName: 'Is nightly build (used for MyGet feed)'
type: boolean
default: false
variables:
nodeVersion: 18.16.0
dotnetVersion: 7.x
dotnetIncludePreviewVersions: true
nodeVersion: 20
solution: umbraco.sln
buildConfiguration: Release
UMBRACO__CMS__GLOBAL__ID: 00000000-0000-0000-0000-000000000042
@@ -33,75 +63,48 @@ variables:
DOTNET_GENERATE_ASPNET_CERTIFICATE: false
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
npm_config_cache: $(Pipeline.Workspace)/.npm_client
NODE_OPTIONS: --max_old_space_size=16384
stages:
###############################################
## Build
###############################################
- stage: Build
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm_client
jobs:
- job: A
displayName: Build Umbraco CMS
pool:
vmImage: 'ubuntu-latest'
vmImage: 'windows-latest'
steps:
- task: NodeTool@0
displayName: Use Node.js $(nodeVersion)
inputs:
versionSpec: $(nodeVersion)
- task: Cache@2
displayName: Cache node_modules
inputs:
key: '"npm_client" | "$(Agent.OS)" | $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/package-lock.json'
restoreKeys: |
"npm_client" | "$(Agent.OS)"
"npm_client"
path: $(npm_config_cache)
- script: npm ci --no-fund --no-audit --prefer-offline
workingDirectory: src/Umbraco.Web.UI.Client
displayName: Run npm ci
- task: gulp@0
displayName: Run gulp build
inputs:
gulpFile: src/Umbraco.Web.UI.Client/gulpfile.js
targets: coreBuild
workingDirectory: src/Umbraco.Web.UI.Client
- checkout: self
submodules: true
- task: UseDotNet@2
displayName: Use .NET $(dotnetVersion)
displayName: Use .NET SDK from global.json
inputs:
version: $(dotnetVersion)
includePreviewVersions: $(dotnetIncludePreviewVersions)
useGlobalJson: true
- template: templates/backoffice-install.yml
- script: npm run build:for:cms
displayName: Run build (Bellissima)
workingDirectory: src/Umbraco.Web.UI.Client
- script: npm ci --no-fund --no-audit --prefer-offline
displayName: Run npm ci (Login)
workingDirectory: src/Umbraco.Web.UI.Login
- script: npm run build
displayName: Run npm build (Login)
workingDirectory: src/Umbraco.Web.UI.Login
- task: DotNetCoreCLI@2
displayName: Run dotnet restore
inputs:
command: restore
projects: $(solution)
- task: DotNetCoreCLI@2
displayName: Run dotnet build
name: build
displayName: Run dotnet build and generate NuGet packages
inputs:
command: build
projects: $(solution)
arguments: '--configuration $(buildConfiguration) --no-restore -p:ContinuousIntegrationBuild=true'
- script: |
version="$(Build.BuildNumber)"
echo "Version: $version"
major="$(echo $version | cut -d '.' -f 1)"
echo "Major version: $major"
echo "##vso[task.setvariable variable=majorVersion;isOutput=true]$major"
displayName: Set major version
name: determineMajorVersion
- script: dotnet pack $(solution) --configuration $(buildConfiguration) --no-build --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg
displayName: Run dotnet pack
- script: |
sha="$(Build.SourceVersion)"
sha=${sha:0:7}
buildnumber="$(Build.BuildNumber)_$(Build.BuildId)_$sha"
echo "##vso[build.updatebuildnumber]$buildnumber"
displayName: Update build number
arguments: '--configuration $(buildConfiguration) --no-restore --property:ContinuousIntegrationBuild=true --property:GeneratePackageOnBuild=true --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg'
- task: PublishPipelineArtifact@1
displayName: Publish nupkg
inputs:
@@ -113,12 +116,37 @@ stages:
targetPath: $(Build.SourcesDirectory)
artifactName: build_output
- job: B
displayName: Build Bellissima Package
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
submodules: true
- template: templates/backoffice-install.yml
- script: npm run build:for:npm
displayName: Run build:for:npm
workingDirectory: src/Umbraco.Web.UI.Client
- bash: |
echo "##[command]Running npm pack"
echo "##[debug]Output directory: $(Build.ArtifactStagingDirectory)"
mkdir $(Build.ArtifactStagingDirectory)/npm
npm pack --pack-destination $(Build.ArtifactStagingDirectory)/npm
mv .npmrc $(Build.ArtifactStagingDirectory)/npm/
displayName: Run npm pack
workingDirectory: src/Umbraco.Web.UI.Client
- task: PublishPipelineArtifact@1
displayName: Publish Bellissima npm artifact
inputs:
targetPath: $(Build.ArtifactStagingDirectory)/npm
artifactName: npm
- stage: Build_Docs
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.buildApiDocs}}))
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.buildApiDocs}}))
displayName: Prepare API Documentation
dependsOn: Build
variables:
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['determineMajorVersion.majorVersion'] ]
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['build.NBGV_VersionMajor'] ]
jobs:
# C# API Reference
- job:
@@ -126,6 +154,10 @@ stages:
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
displayName: Use .NET SDK from global.json
inputs:
useGlobalJson: true
- task: PowerShell@2
displayName: Install DocFX
inputs:
@@ -170,35 +202,45 @@ stages:
displayName: Build js API Reference
pool:
vmImage: 'ubuntu-latest'
variables:
BASE_PATH: /v$(umbracoMajorVersion)/ui
steps:
- task: NodeTool@0
displayName: Use Node.js 10.15.0
inputs:
versionSpec: 10.15.0 # Won't work with higher versions
- script: |
npm ci --no-fund --no-audit --prefer-offline
npx gulp docs
major="$(umbracoMajorVersion)"
echo "major version: $major"
baseUrl="https://apidocs.umbraco.com/v$major/ui/"
echo "baseUrl: $baseUrl"
sed -i "s|baseUrl = .*|baseUrl = '$baseUrl',|" api/index.html
displayName: Generate js Docs
workingDirectory: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Docs
- checkout: self
submodules: true
- template: templates/backoffice-install.yml
- script: npm run storybook:build
displayName: Build Storybook
env:
VITE_BASE_PATH: $(BASE_PATH)/
workingDirectory: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client
- script: sed -i "s|/umbraco/backoffice|$(BASE_PATH)/umbraco/backoffice|" assets/*.js
displayName: Replace BASE_PATH on assets
workingDirectory: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/storybook-static
- task: ArchiveFiles@2
displayName: Archive js Docs
displayName: Archive Storybook
inputs:
rootFolderOrFile: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Docs/api
rootFolderOrFile: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/storybook-static
includeRootFolder: false
archiveFile: $(Build.ArtifactStagingDirectory)/ui-docs.zip
- task: PublishPipelineArtifact@1
displayName: Publish js Docs
displayName: Publish Storybook
inputs:
targetPath: $(Build.ArtifactStagingDirectory)/ui-docs.zip
artifact: ui-docs
- script: npm run generate:ui-api-docs
displayName: Generate API Docs
workingDirectory: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client
- task: ArchiveFiles@2
displayName: Archive UI API Docs
inputs:
rootFolderOrFile: $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/ui-api
includeRootFolder: false
archiveFile: $(Build.ArtifactStagingDirectory)/ui-api-docs.zip
- task: PublishPipelineArtifact@1
displayName: Publish UI API Docs
inputs:
targetPath: $(Build.ArtifactStagingDirectory)/ui-api-docs.zip
artifact: ui-api-docs
###############################################
## Test
@@ -227,21 +269,22 @@ stages:
artifact: build_output
path: $(Build.SourcesDirectory)
- task: UseDotNet@2
displayName: Use .NET $(dotnetVersion)
displayName: Use .NET SDK from global.json
inputs:
version: $(dotnetVersion)
includePreviewVersions: $(dotnetIncludePreviewVersions)
useGlobalJson: true
- task: DotNetCoreCLI@2
displayName: Run dotnet test
inputs:
command: test
projects: '**/*.Tests.UnitTests.csproj'
projects: 'tests/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj'
arguments: '--configuration $(buildConfiguration) --no-build'
testRunTitle: Unit Tests - $(Agent.OS)
- stage: Integration
displayName: Integration Tests
dependsOn: Build
variables:
releaseTestFilter: eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True')
jobs:
# Integration Tests (SQLite)
- job:
@@ -256,217 +299,410 @@ stages:
vmImage: 'macOS-latest'
pool:
vmImage: $(vmImage)
variables:
Tests__Database__DatabaseType: 'Sqlite'
steps:
# Setup test environment
- task: DownloadPipelineArtifact@2
displayName: Download build artifacts
inputs:
artifact: build_output
path: $(Build.SourcesDirectory)
- task: UseDotNet@2
displayName: Use .NET $(dotnetVersion)
displayName: Use .NET SDK from global.json
inputs:
version: $(dotnetVersion)
includePreviewVersions: $(dotnetIncludePreviewVersions)
useGlobalJson: true
# Test
- task: DotNetCoreCLI@2
displayName: Run dotnet test
inputs:
command: test
projects: '**/*.Tests.Integration.csproj'
arguments: '--configuration $(buildConfiguration) --no-build'
projects: 'tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj'
testRunTitle: Integration Tests SQLite - $(Agent.OS)
env:
Tests__Database__DatabaseType: 'Sqlite'
Umbraco__CMS__Global__MainDomLock: 'FileSystemMainDomLock'
${{ if and(eq(variables['Agent.OS'],'Windows_NT'), or(variables.releaseTestFilter, parameters.forceReleaseTestFilter)) }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationReleaseTestFilter}}'
${{ elseif eq(variables['Agent.OS'],'Windows_NT') }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationNonReleaseTestFilter}}'
${{ elseif or(variables.releaseTestFilter, parameters.forceReleaseTestFilter) }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationReleaseTestFilter}}'
${{ else }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationNonReleaseTestFilter}}'
# Integration Tests (SQL Server)
- job:
timeoutInMinutes: 120
condition: or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.sqlServerIntegrationTests}})
timeoutInMinutes: 180
# condition: or(eq(stageDependencies.Build.A.outputs['build.NBGV_PublicRelease'], 'True'), ${{parameters.sqlServerIntegrationTests}}) # Outcommented due to timeouts
condition: eq(${{parameters.sqlServerIntegrationTests}}, True)
displayName: Integration Tests (SQL Server)
strategy:
matrix:
Windows:
vmImage: 'windows-latest'
testDb: LocalDb
connectionString: N/A
Tests__Database__DatabaseType: LocalDb
Tests__Database__SQLServerMasterConnectionString: N/A
Linux:
vmImage: 'ubuntu-latest'
testDb: SqlServer
connectionString: 'Server=localhost,1433;User Id=sa;Password=$(SA_PASSWORD);TrustServerCertificate=true'
SA_PASSWORD: UmbracoIntegration123!
Tests__Database__DatabaseType: SqlServer
Tests__Database__SQLServerMasterConnectionString: 'Server=(local);User Id=sa;Password=$(SA_PASSWORD);TrustServerCertificate=True'
pool:
vmImage: $(vmImage)
variables:
SA_PASSWORD: UmbracoIntegration123!
steps:
# Setup test environment
- task: DownloadPipelineArtifact@2
displayName: Download build artifacts
inputs:
artifact: build_output
path: $(Build.SourcesDirectory)
- task: UseDotNet@2
displayName: Use .NET $(dotnetVersion)
displayName: Use .NET SDK from global.json
inputs:
version: $(dotnetVersion)
includePreviewVersions: $(dotnetIncludePreviewVersions)
- powershell: sqllocaldb start mssqllocaldb
displayName: Start localdb (Windows only)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
- powershell: docker run --name mssql -d -p 1433:1433 -e ACCEPT_EULA=Y -e SA_PASSWORD=$(SA_PASSWORD) -e MSSQL_PID=Developer mcr.microsoft.com/mssql/server:2019-latest
displayName: Start SQL Server (Linux only)
useGlobalJson: true
# Start SQL Server
- powershell: docker run --name mssql -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=$(SA_PASSWORD)" mcr.microsoft.com/mssql/server:2022-latest
displayName: Start SQL Server Docker image (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- pwsh: SqlLocalDB start MSSQLLocalDB
displayName: Start SQL Server LocalDB (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
# Test
- task: DotNetCoreCLI@2
displayName: Run dotnet test
inputs:
command: test
projects: '**/*.Tests.Integration.csproj'
arguments: '--configuration $(buildConfiguration) --no-build'
projects: 'tests/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj'
testRunTitle: Integration Tests SQL Server - $(Agent.OS)
env:
Tests__Database__DatabaseType: $(testDb)
Tests__Database__SQLServerMasterConnectionString: $(connectionString)
Umbraco__CMS__Global__MainDomLock: 'SqlMainDomLock'
${{ if and(eq(variables['Agent.OS'],'Windows_NT'), or(variables.releaseTestFilter, parameters.forceReleaseTestFilter)) }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationReleaseTestFilter}}'
${{ elseif eq(variables['Agent.OS'],'Windows_NT') }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.integrationNonReleaseTestFilter}}'
${{ elseif or(variables.releaseTestFilter, parameters.forceReleaseTestFilter) }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationReleaseTestFilter}}'
${{ else }}:
arguments: '--configuration $(buildConfiguration) --no-build ${{parameters.nonWindowsIntegrationNonReleaseTestFilter}}'
# Stop SQL Server
- pwsh: docker stop mssql
displayName: Stop SQL Server Docker image (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- pwsh: SqlLocalDB stop MSSQLLocalDB
displayName: Stop SQL Server LocalDB (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
- stage: E2E
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm_e2e
displayName: E2E Tests
dependsOn: Build
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm_e2e
# Enable console logging in Release mode
SERILOG__WRITETO__0__NAME: Async
SERILOG__WRITETO__0__ARGS__CONFIGURE__0__NAME: Console
# Set unattended install settings
UMBRACO__CMS__UNATTENDED__INSTALLUNATTENDED: true
UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERNAME: Playwright Test
UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD: UmbracoAcceptance123!
UMBRACO__CMS__UNATTENDED__UNATTENDEDUSEREMAIL: playwright@umbraco.com
# Custom Umbraco settings
UMBRACO__CMS__CONTENT__CONTENTVERSIONCLEANUPPOLICY__ENABLECLEANUP: false
UMBRACO__CMS__GLOBAL__DISABLEELECTIONFORSINGLESERVER: true
UMBRACO__CMS__GLOBAL__INSTALLMISSINGDATABASE: true
UMBRACO__CMS__GLOBAL__ID: 00000000-0000-0000-0000-000000000042
UMBRACO__CMS__GLOBAL__VERSIONCHECKPERIOD: 0
UMBRACO__CMS__GLOBAL__USEHTTPS: true
UMBRACO__CMS__HEALTHCHECKS__NOTIFICATION__ENABLED: false
UMBRACO__CMS__KEEPALIVE__DISABLEKEEPALIVETASK: true
UMBRACO__CMS__WEBROUTING__UMBRACOAPPLICATIONURL: https://localhost:44331/
ASPNETCORE_URLS: https://localhost:44331
jobs:
# E2E Tests
- job:
displayName: E2E Tests
displayName: E2E Tests (SQLite)
variables:
Umbraco__CMS__Unattended__UnattendedUserName: Playwright Test
Umbraco__CMS__Unattended__UnattendedUserPassword: UmbracoAcceptance123!
Umbraco__CMS__Unattended__UnattendedUserEmail: playwright@umbraco.com
ASPNETCORE_URLS: https://localhost:8443
# Connection string
CONNECTIONSTRINGS__UMBRACODBDSN: Data Source=Umbraco;Mode=Memory;Cache=Shared;Foreign Keys=True;Pooling=True
CONNECTIONSTRINGS__UMBRACODBDSN_PROVIDERNAME: Microsoft.Data.Sqlite
strategy:
matrix:
Linux:
vmImage: 'ubuntu-latest'
dockerfile: umbraco-linux.docker
dockerImageName: umbraco-linux
Windows:
vmImage: 'windows-latest'
DOTNET_GENERATE_ASPNET_CERTIFICATE: true # Automatically generate HTTPS development certificate on Windows
# Enable console logging in Release mode
Serilog__WriteTo__0__Name: Async
Serilog__WriteTo__0__Args__configure__0__Name: Console
# Set unattended install settings
Umbraco__CMS__Unattended__InstallUnattended: true
Umbraco__CMS__Global__InstallMissingDatabase: true
UmbracoDatabaseServer: (LocalDB)\MSSQLLocalDB
UmbracoDatabaseName: AcceptanceTestDB
ConnectionStrings__umbracoDbDSN: Server=$(UmbracoDatabaseServer);Database=$(UmbracoDatabaseName);Integrated Security=true;
# Custom Umbraco settings
Umbraco__CMS__Global__VersionCheckPeriod: 0
Umbraco__CMS__Global__UseHttps: true
Umbraco__CMS__HealthChecks__Notification__Enabled: false
Umbraco__CMS__KeepAlive__DisableKeepAliveTask: true
pool:
vmImage: $(vmImage)
steps:
# Setup test environment
- task: DownloadPipelineArtifact@2
displayName: Download nupkg
displayName: Download NuGet artifacts
inputs:
artifact: nupkg
path: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/misc/nupkg
path: $(Agent.BuildDirectory)/app/nupkg
- task: NodeTool@0
displayName: Use Node.js $(nodeVersion)
retryCountOnTaskFailure: 3
inputs:
versionSpec: $(nodeVersion)
- task: Cache@2
displayName: Cache node_modules
inputs:
key: '"npm_e2e" | "$(Agent.OS)" | $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/package-lock.json'
restoreKeys: |
"npm_e2e" | "$(Agent.OS)"
"npm_e2e"
path: $(npm_config_cache)
- pwsh: |
New-Item -Path "." -Name ".env" -ItemType "file" -Value "UMBRACO_USER_LOGIN=$(Umbraco__CMS__Unattended__UnattendedUserEmail)
UMBRACO_USER_PASSWORD=$(Umbraco__CMS__Unattended__UnattendedUserPassword)
URL=$(ASPNETCORE_URLS)"
displayName: Generate .env
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/
- script: npm ci --no-fund --no-audit --prefer-offline
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/
displayName: Run npm ci
- pwsh: sqllocaldb start mssqllocaldb
displayName: Start localdb (Windows only)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
- pwsh: Invoke-Sqlcmd -Query "CREATE DATABASE $env:UmbracoDatabaseName" -ServerInstance $env:UmbracoDatabaseServer
displayName: Create database (Windows only)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
- task: UseDotNet@2
displayName: Use .NET $(dotnetVersion)
displayName: Use .NET SDK from global.json
inputs:
version: $(dotnetVersion)
includePreviewVersions: $(dotnetIncludePreviewVersions)
useGlobalJson: true
- pwsh: |
$sha = 'g$(Build.SourceVersion)'.substring(0, 8)
docker build -t $(dockerImageName):$sha -f $(dockerfile) .
mkdir -p $(Build.ArtifactStagingDirectory)/docker-images
docker save -o $(Build.ArtifactStagingDirectory)/docker-images/$(dockerImageName).$sha.tar $(dockerImageName):$sha
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetapp.pfx -p $(Umbraco__CMS__Unattended__UnattendedUserPassword)
docker run --name $(dockerImageName) -dp 8080:5000 -dp 8443:5001 -e UMBRACO__CMS__GLOBAL__ID=$(UMBRACO__CMS__GLOBAL__ID) -e ASPNETCORE_Kestrel__Certificates__Default__Password="$(Umbraco__CMS__Unattended__UnattendedUserPassword)" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx -v ${HOME}/.aspnet/https:/https/ $(dockerImageName):$sha
docker ps
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
displayName: Build and run container (Linux only)
workingDirectory: tests/Umbraco.Tests.AcceptanceTest/misc
"UMBRACO_USER_LOGIN=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSEREMAIL)
UMBRACO_USER_PASSWORD=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD)
URL=$(ASPNETCORE_URLS)
STORAGE_STAGE_PATH=$(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/playwright/.auth/user.json" | Out-File .env
displayName: Generate .env
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
# Cache and restore NPM packages
- task: Cache@2
displayName: Cache NPM packages
inputs:
key: 'npm_e2e | "$(Agent.OS)" | $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/package-lock.json'
restoreKeys: |
npm_e2e | "$(Agent.OS)"
npm_e2e
path: $(npm_config_cache)
- script: npm ci --no-fund --no-audit --prefer-offline
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
displayName: Restore NPM packages
# Build application
- pwsh: |
dotnet new --install ./nupkg/Umbraco.Templates.*.nupkg
dotnet new umbraco --name AcceptanceTestProject --no-restore --output .
dotnet restore --configfile ./nuget.config
dotnet build --configuration $(buildConfiguration) --no-restore
$cmsVersion = "$(Build.BuildNumber)" -replace "\+",".g"
dotnet new nugetconfig
dotnet nuget add source ./nupkg --name Local
dotnet new install Umbraco.Templates::$cmsVersion
dotnet new umbraco --name UmbracoProject --version $cmsVersion --exclude-gitignore --no-restore --no-update-check
dotnet restore UmbracoProject
cp $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest.UmbracoProject/*.cs UmbracoProject
dotnet build UmbracoProject --configuration $(buildConfiguration) --no-restore
dotnet dev-certs https
$process = Start-Process -FilePath "dotnet" -ArgumentList "run --configuration $(buildConfiguration) --no-build --no-launch-profile 2>&1" -PassThru -RedirectStandardOutput $(Build.ArtifactStagingDirectory)/playwright.log
displayName: Build application
workingDirectory: $(Agent.BuildDirectory)/app
# Run application
- bash: |
nohup dotnet run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile > $(Build.ArtifactStagingDirectory)/playwright.log 2>&1 &
echo "##vso[task.setvariable variable=AcceptanceTestProcessId]$!"
displayName: Run application (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
workingDirectory: $(Agent.BuildDirectory)/app
- pwsh: |
$process = Start-Process dotnet "run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile 2>&1" -PassThru -NoNewWindow -RedirectStandardOutput $(Build.ArtifactStagingDirectory)/playwright.log
Write-Host "##vso[task.setvariable variable=AcceptanceTestProcessId]$($process.Id)"
displayName: Run application (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
displayName: Build and run app (Windows only)
workingDirectory: tests/Umbraco.Tests.AcceptanceTest/misc
workingDirectory: $(Agent.BuildDirectory)/app
# Ensures we have the package wait-on installed
- pwsh: npm install wait-on
displayName: Install wait-on package
# Wait for application to start responding to requests
- pwsh: npx wait-on -v --interval 1000 --timeout 120000 $(ASPNETCORE_URLS)
displayName: Wait for app
displayName: Wait for application
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Install Playwright and dependencies
- pwsh: npx playwright install --with-deps
displayName: Install Playwright
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
- pwsh: npm run test --ignore-certificate-errors
displayName: Run Playwright (Desktop)
# Test
- pwsh: npm run smokeTestSqlite --ignore-certificate-errors
displayName: Run Playwright tests
continueOnError: true
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
env:
CI: true
CommitId: $(Build.SourceVersion)
AgentOs: $(Agent.OS)
# Stop application
- bash: kill -15 $(AcceptanceTestProcessId)
displayName: Stop application (Linux)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Linux'))
- pwsh: Stop-Process -Id $(AcceptanceTestProcessId)
displayName: Stop application (Windows)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Windows_NT'))
# Copy artifacts
- pwsh: |
docker logs $(dockerImageName) > $(Build.ArtifactStagingDirectory)/playwright.log 2>&1
docker stop $(dockerImageName)
condition: eq(variables['Agent.OS'], 'Linux')
displayName: Stop app (Linux only)
- pwsh: Stop-Process $env:AcceptanceTestProcessId
condition: eq(variables['Agent.OS'], 'Windows_NT')
displayName: Stop app (Windows only)
- task: PowerShell@2
displayName: Check if artifacts folder exists
inputs:
targetType: inline
script: |
$MyVariable = Test-Path -Path $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/results
Write-Host "##vso[task.setvariable variable=resultFolderExists;]$MyVariable"
- task: CopyFiles@2
displayName: Prepare artifacts
condition: eq(variables.resultFolderExists, 'True')
inputs:
sourceFolder: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/results/
targetFolder: $(Build.ArtifactStagingDirectory)/playwright
if (Test-Path tests/Umbraco.Tests.AcceptanceTest/results/*) {
Copy-Item tests/Umbraco.Tests.AcceptanceTest/results $(Build.ArtifactStagingDirectory) -Recurse
}
displayName: Copy Playwright results
condition: succeededOrFailed()
# Publish
- task: PublishPipelineArtifact@1
condition: always()
displayName: Publish test artifacts
condition: succeededOrFailed()
inputs:
targetPath: $(Build.ArtifactStagingDirectory)
artifact: 'E2E artifacts - $(Agent.OS) - Attempt #$(System.JobAttempt)'
artifact: 'Acceptance Tests - $(Agent.JobName) - Attempt #$(System.JobAttempt)'
- job:
displayName: E2E Tests (SQL Server)
variables:
# Connection string
CONNECTIONSTRINGS__UMBRACODBDSN: Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Umbraco.mdf;Integrated Security=True
CONNECTIONSTRINGS__UMBRACODBDSN_PROVIDERNAME: Microsoft.Data.SqlClient
strategy:
matrix:
${{ if eq(parameters.sqlServerLinuxAcceptanceTests, True) }} :
Linux:
vmImage: 'ubuntu-latest'
SA_PASSWORD: $(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD)
CONNECTIONSTRINGS__UMBRACODBDSN: 'Server=(local);Database=Umbraco;User Id=sa;Password=$(SA_PASSWORD);TrustServerCertificate=True'
Windows:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
steps:
# Setup test environment
- task: DownloadPipelineArtifact@2
displayName: Download NuGet artifacts
inputs:
artifact: nupkg
path: $(Agent.BuildDirectory)/app/nupkg
- task: NodeTool@0
displayName: Use Node.js $(nodeVersion)
inputs:
versionSpec: $(nodeVersion)
- task: UseDotNet@2
displayName: Use .NET SDK from global.json
inputs:
useGlobalJson: true
- pwsh: |
"UMBRACO_USER_LOGIN=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSEREMAIL)
UMBRACO_USER_PASSWORD=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD)
URL=$(ASPNETCORE_URLS)
STORAGE_STAGE_PATH=$(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/playwright/.auth/user.json" | Out-File .env
displayName: Generate .env
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
# Cache and restore NPM packages
- task: Cache@2
displayName: Cache NPM packages
inputs:
key: 'npm_e2e | "$(Agent.OS)" | $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/package-lock.json'
restoreKeys: |
npm_e2e | "$(Agent.OS)"
npm_e2e
path: $(npm_config_cache)
- script: npm ci --no-fund --no-audit --prefer-offline
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
displayName: Restore NPM packages
# Build application
- pwsh: |
$cmsVersion = "$(Build.BuildNumber)" -replace "\+",".g"
dotnet new nugetconfig
dotnet nuget add source ./nupkg --name Local
dotnet new install Umbraco.Templates::$cmsVersion
dotnet new umbraco --name UmbracoProject --version $cmsVersion --exclude-gitignore --no-restore --no-update-check
dotnet restore UmbracoProject
cp $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest.UmbracoProject/*.cs UmbracoProject
dotnet build UmbracoProject --configuration $(buildConfiguration) --no-restore
dotnet dev-certs https
displayName: Build application
workingDirectory: $(Agent.BuildDirectory)/app
# Start SQL Server
- powershell: docker run --name mssql -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=$(SA_PASSWORD)" mcr.microsoft.com/mssql/server:2022-latest
displayName: Start SQL Server Docker image (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- pwsh: SqlLocalDB start MSSQLLocalDB
displayName: Start SQL Server LocalDB (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
# Run application
- bash: |
nohup dotnet run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile > $(Build.ArtifactStagingDirectory)/playwright.log 2>&1 &
echo "##vso[task.setvariable variable=AcceptanceTestProcessId]$!"
displayName: Run application (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
workingDirectory: $(Agent.BuildDirectory)/app
- pwsh: |
$process = Start-Process dotnet "run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile 2>&1" -PassThru -NoNewWindow -RedirectStandardOutput $(Build.ArtifactStagingDirectory)/playwright.log
Write-Host "##vso[task.setvariable variable=AcceptanceTestProcessId]$($process.Id)"
displayName: Run application (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
workingDirectory: $(Agent.BuildDirectory)/app
# Wait for application to start responding to requests
- pwsh: npx wait-on -v --interval 1000 --timeout 120000 $(ASPNETCORE_URLS)
displayName: Wait for application
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Install Playwright and dependencies
- pwsh: npx playwright install --with-deps
displayName: Install Playwright
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Test
- pwsh: npm run smokeTest --ignore-certificate-errors
displayName: Run Playwright tests
continueOnError: true
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
env:
CI: true
CommitId: $(Build.SourceVersion)
AgentOs: $(Agent.OS)
# Stop application
- bash: kill -15 $(AcceptanceTestProcessId)
displayName: Stop application (Linux)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Linux'))
- pwsh: Stop-Process -Id $(AcceptanceTestProcessId)
displayName: Stop application (Windows)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Windows_NT'))
# Stop SQL Server
- pwsh: docker stop mssql
displayName: Stop SQL Server Docker image (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- pwsh: SqlLocalDB stop MSSQLLocalDB
displayName: Stop SQL Server LocalDB (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
# Copy artifacts
- pwsh: |
if (Test-Path tests/Umbraco.Tests.AcceptanceTest/results/*) {
Copy-Item tests/Umbraco.Tests.AcceptanceTest/results $(Build.ArtifactStagingDirectory) -Recurse
}
displayName: Copy Playwright results
condition: succeededOrFailed()
# Publish
- task: PublishPipelineArtifact@1
displayName: Publish test artifacts
condition: succeededOrFailed()
inputs:
targetPath: $(Build.ArtifactStagingDirectory)
artifact: 'Acceptance Tests - $(Agent.JobName) - Attempt #$(System.JobAttempt)'
###############################################
## Release
@@ -476,8 +712,8 @@ stages:
dependsOn:
- Unit
- Integration
# - E2E # TODO: Enable when stable.
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.myGetDeploy}}))
# - E2E
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.myGetDeploy}}))
jobs:
- job:
displayName: Push to pre-release feed
@@ -494,13 +730,51 @@ stages:
command: 'push'
packagesToPush: $(Build.ArtifactStagingDirectory)/**/*.nupkg
nuGetFeedType: 'external'
publishFeedCredentials: 'MyGet - Pre-releases'
${{ if eq(parameters.isNightly, true) }}:
publishFeedCredentials: 'MyGet - Umbraco Nightly'
${{ else }}:
publishFeedCredentials: 'MyGet - Pre-releases'
- job:
displayName: Push to pre-release feed (npm)
steps:
- checkout: none
- download: current
artifact: npm
- bash: |
# Check if we are on a nightly build
if [ $isNightly = "False" ]; then
echo "##[debug]Prerelease build detected"
registry="https://www.myget.org/F/umbracoprereleases/npm/"
else
echo "##[debug]Nightly build detected"
registry="https://www.myget.org/F/umbraconightly/npm/"
fi
echo "@umbraco-cms:registry=$registry" >> .npmrc
env:
isNightly: ${{parameters.isNightly}}
workingDirectory: $(Pipeline.Workspace)/npm
displayName: Add scoped registry to .npmrc
- task: npmAuthenticate@0
displayName: Authenticate with npm (MyGet)
inputs:
workingFile: '$(Pipeline.Workspace)/npm/.npmrc'
customEndpoint: 'MyGet (npm) - Umbracoprereleases, MyGet (npm) - Umbraconightly'
- bash: |
# Setup temp npm project to load in defaults from the local .npmrc
npm init -y
# Find the first .tgz file in the current directory and publish it
files=( ./*.tgz )
npm publish "${files[0]}"
displayName: Push to npm (MyGet)
workingDirectory: $(Pipeline.Workspace)/npm
- stage: Deploy_NuGet
displayName: NuGet release
dependsOn:
- Deploy_MyGet
- Build_Docs
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.nuGetDeploy}}))
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.nuGetDeploy}}))
jobs:
- job:
displayName: Push to NuGet
@@ -519,16 +793,46 @@ stages:
nuGetFeedType: 'external'
publishFeedCredentials: 'NuGet - Umbraco.*'
- stage: Deploy_Npm
displayName: Npm release
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.npmDeploy}}))
dependsOn:
- Deploy_NuGet
jobs:
- job: Publish
displayName: Push to NPM
steps:
- checkout: none
- download: current
artifact: npm
- bash: echo "@umbraco-cms:registry=https://registry.npmjs.org" >> .npmrc
workingDirectory: $(Pipeline.Workspace)/npm
displayName: Add scoped registry to .npmrc
- task: npmAuthenticate@0
displayName: Authenticate with npm
inputs:
workingFile: $(Pipeline.Workspace)/npm/.npmrc
customEndpoint: 'NPM - Umbraco Backoffice'
- script: |
# Setup temp npm project to load in defaults from the local .npmrc
npm init -y
# Find the first .tgz file in the current directory and publish it
files=( ./*.tgz )
npm publish "${files[0]}"
displayName: Push to npm
workingDirectory: $(Pipeline.Workspace)/npm
- stage: Upload_API_Docs
pool:
vmImage: 'windows-latest' # Apparently AzureFileCopy is windows only :(
variables:
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['determineMajorVersion.majorVersion'] ]
displayName: Upload API Documention
umbracoMajorVersion: $[ stageDependencies.Build.A.outputs['build.NBGV_VersionMajor'] ]
displayName: Upload API Documentation
dependsOn:
- Build
- Deploy_NuGet
condition: and(succeeded(), or(startsWith(variables['Build.SourceBranch'], 'refs/heads/release/'), ${{parameters.uploadApiDocs}}))
condition: and(succeeded(), or(eq(dependencies.Build.outputs['A.build.NBGV_PublicRelease'], 'True'), ${{parameters.uploadApiDocs}}))
jobs:
- job:
displayName: Upload C# Docs
@@ -552,8 +856,9 @@ stages:
storage: umbracoapidocs
ContainerName: '$web'
BlobPrefix: v$(umbracoMajorVersion)/csharp
CleanTargetBeforeCopy: true
- job:
displayName: Upload js Docs
displayName: Upload Storybook
steps:
- checkout: none
- task: DownloadPipelineArtifact@2
@@ -566,7 +871,7 @@ stages:
archiveFilePatterns: $(Build.SourcesDirectory)/ui-docs.zip
destinationFolder: $(Build.ArtifactStagingDirectory)/ui-docs
- task: AzureFileCopy@4
displayName: 'Copy UI Docs to blob storage'
displayName: 'Copy Storybook to blob storage'
inputs:
SourcePath: '$(Build.ArtifactStagingDirectory)/ui-docs/*'
azureSubscription: umbraco-storage
@@ -574,3 +879,27 @@ stages:
storage: umbracoapidocs
ContainerName: '$web'
BlobPrefix: v$(umbracoMajorVersion)/ui
CleanTargetBeforeCopy: true
- job:
displayName: Upload UI API Docs
steps:
- checkout: none
- task: DownloadPipelineArtifact@2
displayName: Download artifact
inputs:
artifact: ui-api-docs
path: $(Build.SourcesDirectory)
- task: ExtractFiles@1
inputs:
archiveFilePatterns: $(Build.SourcesDirectory)/ui-api-docs.zip
destinationFolder: $(Build.ArtifactStagingDirectory)/ui-api-docs
- task: AzureFileCopy@4
displayName: 'Copy UI API Docs to blob storage'
inputs:
SourcePath: '$(Build.ArtifactStagingDirectory)/ui-api-docs/*'
azureSubscription: umbraco-storage
Destination: AzureBlob
storage: umbracoapidocs
ContainerName: '$web'
BlobPrefix: v$(umbracoMajorVersion)/ui-api
CleanTargetBeforeCopy: true
+399
View File
@@ -0,0 +1,399 @@
name: Nightly_E2E_Test_$(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
pr: none
trigger: none
# schedules:
# - cron: '0 0 * * *'
# displayName: Daily midnight build
# branches:
# include:
# - v14/dev
variables:
nodeVersion: 20
solution: umbraco.sln
buildConfiguration: Release
UMBRACO__CMS__GLOBAL__ID: 00000000-0000-0000-0000-000000000042
DOTNET_NOLOGO: true
DOTNET_GENERATE_ASPNET_CERTIFICATE: false
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
npm_config_cache: $(Pipeline.Workspace)/.npm_client
NODE_OPTIONS: --max_old_space_size=16384
parameters:
- name: runSmokeTests
displayName: Run the smoke tests
type: boolean
default: false
stages:
###############################################
## Build
###############################################
- stage: Build
jobs:
- job: A
displayName: Build Umbraco CMS
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
fetchDepth: 0
submodules: true
- task: UseDotNet@2
displayName: Use .NET SDK from global.json
inputs:
useGlobalJson: true
- template: templates/backoffice-install.yml
- script: npm run build:for:cms
displayName: Run build (Bellissima)
workingDirectory: src/Umbraco.Web.UI.Client
- script: npm ci --no-fund --no-audit --prefer-offline
displayName: Run npm ci (Login)
workingDirectory: src/Umbraco.Web.UI.Login
- script: npm run build
displayName: Run npm build (Login)
workingDirectory: src/Umbraco.Web.UI.Login
- task: DotNetCoreCLI@2
displayName: Run dotnet restore
inputs:
command: restore
projects: $(solution)
- task: DotNetCoreCLI@2
name: build
displayName: Run dotnet build and generate NuGet packages
inputs:
command: build
projects: $(solution)
arguments: '--configuration $(buildConfiguration) --no-restore --property:ContinuousIntegrationBuild=true --property:GeneratePackageOnBuild=true --property:PackageOutputPath=$(Build.ArtifactStagingDirectory)/nupkg'
- task: PublishPipelineArtifact@1
displayName: Publish nupkg
inputs:
targetPath: $(Build.ArtifactStagingDirectory)/nupkg
artifactName: nupkg
- task: PublishPipelineArtifact@1
displayName: Publish build artifacts
inputs:
targetPath: $(Build.SourcesDirectory)
artifactName: build_output
- stage: E2E
displayName: E2E Tests
dependsOn: Build
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm_e2e
# Enable console logging in Release mode
SERILOG__WRITETO__0__NAME: Async
SERILOG__WRITETO__0__ARGS__CONFIGURE__0__NAME: Console
# Set unattended install settings
UMBRACO__CMS__UNATTENDED__INSTALLUNATTENDED: true
UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERNAME: Playwright Test
UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD: UmbracoAcceptance123!
UMBRACO__CMS__UNATTENDED__UNATTENDEDUSEREMAIL: playwright@umbraco.com
# Custom Umbraco settings
UMBRACO__CMS__CONTENT__CONTENTVERSIONCLEANUPPOLICY__ENABLECLEANUP: false
UMBRACO__CMS__GLOBAL__DISABLEELECTIONFORSINGLESERVER: true
UMBRACO__CMS__GLOBAL__INSTALLMISSINGDATABASE: true
UMBRACO__CMS__GLOBAL__ID: 00000000-0000-0000-0000-000000000042
UMBRACO__CMS__GLOBAL__VERSIONCHECKPERIOD: 0
UMBRACO__CMS__GLOBAL__USEHTTPS: true
UMBRACO__CMS__HEALTHCHECKS__NOTIFICATION__ENABLED: false
UMBRACO__CMS__KEEPALIVE__DISABLEKEEPALIVETASK: true
UMBRACO__CMS__WEBROUTING__UMBRACOAPPLICATIONURL: https://localhost:44331/
ASPNETCORE_URLS: https://localhost:44331
jobs:
# E2E Tests
- job:
displayName: E2E Tests (SQLite)
timeoutInMinutes: 180
variables:
# Connection string
CONNECTIONSTRINGS__UMBRACODBDSN: Data Source=Umbraco;Mode=Memory;Cache=Shared;Foreign Keys=True;Pooling=True
CONNECTIONSTRINGS__UMBRACODBDSN_PROVIDERNAME: Microsoft.Data.Sqlite
strategy:
matrix:
Linux:
vmImage: 'ubuntu-latest'
Windows:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
steps:
# Setup test environment
- task: DownloadPipelineArtifact@2
displayName: Download NuGet artifacts
inputs:
artifact: nupkg
path: $(Agent.BuildDirectory)/app/nupkg
- task: NodeTool@0
displayName: Use Node.js $(nodeVersion)
retryCountOnTaskFailure: 3
inputs:
versionSpec: $(nodeVersion)
- task: UseDotNet@2
displayName: Use .NET SDK from global.json
inputs:
useGlobalJson: true
- pwsh: |
"UMBRACO_USER_LOGIN=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSEREMAIL)
UMBRACO_USER_PASSWORD=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD)
URL=$(ASPNETCORE_URLS)
STORAGE_STAGE_PATH=$(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/playwright/.auth/user.json" | Out-File .env
displayName: Generate .env
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
# Cache and restore NPM packages
- task: Cache@2
displayName: Cache NPM packages
inputs:
key: 'npm_e2e | "$(Agent.OS)" | $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/package-lock.json'
restoreKeys: |
npm_e2e | "$(Agent.OS)"
npm_e2e
path: $(npm_config_cache)
- script: npm ci --no-fund --no-audit --prefer-offline
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
displayName: Restore NPM packages
# Build application
- pwsh: |
$cmsVersion = "$(Build.BuildNumber)" -replace "\+",".g"
dotnet new nugetconfig
dotnet nuget add source ./nupkg --name Local
dotnet new install Umbraco.Templates::$cmsVersion
dotnet new umbraco --name UmbracoProject --version $cmsVersion --exclude-gitignore --no-restore --no-update-check
dotnet restore UmbracoProject
cp $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest.UmbracoProject/*.cs UmbracoProject
dotnet build UmbracoProject --configuration $(buildConfiguration) --no-restore
dotnet dev-certs https
displayName: Build application
workingDirectory: $(Agent.BuildDirectory)/app
# Run application
- bash: |
nohup dotnet run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile > $(Build.ArtifactStagingDirectory)/playwright.log 2>&1 &
echo "##vso[task.setvariable variable=AcceptanceTestProcessId]$!"
displayName: Run application (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
workingDirectory: $(Agent.BuildDirectory)/app
- pwsh: |
$process = Start-Process dotnet "run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile 2>&1" -PassThru -NoNewWindow -RedirectStandardOutput $(Build.ArtifactStagingDirectory)/playwright.log
Write-Host "##vso[task.setvariable variable=AcceptanceTestProcessId]$($process.Id)"
displayName: Run application (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
workingDirectory: $(Agent.BuildDirectory)/app
# Ensures we have the package wait-on installed
- pwsh: npm install wait-on
displayName: Install wait-on package
# Wait for application to start responding to requests
- pwsh: npx wait-on -v --interval 1000 --timeout 120000 $(ASPNETCORE_URLS)
displayName: Wait for application
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Install Playwright and dependencies
- pwsh: npx playwright install --with-deps
displayName: Install Playwright
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Test
- ${{ if eq(parameters.runSmokeTests, true) }}:
pwsh: npm run smokeTestSqlite --ignore-certificate-errors
${{ else }}:
pwsh: npm run testSqlite --ignore-certificate-errors
displayName: Run Playwright tests
continueOnError: true
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
env:
CI: true
CommitId: $(Build.SourceVersion)
AgentOs: $(Agent.OS)
# Stop application
- bash: kill -15 $(AcceptanceTestProcessId)
displayName: Stop application (Linux)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Linux'))
- pwsh: Stop-Process -Id $(AcceptanceTestProcessId)
displayName: Stop application (Windows)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Windows_NT'))
# Copy artifacts
- pwsh: |
if (Test-Path tests/Umbraco.Tests.AcceptanceTest/results/*) {
Copy-Item tests/Umbraco.Tests.AcceptanceTest/results $(Build.ArtifactStagingDirectory) -Recurse
}
displayName: Copy Playwright results
condition: succeededOrFailed()
# Publish
- task: PublishPipelineArtifact@1
displayName: Publish test artifacts
condition: succeededOrFailed()
inputs:
targetPath: $(Build.ArtifactStagingDirectory)
artifact: 'Acceptance Tests - $(Agent.JobName) - Attempt #$(System.JobAttempt)'
- job:
displayName: E2E Tests (SQL Server)
timeoutInMinutes: 180
variables:
# Connection string
CONNECTIONSTRINGS__UMBRACODBDSN: Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Umbraco.mdf;Integrated Security=True
CONNECTIONSTRINGS__UMBRACODBDSN_PROVIDERNAME: Microsoft.Data.SqlClient
strategy:
matrix:
Linux:
vmImage: 'ubuntu-latest'
SA_PASSWORD: $(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD)
CONNECTIONSTRINGS__UMBRACODBDSN: 'Server=(local);Database=Umbraco;User Id=sa;Password=$(SA_PASSWORD);TrustServerCertificate=True'
Windows:
vmImage: 'windows-latest'
pool:
vmImage: $(vmImage)
steps:
# Setup test environment
- task: DownloadPipelineArtifact@2
displayName: Download NuGet artifacts
inputs:
artifact: nupkg
path: $(Agent.BuildDirectory)/app/nupkg
- task: NodeTool@0
displayName: Use Node.js $(nodeVersion)
inputs:
versionSpec: $(nodeVersion)
- task: UseDotNet@2
displayName: Use .NET SDK from global.json
inputs:
useGlobalJson: true
- pwsh: |
"UMBRACO_USER_LOGIN=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSEREMAIL)
UMBRACO_USER_PASSWORD=$(UMBRACO__CMS__UNATTENDED__UNATTENDEDUSERPASSWORD)
URL=$(ASPNETCORE_URLS)
STORAGE_STAGE_PATH=$(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/playwright/.auth/user.json" | Out-File .env
displayName: Generate .env
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
# Cache and restore NPM packages
- task: Cache@2
displayName: Cache NPM packages
inputs:
key: 'npm_e2e | "$(Agent.OS)" | $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest/package-lock.json'
restoreKeys: |
npm_e2e | "$(Agent.OS)"
npm_e2e
path: $(npm_config_cache)
- script: npm ci --no-fund --no-audit --prefer-offline
workingDirectory: $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest
displayName: Restore NPM packages
# Build application
- pwsh: |
$cmsVersion = "$(Build.BuildNumber)" -replace "\+",".g"
dotnet new nugetconfig
dotnet nuget add source ./nupkg --name Local
dotnet new install Umbraco.Templates::$cmsVersion
dotnet new umbraco --name UmbracoProject --version $cmsVersion --exclude-gitignore --no-restore --no-update-check
dotnet restore UmbracoProject
cp $(Build.SourcesDirectory)/tests/Umbraco.Tests.AcceptanceTest.UmbracoProject/*.cs UmbracoProject
dotnet build UmbracoProject --configuration $(buildConfiguration) --no-restore
dotnet dev-certs https
displayName: Build application
workingDirectory: $(Agent.BuildDirectory)/app
# Start SQL Server
- powershell: docker run --name mssql -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=$(SA_PASSWORD)" mcr.microsoft.com/mssql/server:2022-latest
displayName: Start SQL Server Docker image (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- pwsh: SqlLocalDB start MSSQLLocalDB
displayName: Start SQL Server LocalDB (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
# Run application
- bash: |
nohup dotnet run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile > $(Build.ArtifactStagingDirectory)/playwright.log 2>&1 &
echo "##vso[task.setvariable variable=AcceptanceTestProcessId]$!"
displayName: Run application (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
workingDirectory: $(Agent.BuildDirectory)/app
- pwsh: |
$process = Start-Process dotnet "run --project UmbracoProject --configuration $(buildConfiguration) --no-build --no-launch-profile 2>&1" -PassThru -NoNewWindow -RedirectStandardOutput $(Build.ArtifactStagingDirectory)/playwright.log
Write-Host "##vso[task.setvariable variable=AcceptanceTestProcessId]$($process.Id)"
displayName: Run application (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
workingDirectory: $(Agent.BuildDirectory)/app
# Ensures we have the package wait-on installed
- pwsh: npm install wait-on
displayName: Install wait-on package
# Wait for application to start responding to requests
- pwsh: npx wait-on -v --interval 1000 --timeout 120000 $(ASPNETCORE_URLS)
displayName: Wait for application
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Install Playwright and dependencies
- pwsh: npx playwright install --with-deps
displayName: Install Playwright
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
# Test
- ${{ if eq(parameters.runSmokeTests, true) }}:
pwsh: npm run smokeTest --ignore-certificate-errors
${{ else }}:
pwsh: npm run test --ignore-certificate-errors
displayName: Run Playwright tests
continueOnError: true
workingDirectory: tests/Umbraco.Tests.AcceptanceTest
env:
CI: true
CommitId: $(Build.SourceVersion)
AgentOs: $(Agent.OS)
# Stop application
- bash: kill -15 $(AcceptanceTestProcessId)
displayName: Stop application (Linux)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Linux'))
- pwsh: Stop-Process -Id $(AcceptanceTestProcessId)
displayName: Stop application (Windows)
condition: and(succeeded(), ne(variables.AcceptanceTestProcessId, ''), eq(variables['Agent.OS'], 'Windows_NT'))
# Stop SQL Server
- pwsh: docker stop mssql
displayName: Stop SQL Server Docker image (Linux)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))
- pwsh: SqlLocalDB stop MSSQLLocalDB
displayName: Stop SQL Server LocalDB (Windows)
condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
# Copy artifacts
- pwsh: |
if (Test-Path tests/Umbraco.Tests.AcceptanceTest/results/*) {
Copy-Item tests/Umbraco.Tests.AcceptanceTest/results $(Build.ArtifactStagingDirectory) -Recurse
}
displayName: Copy Playwright results
condition: succeededOrFailed()
# Publish
- task: PublishPipelineArtifact@1
displayName: Publish test artifacts
condition: succeededOrFailed()
inputs:
targetPath: $(Build.ArtifactStagingDirectory)
artifact: 'Acceptance Tests - $(Agent.JobName) - Attempt #$(System.JobAttempt)'
+35
View File
@@ -0,0 +1,35 @@
name: Nightly_$(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
pr: none
trigger: none
schedules:
- cron: '0 0 * * *'
displayName: Daily midnight build
branches:
include:
- v10/dev
- v12/dev
- v13/dev
- v14/dev
steps:
- checkout: none
- task: TriggerBuild@4
inputs:
definitionIsInCurrentTeamProject: true
buildDefinition: '301'
queueBuildForUserThatTriggeredBuild: true
ignoreSslCertificateErrors: false
useSameSourceVersion: false
useCustomSourceVersion: false
useSameBranch: true
waitForQueuedBuildsToFinish: false
storeInEnvironmentVariable: false
templateParameters: 'sqlServerIntegrationTests: true, forceReleaseTestFilter: true, myGetDeploy: true, isNightly: true'
authenticationMethod: 'OAuth Token'
enableBuildInQueueCondition: false
dependentOnSuccessfulBuildCondition: false
dependentOnFailedBuildCondition: false
checkbuildsoncurrentbranch: false
failTaskIfConditionsAreNotFulfilled: false
+31
View File
@@ -0,0 +1,31 @@
steps:
- task: NodeTool@0
displayName: Use Node.js
retryCountOnTaskFailure: 3
inputs:
versionSource: 'fromFile'
versionFilePath: src/Umbraco.Web.UI.Client/.nvmrc
- bash: |
echo "##[command]Install nbgv"
dotnet tool install --tool-path . nbgv
echo "##[command]Running nbgv get-version"
PACKAGE_VERSION=$(nbgv get-version -v NpmPackageVersion)
echo "##[command]Running npm version"
echo "##[debug]Version: $PACKAGE_VERSION"
cd src/Umbraco.Web.UI.Client
npm version $PACKAGE_VERSION --allow-same-version --no-git-tag-version
displayName: Set NPM Version
- task: Cache@2
displayName: Cache node_modules
inputs:
key: '"npm_client" | "$(Agent.OS)"| $(Build.SourcesDirectory)/src/Umbraco.Web.UI.Client/package-lock.json'
restoreKeys: |
"npm_client" | "$(Agent.OS)"
"npm_client"
path: $(npm_config_cache)
- script: npm ci --no-fund --no-audit --prefer-offline
displayName: Run npm ci (Bellissima)
workingDirectory: src/Umbraco.Web.UI.Client
+6
View File
@@ -0,0 +1,6 @@
{
"sdk": {
"version": "8.0.300",
"rollForward": "latestFeature"
}
}
-119
View File
@@ -1,119 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
</configSections>
<appSettings>
<add key="Umbraco.Core.ConfigurationStatus" value="6.0.0"/>
<add key="Umbraco.Core.ReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/VSEnterpriseHelper.axd,~/.well-known" />
<add key="Umbraco.Core.ReservedPaths" value="~/install/"/>
<add key="Umbraco.Core.Path" value="~/umbraco"/>
<add key="Umbraco.Core.HideTopLevelNodeFromPath" value="true"/>
<add key="Umbraco.Core.TimeOutInMinutes" value="20"/>
<add key="Umbraco.Core.DefaultUILanguage" value="en"/>
<add key="Umbraco.Core.UseHttps" value="false"/>
<add key="dataAnnotations:dataTypeAttribute:disableRegEx" value="false"/>
</appSettings>
<connectionStrings>
<add name="umbracoDbDSN" connectionString="Datasource=|DataDirectory|UmbracoNPocoTests.sdf;Flush Interval=1;" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0"/>
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</DbProviderFactories>
</system.data>
<system.web>
<httpRuntime targetFramework="4.5"/>
<compilation defaultLanguage="c#" debug="true" batch="false" targetFramework="4.0"></compilation>
<machineKey validationKey="5E7B955FCE36F5F2A867C2A0D85DC61E7FEA9E15F1561E8386F78BFE9EE23FF18B21E6A44AA17300B3B9D5DBEB37AA61A2C73884A5BBEDA6D3B14BA408A7A8CD" decryptionKey="116B853D031219E404E088FCA0986D6CF2DFA77E1957B59FCC9404B8CA3909A1" validation="SHA1" decryption="AES"/>
<!--<trust level="Medium" originUrl=".*"/>-->
<!-- Sitemap provider-->
<siteMap defaultProvider="UmbracoSiteMapProvider" enabled="true">
<providers>
<clear/>
<add name="UmbracoSiteMapProvider" type="umbraco.presentation.nodeFactory.UmbracoSiteMapProvider" defaultDescriptionAlias="description" securityTrimmingEnabled="true"/>
</providers>
</siteMap>
<!-- Membership Provider -->
<membership defaultProvider="UmbracoMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="UmbracoMembershipProvider" type="Umbraco.Web.Security.Providers.MembersMembershipProvider, Umbraco.Web" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" useLegacyEncoding="false" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" defaultMemberTypeAlias="Member" passwordFormat="Hashed"/>
</providers>
</membership>
</system.web>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.5.0" newVersion="1.2.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-5.2.7.0" newVersion="5.2.7.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0-4.0.3.0" newVersion="4.0.3.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0-4.0.1.1" newVersion="4.0.1.1"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0-4.1.4.0" newVersion="4.1.4.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
@@ -1,41 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Umbraco.Tests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Umbraco.Tests")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("33ddf9b7-505c-4a12-8370-7fee9de5df6d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
// Internals must be visible to DynamicProxyGenAssembly2
// in order to mock loggers loggers with types from the assembly
// I.E. Mock.Of<ILogger<TestControllerFactory>>()
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
@@ -1,43 +0,0 @@
using System;
using System.Collections.Generic;
using NUnit.Framework;
using Umbraco.Cms.Core.Models.PublishedContent;
namespace Umbraco.Tests.Published
{
[TestFixture]
public class ModelTypeTests
{
//TODO these is not easy to move to the Unittest project due to underlysing NotImplementedException of Type.IsSZArray
[Test]
public void ModelTypeToStringTests()
{
var modelType = ModelType.For("alias1");
var modelTypeArray = modelType.MakeArrayType();
Assert.AreEqual("{alias1}", modelType.ToString());
// there's an "*" there because the arrays are not true SZArray - but that changes when we map
Assert.AreEqual("{alias1}[*]", modelTypeArray.ToString());
var enumArray = typeof(IEnumerable<>).MakeGenericType(modelTypeArray);
Assert.AreEqual("System.Collections.Generic.IEnumerable`1[{alias1}[*]]", enumArray.ToString());
}
[Test]
public void ModelTypeFullNameTests()
{
Assert.AreEqual("{alias1}", ModelType.For("alias1").FullName);
Type type = ModelType.For("alias1");
Assert.AreEqual("{alias1}", type.FullName);
// there's an "*" there because the arrays are not true SZArray - but that changes when we map
Assert.AreEqual("{alias1}[*]", ModelType.For("alias1").MakeArrayType().FullName);
// note the inner assembly qualified name
Assert.AreEqual("System.Collections.Generic.IEnumerable`1[[{alias1}[*], Umbraco.Core, Version=0.5.0.0, Culture=neutral, PublicKeyToken=null]]", typeof(IEnumerable<>).MakeGenericType(ModelType.For("alias1").MakeArrayType()).FullName);
}
}
}
@@ -1,45 +0,0 @@
using System.Linq;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Tests.Common;
using Umbraco.Tests.TestHelpers;
namespace Umbraco.Tests.Routing
{
public abstract class BaseUrlProviderTest : BaseWebTest
{
protected IUmbracoContextAccessor UmbracoContextAccessor { get; } = new TestUmbracoContextAccessor();
protected abstract bool HideTopLevelNodeFromPath { get; }
protected override void Compose()
{
base.Compose();
Builder.Services.AddTransient<ISiteDomainMapper, SiteDomainMapper>();
}
protected override void ComposeSettings()
{
var contentSettings = new ContentSettings();
var userPasswordConfigurationSettings = new UserPasswordConfigurationSettings();
Builder.Services.AddTransient(x => Microsoft.Extensions.Options.Options.Create(contentSettings));
Builder.Services.AddTransient(x => Microsoft.Extensions.Options.Options.Create(userPasswordConfigurationSettings));
}
protected IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext, DefaultUrlProvider urlProvider)
{
var webRoutingSettings = new WebRoutingSettings();
return new UrlProvider(
new TestUmbracoContextAccessor(umbracoContext),
Microsoft.Extensions.Options.Options.Create(webRoutingSettings),
new UrlProviderCollection(new[] { urlProvider }),
new MediaUrlProviderCollection(Enumerable.Empty<IMediaUrlProvider>()),
Mock.Of<IVariationContextAccessor>());
}
}
}
@@ -1,206 +0,0 @@
using System;
using System.Linq;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Moq;
using Newtonsoft.Json;
using NUnit.Framework;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Strings;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Tests.Common;
using Umbraco.Cms.Tests.Common.Testing;
using Umbraco.Tests.PublishedContent;
using Umbraco.Tests.TestHelpers;
using Constants = Umbraco.Cms.Core.Constants;
namespace Umbraco.Tests.Routing
{
[TestFixture]
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerFixture)]
public class MediaUrlProviderTests : BaseWebTest
{
private DefaultMediaUrlProvider _mediaUrlProvider;
public override void SetUp()
{
base.SetUp();
var loggerFactory = NullLoggerFactory.Instance;
var mediaFileManager = new MediaFileManager(Mock.Of<IFileSystem>(), Mock.Of<IMediaPathScheme>(),
loggerFactory.CreateLogger<MediaFileManager>(), Mock.Of<IShortStringHelper>());
var contentSettings = new ContentSettings();
var dataTypeService = Mock.Of<IDataTypeService>();
var propertyEditors = new MediaUrlGeneratorCollection(new IMediaUrlGenerator[]
{
new FileUploadPropertyEditor(DataValueEditorFactory, mediaFileManager, Microsoft.Extensions.Options.Options.Create(contentSettings), dataTypeService, LocalizationService, LocalizedTextService, UploadAutoFillProperties, ContentService),
new ImageCropperPropertyEditor(DataValueEditorFactory, loggerFactory, mediaFileManager, Microsoft.Extensions.Options.Options.Create(contentSettings), dataTypeService, IOHelper, UploadAutoFillProperties, ContentService),
});
_mediaUrlProvider = new DefaultMediaUrlProvider(propertyEditors, UriUtility);
}
public override void TearDown()
{
base.TearDown();
_mediaUrlProvider = null;
}
[Test]
public void Get_Media_Url_Resolves_Url_From_Upload_Property_Editor()
{
const string expected = "/media/rfeiw584/test.jpg";
var umbracoContext = GetUmbracoContext("/");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.UploadField, expected, null);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Auto);
Assert.AreEqual(expected, resolvedUrl);
}
[Test]
public void Get_Media_Url_Resolves_Url_From_Image_Cropper_Property_Editor()
{
const string expected = "/media/rfeiw584/test.jpg";
var configuration = new ImageCropperConfiguration();
var imageCropperValue = JsonConvert.SerializeObject(new ImageCropperValue
{
Src = expected
});
var umbracoContext = GetUmbracoContext("/");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.ImageCropper, imageCropperValue, configuration);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Auto);
Assert.AreEqual(expected, resolvedUrl);
}
[Test]
public void Get_Media_Url_Can_Resolve_Absolute_Url()
{
const string mediaUrl = "/media/rfeiw584/test.jpg";
var expected = $"http://localhost{mediaUrl}";
var umbracoContext = GetUmbracoContext("http://localhost");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.UploadField, mediaUrl, null);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Absolute);
Assert.AreEqual(expected, resolvedUrl);
}
[Test]
public void Get_Media_Url_Returns_Absolute_Url_If_Stored_Url_Is_Absolute()
{
const string expected = "http://localhost/media/rfeiw584/test.jpg";
var umbracoContext = GetUmbracoContext("http://localhost");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.UploadField, expected, null);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Relative);
Assert.AreEqual(expected, resolvedUrl);
}
[Test]
public void Get_Media_Url_Returns_Empty_String_When_PropertyType_Is_Not_Supported()
{
var umbracoContext = GetUmbracoContext("/");
var publishedContent = CreatePublishedContent(Constants.PropertyEditors.Aliases.Boolean, "0", null);
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Absolute, propertyAlias: "test");
Assert.AreEqual(string.Empty, resolvedUrl);
}
[Test]
public void Get_Media_Url_Can_Resolve_Variant_Property_Url()
{
var umbracoContext = GetUmbracoContext("http://localhost");
var umbracoFilePropertyType = CreatePropertyType(Constants.PropertyEditors.Aliases.UploadField, null, ContentVariation.Culture);
const string enMediaUrl = "/media/rfeiw584/en.jpg";
const string daMediaUrl = "/media/uf8ewud2/da.jpg";
var property = new SolidPublishedPropertyWithLanguageVariants
{
Alias = "umbracoFile",
PropertyType = umbracoFilePropertyType,
};
property.SetSourceValue("en", enMediaUrl, true);
property.SetSourceValue("da", daMediaUrl);
var contentType = new PublishedContentType(Guid.NewGuid(), 666, "alias", PublishedItemType.Content, Enumerable.Empty<string>(), new [] { umbracoFilePropertyType }, ContentVariation.Culture);
var publishedContent = new SolidPublishedContent(contentType) {Properties = new[] {property}};
var resolvedUrl = GetPublishedUrlProvider(umbracoContext).GetMediaUrl(publishedContent, UrlMode.Auto, "da");
Assert.AreEqual(daMediaUrl, resolvedUrl);
}
private IPublishedUrlProvider GetPublishedUrlProvider(IUmbracoContext umbracoContext)
{
var webRoutingSettings = new WebRoutingSettings();
return new UrlProvider(
new TestUmbracoContextAccessor(umbracoContext),
Microsoft.Extensions.Options.Options.Create(webRoutingSettings),
new UrlProviderCollection(Enumerable.Empty<IUrlProvider>()),
new MediaUrlProviderCollection(new []{_mediaUrlProvider}),
Mock.Of<IVariationContextAccessor>()
);
}
private static IPublishedContent CreatePublishedContent(string propertyEditorAlias, string propertyValue, object dataTypeConfiguration)
{
var umbracoFilePropertyType = CreatePropertyType(propertyEditorAlias, dataTypeConfiguration, ContentVariation.Nothing);
var contentType = new PublishedContentType(Guid.NewGuid(), 666, "alias", PublishedItemType.Content, Enumerable.Empty<string>(),
new[] {umbracoFilePropertyType}, ContentVariation.Nothing);
return new SolidPublishedContent(contentType)
{
Id = 1234,
Key = Guid.NewGuid(),
Properties = new[]
{
new SolidPublishedProperty
{
Alias = "umbracoFile",
SolidSourceValue = propertyValue,
SolidHasValue = true,
PropertyType = umbracoFilePropertyType
}
}
};
}
private static PublishedPropertyType CreatePropertyType(string propertyEditorAlias, object dataTypeConfiguration, ContentVariation variation)
{
var uploadDataType = new PublishedDataType(1234, propertyEditorAlias, new Lazy<object>(() => dataTypeConfiguration));
var propertyValueConverters = new PropertyValueConverterCollection(new IPropertyValueConverter[]
{
new UploadPropertyConverter(),
new ImageCropperValueConverter(Mock.Of<ILogger<ImageCropperValueConverter>>()),
});
var publishedModelFactory = Mock.Of<IPublishedModelFactory>();
var publishedContentTypeFactory = new Mock<IPublishedContentTypeFactory>();
publishedContentTypeFactory.Setup(x => x.GetDataType(It.IsAny<int>()))
.Returns(uploadDataType);
return new PublishedPropertyType("umbracoFile", 42, true, variation, propertyValueConverters, publishedModelFactory, publishedContentTypeFactory.Object);
}
}
}
-199
View File
@@ -1,199 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{5D3B8245-ADA6-453F-A008-50ED04BFE770}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Umbraco.Tests</RootNamespace>
<AssemblyName>Umbraco.Tests</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>8</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Entity.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Runtime.Caching" />
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Text.Encoding" />
<Reference Include="System.Web" />
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Services" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Castle.Core" Version="4.4.1" />
<PackageReference Include="Examine.Core">
<Version>2.0.0</Version>
</PackageReference>
<PackageReference Include="Castle.Core" Version="4.3.1" />
<PackageReference Include="Examine" Version="2.0.0" />
<PackageReference Include="HtmlAgilityPack">
<Version>1.11.31</Version>
</PackageReference>
<PackageReference Include="Lucene.Net.Contrib" Version="3.0.3" />
<PackageReference Include="Microsoft.AspNet.Identity.Core" Version="2.2.3" />
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.7" />
<PackageReference Include="Microsoft.AspNet.WebApi" Version="5.2.7" />
<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.7" />
<PackageReference Include="Microsoft.AspNet.WebApi.Owin" Version="5.2.7" />
<PackageReference Include="Microsoft.AspNet.WebApi.SelfHost" Version="5.2.7" />
<PackageReference Include="Microsoft.AspNet.WebApi.Tracing" Version="5.2.7" />
<PackageReference Include="Microsoft.AspNet.WebApi.WebHost" Version="5.2.7" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions">
<Version>5.0.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console">
<Version>5.0.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="5.0.0" />
<PackageReference Include="Microsoft.Owin" Version="4.1.1" />
<PackageReference Include="Microsoft.Owin.Hosting" Version="4.1.1" />
<PackageReference Include="Microsoft.Owin.Security" Version="4.1.1" />
<PackageReference Include="Microsoft.Owin.Testing" Version="4.1.1" />
<PackageReference Include="Microsoft.Web.Infrastructure" Version="1.0.0.0" />
<PackageReference Include="MiniProfiler" Version="4.2.22" />
<PackageReference Include="Moq" Version="4.16.1" />
<PackageReference Include="NUnit" Version="3.13.1" />
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="MiniProfiler" Version="4.0.138" />
<PackageReference Include="Moq" Version="4.10.1" />
<PackageReference Include="Moq" Version="4.14.5" />
<PackageReference Include="NPoco" Version="3.9.4" />
<PackageReference Include="NUnit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.12.0" />
<PackageReference Include="NPoco" Version="4.0.3" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
<PackageReference Include="Owin" Version="1.0" />
<PackageReference Include="Selenium.WebDriver" Version="3.141.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.2" />
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
<PackageReference Include="Umbraco.SqlServerCE" Version="4.0.0.1" />
</ItemGroup>
<ItemGroup>
<Compile Include="Published\ModelTypeTests.cs" />
<Compile Include="Routing\BaseUrlProviderTest.cs" />
<Compile Include="Routing\MediaUrlProviderTests.cs" />
<Compile Include="Scoping\ScopedNuCacheTests.cs" />
<Compile Include="Web\Controllers\AuthenticationControllerTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config">
<SubType>Designer</SubType>
</None>
<None Include="unit-test-logger.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Umbraco.Core\Umbraco.Core.csproj">
<Project>{29aa69d9-b597-4395-8d42-43b1263c240a}</Project>
<Name>Umbraco.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Umbraco.Examine.Lucene\Umbraco.Examine.Lucene.csproj">
<Project>{0fad7d2a-d7dd-45b1-91fd-488bb6cdacea}</Project>
<Name>Umbraco.Examine.Lucene</Name>
</ProjectReference>
<ProjectReference Include="...\..\srcUmbraco.Infrastructure\Umbraco.Infrastructure.csproj">
<Project>{3ae7bf57-966b-45a5-910a-954d7c554441}</Project>
<Name>Umbraco.Infrastructure</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Umbraco.Persistence.SqlCe\Umbraco.Persistence.SqlCe.csproj">
<Project>{33085570-9bf2-4065-a9b0-a29d920d13ba}</Project>
<Name>Umbraco.Persistence.SqlCe</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Umbraco.PublishedCache.NuCache\Umbraco.PublishedCache.NuCache.csproj">
<Project>{f6de8da0-07cc-4ef2-8a59-2bc81dbb3830}</Project>
<Name>Umbraco.PublishedCache.NuCache</Name>
</ProjectReference>
<ProjectReference Include="..\Umbraco.Tests.Common\Umbraco.Tests.Common.csproj">
<Project>{a499779c-1b3b-48a8-b551-458e582e6e96}</Project>
<Name>Umbraco.Tests.Common</Name>
</ProjectReference>
<ProjectReference Include="..\..\src\Umbraco.Web\Umbraco.Web.csproj">
<Project>{651E1350-91B6-44B7-BD60-7207006D7003}</Project>
<Name>Umbraco.Web</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup />
<!-- get NuGet packages directory -->
<PropertyGroup>
<NuGetPackages>$(NuGetPackageFolders.Split(';')[0])</NuGetPackages>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild">
<Message Text="-BeforeBuild-" Importance="high" />
<Message Text="MSBuildExtensionsPath: $(MSBuildExtensionsPath)" Importance="high" />
<Message Text="WebPublishingTasks: $(WebPublishingTasks)" Importance="high" />
<Message Text="NuGetPackageFolders: $(NuGetPackageFolders)" Importance="high" />
<Message Text="NuGetPackages: $(NuGetPackages)" Importance="high" />
</Target>
</Project>
@@ -1,122 +0,0 @@
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Features;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Tests.Common.Testing;
using Umbraco.Extensions;
using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.Testing;
namespace Umbraco.Tests.Web.Controllers
{
[TestFixture]
[UmbracoTest(Database = UmbracoTestOptions.Database.None)]
public class AuthenticationControllerTests : TestWithDatabaseBase
{
protected override void ComposeApplication(bool withApplication)
{
base.ComposeApplication(withApplication);
//if (!withApplication) return;
// replace the true IUserService implementation with a mock
// so that each test can configure the service to their liking
Builder.Services.AddUnique(f => Mock.Of<IUserService>());
// kill the true IEntityService too
Builder.Services.AddUnique(f => Mock.Of<IEntityService>());
Builder.Services.AddUnique<UmbracoFeatures>();
}
// TODO Reintroduce when moved to .NET Core
// [Test]
// public async System.Threading.Tasks.Task GetCurrentUser_Fips()
// {
// ApiController CtrlFactory(HttpRequestMessage message, IUmbracoContextAccessor umbracoContextAccessor)
// {
// //setup some mocks
// var userServiceMock = Mock.Get(ServiceContext.UserService);
// userServiceMock.Setup(service => service.GetUserById(It.IsAny<int>()))
// .Returns(() => null);
//
// if (Thread.GetDomain().GetData(".appPath") != null)
// {
// HttpContext.Current = new HttpContext(new SimpleWorkerRequest("", "", new StringWriter()));
// }
// else
// {
// var baseDir = IOHelper.MapPath("").TrimEnd(Path.DirectorySeparatorChar);
// HttpContext.Current = new HttpContext(new SimpleWorkerRequest("/", baseDir, "", "", new StringWriter()));
// }
//
// var usersController = new AuthenticationController(
// new TestUserPasswordConfig(),
// Factory.GetInstance<IGlobalSettings>(),
// Factory.GetInstance<IHostingEnvironment>(),
// umbracoContextAccessor,
// Factory.GetInstance<ISqlContext>(),
// Factory.GetInstance<ServiceContext>(),
// Factory.GetInstance<AppCaches>(),
// Factory.GetInstance<IProfilingLogger>(),
// Factory.GetInstance<IRuntimeState>(),
// Factory.GetInstance<UmbracoMapper>(),
// Factory.GetInstance<ISecuritySettings>(),
// Factory.GetInstance<IPublishedUrlProvider>(),
// Factory.GetInstance<IRequestAccessor>(),
// Factory.GetInstance<IEmailSender>()
// );
// return usersController;
// }
//
// Mock.Get(Current.SqlContext)
// .Setup(x => x.Query<IUser>())
// .Returns(new Query<IUser>(Current.SqlContext));
//
// var syntax = new SqlCeSyntaxProvider();
//
// Mock.Get(Current.SqlContext)
// .Setup(x => x.SqlSyntax)
// .Returns(syntax);
//
// var mappers = new MapperCollection(new[]
// {
// new UserMapper(new Lazy<ISqlContext>(() => Current.SqlContext), new ConcurrentDictionary<Type, ConcurrentDictionary<string, string>>())
// });
//
// Mock.Get(Current.SqlContext)
// .Setup(x => x.Mappers)
// .Returns(mappers);
//
// // Testing what happens if the system were configured to only use FIPS-compliant algorithms
// var typ = typeof(CryptoConfig);
// var flds = typ.GetFields(BindingFlags.Static | BindingFlags.NonPublic);
// var haveFld = flds.FirstOrDefault(f => f.Name == "s_haveFipsAlgorithmPolicy");
// var isFld = flds.FirstOrDefault(f => f.Name == "s_fipsAlgorithmPolicy");
// var originalFipsValue = CryptoConfig.AllowOnlyFipsAlgorithms;
//
// try
// {
// if (!originalFipsValue)
// {
// haveFld.SetValue(null, true);
// isFld.SetValue(null, true);
// }
//
// var runner = new TestRunner(CtrlFactory);
// var response = await runner.Execute("Authentication", "GetCurrentUser", HttpMethod.Get);
//
// var obj = JsonConvert.DeserializeObject<UserDetail>(response.Item2);
// Assert.AreEqual(-1, obj.UserId);
// }
// finally
// {
// if (!originalFipsValue)
// {
// haveFld.SetValue(null, false);
// isFld.SetValue(null, false);
// }
// }
// }
}
}
@@ -1,6 +0,0 @@
<?xml version="1.0"?>
<log4net>
<root>
<priority value="OFF"/>
</root>
</log4net>
@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- Global Log Level event -->
<add key="serilog:minimum-level" value="Warning" />
<!-- Write to console -->
<add key="serilog:using:Console" value="Serilog.Sinks.Console" />
<add key="serilog:write-to:Console.theme" value="Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console" />
<add key="serilog:write-to:Console.outputTemplate" value="[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} &lt;s:{SourceContext}&gt;{NewLine}{Exception}" />
<!-- Namespace log levels -->
<add key="serilog:minimum-level:override:Umbraco.Core.Publishing.PublishingStrategy" value="Warning" />
<add key="serilog:minimum-level:override:Umbraco.Core.TypeLoader" value="Warning" />
<add key="serilog:minimum-level:override:Umbraco.Core.Persistence.UmbracoDatabase" value="Debug" />
<add key="serilog:minimum-level:override:Umbraco.Core.Persistence.Migrations.Initial.DatabaseSchemaCreation" value="Warning" />
<add key="serilog:minimum-level:override:Umbraco.Core.Persistence.Migrations.Initial.BaseDataCreation" value="Warning" />
</appSettings>
</configuration>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="nuget" value="https://api.nuget.org/v3/index.json" />
</packageSources>
<packageSourceMapping>
<!-- Ensure all packages are pulled from NuGet -->
<packageSource key="nuget">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
</configuration>
@@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.Builders;
@@ -8,6 +9,8 @@ public class ProblemDetailsBuilder
private string? _title;
private string? _detail;
private string? _type;
private string? _operationStatus;
private IDictionary<string, object>? _extensions;
public ProblemDetailsBuilder WithTitle(string title)
{
@@ -27,11 +30,45 @@ public class ProblemDetailsBuilder
return this;
}
public ProblemDetails Build() =>
new()
public ProblemDetailsBuilder WithOperationStatus<TEnum>(TEnum operationStatus)
where TEnum : Enum
{
_operationStatus = operationStatus.ToString();
return this;
}
public ProblemDetailsBuilder WithRequestModelErrors(IDictionary<string, string[]> errors)
=> WithExtension(nameof(HttpValidationProblemDetails.Errors).ToFirstLowerInvariant(), errors);
public ProblemDetailsBuilder WithExtension(string key, object value)
{
_extensions ??= new Dictionary<string, object>();
_extensions[key] = value;
return this;
}
public ProblemDetails Build()
{
var problemDetails = new ProblemDetails
{
Title = _title,
Detail = _detail,
Type = _type ?? "Error",
};
if (_operationStatus is not null)
{
problemDetails.Extensions["operationStatus"] = _operationStatus;
}
if (_extensions is not null)
{
foreach (KeyValuePair<string, object> extension in _extensions)
{
problemDetails.Extensions[extension.Key] = extension.Value;
}
}
return problemDetails;
}
}
@@ -0,0 +1,15 @@
using Microsoft.Extensions.Options;
using OpenIddict.Server.AspNetCore;
using Umbraco.Cms.Core.Configuration.Models;
namespace Umbraco.Cms.Api.Common.Configuration;
internal class ConfigureOpenIddict : IConfigureOptions<OpenIddictServerAspNetCoreOptions>
{
private readonly IOptions<GlobalSettings> _globalSettings;
public ConfigureOpenIddict(IOptions<GlobalSettings> globalSettings) => _globalSettings = globalSettings;
public void Configure(OpenIddictServerAspNetCoreOptions options)
=> options.DisableTransportSecurityRequirement = _globalSettings.Value.UseHttps is false;
}
@@ -12,16 +12,22 @@ namespace Umbraco.Cms.Api.Common.Configuration;
public class ConfigureUmbracoSwaggerGenOptions : IConfigureOptions<SwaggerGenOptions>
{
private readonly IOptions<ApiVersioningOptions> _apiVersioningOptions;
private readonly IOperationIdSelector _operationIdSelector;
private readonly ISchemaIdSelector _schemaIdSelector;
[Obsolete("Use non-obsolete constructor. This will be removed in Umbraco 15.")]
public ConfigureUmbracoSwaggerGenOptions(
IOptions<ApiVersioningOptions> apiVersioningOptions,
IOperationIdSelector operationIdSelector,
ISchemaIdSelector schemaIdSelector)
: this(operationIdSelector, schemaIdSelector)
{
}
public ConfigureUmbracoSwaggerGenOptions(
IOperationIdSelector operationIdSelector,
ISchemaIdSelector schemaIdSelector)
{
_apiVersioningOptions = apiVersioningOptions;
_operationIdSelector = operationIdSelector;
_schemaIdSelector = schemaIdSelector;
}
@@ -34,10 +40,10 @@ public class ConfigureUmbracoSwaggerGenOptions : IConfigureOptions<SwaggerGenOpt
{
Title = "Default API",
Version = "Latest",
Description = "All endpoints not defined under specific APIs"
Description = "All endpoints not defined under specific APIs",
});
swaggerGenOptions.CustomOperationIds(description => _operationIdSelector.OperationId(description, _apiVersioningOptions.Value));
swaggerGenOptions.CustomOperationIds(description => _operationIdSelector.OperationId(description));
swaggerGenOptions.DocInclusionPredicate((name, api) =>
{
if (string.IsNullOrWhiteSpace(api.GroupName))
@@ -0,0 +1,62 @@
using Microsoft.AspNetCore.Http;
using OpenIddict.Server;
using OpenIddict.Validation;
using Umbraco.Cms.Core;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.DependencyInjection;
public class ProcessRequestContextHandler
: IOpenIddictServerHandler<OpenIddictServerEvents.ProcessRequestContext>, IOpenIddictValidationHandler<OpenIddictValidationEvents.ProcessRequestContext>
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly string[] _pathsToHandle;
public ProcessRequestContextHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
var backOfficePathSegment = Constants.System.DefaultUmbracoPath.TrimStart(Constants.CharArrays.Tilde)
.EnsureStartsWith('/')
.EnsureEndsWith('/');
_pathsToHandle = [backOfficePathSegment, "/.well-known/openid-configuration"];
}
public ValueTask HandleAsync(OpenIddictServerEvents.ProcessRequestContext context)
{
if (SkipOpenIddictHandlingForRequest())
{
context.SkipRequest();
}
return ValueTask.CompletedTask;
}
public ValueTask HandleAsync(OpenIddictValidationEvents.ProcessRequestContext context)
{
if (SkipOpenIddictHandlingForRequest())
{
context.SkipRequest();
}
return ValueTask.CompletedTask;
}
private bool SkipOpenIddictHandlingForRequest()
{
var requestPath = _httpContextAccessor.HttpContext?.Request.Path.Value;
if (requestPath.IsNullOrWhiteSpace())
{
return false;
}
foreach (var path in _pathsToHandle)
{
if (requestPath.StartsWith(path))
{
return false;
}
}
return true;
}
}
@@ -11,11 +11,18 @@ public static class UmbracoBuilderApiExtensions
{
public static IUmbracoBuilder AddUmbracoApiOpenApiUI(this IUmbracoBuilder builder)
{
if (builder.Services.Any(x => !x.IsKeyedService && x.ImplementationType == typeof(OperationIdSelector)))
{
return builder;
}
builder.Services.AddSwaggerGen();
builder.Services.ConfigureOptions<ConfigureUmbracoSwaggerGenOptions>();
builder.Services.AddSingleton<IUmbracoJsonTypeInfoResolver, UmbracoJsonTypeInfoResolver>();
builder.Services.AddSingleton<IOperationIdSelector, OperationIdSelector>();
builder.Services.AddSingleton<IOperationIdHandler, OperationIdHandler>();
builder.Services.AddSingleton<ISchemaIdSelector, SchemaIdSelector>();
builder.Services.AddSingleton<ISchemaIdHandler, SchemaIdHandler>();
builder.Services.Configure<UmbracoPipelineOptions>(options => options.AddFilter(new SwaggerRouteTemplatePipelineFilter("UmbracoApiCommon")));
return builder;
@@ -0,0 +1,141 @@
using System.Security.Cryptography;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using OpenIddict.Server;
using OpenIddict.Validation;
using Umbraco.Cms.Api.Common.Configuration;
using Umbraco.Cms.Api.Common.Security;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Infrastructure.BackgroundJobs.Jobs;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.DependencyInjection;
public static class UmbracoBuilderAuthExtensions
{
public static IUmbracoBuilder AddUmbracoOpenIddict(this IUmbracoBuilder builder)
{
if (builder.Services.Any(x => !x.IsKeyedService && x.ImplementationType == typeof(OpenIddictCleanupJob)) is false)
{
ConfigureOpenIddict(builder);
}
return builder;
}
private static void ConfigureOpenIddict(IUmbracoBuilder builder)
{
builder.Services.AddOpenIddict()
// Register the OpenIddict server components.
.AddServer(options =>
{
// Enable the authorization and token endpoints.
// - important: member endpoints MUST be added before backoffice endpoints to ensure that auto-discovery works for members
options
.SetAuthorizationEndpointUris(
Paths.MemberApi.AuthorizationEndpoint.TrimStart(Constants.CharArrays.ForwardSlash),
Paths.BackOfficeApi.AuthorizationEndpoint.TrimStart(Constants.CharArrays.ForwardSlash))
.SetTokenEndpointUris(
Paths.MemberApi.TokenEndpoint.TrimStart(Constants.CharArrays.ForwardSlash),
Paths.BackOfficeApi.TokenEndpoint.TrimStart(Constants.CharArrays.ForwardSlash))
.SetLogoutEndpointUris(
Paths.MemberApi.LogoutEndpoint.TrimStart(Constants.CharArrays.ForwardSlash),
Paths.BackOfficeApi.LogoutEndpoint.TrimStart(Constants.CharArrays.ForwardSlash))
.SetRevocationEndpointUris(
Paths.MemberApi.RevokeEndpoint.TrimStart(Constants.CharArrays.ForwardSlash),
Paths.BackOfficeApi.RevokeEndpoint.TrimStart(Constants.CharArrays.ForwardSlash))
.SetUserinfoEndpointUris(
Paths.MemberApi.UserinfoEndpoint.TrimStart(Constants.CharArrays.ForwardSlash));
// Enable authorization code flow with PKCE
options
.AllowAuthorizationCodeFlow()
.RequireProofKeyForCodeExchange()
.AllowRefreshTokenFlow();
// Register the ASP.NET Core host and configure for custom authentication endpoint.
options
.UseAspNetCore()
.EnableAuthorizationEndpointPassthrough()
.EnableLogoutEndpointPassthrough()
.EnableUserinfoEndpointPassthrough();
// Enable reference tokens
// - see https://documentation.openiddict.com/configuration/token-storage.html
options
.UseReferenceAccessTokens()
.UseReferenceRefreshTokens();
// Apply sliding window expiry based on the configured max login lifetime
GlobalSettings globalSettings = builder.Config
.GetSection(Constants.Configuration.ConfigGlobal)
.Get<GlobalSettings>() ?? new GlobalSettings();
TimeSpan timeOut = globalSettings.TimeOut;
// Make the access token lifetime 25% of the refresh token lifetime, to help ensure that new access tokens
// are obtained by the client before the refresh token expires.
options.SetAccessTokenLifetime(new TimeSpan(timeOut.Ticks / 4));
options.SetRefreshTokenLifetime(timeOut);
// Use ASP.NET Core Data Protection for tokens instead of JWT.
// This is more secure, and has the added benefit of having a high throughput
// but means that all servers (such as in a load balanced setup)
// needs to use the same application name and key ring,
// however this is already recommended for load balancing, so should be fine.
// See https://documentation.openiddict.com/configuration/token-formats.html#switching-to-data-protection-tokens
// and https://learn.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-7.0
// for more information
options.UseDataProtection();
// Register encryption and signing credentials to protect tokens.
// Note that for tokens generated/validated using ASP.NET Core Data Protection,
// a separate key ring is used, distinct from the credentials discussed in
// https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html
// More details can be found here: https://github.com/openiddict/openiddict-core/issues/1892#issuecomment-1737308506
// "When using ASP.NET Core Data Protection to generate opaque tokens, the signing and encryption credentials
// registered via Add*Key/Certificate() are not used". But since OpenIddict requires the registration of such,
// we can generate random keys per instance without them taking effect.
// - see also https://github.com/openiddict/openiddict-core/issues/1231
options
.AddEncryptionKey(new SymmetricSecurityKey(RandomNumberGenerator.GetBytes(32))) // generate a cryptographically secure random 256-bits key
.AddSigningKey(new RsaSecurityKey(RSA.Create(keySizeInBits: 2048))); // generate RSA key with recommended size of 2048-bits
// Add custom handler for the "ProcessRequestContext" server event, to stop OpenIddict from handling
// every last request to the server (including front-end requests).
options.AddEventHandler<OpenIddictServerEvents.ProcessRequestContext>(configuration =>
{
configuration.UseSingletonHandler<ProcessRequestContextHandler>().SetOrder(OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers.ResolveRequestUri.Descriptor.Order - 1);
});
})
// Register the OpenIddict validation components.
.AddValidation(options =>
{
// Import the configuration from the local OpenIddict server instance.
options.UseLocalServer();
// Register the ASP.NET Core host.
options.UseAspNetCore();
// Enable token entry validation
// - see https://documentation.openiddict.com/configuration/token-storage.html#enabling-token-entry-validation-at-the-api-level
options.EnableTokenEntryValidation();
// Use ASP.NET Core Data Protection for tokens instead of JWT. (see note in AddServer)
options.UseDataProtection();
// Add custom handler for the "ProcessRequestContext" validation event, to stop OpenIddict from handling
// every last request to the server (including front-end requests).
options.AddEventHandler<OpenIddictValidationEvents.ProcessRequestContext>(configuration =>
{
configuration.UseSingletonHandler<ProcessRequestContextHandler>().SetOrder(OpenIddict.Validation.AspNetCore.OpenIddictValidationAspNetCoreHandlers.ResolveRequestUri.Descriptor.Order - 1);
});
});
builder.Services.AddRecurringBackgroundJob<OpenIddictCleanupJob>();
builder.Services.ConfigureOptions<ConfigureOpenIddict>();
}
}
@@ -0,0 +1,50 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core;
namespace Umbraco.Cms.Api.Common.Mvc.ActionResults;
/// <summary>
/// A "created at" action result with no response body.
/// </summary>
public sealed class EmptyCreatedAtActionResult : ActionResult
{
private readonly string _actionName;
private readonly string _controllerName;
private readonly object _routeValues;
private readonly string _resourceIdentifier;
public EmptyCreatedAtActionResult(string actionName, string controllerName, object routeValues, string resourceIdentifier)
{
_actionName = actionName;
_controllerName = controllerName;
_routeValues = routeValues;
_resourceIdentifier = resourceIdentifier;
}
public override void ExecuteResult(ActionContext context)
{
ArgumentNullException.ThrowIfNull(context);
HttpRequest request = context.HttpContext.Request;
IUrlHelper urlHelper = context.HttpContext.RequestServices.GetRequiredService<IUrlHelperFactory>().GetUrlHelper(context);
var url = urlHelper.Action(
_actionName,
_controllerName,
_routeValues,
request.Scheme,
request.Host.ToUriComponent());
if (string.IsNullOrEmpty(url))
{
throw new InvalidOperationException("No routes could be found that matched the provided route components");
}
context.HttpContext.Response.StatusCode = StatusCodes.Status201Created;
context.HttpContext.Response.Headers.Location = url;
context.HttpContext.Response.Headers[Constants.Headers.GeneratedResource] = _resourceIdentifier;
}
}
@@ -12,6 +12,8 @@ public class EnumSchemaFilter : ISchemaFilter
{
if (context.Type.IsEnum)
{
model.Type = "string";
model.Format = null;
model.Enum.Clear();
foreach (var name in Enum.GetNames(context.Type))
{
@@ -0,0 +1,11 @@
namespace Umbraco.Cms.Api.Common.OpenApi;
/// <summary>
/// Marker interface that ensure the type have a "$type" discriminator in the open api schema.
/// </summary>
/// <remarks>
/// This is required when an endpoint can receive different types, to ensure the correct type is deserialized.
/// </remarks>
public interface IOpenApiDiscriminator
{
}
@@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Mvc.ApiExplorer;
namespace Umbraco.Cms.Api.Common.OpenApi;
public interface IOperationIdHandler
{
bool CanHandle(ApiDescription apiDescription);
string Handle(ApiDescription apiDescription);
}
@@ -5,5 +5,8 @@ namespace Umbraco.Cms.Api.Common.OpenApi;
public interface IOperationIdSelector
{
[Obsolete("Use overload that only takes ApiDescription instead. This will be removed in Umbraco 15.")]
string? OperationId(ApiDescription apiDescription, ApiVersioningOptions apiVersioningOptions);
string? OperationId(ApiDescription apiDescription);
}
@@ -0,0 +1,8 @@
namespace Umbraco.Cms.Api.Common.OpenApi;
public interface ISchemaIdHandler
{
bool CanHandle(Type type);
string Handle(Type type);
}
@@ -0,0 +1,94 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.Options;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.OpenApi;
// NOTE: Left unsealed on purpose, so it is extendable.
public class OperationIdHandler : IOperationIdHandler
{
private readonly ApiVersioningOptions _apiVersioningOptions;
public OperationIdHandler(IOptions<ApiVersioningOptions> apiVersioningOptions)
=> _apiVersioningOptions = apiVersioningOptions.Value;
public bool CanHandle(ApiDescription apiDescription)
{
if (apiDescription.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor)
{
return false;
}
return CanHandle(apiDescription, controllerActionDescriptor);
}
protected virtual bool CanHandle(ApiDescription apiDescription, ControllerActionDescriptor controllerActionDescriptor)
=> controllerActionDescriptor.ControllerTypeInfo.Namespace?.StartsWith("Umbraco.Cms.Api") is true;
public virtual string Handle(ApiDescription apiDescription)
=> UmbracoOperationId(apiDescription);
/// <summary>
/// Generates a unique operation identifier for a given API following Umbraco's operation id naming conventions.
/// </summary>
protected string UmbracoOperationId(ApiDescription apiDescription)
{
if (apiDescription.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor)
{
throw new ArgumentException($"This handler operates only on {nameof(ControllerActionDescriptor)}.");
}
ApiVersion defaultVersion = _apiVersioningOptions.DefaultApiVersion;
var httpMethod = apiDescription.HttpMethod?.ToLower().ToFirstUpper() ?? "Get";
// if the route info "Name" is supplied we'll use this explicitly as the operation ID
// - usage example: [HttpGet("my-api/route}", Name = "MyCustomRoute")]
if (string.IsNullOrWhiteSpace(apiDescription.ActionDescriptor.AttributeRouteInfo?.Name) == false)
{
var explicitOperationId = apiDescription.ActionDescriptor.AttributeRouteInfo!.Name;
return explicitOperationId.InvariantStartsWith(httpMethod)
? explicitOperationId
: $"{httpMethod}{explicitOperationId}";
}
var relativePath = apiDescription.RelativePath;
if (string.IsNullOrWhiteSpace(relativePath))
{
throw new InvalidOperationException(
$"There is no relative path for controller action {apiDescription.ActionDescriptor.RouteValues["controller"]}");
}
// Remove the prefixed base path with version, e.g. /umbraco/management/api/v1/tracked-reference/{id} => tracked-reference/{id}
var unprefixedRelativePath = OperationIdRegexes
.VersionPrefixRegex()
.Replace(relativePath, string.Empty);
// Remove template placeholders, e.g. tracked-reference/{id} => tracked-reference/Id
var formattedOperationId = OperationIdRegexes
.TemplatePlaceholdersRegex()
.Replace(unprefixedRelativePath, m => $"By{m.Groups[1].Value.ToFirstUpper()}");
// Remove dashes (-) and slashes (/) and convert the following letter to uppercase with
// the word "By" in front, e.g. tracked-reference/Id => TrackedReferenceById
formattedOperationId = OperationIdRegexes
.ToCamelCaseRegex()
.Replace(formattedOperationId, m => m.Groups[1].Value.ToUpper());
// Get map to version attribute
string? version = null;
var versionAttributeValue = controllerActionDescriptor.MethodInfo.GetMapToApiVersionAttributeValue();
// We only want to add a version, if it is not the default one.
if (string.Equals(versionAttributeValue, defaultVersion.ToString()) == false)
{
version = versionAttributeValue;
}
// Return the operation ID with the formatted http method verb in front, e.g. GetTrackedReferenceById
return $"{httpMethod}{formattedOperationId.ToFirstUpper()}{version}";
}
}
@@ -1,79 +1,27 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.AspNetCore.Mvc.Controllers;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.OpenApi;
public class OperationIdSelector : IOperationIdSelector
{
public virtual string? OperationId(ApiDescription apiDescription, ApiVersioningOptions apiVersioningOptions)
{
if (apiDescription.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor
|| controllerActionDescriptor.ControllerTypeInfo.Namespace?.StartsWith("Umbraco.Cms.Api") is not true)
{
return null;
}
private readonly IEnumerable<IOperationIdHandler> _operationIdHandlers;
return UmbracoOperationId(apiDescription, apiVersioningOptions);
[Obsolete("Use non-obsolete constructor. This will be removed in Umbraco 15.")]
public OperationIdSelector()
: this(Enumerable.Empty<IOperationIdHandler>())
{
}
protected string? UmbracoOperationId(ApiDescription apiDescription, ApiVersioningOptions apiVersioningOptions)
public OperationIdSelector(IEnumerable<IOperationIdHandler> operationIdHandlers)
=> _operationIdHandlers = operationIdHandlers;
[Obsolete("Use overload that only takes ApiDescription instead. This will be removed in Umbraco 15.")]
public virtual string? OperationId(ApiDescription apiDescription, ApiVersioningOptions apiVersioningOptions) => OperationId(apiDescription);
public virtual string? OperationId(ApiDescription apiDescription)
{
if (apiDescription.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor)
{
return null;
}
ApiVersion defaultVersion = apiVersioningOptions.DefaultApiVersion;
var httpMethod = apiDescription.HttpMethod?.ToLower().ToFirstUpper() ?? "Get";
// if the route info "Name" is supplied we'll use this explicitly as the operation ID
// - usage example: [HttpGet("my-api/route}", Name = "MyCustomRoute")]
if (string.IsNullOrWhiteSpace(apiDescription.ActionDescriptor.AttributeRouteInfo?.Name) == false)
{
var explicitOperationId = apiDescription.ActionDescriptor.AttributeRouteInfo!.Name;
return explicitOperationId.InvariantStartsWith(httpMethod)
? explicitOperationId
: $"{httpMethod}{explicitOperationId}";
}
var relativePath = apiDescription.RelativePath;
if (string.IsNullOrWhiteSpace(relativePath))
{
throw new Exception(
$"There is no relative path for controller action {apiDescription.ActionDescriptor.RouteValues["controller"]}");
}
// Remove the prefixed base path with version, e.g. /umbraco/management/api/v1/tracked-reference/{id} => tracked-reference/{id}
var unprefixedRelativePath = OperationIdRegexes
.VersionPrefixRegex()
.Replace(relativePath, string.Empty);
// Remove template placeholders, e.g. tracked-reference/{id} => tracked-reference/Id
var formattedOperationId = OperationIdRegexes
.TemplatePlaceholdersRegex()
.Replace(unprefixedRelativePath, m => $"By{m.Groups[1].Value.ToFirstUpper()}");
// Remove dashes (-) and slashes (/) and convert the following letter to uppercase with
// the word "By" in front, e.g. tracked-reference/Id => TrackedReferenceById
formattedOperationId = OperationIdRegexes
.ToCamelCaseRegex()
.Replace(formattedOperationId, m => m.Groups[1].Value.ToUpper());
//Get map to version attribute
string? version = null;
var versionAttributeValue = controllerActionDescriptor.MethodInfo.GetMapToApiVersionAttributeValue();
// We only wanna add a version, if it is not the default one.
if (string.Equals(versionAttributeValue, defaultVersion.ToString()) == false)
{
version = versionAttributeValue;
}
// Return the operation ID with the formatted http method verb in front, e.g. GetTrackedReferenceById
return $"{httpMethod}{formattedOperationId.ToFirstUpper()}{version}";
IOperationIdHandler? handler = _operationIdHandlers.FirstOrDefault(h => h.CanHandle(apiDescription));
return handler?.Handle(apiDescription);
}
}
@@ -0,0 +1,51 @@
using System.Text.RegularExpressions;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.OpenApi;
// NOTE: Left unsealed on purpose, so it is extendable.
public class SchemaIdHandler : ISchemaIdHandler
{
public virtual bool CanHandle(Type type)
=> type.Namespace?.StartsWith("Umbraco.Cms") is true;
public virtual string Handle(Type type)
=> UmbracoSchemaId(type);
/// <summary>
/// Generates a sanitized and consistent schema identifier for a given type following Umbraco's schema id naming conventions.
/// </summary>
protected string UmbracoSchemaId(Type type)
{
var name = SanitizedTypeName(type);
name = HandleGenerics(name, type);
if (name.EndsWith("Model") == false)
{
// because some models names clash with common classes in TypeScript (i.e. Document),
// we need to add a "Model" postfix to all models
name = $"{name}Model";
}
// make absolutely sure we don't pass any invalid named by removing all non-word chars
return Regex.Replace(name, @"[^\w]", string.Empty);
}
private string SanitizedTypeName(Type t) => t.Name
// first grab the "non-generic" part of any generic type name (i.e. "PagedViewModel`1" becomes "PagedViewModel")
.Split('`').First()
// then remove the "ViewModel" postfix from type names
.TrimEnd("ViewModel");
private string HandleGenerics(string name, Type type)
{
if (!type.IsGenericType)
{
return name;
}
// use attribute custom name or append the generic type names, ultimately turning i.e. "PagedViewModel<RelationItemViewModel>" into "PagedRelationItem"
return $"{name}{string.Join(string.Empty, type.GenericTypeArguments.Select(SanitizedTypeName))}";
}
}
@@ -1,36 +1,15 @@
using System.Text.RegularExpressions;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.OpenApi;
namespace Umbraco.Cms.Api.Common.OpenApi;
public class SchemaIdSelector : ISchemaIdSelector
{
private readonly IEnumerable<ISchemaIdHandler> _schemaIdHandlers;
public SchemaIdSelector(IEnumerable<ISchemaIdHandler> schemaIdHandlers)
=> _schemaIdHandlers = schemaIdHandlers;
public virtual string SchemaId(Type type)
=> type.Namespace?.StartsWith("Umbraco.Cms") is true ? UmbracoSchemaId(type) : type.Name;
protected string UmbracoSchemaId(Type type)
{
string SanitizedTypeName(Type t) => t.Name
// first grab the "non generic" part of any generic type name (i.e. "PagedViewModel`1" becomes "PagedViewModel")
.Split('`').First()
// then remove the "ViewModel" postfix from type names
.TrimEnd("ViewModel");
var name = SanitizedTypeName(type);
if (type.IsGenericType)
{
// append the generic type names, ultimately turning i.e. "PagedViewModel<RelationItemViewModel>" into "PagedRelationItem"
name = $"{name}{string.Join(string.Empty, type.GenericTypeArguments.Select(SanitizedTypeName))}";
}
if (name.EndsWith("Model") == false)
{
// because some models names clash with common classes in TypeScript (i.e. Document),
// we need to add a "Model" postfix to all models
name = $"{name}Model";
}
// make absolutely sure we don't pass any invalid named by removing all non-word chars
return Regex.Replace(name, @"[^\w]", string.Empty);
ISchemaIdHandler? handler = _schemaIdHandlers.FirstOrDefault(h => h.CanHandle(type));
return handler?.Handle(type) ?? type.Name;
}
}
@@ -5,6 +5,7 @@ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Swashbuckle.AspNetCore.SwaggerUI;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Web.Common.ApplicationBuilder;
@@ -32,17 +33,8 @@ public class SwaggerRouteTemplatePipelineFilter : UmbracoPipelineFilter
{
swaggerOptions.RouteTemplate = SwaggerRouteTemplate(applicationBuilder);
});
applicationBuilder.UseSwaggerUI(
swaggerUiOptions =>
{
swaggerUiOptions.RoutePrefix = SwaggerUiRoutePrefix(applicationBuilder);
foreach ((var name, OpenApiInfo? apiInfo) in swaggerGenOptions.Value.SwaggerGeneratorOptions.SwaggerDocs
.OrderBy(x => x.Value.Title))
{
swaggerUiOptions.SwaggerEndpoint($"{name}/swagger.json", $"{apiInfo.Title}");
}
});
applicationBuilder.UseSwaggerUI(swaggerUiOptions => SwaggerUiConfiguration(swaggerUiOptions, swaggerGenOptions.Value, applicationBuilder));
}
protected virtual bool SwaggerIsEnabled(IApplicationBuilder applicationBuilder)
@@ -57,6 +49,27 @@ public class SwaggerRouteTemplatePipelineFilter : UmbracoPipelineFilter
protected virtual string SwaggerUiRoutePrefix(IApplicationBuilder applicationBuilder)
=> $"{GetUmbracoPath(applicationBuilder).TrimStart(Constants.CharArrays.ForwardSlash)}/swagger";
protected virtual void SwaggerUiConfiguration(
SwaggerUIOptions swaggerUiOptions,
SwaggerGenOptions swaggerGenOptions,
IApplicationBuilder applicationBuilder)
{
swaggerUiOptions.RoutePrefix = SwaggerUiRoutePrefix(applicationBuilder);
foreach ((var name, OpenApiInfo? apiInfo) in swaggerGenOptions.SwaggerGeneratorOptions.SwaggerDocs
.OrderBy(x => x.Value.Title))
{
swaggerUiOptions.SwaggerEndpoint($"{name}/swagger.json", $"{apiInfo.Title}");
}
// Add custom configuration from https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/
swaggerUiOptions.ConfigObject.PersistAuthorization = true; // persists authorization data so it would not be lost on browser close/refresh
swaggerUiOptions.ConfigObject.Filter = string.Empty; // Enable the filter with an empty string as default filter.
swaggerUiOptions.OAuthClientId(Constants.OAuthClientIds.Swagger);
swaggerUiOptions.OAuthUsePkce();
}
private string GetUmbracoPath(IApplicationBuilder applicationBuilder)
{
GlobalSettings settings = applicationBuilder.ApplicationServices.GetRequiredService<IOptions<GlobalSettings>>().Value;
@@ -0,0 +1,39 @@
using Umbraco.Cms.Core;
namespace Umbraco.Cms.Api.Common.Security;
public static class Paths
{
public static class BackOfficeApi
{
public const string EndpointTemplate = "security/back-office";
public static readonly string AuthorizationEndpoint = EndpointPath($"{EndpointTemplate}/authorize");
public static readonly string TokenEndpoint = EndpointPath($"{EndpointTemplate}/token");
public static readonly string LogoutEndpoint = EndpointPath($"{EndpointTemplate}/signout");
public static readonly string RevokeEndpoint = EndpointPath($"{EndpointTemplate}/revoke");
private static string EndpointPath(string relativePath) => $"/umbraco{Constants.Web.ManagementApiPath}v1/{relativePath}";
}
public static class MemberApi
{
public const string EndpointTemplate = "security/member";
public static readonly string AuthorizationEndpoint = EndpointPath($"{EndpointTemplate}/authorize");
public static readonly string TokenEndpoint = EndpointPath($"{EndpointTemplate}/token");
public static readonly string LogoutEndpoint = EndpointPath($"{EndpointTemplate}/signout");
public static readonly string RevokeEndpoint = EndpointPath($"{EndpointTemplate}/revoke");
public static readonly string UserinfoEndpoint = EndpointPath($"{EndpointTemplate}/userinfo");
// NOTE: we're NOT using /api/v1.0/ here because it will clash with the Delivery API docs
private static string EndpointPath(string relativePath) => $"/umbraco/delivery/api/v1/{relativePath}";
}
}
@@ -5,4 +5,6 @@ namespace Umbraco.Cms.Api.Common.Serialization;
public interface IUmbracoJsonTypeInfoResolver : IJsonTypeInfoResolver
{
IEnumerable<Type> FindSubTypes(Type type);
string? GetTypeDiscriminatorValue(Type type);
}
@@ -1,7 +1,10 @@
using System.Collections.Concurrent;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using Umbraco.Cms.Api.Common.OpenApi;
using Umbraco.Cms.Core.Composing;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Common.Serialization;
@@ -11,51 +14,60 @@ public sealed class UmbracoJsonTypeInfoResolver : DefaultJsonTypeInfoResolver, I
private readonly ConcurrentDictionary<Type, ISet<Type>> _subTypesCache = new ConcurrentDictionary<Type, ISet<Type>>();
public UmbracoJsonTypeInfoResolver(ITypeFinder typeFinder)
{
_typeFinder = typeFinder;
}
=> _typeFinder = typeFinder;
public IEnumerable<Type> FindSubTypes(Type type)
{
JsonDerivedTypeAttribute[] explicitJsonDerivedTypes = type
.GetCustomAttributes<JsonDerivedTypeAttribute>(false)
.ToArray();
if (explicitJsonDerivedTypes.Any())
{
return explicitJsonDerivedTypes.Select(a => a.DerivedType);
}
if (type.IsInterface is false)
{
// IMPORTANT: do NOT return an empty enumerable here. it will cause nullability to fail on reference
// properties, because "$ref" does not mix and match well with "nullable" in OpenAPI.
// see also https://github.com/OAI/OpenAPI-Specification/issues/1368
return new[] { type };
}
if (_subTypesCache.TryGetValue(type, out ISet<Type>? cachedResult))
{
return cachedResult;
}
var result = _typeFinder.FindClassesOfType(type).ToHashSet();
var result = _typeFinder.FindClassesOfType(type).OrderBy(x => x.Name).ToHashSet();
_subTypesCache.TryAdd(type, result);
return result;
}
public string? GetTypeDiscriminatorValue(Type type)
{
JsonDerivedTypeAttribute? jsonDerivedTypeAttribute = type
.GetBaseTypes(false)
.WhereNotNull()
.SelectMany(baseType => baseType.GetCustomAttributes<JsonDerivedTypeAttribute>(false))
.FirstOrDefault(attr => attr.DerivedType == type);
if (jsonDerivedTypeAttribute is not null)
{
// IMPORTANT: do NOT perform fallback to type.Name here - it will work for the schema generation,
// but not for the actual serialization, and then it's only going to cause confusion.
return jsonDerivedTypeAttribute.TypeDiscriminator?.ToString();
}
return typeof(IOpenApiDiscriminator).IsAssignableFrom(type) ? type.Name : null;
}
public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions options)
{
JsonTypeInfo result = base.GetTypeInfo(type, options);
if (type.IsInterface)
{
return GetTypeInfoForInterface(result, type, options);
}
else
{
return GetTypeInfoForClass(result, type, options);
}
}
private JsonTypeInfo GetTypeInfoForClass(JsonTypeInfo result, Type type, JsonSerializerOptions options)
{
if (result.Kind != JsonTypeInfoKind.Object || !type.GetInterfaces().Any())
{
return result;
}
JsonPolymorphismOptions jsonPolymorphismOptions = result.PolymorphismOptions ?? new JsonPolymorphismOptions();
jsonPolymorphismOptions.DerivedTypes.Add(new JsonDerivedType(type, type.Name));
result.PolymorphismOptions = jsonPolymorphismOptions;
return result;
return type.IsInterface
? GetTypeInfoForInterface(result, type, options)
: result;
}
private JsonTypeInfo GetTypeInfoForInterface(JsonTypeInfo result, Type type, JsonSerializerOptions options)
@@ -3,19 +3,27 @@
<Title>Umbraco CMS - API Common</Title>
<Description>Contains the bits and pieces that are shared between the Umbraco CMS APIs.</Description>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="OpenIddict.Abstractions" Version="4.5.0" />
<PackageReference Include="OpenIddict.AspNetCore" Version="4.5.0" />
<PackageReference Include="Asp.Versioning.Mvc "/>
<PackageReference Include="Asp.Versioning.Mvc.ApiExplorer" />
<PackageReference Include="Swashbuckle.AspNetCore" />
<PackageReference Include="OpenIddict.Abstractions" />
<PackageReference Include="OpenIddict.AspNetCore" />
<!-- Both OpenIddict.AspNetCore, Npoco.SqlServer and Microsoft.EntityFrameworkCore.SqlServer bring in a vulnerable version of Microsoft.IdentityModel.JsonWebTokens -->
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens"/>
<!-- Take top-level depedendency on OpenIddict.AspNetCore depends on a vulnerable version -->
<PackageReference Include="Microsoft.Extensions.Caching.Memory" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Umbraco.Core\Umbraco.Core.csproj" />
<ProjectReference Include="..\Umbraco.Web.Common\Umbraco.Web.Common.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,32 @@
using Microsoft.AspNetCore.OutputCaching;
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Caching;
internal sealed class DeliveryApiOutputCachePolicy : IOutputCachePolicy
{
private readonly TimeSpan _duration;
public DeliveryApiOutputCachePolicy(TimeSpan duration)
=> _duration = duration;
ValueTask IOutputCachePolicy.CacheRequestAsync(OutputCacheContext context, CancellationToken cancellationToken)
{
IRequestPreviewService requestPreviewService = context
.HttpContext
.RequestServices
.GetRequiredService<IRequestPreviewService>();
context.EnableOutputCaching = requestPreviewService.IsPreview() is false;
context.ResponseExpirationTimeSpan = _duration;
return ValueTask.CompletedTask;
}
ValueTask IOutputCachePolicy.ServeFromCacheAsync(OutputCacheContext context, CancellationToken cancellationToken)
=> ValueTask.CompletedTask;
ValueTask IOutputCachePolicy.ServeResponseAsync(OutputCacheContext context, CancellationToken cancellationToken)
=> ValueTask.CompletedTask;
}
@@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Builder;
using Umbraco.Cms.Web.Common.ApplicationBuilder;
namespace Umbraco.Cms.Api.Delivery.Caching;
internal sealed class OutputCachePipelineFilter : UmbracoPipelineFilter
{
public OutputCachePipelineFilter(string name)
: base(name)
=> PostPipeline = PostPipelineAction;
private void PostPipelineAction(IApplicationBuilder applicationBuilder)
=> applicationBuilder.UseOutputCache();
}
@@ -0,0 +1,74 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Umbraco.Cms.Api.Common.Security;
using Umbraco.Cms.Api.Delivery.Controllers.Content;
using Umbraco.Cms.Api.Delivery.Filters;
namespace Umbraco.Cms.Api.Delivery.Configuration;
/// <summary>
/// This configures member authentication for the Delivery API in Swagger. Consult the docs for
/// member authentication within the Delivery API for instructions on how to use this.
/// </summary>
/// <remarks>
/// This class is not used by the core CMS due to the required installation dependencies (local login page among other things).
/// </remarks>
public class ConfigureUmbracoMemberAuthenticationDeliveryApiSwaggerGenOptions : IConfigureOptions<SwaggerGenOptions>
{
private const string AuthSchemeName = "Umbraco Member";
public void Configure(SwaggerGenOptions options)
{
options.AddSecurityDefinition(
AuthSchemeName,
new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Name = AuthSchemeName,
Type = SecuritySchemeType.OAuth2,
Description = "Umbraco Member Authentication",
Flows = new OpenApiOAuthFlows
{
AuthorizationCode = new OpenApiOAuthFlow
{
AuthorizationUrl = new Uri(Paths.MemberApi.AuthorizationEndpoint, UriKind.Relative),
TokenUrl = new Uri(Paths.MemberApi.TokenEndpoint, UriKind.Relative)
}
}
});
// add security requirements for content API operations
options.OperationFilter<DeliveryApiSecurityFilter>();
}
private class DeliveryApiSecurityFilter : SwaggerFilterBase<ContentApiControllerBase>, IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (CanApply(context) is false)
{
return;
}
operation.Security = new List<OpenApiSecurityRequirement>
{
new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = AuthSchemeName,
}
},
new string[] { }
}
}
};
}
}
}
@@ -8,6 +8,5 @@ internal static class DeliveryApiConfiguration
internal const string ApiDocumentationContentArticleLink = "https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api";
// TODO: update this when the Media article is out
internal const string ApiDocumentationMediaArticleLink = "https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api";
internal const string ApiDocumentationMediaArticleLink = "https://docs.umbraco.com/umbraco-cms/reference/content-delivery-api/media-delivery-api";
}
@@ -1,54 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class ByIdContentApiController : ContentApiItemControllerBase
{
public ByIdContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IPublicAccessService publicAccessService)
: base(apiPublishedContentCache, apiContentResponseBuilder, publicAccessService)
{
}
/// <summary>
/// Gets a content item by id.
/// </summary>
/// <param name="id">The unique identifier of the content item.</param>
/// <returns>The content item or not found result.</returns>
[HttpGet("item/{id:guid}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IApiContentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ById(Guid id)
{
IPublishedContent? contentItem = ApiPublishedContentCache.GetById(id);
if (contentItem is null)
{
return NotFound();
}
if (IsProtected(contentItem))
{
return Unauthorized();
}
IApiContentResponse? apiContentResponse = ApiContentResponseBuilder.Build(contentItem);
if (apiContentResponse is null)
{
return NotFound();
}
return await Task.FromResult(Ok(apiContentResponse));
}
}
@@ -1,39 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class ByIdMediaApiController : MediaApiControllerBase
{
public ByIdMediaApiController(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
{
}
/// <summary>
/// Gets a media item by id.
/// </summary>
/// <param name="id">The unique identifier of the media item.</param>
/// <returns>The media item or not found result.</returns>
[HttpGet("item/{id:guid}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(ApiMediaWithCropsResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ById(Guid id)
{
IPublishedContent? media = PublishedMediaCache.GetById(id);
if (media is null)
{
return await Task.FromResult(NotFound());
}
return Ok(BuildApiMediaWithCrops(media));
}
}
@@ -1,43 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class ByIdsContentApiController : ContentApiItemControllerBase
{
public ByIdsContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IPublicAccessService publicAccessService)
: base(apiPublishedContentCache, apiContentResponseBuilder, publicAccessService)
{
}
/// <summary>
/// Gets content items by ids.
/// </summary>
/// <param name="ids">The unique identifiers of the content items to retrieve.</param>
/// <returns>The content items.</returns>
[HttpGet("item")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IEnumerable<IApiContentResponse>), StatusCodes.Status200OK)]
public async Task<ActionResult> Item([FromQuery(Name = "id")] HashSet<Guid> ids)
{
IEnumerable<IPublishedContent> contentItems = ApiPublishedContentCache.GetByIds(ids);
IApiContentResponse[] apiContentItems = contentItems
.Where(contentItem => !IsProtected(contentItem))
.Select(ApiContentResponseBuilder.Build)
.WhereNotNull()
.ToArray();
return await Task.FromResult(Ok(apiContentItems));
}
}
@@ -1,41 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure.DeliveryApi;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class ByIdsMediaApiController : MediaApiControllerBase
{
public ByIdsMediaApiController(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
{
}
/// <summary>
/// Gets media items by ids.
/// </summary>
/// <param name="ids">The unique identifiers of the media items to retrieve.</param>
/// <returns>The media items.</returns>
[HttpGet("item")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IEnumerable<ApiMediaWithCropsResponse>), StatusCodes.Status200OK)]
public async Task<ActionResult> Item([FromQuery(Name = "id")] HashSet<Guid> ids)
{
IPublishedContent[] mediaItems = ids
.Select(PublishedMediaCache.GetById)
.WhereNotNull()
.ToArray();
ApiMediaWithCropsResponse[] apiMediaItems = mediaItems
.Select(BuildApiMediaWithCrops)
.ToArray();
return await Task.FromResult(Ok(apiMediaItems));
}
}
@@ -1,45 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class ByPathMediaApiController : MediaApiControllerBase
{
private readonly IApiMediaQueryService _apiMediaQueryService;
public ByPathMediaApiController(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder,
IApiMediaQueryService apiMediaQueryService)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
=> _apiMediaQueryService = apiMediaQueryService;
/// <summary>
/// Gets a media item by its path.
/// </summary>
/// <param name="path">The path of the media item.</param>
/// <returns>The media item or not found result.</returns>
[HttpGet("item/{*path}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(ApiMediaWithCropsResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByPath(string path)
{
path = DecodePath(path);
IPublishedContent? media = _apiMediaQueryService.GetByPath(path);
if (media is null)
{
return await Task.FromResult(NotFound());
}
return Ok(BuildApiMediaWithCrops(media));
}
}
@@ -1,108 +0,0 @@
using System.Net;
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class ByRouteContentApiController : ContentApiItemControllerBase
{
private readonly IRequestRoutingService _requestRoutingService;
private readonly IRequestRedirectService _requestRedirectService;
private readonly IRequestPreviewService _requestPreviewService;
public ByRouteContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IPublicAccessService publicAccessService,
IRequestRoutingService requestRoutingService,
IRequestRedirectService requestRedirectService,
IRequestPreviewService requestPreviewService)
: base(apiPublishedContentCache, apiContentResponseBuilder, publicAccessService)
{
_requestRoutingService = requestRoutingService;
_requestRedirectService = requestRedirectService;
_requestPreviewService = requestPreviewService;
}
/// <summary>
/// Gets a content item by route.
/// </summary>
/// <param name="path">The path to the content item.</param>
/// <remarks>
/// Optional URL segment for the root content item
/// can be added through the "start-item" header.
/// </remarks>
/// <returns>The content item or not found result.</returns>
[HttpGet("item/{*path}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IApiContentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByRoute(string path = "")
{
path = DecodePath(path);
path = path.TrimStart("/");
path = path.Length == 0 ? "/" : path;
IPublishedContent? contentItem = GetContent(path);
if (contentItem is not null)
{
if (IsProtected(contentItem))
{
return Unauthorized();
}
return await Task.FromResult(Ok(ApiContentResponseBuilder.Build(contentItem)));
}
IApiContentRoute? redirectRoute = _requestRedirectService.GetRedirectRoute(path);
return redirectRoute != null
? RedirectTo(redirectRoute)
: NotFound();
}
private IPublishedContent? GetContent(string path)
=> path.StartsWith(Constants.DeliveryApi.Routing.PreviewContentPathPrefix)
? GetPreviewContent(path)
: GetPublishedContent(path);
private IPublishedContent? GetPublishedContent(string path)
{
var contentRoute = _requestRoutingService.GetContentRoute(path);
IPublishedContent? contentItem = ApiPublishedContentCache.GetByRoute(contentRoute);
return contentItem;
}
private IPublishedContent? GetPreviewContent(string path)
{
if (_requestPreviewService.IsPreview() is false)
{
return null;
}
if (Guid.TryParse(path.AsSpan(Constants.DeliveryApi.Routing.PreviewContentPathPrefix.Length).TrimEnd("/"), out Guid contentId) is false)
{
return null;
}
IPublishedContent? contentItem = ApiPublishedContentCache.GetById(contentId);
return contentItem;
}
private IActionResult RedirectTo(IApiContentRoute redirectRoute)
{
Response.Headers.Add("Location-Start-Item-Path", redirectRoute.StartItem.Path);
Response.Headers.Add("Location-Start-Item-Id", redirectRoute.StartItem.Id.ToString("D"));
return RedirectPermanent(redirectRoute.Path);
}
}
@@ -0,0 +1,70 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
namespace Umbraco.Cms.Api.Delivery.Controllers.Content;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ByIdContentApiController : ContentApiItemControllerBase
{
private readonly IRequestMemberAccessService _requestMemberAccessService;
public ByIdContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IRequestMemberAccessService requestMemberAccessService)
: base(apiPublishedContentCache, apiContentResponseBuilder)
=> _requestMemberAccessService = requestMemberAccessService;
[HttpGet("item/{id:guid}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IApiContentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> ById(Guid id)
=> await HandleRequest(id);
/// <summary>
/// Gets a content item by id.
/// </summary>
/// <param name="id">The unique identifier of the content item.</param>
/// <returns>The content item or not found result.</returns>
[HttpGet("item/{id:guid}")]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(IApiContentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByIdV20(Guid id)
=> await HandleRequest(id);
private async Task<IActionResult> HandleRequest(Guid id)
{
IPublishedContent? contentItem = ApiPublishedContentCache.GetById(id);
if (contentItem is null)
{
return NotFound();
}
IActionResult? deniedAccessResult = await HandleMemberAccessAsync(contentItem, _requestMemberAccessService);
if (deniedAccessResult is not null)
{
return deniedAccessResult;
}
IApiContentResponse? apiContentResponse = ApiContentResponseBuilder.Build(contentItem);
if (apiContentResponse is null)
{
return NotFound();
}
return Ok(apiContentResponse);
}
}
@@ -0,0 +1,63 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers.Content;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ByIdsContentApiController : ContentApiItemControllerBase
{
private readonly IRequestMemberAccessService _requestMemberAccessService;
public ByIdsContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IRequestMemberAccessService requestMemberAccessService)
: base(apiPublishedContentCache, apiContentResponseBuilder)
=> _requestMemberAccessService = requestMemberAccessService;
[HttpGet("item")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IEnumerable<IApiContentResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> Item([FromQuery(Name = "id")] HashSet<Guid> ids)
=> await HandleRequest(ids);
/// <summary>
/// Gets content items by ids.
/// </summary>
/// <param name="ids">The unique identifiers of the content items to retrieve.</param>
/// <returns>The content items.</returns>
[HttpGet("items")]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(IEnumerable<IApiContentResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
public async Task<IActionResult> ItemsV20([FromQuery(Name = "id")] HashSet<Guid> ids)
=> await HandleRequest(ids);
private async Task<IActionResult> HandleRequest(HashSet<Guid> ids)
{
IPublishedContent[] contentItems = ApiPublishedContentCache.GetByIds(ids).ToArray();
IActionResult? deniedAccessResult = await HandleMemberAccessAsync(contentItems, _requestMemberAccessService);
if (deniedAccessResult is not null)
{
return deniedAccessResult;
}
IApiContentResponse[] apiContentItems = contentItems
.Select(ApiContentResponseBuilder.Build)
.WhereNotNull()
.ToArray();
return await Task.FromResult(Ok(apiContentItems));
}
}
@@ -0,0 +1,159 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Api.Delivery.Controllers.Content;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ByRouteContentApiController : ContentApiItemControllerBase
{
private readonly IApiContentPathResolver _apiContentPathResolver;
private readonly IRequestRedirectService _requestRedirectService;
private readonly IRequestPreviewService _requestPreviewService;
private readonly IRequestMemberAccessService _requestMemberAccessService;
private const string PreviewContentRequestPathPrefix = $"/{Constants.DeliveryApi.Routing.PreviewContentPathPrefix}";
[Obsolete($"Please use the constructor that accepts {nameof(IApiContentPathResolver)}. Will be removed in V15.")]
public ByRouteContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IRequestRoutingService requestRoutingService,
IRequestRedirectService requestRedirectService,
IRequestPreviewService requestPreviewService,
IRequestMemberAccessService requestMemberAccessService)
: this(
apiPublishedContentCache,
apiContentResponseBuilder,
requestRedirectService,
requestPreviewService,
requestMemberAccessService,
StaticServiceProvider.Instance.GetRequiredService<IApiContentPathResolver>())
{
}
[Obsolete($"Please use the non-obsolete constructor. Will be removed in V15.")]
public ByRouteContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IPublicAccessService publicAccessService,
IRequestRoutingService requestRoutingService,
IRequestRedirectService requestRedirectService,
IRequestPreviewService requestPreviewService,
IRequestMemberAccessService requestMemberAccessService,
IApiContentPathResolver apiContentPathResolver)
: this(
apiPublishedContentCache,
apiContentResponseBuilder,
requestRedirectService,
requestPreviewService,
requestMemberAccessService,
apiContentPathResolver)
{
}
[ActivatorUtilitiesConstructor]
public ByRouteContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IRequestRedirectService requestRedirectService,
IRequestPreviewService requestPreviewService,
IRequestMemberAccessService requestMemberAccessService,
IApiContentPathResolver apiContentPathResolver)
: base(apiPublishedContentCache, apiContentResponseBuilder)
{
_requestRedirectService = requestRedirectService;
_requestPreviewService = requestPreviewService;
_requestMemberAccessService = requestMemberAccessService;
_apiContentPathResolver = apiContentPathResolver;
}
[HttpGet("item/{*path}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IApiContentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> ByRoute(string path = "")
=> await HandleRequest(path);
/// <summary>
/// Gets a content item by route.
/// </summary>
/// <param name="path">The path to the content item.</param>
/// <remarks>
/// Optional URL segment for the root content item
/// can be added through the "start-item" header.
/// </remarks>
/// <returns>The content item or not found result.</returns>
[HttpGet("item/{*path}")]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(IApiContentResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByRouteV20(string path = "")
=> await HandleRequest(path);
private async Task<IActionResult> HandleRequest(string path)
{
path = DecodePath(path);
path = path.Length == 0 ? "/" : path;
IPublishedContent? contentItem = GetContent(path);
if (contentItem is not null)
{
IActionResult? deniedAccessResult = await HandleMemberAccessAsync(contentItem, _requestMemberAccessService);
if (deniedAccessResult is not null)
{
return deniedAccessResult;
}
return await Task.FromResult(Ok(ApiContentResponseBuilder.Build(contentItem)));
}
IApiContentRoute? redirectRoute = _requestRedirectService.GetRedirectRoute(path);
return redirectRoute != null
? RedirectTo(redirectRoute)
: NotFound();
}
private IPublishedContent? GetContent(string path)
=> path.StartsWith(PreviewContentRequestPathPrefix)
? GetPreviewContent(path)
: GetPublishedContent(path);
private IPublishedContent? GetPublishedContent(string path)
=> _apiContentPathResolver.ResolveContentPath(path);
private IPublishedContent? GetPreviewContent(string path)
{
if (_requestPreviewService.IsPreview() is false)
{
return null;
}
if (Guid.TryParse(path.AsSpan(PreviewContentRequestPathPrefix.Length).TrimEnd("/"), out Guid contentId) is false)
{
return null;
}
IPublishedContent? contentItem = ApiPublishedContentCache.GetById(contentId);
return contentItem;
}
private IActionResult RedirectTo(IApiContentRoute redirectRoute)
{
Response.Headers.Add("Location-Start-Item-Path", redirectRoute.StartItem.Path);
Response.Headers.Add("Location-Start-Item-Id", redirectRoute.StartItem.Id.ToString("D"));
return RedirectPermanent(redirectRoute.Path);
}
}
@@ -0,0 +1,62 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OutputCaching;
using Umbraco.Cms.Api.Common.Builders;
using Umbraco.Cms.Api.Delivery.Filters;
using Umbraco.Cms.Api.Delivery.Routing;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Services.OperationStatus;
namespace Umbraco.Cms.Api.Delivery.Controllers.Content;
[DeliveryApiAccess]
[VersionedDeliveryApiRoute("content")]
[ApiExplorerSettings(GroupName = "Content")]
[LocalizeFromAcceptLanguageHeader]
[ValidateStartItem]
[AddVaryHeader]
[OutputCache(PolicyName = Constants.DeliveryApi.OutputCache.ContentCachePolicy)]
public abstract class ContentApiControllerBase : DeliveryApiControllerBase
{
protected IApiPublishedContentCache ApiPublishedContentCache { get; }
protected IApiContentResponseBuilder ApiContentResponseBuilder { get; }
protected ContentApiControllerBase(IApiPublishedContentCache apiPublishedContentCache, IApiContentResponseBuilder apiContentResponseBuilder)
{
ApiPublishedContentCache = apiPublishedContentCache;
ApiContentResponseBuilder = apiContentResponseBuilder;
}
protected IActionResult ApiContentQueryOperationStatusResult(ApiContentQueryOperationStatus status) =>
status switch
{
ApiContentQueryOperationStatus.FilterOptionNotFound => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Filter option not found")
.WithDetail("One of the attempted 'filter' options does not exist")
.Build()),
ApiContentQueryOperationStatus.SelectorOptionNotFound => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Selector option not found")
.WithDetail("The attempted 'fetch' option does not exist")
.Build()),
ApiContentQueryOperationStatus.SortOptionNotFound => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Sort option not found")
.WithDetail("One of the attempted 'sort' options does not exist")
.Build()),
_ => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Unknown content query status")
.WithDetail($"Content query status \"{status}\" was not expected here")
.Build()),
};
/// <summary>
/// Creates a 403 Forbidden result.
/// </summary>
/// <remarks>
/// Use this method instead of <see cref="ControllerBase.Forbid()"/> on the controller base. The latter will yield
/// a redirect to an access denied URL because of the default cookie auth scheme. This method ensures that a proper
/// 403 Forbidden status code is returned to the client.
/// </remarks>
protected IActionResult Forbidden() => new StatusCodeResult(StatusCodes.Status403Forbidden);
}
@@ -0,0 +1,41 @@
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Security;
namespace Umbraco.Cms.Api.Delivery.Controllers.Content;
public abstract class ContentApiItemControllerBase : ContentApiControllerBase
{
protected ContentApiItemControllerBase(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder)
: base(apiPublishedContentCache, apiContentResponseBuilder)
{
}
protected async Task<IActionResult?> HandleMemberAccessAsync(IPublishedContent contentItem, IRequestMemberAccessService requestMemberAccessService)
{
PublicAccessStatus accessStatus = await requestMemberAccessService.MemberHasAccessToAsync(contentItem);
return accessStatus is PublicAccessStatus.AccessAccepted
? null
: accessStatus is PublicAccessStatus.AccessDenied
? Forbidden()
: Unauthorized();
}
protected async Task<IActionResult?> HandleMemberAccessAsync(IEnumerable<IPublishedContent> contentItems, IRequestMemberAccessService requestMemberAccessService)
{
foreach (IPublishedContent content in contentItems)
{
IActionResult? result = await HandleMemberAccessAsync(content, requestMemberAccessService);
// if any of the content items yield an error based on the current member access, return that error
if (result is not null)
{
return result;
}
}
return null;
}
}
@@ -0,0 +1,91 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.ViewModels.Pagination;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers.Content;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class QueryContentApiController : ContentApiControllerBase
{
private readonly IRequestMemberAccessService _requestMemberAccessService;
private readonly IApiContentQueryService _apiContentQueryService;
public QueryContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilderBuilder,
IApiContentQueryService apiContentQueryService,
IRequestMemberAccessService requestMemberAccessService)
: base(apiPublishedContentCache, apiContentResponseBuilderBuilder)
{
_apiContentQueryService = apiContentQueryService;
_requestMemberAccessService = requestMemberAccessService;
}
[HttpGet]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(PagedViewModel<IApiContentResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> Query(
string? fetch,
[FromQuery] string[] filter,
[FromQuery] string[] sort,
int skip = 0,
int take = 10)
=> await HandleRequest(fetch, filter, sort, skip, take);
/// <summary>
/// Gets a paginated list of content item(s) from query.
/// </summary>
/// <param name="fetch">Optional fetch query parameter value.</param>
/// <param name="filter">Optional filter query parameters values.</param>
/// <param name="sort">Optional sort query parameters values.</param>
/// <param name="skip">The amount of items to skip.</param>
/// <param name="take">The amount of items to take.</param>
/// <returns>The paged result of the content item(s).</returns>
[HttpGet]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(PagedViewModel<IApiContentResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> QueryV20(
string? fetch,
[FromQuery] string[] filter,
[FromQuery] string[] sort,
int skip = 0,
int take = 10)
=> await HandleRequest(fetch, filter, sort, skip, take);
private async Task<IActionResult> HandleRequest(string? fetch, string[] filter, string[] sort, int skip, int take)
{
ProtectedAccess protectedAccess = await _requestMemberAccessService.MemberAccessAsync();
Attempt<PagedModel<Guid>, ApiContentQueryOperationStatus> queryAttempt = _apiContentQueryService.ExecuteQuery(fetch, filter, sort, protectedAccess, skip, take);
if (queryAttempt.Success is false)
{
return ApiContentQueryOperationStatusResult(queryAttempt.Status);
}
PagedModel<Guid> pagedResult = queryAttempt.Result;
IEnumerable<IPublishedContent> contentItems = ApiPublishedContentCache.GetByIds(pagedResult.Items);
IApiContentResponse[] apiContentItems = contentItems.Select(ApiContentResponseBuilder.Build).WhereNotNull().ToArray();
var model = new PagedViewModel<IApiContentResponse>
{
Total = pagedResult.Total,
Items = apiContentItems
};
return Ok(model);
}
}
@@ -1,47 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.Builders;
using Umbraco.Cms.Api.Delivery.Filters;
using Umbraco.Cms.Api.Delivery.Routing;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Services.OperationStatus;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[DeliveryApiAccess]
[VersionedDeliveryApiRoute("content")]
[ApiExplorerSettings(GroupName = "Content")]
[LocalizeFromAcceptLanguageHeader]
[ValidateStartItem]
public abstract class ContentApiControllerBase : DeliveryApiControllerBase
{
protected IApiPublishedContentCache ApiPublishedContentCache { get; }
protected IApiContentResponseBuilder ApiContentResponseBuilder { get; }
protected ContentApiControllerBase(IApiPublishedContentCache apiPublishedContentCache, IApiContentResponseBuilder apiContentResponseBuilder)
{
ApiPublishedContentCache = apiPublishedContentCache;
ApiContentResponseBuilder = apiContentResponseBuilder;
}
protected IActionResult ApiContentQueryOperationStatusResult(ApiContentQueryOperationStatus status) =>
status switch
{
ApiContentQueryOperationStatus.FilterOptionNotFound => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Filter option not found")
.WithDetail("One of the attempted 'filter' options does not exist")
.Build()),
ApiContentQueryOperationStatus.SelectorOptionNotFound => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Selector option not found")
.WithDetail("The attempted 'fetch' option does not exist")
.Build()),
ApiContentQueryOperationStatus.SortOptionNotFound => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Sort option not found")
.WithDetail("One of the attempted 'sort' options does not exist")
.Build()),
_ => BadRequest(new ProblemDetailsBuilder()
.WithTitle("Unknown content query status")
.WithDetail($"Content query status \"{status}\" was not expected here")
.Build()),
};
}
@@ -1,22 +0,0 @@
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Api.Delivery.Controllers;
public abstract class ContentApiItemControllerBase : ContentApiControllerBase
{
private readonly IPublicAccessService _publicAccessService;
protected ContentApiItemControllerBase(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilder,
IPublicAccessService publicAccessService)
: base(apiPublishedContentCache, apiContentResponseBuilder)
=> _publicAccessService = publicAccessService;
// NOTE: we're going to test for protected content at item endpoint level, because the check has already been
// performed at content index time for the query endpoint and we don't want that extra overhead when
// returning multiple items.
protected bool IsProtected(IPublishedContent content) => _publicAccessService.IsProtected(content.Path);
}
@@ -1,16 +1,20 @@
using System.Net;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.Attributes;
using Umbraco.Cms.Api.Common.Filters;
using Umbraco.Cms.Api.Delivery.Configuration;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Features;
using Umbraco.Cms.Web.Common.Authorization;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiController]
[JsonOptionsName(Constants.JsonOptionsNames.DeliveryApi)]
[MapToApi(DeliveryApiConfiguration.ApiName)]
public abstract class DeliveryApiControllerBase : Controller
[Authorize(Policy = AuthorizationPolicies.UmbracoFeatureEnabled)]
public abstract class DeliveryApiControllerBase : Controller, IUmbracoFeature
{
protected string DecodePath(string path)
{
@@ -0,0 +1,51 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ByIdMediaApiController : MediaApiControllerBase
{
public ByIdMediaApiController(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
{
}
[HttpGet("item/{id:guid}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IApiMediaWithCropsResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> ById(Guid id)
=> await HandleRequest(id);
/// <summary>
/// Gets a media item by id.
/// </summary>
/// <param name="id">The unique identifier of the media item.</param>
/// <returns>The media item or not found result.</returns>
[HttpGet("item/{id:guid}")]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(IApiMediaWithCropsResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByIdV20(Guid id)
=> await HandleRequest(id);
private async Task<IActionResult> HandleRequest(Guid id)
{
IPublishedContent? media = PublishedMediaCache.GetById(id);
if (media is null)
{
return await Task.FromResult(NotFound());
}
return Ok(BuildApiMediaWithCrops(media));
}
}
@@ -0,0 +1,52 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure.DeliveryApi;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ByIdsMediaApiController : MediaApiControllerBase
{
public ByIdsMediaApiController(IPublishedSnapshotAccessor publishedSnapshotAccessor, IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
{
}
[HttpGet("item")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IEnumerable<IApiMediaWithCropsResponse>), StatusCodes.Status200OK)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> Item([FromQuery(Name = "id")] HashSet<Guid> ids)
=> await HandleRequest(ids);
/// <summary>
/// Gets media items by ids.
/// </summary>
/// <param name="ids">The unique identifiers of the media items to retrieve.</param>
/// <returns>The media items.</returns>
[HttpGet("items")]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(IEnumerable<IApiMediaWithCropsResponse>), StatusCodes.Status200OK)]
public async Task<IActionResult> ItemsV20([FromQuery(Name = "id")] HashSet<Guid> ids)
=> await HandleRequest(ids);
private async Task<IActionResult> HandleRequest(HashSet<Guid> ids)
{
IPublishedContent[] mediaItems = ids
.Select(PublishedMediaCache.GetById)
.WhereNotNull()
.ToArray();
IApiMediaWithCropsResponse[] apiMediaItems = mediaItems
.Select(BuildApiMediaWithCrops)
.ToArray();
return await Task.FromResult(Ok(apiMediaItems));
}
}
@@ -0,0 +1,57 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Infrastructure.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ByPathMediaApiController : MediaApiControllerBase
{
private readonly IApiMediaQueryService _apiMediaQueryService;
public ByPathMediaApiController(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder,
IApiMediaQueryService apiMediaQueryService)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
=> _apiMediaQueryService = apiMediaQueryService;
[HttpGet("item/{*path}")]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(IApiMediaWithCropsResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> ByPath(string path)
=> await HandleRequest(path);
/// <summary>
/// Gets a media item by its path.
/// </summary>
/// <param name="path">The path of the media item.</param>
/// <returns>The media item or not found result.</returns>
[HttpGet("item/{*path}")]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(IApiMediaWithCropsResponse), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> ByPathV20(string path)
=> await HandleRequest(path);
private async Task<IActionResult> HandleRequest(string path)
{
path = DecodePath(path);
IPublishedContent? media = _apiMediaQueryService.GetByPath(path);
if (media is null)
{
return await Task.FromResult(NotFound());
}
return Ok(BuildApiMediaWithCrops(media));
}
}
@@ -1,7 +1,9 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OutputCaching;
using Umbraco.Cms.Api.Common.Builders;
using Umbraco.Cms.Api.Delivery.Filters;
using Umbraco.Cms.Api.Delivery.Routing;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
@@ -9,11 +11,12 @@ using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Cms.Infrastructure.DeliveryApi;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers;
namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[DeliveryApiMediaAccess]
[VersionedDeliveryApiRoute("media")]
[ApiExplorerSettings(GroupName = "Media")]
[OutputCache(PolicyName = Constants.DeliveryApi.OutputCache.MediaCachePolicy)]
public abstract class MediaApiControllerBase : DeliveryApiControllerBase
{
private readonly IApiMediaWithCropsResponseBuilder _apiMediaWithCropsResponseBuilder;
@@ -30,7 +33,7 @@ public abstract class MediaApiControllerBase : DeliveryApiControllerBase
??= _publishedSnapshotAccessor.GetRequiredPublishedSnapshot().Media
?? throw new InvalidOperationException("Could not obtain the published media cache");
protected ApiMediaWithCropsResponse BuildApiMediaWithCrops(IPublishedContent media)
protected IApiMediaWithCropsResponse BuildApiMediaWithCrops(IPublishedContent media)
=> _apiMediaWithCropsResponseBuilder.Build(media);
protected IActionResult ApiMediaQueryOperationStatusResult(ApiMediaQueryOperationStatus status) =>
@@ -0,0 +1,84 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.ViewModels.Pagination;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Cms.Infrastructure.DeliveryApi;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers.Media;
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class QueryMediaApiController : MediaApiControllerBase
{
private readonly IApiMediaQueryService _apiMediaQueryService;
public QueryMediaApiController(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder,
IApiMediaQueryService apiMediaQueryService)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
=> _apiMediaQueryService = apiMediaQueryService;
[HttpGet]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(PagedViewModel<IApiMediaWithCropsResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
[Obsolete("Please use version 2 of this API. Will be removed in V15.")]
public async Task<IActionResult> Query(
string? fetch,
[FromQuery] string[] filter,
[FromQuery] string[] sort,
int skip = 0,
int take = 10)
=> await HandleRequest(fetch, filter, sort, skip, take);
/// <summary>
/// Gets a paginated list of media item(s) from query.
/// </summary>
/// <param name="fetch">Optional fetch query parameter value.</param>
/// <param name="filter">Optional filter query parameters values.</param>
/// <param name="sort">Optional sort query parameters values.</param>
/// <param name="skip">The amount of items to skip.</param>
/// <param name="take">The amount of items to take.</param>
/// <returns>The paged result of the media item(s).</returns>
[HttpGet]
[MapToApiVersion("2.0")]
[ProducesResponseType(typeof(PagedViewModel<IApiMediaWithCropsResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
public async Task<IActionResult> QueryV20(
string? fetch,
[FromQuery] string[] filter,
[FromQuery] string[] sort,
int skip = 0,
int take = 10)
=> await HandleRequest(fetch, filter, sort, skip, take);
private async Task<IActionResult> HandleRequest(string? fetch, string[] filter, string[] sort, int skip, int take)
{
Attempt<PagedModel<Guid>, ApiMediaQueryOperationStatus> queryAttempt = _apiMediaQueryService.ExecuteQuery(fetch, filter, sort, skip, take);
if (queryAttempt.Success is false)
{
return ApiMediaQueryOperationStatusResult(queryAttempt.Status);
}
PagedModel<Guid> pagedResult = queryAttempt.Result;
IPublishedContent[] mediaItems = pagedResult.Items.Select(PublishedMediaCache.GetById).WhereNotNull().ToArray();
var model = new PagedViewModel<IApiMediaWithCropsResponse>
{
Total = pagedResult.Total,
Items = mediaItems.Select(BuildApiMediaWithCrops)
};
return await Task.FromResult(Ok(model));
}
}
@@ -1,67 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.ViewModels.Pagination;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class QueryContentApiController : ContentApiControllerBase
{
private readonly IApiContentQueryService _apiContentQueryService;
public QueryContentApiController(
IApiPublishedContentCache apiPublishedContentCache,
IApiContentResponseBuilder apiContentResponseBuilderBuilder,
IApiContentQueryService apiContentQueryService)
: base(apiPublishedContentCache, apiContentResponseBuilderBuilder)
=> _apiContentQueryService = apiContentQueryService;
/// <summary>
/// Gets a paginated list of content item(s) from query.
/// </summary>
/// <param name="fetch">Optional fetch query parameter value.</param>
/// <param name="filter">Optional filter query parameters values.</param>
/// <param name="sort">Optional sort query parameters values.</param>
/// <param name="skip">The amount of items to skip.</param>
/// <param name="take">The amount of items to take.</param>
/// <returns>The paged result of the content item(s).</returns>
[HttpGet]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(PagedViewModel<IApiContentResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<IActionResult> Query(
string? fetch,
[FromQuery] string[] filter,
[FromQuery] string[] sort,
int skip = 0,
int take = 10)
{
Attempt<PagedModel<Guid>, ApiContentQueryOperationStatus> queryAttempt = _apiContentQueryService.ExecuteQuery(fetch, filter, sort, skip, take);
if (queryAttempt.Success is false)
{
return ApiContentQueryOperationStatusResult(queryAttempt.Status);
}
PagedModel<Guid> pagedResult = queryAttempt.Result;
IEnumerable<IPublishedContent> contentItems = ApiPublishedContentCache.GetByIds(pagedResult.Items);
IApiContentResponse[] apiContentItems = contentItems.Select(ApiContentResponseBuilder.Build).WhereNotNull().ToArray();
var model = new PagedViewModel<IApiContentResponse>
{
Total = pagedResult.Total,
Items = apiContentItems
};
return await Task.FromResult(Ok(model));
}
}
@@ -1,67 +0,0 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.ViewModels.Pagination;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Cms.Core.Services.OperationStatus;
using Umbraco.Cms.Infrastructure.DeliveryApi;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Controllers;
[ApiVersion("1.0")]
public class QueryMediaApiController : MediaApiControllerBase
{
private readonly IApiMediaQueryService _apiMediaQueryService;
public QueryMediaApiController(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IApiMediaWithCropsResponseBuilder apiMediaWithCropsResponseBuilder,
IApiMediaQueryService apiMediaQueryService)
: base(publishedSnapshotAccessor, apiMediaWithCropsResponseBuilder)
=> _apiMediaQueryService = apiMediaQueryService;
/// <summary>
/// Gets a paginated list of media item(s) from query.
/// </summary>
/// <param name="fetch">Optional fetch query parameter value.</param>
/// <param name="filter">Optional filter query parameters values.</param>
/// <param name="sort">Optional sort query parameters values.</param>
/// <param name="skip">The amount of items to skip.</param>
/// <param name="take">The amount of items to take.</param>
/// <returns>The paged result of the media item(s).</returns>
[HttpGet]
[MapToApiVersion("1.0")]
[ProducesResponseType(typeof(PagedViewModel<ApiMediaWithCropsResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Query(
string? fetch,
[FromQuery] string[] filter,
[FromQuery] string[] sort,
int skip = 0,
int take = 10)
{
Attempt<PagedModel<Guid>, ApiMediaQueryOperationStatus> queryAttempt = _apiMediaQueryService.ExecuteQuery(fetch, filter, sort, skip, take);
if (queryAttempt.Success is false)
{
return ApiMediaQueryOperationStatusResult(queryAttempt.Status);
}
PagedModel<Guid> pagedResult = queryAttempt.Result;
IPublishedContent[] mediaItems = pagedResult.Items.Select(PublishedMediaCache.GetById).WhereNotNull().ToArray();
var model = new PagedViewModel<ApiMediaWithCropsResponse>
{
Total = pagedResult.Total,
Items = mediaItems.Select(BuildApiMediaWithCrops)
};
return await Task.FromResult(Ok(model));
}
}
@@ -0,0 +1,28 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using OpenIddict.Server.AspNetCore;
using Umbraco.Cms.Api.Delivery.Routing;
using Umbraco.Cms.Core.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Controllers.Security;
[ApiVersion("1.0")]
[ApiController]
[VersionedDeliveryApiRoute(Common.Security.Paths.MemberApi.EndpointTemplate)]
[ApiExplorerSettings(IgnoreApi = true)]
[Authorize(AuthenticationSchemes = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme)]
public class CurrentMemberController : DeliveryApiControllerBase
{
private readonly ICurrentMemberClaimsProvider _currentMemberClaimsProvider;
public CurrentMemberController(ICurrentMemberClaimsProvider currentMemberClaimsProvider)
=> _currentMemberClaimsProvider = currentMemberClaimsProvider;
[HttpGet("userinfo")]
public async Task<IActionResult> Userinfo()
{
Dictionary<string, object> claims = await _currentMemberClaimsProvider.GetClaimsAsync();
return Ok(claims);
}
}
@@ -0,0 +1,171 @@
using System.Security.Claims;
using Asp.Versioning;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using OpenIddict.Abstractions;
using OpenIddict.Server.AspNetCore;
using Umbraco.Cms.Api.Delivery.Routing;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Web.Common.Security;
using Umbraco.Extensions;
using IdentitySignInResult = Microsoft.AspNetCore.Identity.SignInResult;
using SignInResult = Microsoft.AspNetCore.Mvc.SignInResult;
namespace Umbraco.Cms.Api.Delivery.Controllers.Security;
[ApiVersion("1.0")]
[VersionedDeliveryApiRoute(Common.Security.Paths.MemberApi.EndpointTemplate)]
[ApiExplorerSettings(IgnoreApi = true)]
public class MemberController : DeliveryApiControllerBase
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly IMemberSignInManager _memberSignInManager;
private readonly IMemberManager _memberManager;
private readonly DeliveryApiSettings _deliveryApiSettings;
private readonly ILogger<MemberController> _logger;
public MemberController(
IHttpContextAccessor httpContextAccessor,
IMemberSignInManager memberSignInManager,
IMemberManager memberManager,
IOptions<DeliveryApiSettings> deliveryApiSettings,
ILogger<MemberController> logger)
{
_httpContextAccessor = httpContextAccessor;
_memberSignInManager = memberSignInManager;
_memberManager = memberManager;
_logger = logger;
_deliveryApiSettings = deliveryApiSettings.Value;
}
[HttpGet("authorize")]
[MapToApiVersion("1.0")]
public async Task<IActionResult> Authorize()
{
// in principle this is not necessary for now, since the member application has been removed, thus making
// the member client ID invalid for the authentication code flow. However, if we ever add additional flows
// to the API, we should perform this check, so we might as well include it upfront.
if (_deliveryApiSettings.MemberAuthorizationIsEnabled() is false)
{
return BadRequest("Member authorization is not allowed.");
}
HttpContext context = _httpContextAccessor.GetRequiredHttpContext();
OpenIddictRequest? request = context.GetOpenIddictServerRequest();
if (request is null)
{
return BadRequest("Unable to obtain OpenID data from the current request.");
}
// make sure this endpoint ONLY handles member authentication
if (request.ClientId is not Constants.OAuthClientIds.Member)
{
return BadRequest("The specified client ID cannot be used here.");
}
return request.IdentityProvider.IsNullOrWhiteSpace()
? await AuthorizeInternal(request)
: await AuthorizeExternal(request);
}
[HttpGet("signout")]
[MapToApiVersion("1.0")]
public async Task<IActionResult> Signout()
{
await _memberSignInManager.SignOutAsync();
return SignOut(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme);
}
private async Task<IActionResult> AuthorizeInternal(OpenIddictRequest request)
{
// retrieve the user principal stored in the authentication cookie.
AuthenticateResult cookieAuthResult = await HttpContext.AuthenticateAsync(IdentityConstants.ApplicationScheme);
var userName = cookieAuthResult.Succeeded
? cookieAuthResult.Principal?.Identity?.Name
: null;
if (userName is null)
{
return Challenge(IdentityConstants.ApplicationScheme);
}
MemberIdentityUser? member = await _memberManager.FindByNameAsync(userName);
if (member is null)
{
_logger.LogError("The member with username {userName} was successfully authorized, but could not be retrieved by the member manager", userName);
return BadRequest("The member could not be found.");
}
return await SignInMember(member, request);
}
private async Task<IActionResult> AuthorizeExternal(OpenIddictRequest request)
{
var provider = request.IdentityProvider ?? throw new ArgumentException("No identity provider found in request", nameof(request));
ExternalLoginInfo? loginInfo = await _memberSignInManager.GetExternalLoginInfoAsync();
if (loginInfo?.Principal is null)
{
AuthenticationProperties properties = _memberSignInManager.ConfigureExternalAuthenticationProperties(provider, null);
return Challenge(properties, provider);
}
// NOTE: if we're going to support 2FA for members, we need to:
// - use SecuritySettings.MemberBypassTwoFactorForExternalLogins instead of the hardcoded value (true) for "bypassTwoFactor".
// - handle IdentitySignInResult.TwoFactorRequired
IdentitySignInResult result = await _memberSignInManager.ExternalLoginSignInAsync(loginInfo, false, true);
if (result == IdentitySignInResult.Success)
{
// get the member and perform sign-in
MemberIdentityUser? member = await _memberManager.FindByLoginAsync(loginInfo.LoginProvider, loginInfo.ProviderKey);
if (member is null)
{
_logger.LogError("A member was successfully authorized using external authentication, but could not be retrieved by the member manager");
return BadRequest("The member could not be found.");
}
// update member authentication tokens if succeeded
await _memberSignInManager.UpdateExternalAuthenticationTokensAsync(loginInfo);
return await SignInMember(member, request);
}
var errorProperties = new AuthenticationProperties(new Dictionary<string, string?>
{
[OpenIddictServerAspNetCoreConstants.Properties.Error] = OpenIddictConstants.Errors.AccessDenied,
[OpenIddictServerAspNetCoreConstants.Properties.ErrorDescription] = "The member is not allowed to access this resource."
});
return Forbid(errorProperties, provider);
}
private async Task<IActionResult> SignInMember(MemberIdentityUser member, OpenIddictRequest request)
{
ClaimsPrincipal memberPrincipal = await _memberSignInManager.CreateUserPrincipalAsync(member);
memberPrincipal.SetClaim(OpenIddictConstants.Claims.Subject, member.Key.ToString());
IList<string> roles = await _memberManager.GetRolesAsync(member);
memberPrincipal.SetClaim(Constants.OAuthClaims.MemberKey, member.Key.ToString());
memberPrincipal.SetClaim(Constants.OAuthClaims.MemberRoles, string.Join(",", roles));
Claim[] claims = memberPrincipal.Claims.ToArray();
foreach (Claim claim in claims.Where(claim => claim.Type is not Constants.Security.SecurityStampClaimType))
{
claim.SetDestinations(OpenIddictConstants.Destinations.AccessToken);
}
// "openid" and "offline_access" are the only scopes allowed for members; explicitly ensure we only add those
// NOTE: the "offline_access" scope is required to use refresh tokens
IEnumerable<string> allowedScopes = request
.GetScopes()
.Intersect(new[] { OpenIddictConstants.Scopes.OpenId, OpenIddictConstants.Scopes.OfflineAccess });
memberPrincipal.SetScopes(allowedScopes);
return new SignInResult(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, memberPrincipal);
}
}
@@ -1,15 +1,28 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Api.Common.DependencyInjection;
using Umbraco.Cms.Api.Delivery.Accessors;
using Umbraco.Cms.Api.Delivery.Caching;
using Umbraco.Cms.Api.Delivery.Configuration;
using Umbraco.Cms.Api.Delivery.Handlers;
using Umbraco.Cms.Api.Delivery.Json;
using Umbraco.Cms.Api.Delivery.Rendering;
using Umbraco.Cms.Api.Delivery.Routing;
using Umbraco.Cms.Api.Delivery.Security;
using Umbraco.Cms.Api.Delivery.Services;
using Umbraco.Cms.Api.Delivery.Services.QueryBuilders;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Infrastructure.Security;
using Umbraco.Cms.Web.Common.ApplicationBuilder;
namespace Umbraco.Extensions;
@@ -18,7 +31,22 @@ public static class UmbracoBuilderExtensions
public static IUmbracoBuilder AddDeliveryApi(this IUmbracoBuilder builder)
{
builder.Services.AddScoped<IRequestStartItemProvider, RequestStartItemProvider>();
builder.Services.AddScoped<IOutputExpansionStrategy, RequestContextOutputExpansionStrategy>();
builder.Services.AddScoped<RequestContextOutputExpansionStrategy>();
builder.Services.AddScoped<RequestContextOutputExpansionStrategyV2>();
builder.Services.AddScoped<IOutputExpansionStrategy>(provider =>
{
HttpContext? httpContext = provider.GetRequiredService<IHttpContextAccessor>().HttpContext;
ApiVersion? apiVersion = httpContext?.GetRequestedApiVersion();
if (apiVersion is null)
{
return provider.GetRequiredService<RequestContextOutputExpansionStrategyV2>();
}
// V1 of the Delivery API uses a different expansion strategy than V2+
return apiVersion.MajorVersion == 1
? provider.GetRequiredService<RequestContextOutputExpansionStrategy>()
: provider.GetRequiredService<RequestContextOutputExpansionStrategyV2>();
});
builder.Services.AddSingleton<IRequestCultureService, RequestCultureService>();
builder.Services.AddSingleton<IRequestRoutingService, RequestRoutingService>();
builder.Services.AddSingleton<IRequestRedirectService, RequestRedirectService>();
@@ -28,7 +56,11 @@ public static class UmbracoBuilderExtensions
builder.Services.AddSingleton<IApiAccessService, ApiAccessService>();
builder.Services.AddSingleton<IApiContentQueryService, ApiContentQueryService>();
builder.Services.AddSingleton<IApiContentQueryProvider, ApiContentQueryProvider>();
builder.Services.AddSingleton<IApiContentQueryFactory, ApiContentQueryFactory>();
builder.Services.AddSingleton<IApiMediaQueryService, ApiMediaQueryService>();
builder.Services.AddTransient<IMemberApplicationManager, MemberApplicationManager>();
builder.Services.AddTransient<IRequestMemberAccessService, RequestMemberAccessService>();
builder.Services.AddTransient<ICurrentMemberClaimsProvider, CurrentMemberClaimsProvider>();
builder.Services.ConfigureOptions<ConfigureUmbracoDeliveryApiSwaggerGenOptions>();
builder.AddUmbracoApiOpenApiUI();
@@ -44,7 +76,48 @@ public static class UmbracoBuilderExtensions
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
});
builder.Services.AddAuthentication();
builder.AddUmbracoOpenIddict();
builder.AddNotificationAsyncHandler<UmbracoApplicationStartingNotification, InitializeMemberApplicationNotificationHandler>();
builder.AddNotificationAsyncHandler<MemberSavedNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
builder.AddNotificationAsyncHandler<MemberDeletedNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
builder.AddNotificationAsyncHandler<AssignedMemberRolesNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
builder.AddNotificationAsyncHandler<RemovedMemberRolesNotification, RevokeMemberAuthenticationTokensNotificationHandler>();
// FIXME: remove this when Delivery API V1 is removed
builder.Services.AddSingleton<MatcherPolicy, DeliveryApiItemsEndpointsMatcherPolicy>();
builder.AddOutputCache();
return builder;
}
private static IUmbracoBuilder AddOutputCache(this IUmbracoBuilder builder)
{
DeliveryApiSettings.OutputCacheSettings outputCacheSettings =
builder.Config.GetSection(Constants.Configuration.ConfigDeliveryApi).Get<DeliveryApiSettings>()?.OutputCache
?? new DeliveryApiSettings.OutputCacheSettings();
if (outputCacheSettings.Enabled is false || outputCacheSettings is { ContentDuration.TotalSeconds: <= 0, MediaDuration.TotalSeconds: <= 0 })
{
return builder;
}
builder.Services.AddOutputCache(options =>
{
options.AddBasePolicy(_ => { });
if (outputCacheSettings.ContentDuration.TotalSeconds > 0)
{
options.AddPolicy(Constants.DeliveryApi.OutputCache.ContentCachePolicy, new DeliveryApiOutputCachePolicy(outputCacheSettings.ContentDuration));
}
if (outputCacheSettings.MediaDuration.TotalSeconds > 0)
{
options.AddPolicy(Constants.DeliveryApi.OutputCache.MediaCachePolicy, new DeliveryApiOutputCachePolicy(outputCacheSettings.MediaDuration));
}
});
builder.Services.Configure<UmbracoPipelineOptions>(options => options.AddFilter(new OutputCachePipelineFilter("UmbracoDeliveryApiOutputCache")));
return builder;
}
}
@@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Mvc.Filters;
namespace Umbraco.Cms.Api.Delivery.Filters;
public sealed class AddVaryHeaderAttribute : ActionFilterAttribute
{
private const string Vary = "Accept-Language, Preview, Start-Item";
public override void OnResultExecuting(ResultExecutingContext context)
=> context.HttpContext.Response.Headers.Vary = context.HttpContext.Response.Headers.Vary.Count > 0
? $"{context.HttpContext.Response.Headers.Vary}, {Vary}"
: Vary;
}
@@ -3,6 +3,7 @@ using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Umbraco.Cms.Api.Delivery.Configuration;
using Umbraco.Cms.Api.Delivery.Controllers;
using Umbraco.Cms.Api.Delivery.Controllers.Content;
namespace Umbraco.Cms.Api.Delivery.Filters;
@@ -14,7 +15,9 @@ internal sealed class SwaggerContentDocumentationFilter : SwaggerDocumentationFi
{
operation.Parameters ??= new List<OpenApiParameter>();
AddExpand(operation);
AddExpand(operation, context);
AddFields(operation, context);
operation.Parameters.Add(new OpenApiParameter
{
@@ -110,12 +113,20 @@ internal sealed class SwaggerContentDocumentationFilter : SwaggerDocumentationFi
{
{ "Default filter", new OpenApiExample { Value = new OpenApiString(string.Empty) } },
{
"Filter by content type",
"Filter by content type (equals)",
new OpenApiExample { Value = new OpenApiArray { new OpenApiString("contentType:alias1") } }
},
{
"Filter by name",
"Filter by name (contains)",
new OpenApiExample { Value = new OpenApiArray { new OpenApiString("name:nodeName") } }
},
{
"Filter by creation date (less than)",
new OpenApiExample { Value = new OpenApiArray { new OpenApiString("createDate<2024-01-01") } }
},
{
"Filter by update date (greater than or equal)",
new OpenApiExample { Value = new OpenApiArray { new OpenApiString("updateDate>:2023-01-01") } }
}
};
@@ -1,18 +0,0 @@
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Umbraco.Cms.Api.Delivery.Filters;
[Obsolete($"Superseded by {nameof(SwaggerContentDocumentationFilter)} and {nameof(SwaggerMediaDocumentationFilter)}. Will be removed in V14.")]
public class SwaggerDocumentationFilter : IOperationFilter, IParameterFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
// retained for backwards compat
}
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
// retained for backwards compat
}
}
@@ -1,18 +1,17 @@
using System.Reflection;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Filters;
internal abstract class SwaggerDocumentationFilterBase<TBaseController> : IOperationFilter, IParameterFilter
internal abstract class SwaggerDocumentationFilterBase<TBaseController>
: SwaggerFilterBase<TBaseController>, IOperationFilter, IParameterFilter
where TBaseController : Controller
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (CanApply(context.MethodInfo))
if (CanApply(context))
{
ApplyOperation(operation, context);
}
@@ -20,7 +19,7 @@ internal abstract class SwaggerDocumentationFilterBase<TBaseController> : IOpera
public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
{
if (CanApply(context.ParameterInfo.Member))
if (CanApply(context))
{
ApplyParameter(parameter, context);
}
@@ -38,8 +37,52 @@ internal abstract class SwaggerDocumentationFilterBase<TBaseController> : IOpera
parameter.Examples = examples;
}
protected void AddExpand(OpenApiOperation operation) =>
protected void AddExpand(OpenApiOperation operation, OperationFilterContext context)
{
if (IsApiV1(context))
{
AddExpandV1(operation);
}
else
{
AddExpand(operation);
}
}
protected void AddFields(OpenApiOperation operation, OperationFilterContext context)
{
if (IsApiV1(context))
{
// "fields" is not a thing in Delivery API V1
return;
}
AddFields(operation);
}
protected void AddApiKey(OpenApiOperation operation) =>
operation.Parameters.Add(new OpenApiParameter
{
Name = "Api-Key",
In = ParameterLocation.Header,
Required = false,
Description = "API key specified through configuration to authorize access to the API.",
Schema = new OpenApiSchema { Type = "string" }
});
protected string PaginationDescription(bool skip, string itemType)
=> $"Specifies the number of found {itemType} items to {(skip ? "skip" : "take")}. Use this to control pagination of the response.";
private string QueryParameterDescription(string description)
=> $"{description}. Refer to [the documentation]({DocumentationLink}#query-parameters) for more details on this.";
// FIXME: remove this when Delivery API V1 has been removed (expectedly in V15)
private static bool IsApiV1(OperationFilterContext context)
=> context.ApiDescription.RelativePath?.Contains("api/v1") is true;
// FIXME: remove this when Delivery API V1 has been removed (expectedly in V15)
private void AddExpandV1(OpenApiOperation operation)
=> operation.Parameters.Add(new OpenApiParameter
{
Name = "expand",
In = ParameterLocation.Query,
@@ -61,22 +104,56 @@ internal abstract class SwaggerDocumentationFilterBase<TBaseController> : IOpera
}
});
protected void AddApiKey(OpenApiOperation operation) =>
operation.Parameters.Add(new OpenApiParameter
private void AddExpand(OpenApiOperation operation)
=> operation.Parameters.Add(new OpenApiParameter
{
Name = "Api-Key",
In = ParameterLocation.Header,
Name = "expand",
In = ParameterLocation.Query,
Required = false,
Description = "API key specified through configuration to authorize access to the API.",
Schema = new OpenApiSchema { Type = "string" }
Description = QueryParameterDescription("Defines the properties that should be expanded in the response"),
Schema = new OpenApiSchema { Type = "string" },
Examples = new Dictionary<string, OpenApiExample>
{
{ "Expand none", new OpenApiExample { Value = new OpenApiString(string.Empty) } },
{ "Expand all properties", new OpenApiExample { Value = new OpenApiString("properties[$all]") } },
{
"Expand specific property",
new OpenApiExample { Value = new OpenApiString("properties[alias1]") }
},
{
"Expand specific properties",
new OpenApiExample { Value = new OpenApiString("properties[alias1,alias2]") }
},
{
"Expand nested properties",
new OpenApiExample { Value = new OpenApiString("properties[alias1[properties[nestedAlias1,nestedAlias2]]]") }
}
}
});
protected string PaginationDescription(bool skip, string itemType)
=> $"Specifies the number of found {itemType} items to {(skip ? "skip" : "take")}. Use this to control pagination of the response.";
private string QueryParameterDescription(string description)
=> $"{description}. Refer to [the documentation]({DocumentationLink}#query-parameters) for more details on this.";
private bool CanApply(MemberInfo member)
=> member.DeclaringType?.Implements<TBaseController>() is true;
private void AddFields(OpenApiOperation operation)
=> operation.Parameters.Add(new OpenApiParameter
{
Name = "fields",
In = ParameterLocation.Query,
Required = false,
Description = QueryParameterDescription("Explicitly defines which properties should be included in the response (by default all properties are included)"),
Schema = new OpenApiSchema { Type = "string" },
Examples = new Dictionary<string, OpenApiExample>
{
{ "Include all properties", new OpenApiExample { Value = new OpenApiString("properties[$all]") } },
{
"Include only specific property",
new OpenApiExample { Value = new OpenApiString("properties[alias1]") }
},
{
"Include only specific properties",
new OpenApiExample { Value = new OpenApiString("properties[alias1,alias2]") }
},
{
"Include only specific nested properties",
new OpenApiExample { Value = new OpenApiString("properties[alias1[properties[nestedAlias1,nestedAlias2]]]") }
}
}
});
}
@@ -0,0 +1,19 @@
using System.Reflection;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.SwaggerGen;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Filters;
internal abstract class SwaggerFilterBase<TBaseController>
where TBaseController : Controller
{
protected bool CanApply(OperationFilterContext context)
=> CanApply(context.MethodInfo);
protected bool CanApply(ParameterFilterContext context)
=> CanApply(context.ParameterInfo.Member);
private bool CanApply(MemberInfo member)
=> member.DeclaringType?.Implements<TBaseController>() is true;
}
@@ -3,6 +3,7 @@ using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Umbraco.Cms.Api.Delivery.Configuration;
using Umbraco.Cms.Api.Delivery.Controllers;
using Umbraco.Cms.Api.Delivery.Controllers.Media;
namespace Umbraco.Cms.Api.Delivery.Filters;
@@ -14,7 +15,9 @@ internal sealed class SwaggerMediaDocumentationFilter : SwaggerDocumentationFilt
{
operation.Parameters ??= new List<OpenApiParameter>();
AddExpand(operation);
AddExpand(operation, context);
AddFields(operation, context);
AddApiKey(operation);
}
@@ -0,0 +1,85 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Security;
namespace Umbraco.Cms.Api.Delivery.Handlers;
internal sealed class InitializeMemberApplicationNotificationHandler : INotificationAsyncHandler<UmbracoApplicationStartingNotification>
{
private readonly IRuntimeState _runtimeState;
private readonly ILogger<InitializeMemberApplicationNotificationHandler> _logger;
private readonly DeliveryApiSettings _deliveryApiSettings;
private readonly IServiceScopeFactory _serviceScopeFactory;
public InitializeMemberApplicationNotificationHandler(
IRuntimeState runtimeState,
IOptions<DeliveryApiSettings> deliveryApiSettings,
ILogger<InitializeMemberApplicationNotificationHandler> logger,
IServiceScopeFactory serviceScopeFactory)
{
_runtimeState = runtimeState;
_logger = logger;
_serviceScopeFactory = serviceScopeFactory;
_deliveryApiSettings = deliveryApiSettings.Value;
}
public async Task HandleAsync(UmbracoApplicationStartingNotification notification, CancellationToken cancellationToken)
{
if (_runtimeState.Level != RuntimeLevel.Run)
{
return;
}
// we cannot inject the IMemberApplicationManager because it ultimately takes a dependency on the DbContext ... and during
// install that is not allowed (no connection string means no DbContext)
using IServiceScope scope = _serviceScopeFactory.CreateScope();
IMemberApplicationManager memberApplicationManager = scope.ServiceProvider.GetRequiredService<IMemberApplicationManager>();
if (_deliveryApiSettings.MemberAuthorization?.AuthorizationCodeFlow?.Enabled is not true)
{
await memberApplicationManager.DeleteMemberApplicationAsync(cancellationToken);
return;
}
if (ValidateRedirectUrls(_deliveryApiSettings.MemberAuthorization.AuthorizationCodeFlow.LoginRedirectUrls) is false)
{
await memberApplicationManager.DeleteMemberApplicationAsync(cancellationToken);
return;
}
if (_deliveryApiSettings.MemberAuthorization.AuthorizationCodeFlow.LogoutRedirectUrls.Any()
&& ValidateRedirectUrls(_deliveryApiSettings.MemberAuthorization.AuthorizationCodeFlow.LogoutRedirectUrls) is false)
{
await memberApplicationManager.DeleteMemberApplicationAsync(cancellationToken);
return;
}
await memberApplicationManager.EnsureMemberApplicationAsync(
_deliveryApiSettings.MemberAuthorization.AuthorizationCodeFlow.LoginRedirectUrls,
_deliveryApiSettings.MemberAuthorization.AuthorizationCodeFlow.LogoutRedirectUrls,
cancellationToken);
}
private bool ValidateRedirectUrls(Uri[] redirectUrls)
{
if (redirectUrls.Any() is false)
{
_logger.LogWarning("No redirect URLs defined for Delivery API member authentication - cannot enable member authentication");
return false;
}
if (redirectUrls.All(url => url.IsAbsoluteUri) is false)
{
_logger.LogWarning("All redirect URLs defined for Delivery API member authentication must be absolute - cannot enable member authentication");
return false;
}
return true;
}
}
@@ -0,0 +1,102 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using OpenIddict.Abstractions;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Core.Services;
namespace Umbraco.Cms.Api.Delivery.Handlers;
internal sealed class RevokeMemberAuthenticationTokensNotificationHandler
: INotificationAsyncHandler<MemberSavedNotification>,
INotificationAsyncHandler<MemberDeletedNotification>,
INotificationAsyncHandler<AssignedMemberRolesNotification>,
INotificationAsyncHandler<RemovedMemberRolesNotification>
{
private readonly IMemberService _memberService;
private readonly IOpenIddictTokenManager _tokenManager;
private readonly bool _enabled;
private readonly ILogger<RevokeMemberAuthenticationTokensNotificationHandler> _logger;
public RevokeMemberAuthenticationTokensNotificationHandler(
IMemberService memberService,
IOpenIddictTokenManager tokenManager,
IOptions<DeliveryApiSettings> deliveryApiSettings,
ILogger<RevokeMemberAuthenticationTokensNotificationHandler> logger)
{
_memberService = memberService;
_tokenManager = tokenManager;
_logger = logger;
_enabled = deliveryApiSettings.Value.MemberAuthorizationIsEnabled();
}
public async Task HandleAsync(MemberSavedNotification notification, CancellationToken cancellationToken)
{
if (_enabled is false)
{
return;
}
foreach (IMember member in notification.SavedEntities.Where(member => member.IsLockedOut || member.IsApproved is false))
{
// member is locked out and/or un-approved, make sure we revoke all tokens
await RevokeTokensAsync(member);
}
}
public async Task HandleAsync(MemberDeletedNotification notification, CancellationToken cancellationToken)
{
if (_enabled is false)
{
return;
}
foreach (IMember member in notification.DeletedEntities)
{
await RevokeTokensAsync(member);
}
}
public async Task HandleAsync(AssignedMemberRolesNotification notification, CancellationToken cancellationToken)
=> await MemberRolesChangedAsync(notification);
public async Task HandleAsync(RemovedMemberRolesNotification notification, CancellationToken cancellationToken)
=> await MemberRolesChangedAsync(notification);
private async Task RevokeTokensAsync(IMember member)
{
var tokens = await _tokenManager.FindBySubjectAsync(member.Key.ToString()).ToArrayAsync();
if (tokens.Any() is false)
{
return;
}
_logger.LogInformation("Revoking {count} active tokens for member with ID {id}", tokens.Length, member.Id);
foreach (var token in tokens)
{
await _tokenManager.DeleteAsync(token);
}
}
private async Task MemberRolesChangedAsync(MemberRolesNotification notification)
{
if (_enabled is false)
{
return;
}
foreach (var memberId in notification.MemberIds)
{
IMember? member = _memberService.GetById(memberId);
if (member is null)
{
_logger.LogWarning("Unable to find member with ID {id}", memberId);
continue;
}
await RevokeTokensAsync(member);
}
}
}
@@ -1,43 +1,7 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using Umbraco.Cms.Core.Models.DeliveryApi;
using Umbraco.Cms.Infrastructure.Serialization;
namespace Umbraco.Cms.Api.Delivery.Json;
// see https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/polymorphism?pivots=dotnet-7-0
public class DeliveryApiJsonTypeResolver : DefaultJsonTypeInfoResolver
{
public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions options)
{
JsonTypeInfo jsonTypeInfo = base.GetTypeInfo(type, options);
if (jsonTypeInfo.Type == typeof(IApiContent))
{
ConfigureJsonPolymorphismOptions(jsonTypeInfo, typeof(ApiContent));
}
else if (jsonTypeInfo.Type == typeof(IApiContentResponse))
{
ConfigureJsonPolymorphismOptions(jsonTypeInfo, typeof(ApiContentResponse));
}
else if (jsonTypeInfo.Type == typeof(IRichTextElement))
{
ConfigureJsonPolymorphismOptions(jsonTypeInfo, typeof(RichTextGenericElement), typeof(RichTextTextElement));
}
return jsonTypeInfo;
}
private void ConfigureJsonPolymorphismOptions(JsonTypeInfo jsonTypeInfo, params Type[] derivedTypes)
{
jsonTypeInfo.PolymorphismOptions = new JsonPolymorphismOptions
{
UnknownDerivedTypeHandling = JsonUnknownDerivedTypeHandling.FailSerialization,
};
foreach (Type derivedType in derivedTypes)
{
jsonTypeInfo.PolymorphismOptions.DerivedTypes.Add(new JsonDerivedType(derivedType));
}
}
}
public class DeliveryApiJsonTypeResolver : ContentJsonTypeResolverBase
{ }
@@ -0,0 +1,88 @@
using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Umbraco.Cms.Core.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Json;
public abstract class DeliveryApiVersionAwareJsonConverterBase<T> : JsonConverter<T>
{
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly JsonConverter<T> _defaultConverter = (JsonConverter<T>)JsonSerializerOptions.Default.GetConverter(typeof(T));
public DeliveryApiVersionAwareJsonConverterBase(IHttpContextAccessor httpContextAccessor)
=> _httpContextAccessor = httpContextAccessor;
/// <inheritdoc />
public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
=> _defaultConverter.Read(ref reader, typeToConvert, options);
/// <inheritdoc />
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
Type type = typeof(T);
var apiVersion = GetApiVersion();
// Get the properties in the specified order
PropertyInfo[] properties = type.GetProperties().OrderBy(GetPropertyOrder).ToArray();
writer.WriteStartObject();
foreach (PropertyInfo property in properties)
{
// Filter out properties based on the API version
var include = apiVersion is null || ShouldIncludeProperty(property, apiVersion.Value);
if (include is false)
{
continue;
}
var propertyName = property.Name;
writer.WritePropertyName(options.PropertyNamingPolicy?.ConvertName(propertyName) ?? propertyName);
JsonSerializer.Serialize(writer, property.GetValue(value), options);
}
writer.WriteEndObject();
}
private int? GetApiVersion()
{
HttpContext? httpContext = _httpContextAccessor.HttpContext;
ApiVersion? apiVersion = httpContext?.GetRequestedApiVersion();
return apiVersion?.MajorVersion;
}
private int GetPropertyOrder(PropertyInfo prop)
{
var attribute = prop.GetCustomAttribute<JsonPropertyOrderAttribute>();
return attribute?.Order ?? 0;
}
/// <summary>
/// Determines whether a property should be included based on version bounds.
/// </summary>
/// <param name="propertyInfo">The property info.</param>
/// <param name="version">An integer representing an API version.</param>
/// <returns><c>true</c> if the property should be included; otherwise, <c>false</c>.</returns>
private bool ShouldIncludeProperty(PropertyInfo propertyInfo, int version)
{
var attribute = propertyInfo
.GetCustomAttributes(typeof(IncludeInApiVersionAttribute), false)
.FirstOrDefault();
if (attribute is not IncludeInApiVersionAttribute apiVersionAttribute)
{
return true; // No attribute means include the property
}
// Check if the version is within the specified bounds
var isWithinMinVersion = apiVersionAttribute.MinVersion.HasValue is false || version >= apiVersionAttribute.MinVersion.Value;
var isWithinMaxVersion = apiVersionAttribute.MaxVersion.HasValue is false || version <= apiVersionAttribute.MaxVersion.Value;
return isWithinMinVersion && isWithinMaxVersion;
}
}
@@ -0,0 +1,78 @@
using System.Text.RegularExpressions;
using Umbraco.Cms.Core.DeliveryApi;
namespace Umbraco.Cms.Api.Delivery.Querying.Filters;
public abstract class ContainsFilterBase : IFilterHandler
{
/// <summary>
/// The regex to parse the filter query. Must supply two match groups named "operator" and "value", where "operator"
/// contains the filter operator (i.e. ">") and "value" contains the value to filter on.
/// </summary>
/// <remarks>
/// Supported operators:
/// <list type="bullet">
/// <item>":" = Is (the filter value equals the index field value)</item>
/// <item>":!" = IsNot (the filter value does not equal the index field value)</item>
/// <item>"&gt;" = GreaterThan (the filter value is greater than the index field value)</item>
/// <item>"&gt;:" = GreaterThanOrEqual (the filter value is greater than or equal to the index field value)</item>
/// <item>"&lt;" = LessThan (the filter value is less than the index field value)</item>
/// <item>"&lt;:" = LessThanOrEqual (the filter value is less than or equal to the index field value)</item>
/// </list>
/// Range operators (greater than, less than) only work with numeric and date type filters.
/// </remarks>
protected abstract Regex QueryParserRegex { get; }
/// <summary>
/// The index field name to filter on.
/// </summary>
protected abstract string FieldName { get; }
/// <inheritdoc />
public bool CanHandle(string query)
=> QueryParserRegex.IsMatch(query);
/// <inheritdoc/>
public FilterOption BuildFilterOption(string filter)
{
GroupCollection groups = QueryParserRegex.Match(filter).Groups;
if (groups.Count != 3 || groups.ContainsKey("operator") is false || groups.ContainsKey("value") is false)
{
return DefaultFilterOption();
}
FilterOperation? filterOperation = ParseFilterOperation(groups["operator"].Value);
if (filterOperation.HasValue is false)
{
return DefaultFilterOption();
}
return new FilterOption
{
FieldName = FieldName,
Values = new[] { groups["value"].Value },
Operator = filterOperation.Value
};
FilterOption DefaultFilterOption()
=> new FilterOption
{
FieldName = FieldName,
Values = new[] { Guid.NewGuid().ToString() },
Operator = FilterOperation.Is
};
}
private FilterOperation? ParseFilterOperation(string filterOperation)
=> filterOperation switch
{
":" => FilterOperation.Is,
":!" => FilterOperation.IsNot,
">" => FilterOperation.GreaterThan,
">:" => FilterOperation.GreaterThanOrEqual,
"<" => FilterOperation.LessThan,
"<:" => FilterOperation.LessThanOrEqual,
_ => null
};
}
@@ -1,6 +1,5 @@
using Umbraco.Cms.Api.Delivery.Indexing.Filters;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Querying.Filters;
@@ -15,15 +14,15 @@ public sealed class ContentTypeFilter : IFilterHandler
/// <inheritdoc/>
public FilterOption BuildFilterOption(string filter)
{
var alias = filter.Substring(ContentTypeSpecifier.Length);
var filterValue = filter.Substring(ContentTypeSpecifier.Length);
var negate = filterValue.StartsWith('!');
var aliases = filterValue.TrimStart('!').Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
return new FilterOption
{
FieldName = ContentTypeFilterIndexer.FieldName,
Values = alias.IsNullOrWhiteSpace() == false
? new[] { alias.TrimStart('!') }
: Array.Empty<string>(),
Operator = alias.StartsWith('!')
Values = aliases,
Operator = negate
? FilterOperation.IsNot
: FilterOperation.Is
};
@@ -0,0 +1,14 @@
using System.Text.RegularExpressions;
using Umbraco.Cms.Api.Delivery.Indexing.Sorts;
namespace Umbraco.Cms.Api.Delivery.Querying.Filters;
public sealed partial class CreateDateFilter : ContainsFilterBase
{
protected override string FieldName => CreateDateSortIndexer.FieldName;
protected override Regex QueryParserRegex => CreateDateRegex();
[GeneratedRegex("createDate(?<operator>[><:]{1,2})(?<value>.*)", RegexOptions.IgnoreCase)]
public static partial Regex CreateDateRegex();
}
@@ -0,0 +1,14 @@
using System.Text.RegularExpressions;
using Umbraco.Cms.Api.Delivery.Indexing.Sorts;
namespace Umbraco.Cms.Api.Delivery.Querying.Filters;
public sealed partial class UpdateDateFilter : ContainsFilterBase
{
protected override string FieldName => UpdateDateSortIndexer.FieldName;
protected override Regex QueryParserRegex => UpdateDateRegex();
[GeneratedRegex("updateDate(?<operator>[><:]{1,2})(?<value>.*)", RegexOptions.IgnoreCase)]
public static partial Regex UpdateDateRegex();
}
@@ -10,7 +10,8 @@ public abstract class QueryOptionBase
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IRequestRoutingService _requestRoutingService;
public QueryOptionBase(IPublishedSnapshotAccessor publishedSnapshotAccessor,
public QueryOptionBase(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IRequestRoutingService requestRoutingService)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
@@ -1,5 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Api.Delivery.Indexing.Selectors;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Cms.Core.PublishedCache;
using Umbraco.Extensions;
@@ -10,10 +12,22 @@ public sealed class AncestorsSelector : QueryOptionBase, ISelectorHandler
{
private const string AncestorsSpecifier = "ancestors:";
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
private readonly IRequestPreviewService _requestPreviewService;
public AncestorsSelector(IPublishedSnapshotAccessor publishedSnapshotAccessor, IRequestRoutingService requestRoutingService)
: base(publishedSnapshotAccessor, requestRoutingService) =>
[Obsolete("Please use the non-obsolete constructor. Will be removed in V17.")]
public AncestorsSelector(
IPublishedSnapshotAccessor publishedSnapshotAccessor,
IRequestRoutingService requestRoutingService)
: this(publishedSnapshotAccessor, requestRoutingService, StaticServiceProvider.Instance.GetRequiredService<IRequestPreviewService>())
{
}
public AncestorsSelector(IPublishedSnapshotAccessor publishedSnapshotAccessor, IRequestRoutingService requestRoutingService, IRequestPreviewService requestPreviewService)
: base(publishedSnapshotAccessor, requestRoutingService)
{
_publishedSnapshotAccessor = publishedSnapshotAccessor;
_requestPreviewService = requestPreviewService;
}
/// <inheritdoc />
public bool CanHandle(string query)
@@ -37,10 +51,20 @@ public sealed class AncestorsSelector : QueryOptionBase, ISelectorHandler
};
}
IPublishedSnapshot publishedSnapshot = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot();
IPublishedContentCache contentCache = _publishedSnapshotAccessor.GetRequiredPublishedSnapshot()?.Content
?? throw new InvalidOperationException("Could not obtain the content cache");
IPublishedContent contentItem = publishedSnapshot.Content?.GetById((Guid)id)
?? throw new InvalidOperationException("Could not obtain the content cache");
IPublishedContent? contentItem = contentCache.GetById(_requestPreviewService.IsPreview(), id.Value);
if (contentItem is null)
{
// no such content item, make sure the selector does not yield any results
return new SelectorOption
{
FieldName = AncestorsSelectorIndexer.FieldName,
Values = Array.Empty<string>()
};
}
var ancestorKeys = contentItem.Ancestors().Select(a => a.Key.ToString("D")).ToArray();
@@ -0,0 +1,185 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Umbraco.Cms.Core.DeliveryApi;
using Umbraco.Cms.Core.Models.PublishedContent;
using Umbraco.Extensions;
namespace Umbraco.Cms.Api.Delivery.Rendering;
internal sealed class RequestContextOutputExpansionStrategyV2 : IOutputExpansionStrategy
{
private const string All = "$all";
private const string None = "";
private const string ExpandParameterName = "expand";
private const string FieldsParameterName = "fields";
private readonly IApiPropertyRenderer _propertyRenderer;
private readonly ILogger<RequestContextOutputExpansionStrategyV2> _logger;
private readonly Stack<Node?> _expandProperties;
private readonly Stack<Node?> _includeProperties;
public RequestContextOutputExpansionStrategyV2(
IHttpContextAccessor httpContextAccessor,
IApiPropertyRenderer propertyRenderer,
ILogger<RequestContextOutputExpansionStrategyV2> logger)
{
_propertyRenderer = propertyRenderer;
_logger = logger;
_expandProperties = new Stack<Node?>();
_includeProperties = new Stack<Node?>();
InitializeExpandAndInclude(httpContextAccessor);
}
public IDictionary<string, object?> MapContentProperties(IPublishedContent content)
=> content.ItemType == PublishedItemType.Content
? MapProperties(content.Properties)
: throw new ArgumentException($"Invalid item type. This method can only be used with item type {nameof(PublishedItemType.Content)}, got: {content.ItemType}");
public IDictionary<string, object?> MapMediaProperties(IPublishedContent media, bool skipUmbracoProperties = true)
{
if (media.ItemType != PublishedItemType.Media)
{
throw new ArgumentException($"Invalid item type. This method can only be used with item type {PublishedItemType.Media}, got: {media.ItemType}");
}
IPublishedProperty[] properties = media
.Properties
.Where(p => skipUmbracoProperties is false || p.Alias.StartsWith("umbraco") is false)
.ToArray();
return properties.Any()
? MapProperties(properties)
: new Dictionary<string, object?>();
}
public IDictionary<string, object?> MapElementProperties(IPublishedElement element)
=> MapProperties(element.Properties, true);
private void InitializeExpandAndInclude(IHttpContextAccessor httpContextAccessor)
{
string? QueryValue(string key) => httpContextAccessor.HttpContext?.Request.Query[key];
var toExpand = QueryValue(ExpandParameterName) ?? None;
var toInclude = QueryValue(FieldsParameterName) ?? All;
try
{
_expandProperties.Push(Node.Parse(toExpand));
}
catch (ArgumentException ex)
{
_logger.LogError(ex, $"Could not parse the '{ExpandParameterName}' parameter. See exception for details.");
throw new ArgumentException($"Could not parse the '{ExpandParameterName}' parameter: {ex.Message}");
}
try
{
_includeProperties.Push(Node.Parse(toInclude));
}
catch (ArgumentException ex)
{
_logger.LogError(ex, $"Could not parse the '{FieldsParameterName}' parameter. See exception for details.");
throw new ArgumentException($"Could not parse the '{FieldsParameterName}' parameter: {ex.Message}");
}
}
private IDictionary<string, object?> MapProperties(IEnumerable<IPublishedProperty> properties, bool forceExpandProperties = false)
{
Node? currentExpandProperties = _expandProperties.Peek();
if (_expandProperties.Count > 1 && currentExpandProperties is null && forceExpandProperties is false)
{
return new Dictionary<string, object?>();
}
Node? currentIncludeProperties = _includeProperties.Peek();
var result = new Dictionary<string, object?>();
foreach (IPublishedProperty property in properties)
{
Node? nextIncludeProperties = GetNextProperties(currentIncludeProperties, property.Alias);
if (currentIncludeProperties is not null && currentIncludeProperties.Items.Any() && nextIncludeProperties is null)
{
continue;
}
Node? nextExpandProperties = GetNextProperties(currentExpandProperties, property.Alias);
_includeProperties.Push(nextIncludeProperties);
_expandProperties.Push(nextExpandProperties);
result[property.Alias] = GetPropertyValue(property);
_expandProperties.Pop();
_includeProperties.Pop();
}
return result;
}
private Node? GetNextProperties(Node? currentProperties, string propertyAlias)
=> currentProperties?.Items.FirstOrDefault(i => i.Key == All)
?? currentProperties?.Items.FirstOrDefault(i => i.Key == "properties")?.Items.FirstOrDefault(i => i.Key == All || i.Key == propertyAlias);
private object? GetPropertyValue(IPublishedProperty property)
=> _propertyRenderer.GetPropertyValue(property, _expandProperties.Peek() is not null);
private class Node
{
public string Key { get; private set; } = string.Empty;
public List<Node> Items { get; } = new();
public static Node Parse(string value)
{
// verify that there are as many start brackets as there are end brackets
if (value.CountOccurrences("[") != value.CountOccurrences("]"))
{
throw new ArgumentException("Value did not contain an equal number of start and end brackets");
}
// verify that the value does not start with a start bracket
if (value.StartsWith("["))
{
throw new ArgumentException("Value cannot start with a bracket");
}
// verify that there are no empty brackets
if (value.Contains("[]"))
{
throw new ArgumentException("Value cannot contain empty brackets");
}
var stack = new Stack<Node>();
var root = new Node { Key = "root" };
stack.Push(root);
var currentNode = new Node();
root.Items.Add(currentNode);
foreach (char c in value)
{
switch (c)
{
case '[': // Start a new node, child of the current node
stack.Push(currentNode);
currentNode = new Node();
stack.Peek().Items.Add(currentNode);
break;
case ',': // Start a new node, but at the same level of the current node
currentNode = new Node();
stack.Peek().Items.Add(currentNode);
break;
case ']': // Back to parent of the current node
currentNode = stack.Pop();
break;
default: // Add char to current node key
currentNode.Key += c;
break;
}
}
return root;
}
}
}
@@ -0,0 +1,82 @@
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Routing.Matching;
using Umbraco.Cms.Api.Delivery.Controllers.Content;
using Umbraco.Cms.Api.Delivery.Controllers.Media;
namespace Umbraco.Cms.Api.Delivery.Routing;
// FIXME: remove this when Delivery API V1 is removed
internal sealed class DeliveryApiItemsEndpointsMatcherPolicy : MatcherPolicy, IEndpointSelectorPolicy
{
public override int Order => 100;
public bool AppliesToEndpoints(IReadOnlyList<Endpoint> endpoints)
{
for (var i = 0; i < endpoints.Count; i++)
{
ControllerActionDescriptor? controllerActionDescriptor = endpoints[i].Metadata.GetMetadata<ControllerActionDescriptor>();
if (IsByIdsController(controllerActionDescriptor) || IsByRouteController(controllerActionDescriptor))
{
return true;
}
}
return false;
}
public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates)
{
var hasIdQueryParameter = httpContext.Request.Query.ContainsKey("id");
ApiVersion? requestedApiVersion = httpContext.GetRequestedApiVersion();
for (var i = 0; i < candidates.Count; i++)
{
CandidateState candidate = candidates[i];
Endpoint? endpoint = candidate.Endpoint;
// NOTE: nullability for the CandidateState.Endpoint property is not correct - it *can* be null
if (endpoint is null)
{
continue;
}
if (EndpointSupportsApiVersion(endpoint, requestedApiVersion) is false)
{
candidates.SetValidity(i, false);
continue;
}
ControllerActionDescriptor? controllerActionDescriptor = endpoint.Metadata.GetMetadata<ControllerActionDescriptor>();
if (IsByIdsController(controllerActionDescriptor))
{
candidates.SetValidity(i, hasIdQueryParameter);
}
else if (IsByRouteController(controllerActionDescriptor))
{
candidates.SetValidity(i, hasIdQueryParameter is false);
}
}
return Task.CompletedTask;
}
private static bool EndpointSupportsApiVersion(Endpoint endpoint, ApiVersion? requestedApiVersion)
{
ApiVersion[]? supportedApiVersions = endpoint.Metadata.GetMetadata<MapToApiVersionAttribute>()?.Versions.ToArray();
// if the endpoint is versioned, the requested API version must be among the API versions supported by the endpoint.
// if the endpoint is NOT versioned, it cannot be used with a requested API version
return supportedApiVersions?.Contains(requestedApiVersion) ?? requestedApiVersion is null;
}
private static bool IsByIdsController(ControllerActionDescriptor? controllerActionDescriptor)
=> IsControllerType<ByIdsContentApiController>(controllerActionDescriptor) || IsControllerType<ByIdsMediaApiController>(controllerActionDescriptor);
private static bool IsByRouteController(ControllerActionDescriptor? controllerActionDescriptor)
=> IsControllerType<ByRouteContentApiController>(controllerActionDescriptor) || IsControllerType<ByPathMediaApiController>(controllerActionDescriptor);
private static bool IsControllerType<T>(ControllerActionDescriptor? controllerActionDescriptor)
=> controllerActionDescriptor?.MethodInfo.DeclaringType == typeof(T);
}

Some files were not shown because too many files have changed in this diff Show More