From 421faf8d43237d93bfc9e2a77b64b902126998ae Mon Sep 17 00:00:00 2001
From: Nikolaj Geisle <70372949+Zeegaan@users.noreply.github.com>
Date: Mon, 3 Jan 2022 15:07:44 +0100
Subject: [PATCH 1/4] Fix assignDomain to handle case sensitive operating
systems (#11784)
---
src/Umbraco.Core/Actions/ActionAssignDomain.cs | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/cs.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/cy.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/da.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/de.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/en.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/es.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/fr.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/he.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/it.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/ja.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/ko.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/nb.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/nl.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/pl.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/pt.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/ru.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/sv.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/tr.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/zh.xml | 2 +-
src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml | 2 +-
22 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/src/Umbraco.Core/Actions/ActionAssignDomain.cs b/src/Umbraco.Core/Actions/ActionAssignDomain.cs
index e03e2de81c..6340a03082 100644
--- a/src/Umbraco.Core/Actions/ActionAssignDomain.cs
+++ b/src/Umbraco.Core/Actions/ActionAssignDomain.cs
@@ -8,7 +8,7 @@
public const char ActionLetter = 'I';
public char Letter => ActionLetter;
- public string Alias => "assignDomain";
+ public string Alias => "assigndomain";
public string Category => Constants.Conventions.PermissionCategories.AdministrationCategory;
public string Icon => "home";
public bool ShowInNotifier => false;
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml b/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml
index af701cd5e3..a90aa33355 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml
@@ -60,7 +60,7 @@
Ostatní
- Povolit přístup k přiřazování kultury a názvů hostitelů
+ Povolit přístup k přiřazování kultury a názvů hostitelů
Povolit přístup k zobrazení protokolu historie uzlu
Povolit přístup k zobrazení uzlu
Povolit přístup ke změně typu dokumentu daného uzlu
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml b/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml
index 0692d01e7a..60ff3ffdb1 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml
@@ -5,7 +5,7 @@
https://www.method4.co.uk/
- Diwylliannau ac Enwau Gwesteia
+ Diwylliannau ac Enwau Gwesteia
Trywydd Archwilio
Dewis Nod
Newid Math o Ddogfen
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml
index 27901846a9..1f6dcff88f 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Tilføj domæne
+ Tilføj domæne
Revisionsspor
Gennemse elementer
Skift Dokument Type
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml
index 8f2ba350d0..0cabf29497 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Kulturen und Hostnamen
+ Kulturen und Hostnamen
Protokoll
Durchsuchen
Dokumenttyp ändern
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
index 4411209cd5..47c104b822 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Culture and Hostnames
+ Culture and Hostnames
Audit Trail
Browse Node
Change Document Type
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
index 5a17eafbb2..e4d2784c8c 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Culture and Hostnames
+ Culture and Hostnames
Audit Trail
Browse Node
Change Document Type
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/es.xml b/src/Umbraco.Web.UI/umbraco/config/lang/es.xml
index df78683aca..d99548f5c5 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/es.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/es.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Administrar dominios
+ Administrar dominios
Historial
Nodo de Exploración
Cambiar tipo de documento
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml
index 4681818c47..68dc28c99b 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Culture et noms d'hôte
+ Culture et noms d'hôte
Informations d'audit
Parcourir
Changer le type de document
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/he.xml b/src/Umbraco.Web.UI/umbraco/config/lang/he.xml
index 9ee8bbf014..b99890282e 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/he.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/he.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- נהל שמות מתחם
+ נהל שמות מתחם
מעקב ביקורות
צפה בתוכן
העתק
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/it.xml b/src/Umbraco.Web.UI/umbraco/config/lang/it.xml
index a0d89bff2d..7e20c0b266 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/it.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/it.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Gestisci hostnames
+ Gestisci hostnames
Audit Trail
Sfoglia
Cambia tipo di documento
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml
index 4b98adad26..142f7d055b 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- ドメインの割り当て
+ ドメインの割り当て
動作記録
ノードの参照
ドキュメントタイプの変更
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml
index 792dd6700c..c340f3f30a 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- 호스트명 관리
+ 호스트명 관리
감사 추적
노드 탐색
복사
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml b/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
index 1c47969189..44fad5d2ec 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Angi domene
+ Angi domene
Revisjoner
Bla gjennom
Skift dokumenttype
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
index f830c3368d..0c24b119c9 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Beheer domeinnamen
+ Beheer domeinnamen
Documentgeschiedenis
Node bekijken
Documenttype wijzigen
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml
index dfbc324df6..712b695f77 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Zarządzanie hostami
+ Zarządzanie hostami
Historia zmian
Przeglądaj węzeł
Zmień typ dokumentu
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml b/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml
index 542b03abc1..eac232e851 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Gerenciar hostnames
+ Gerenciar hostnames
Caminho de Auditoria
Navegar o Nó
Copiar
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml
index 9c1d9e12fb..5c18fbc682 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Языки и домены
+ Языки и домены
История исправлений
Просмотреть
Изменить тип документа
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml b/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml
index e0e2235ae9..dda58366d8 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml
@@ -8,7 +8,7 @@
Innehåll
- Hantera domännamn
+ Hantera domännamn
Hantera versioner
Surfa på sidan
Ändra dokumenttyp
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml
index 58c0f7f94b..66d097b1e9 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- Kültür ve Ana Bilgisayar Adları
+ Kültür ve Ana Bilgisayar Adları
Denetim Yolu
Düğüme Göz At
Belge Türünü Değiştir
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml b/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml
index ba51488f9f..8c78154b62 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- 管理主机名
+ 管理主机名
跟踪审计
浏览节点
改变文档类型
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml b/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
index 8d5cf16de2..992a7ba55b 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
@@ -5,7 +5,7 @@
https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files
- 管理主機名稱
+ 管理主機名稱
跟蹤審計
流覽節點
改變文檔類型
From bbfa975096adf2f10bfdc7c661f316f934dfc602 Mon Sep 17 00:00:00 2001
From: Mole
Date: Mon, 3 Jan 2022 15:36:52 +0100
Subject: [PATCH 2/4] Bump versions to non-rc
---
build/templates/UmbracoPackage/.template.config/template.json | 2 +-
build/templates/UmbracoProject/.template.config/template.json | 2 +-
src/Directory.Build.props | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/build/templates/UmbracoPackage/.template.config/template.json b/build/templates/UmbracoPackage/.template.config/template.json
index b69b63dd1c..6a6f0fb9ab 100644
--- a/build/templates/UmbracoPackage/.template.config/template.json
+++ b/build/templates/UmbracoPackage/.template.config/template.json
@@ -24,7 +24,7 @@
"version": {
"type": "parameter",
"datatype": "string",
- "defaultValue": "9.2.0-rc",
+ "defaultValue": "9.2.0",
"description": "The version of Umbraco to load using NuGet",
"replaces": "UMBRACO_VERSION_FROM_TEMPLATE"
},
diff --git a/build/templates/UmbracoProject/.template.config/template.json b/build/templates/UmbracoProject/.template.config/template.json
index 6ec0babd70..d3c3d1a79f 100644
--- a/build/templates/UmbracoProject/.template.config/template.json
+++ b/build/templates/UmbracoProject/.template.config/template.json
@@ -57,7 +57,7 @@
"version": {
"type": "parameter",
"datatype": "string",
- "defaultValue": "9.2.0-rc",
+ "defaultValue": "9.2.0",
"description": "The version of Umbraco to load using NuGet",
"replaces": "UMBRACO_VERSION_FROM_TEMPLATE"
},
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index fed70283e7..8d923733fa 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -5,7 +5,7 @@
9.2.0
9.2.0
- 9.2.0-rc
+ 9.2.0
9.2.0
9.0
en-US
From 65c0d8fceca475d8a77ffb9289c4217b2bfeb3a6 Mon Sep 17 00:00:00 2001
From: Mole
Date: Tue, 21 Dec 2021 12:48:35 +0100
Subject: [PATCH 3/4] V9: Use current request for emails (#11778)
* Use request url for email
* Fixed potential null ref exceptions
Co-authored-by: Bjarke Berg
---
.../Controllers/AuthenticationController.cs | 56 ++++++++++-
.../Controllers/UsersController.cs | 92 ++++++++++++++++---
.../Extensions/HttpRequestExtensions.cs | 31 ++++++-
3 files changed, 160 insertions(+), 19 deletions(-)
diff --git a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
index f159011d80..30ad3f75ae 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/AuthenticationController.cs
@@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core;
@@ -29,6 +30,7 @@ using Umbraco.Cms.Web.Common.ActionsResults;
using Umbraco.Cms.Web.Common.Attributes;
using Umbraco.Cms.Web.Common.Authorization;
using Umbraco.Cms.Web.Common.Controllers;
+using Umbraco.Cms.Web.Common.DependencyInjection;
using Umbraco.Cms.Web.Common.Filters;
using Umbraco.Cms.Web.Common.Models;
using Umbraco.Extensions;
@@ -71,9 +73,11 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
private readonly LinkGenerator _linkGenerator;
private readonly IBackOfficeExternalLoginProviders _externalAuthenticationOptions;
private readonly IBackOfficeTwoFactorOptions _backOfficeTwoFactorOptions;
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ private readonly WebRoutingSettings _webRoutingSettings;
// TODO: We need to review all _userManager.Raise calls since many/most should be on the usermanager or signinmanager, very few should be here
-
+ [ActivatorUtilitiesConstructor]
public AuthenticationController(
IBackOfficeSecurityAccessor backofficeSecurityAccessor,
IBackOfficeUserManager backOfficeUserManager,
@@ -91,7 +95,9 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
IHostingEnvironment hostingEnvironment,
LinkGenerator linkGenerator,
IBackOfficeExternalLoginProviders externalAuthenticationOptions,
- IBackOfficeTwoFactorOptions backOfficeTwoFactorOptions)
+ IBackOfficeTwoFactorOptions backOfficeTwoFactorOptions,
+ IHttpContextAccessor httpContextAccessor,
+ IOptions webRoutingSettings)
{
_backofficeSecurityAccessor = backofficeSecurityAccessor;
_userManager = backOfficeUserManager;
@@ -110,6 +116,50 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
_linkGenerator = linkGenerator;
_externalAuthenticationOptions = externalAuthenticationOptions;
_backOfficeTwoFactorOptions = backOfficeTwoFactorOptions;
+ _httpContextAccessor = httpContextAccessor;
+ _webRoutingSettings = webRoutingSettings.Value;
+ }
+
+ [Obsolete("Use constructor that also takes IHttpAccessor and IOptions, scheduled for removal in V11")]
+ public AuthenticationController(
+ IBackOfficeSecurityAccessor backofficeSecurityAccessor,
+ IBackOfficeUserManager backOfficeUserManager,
+ IBackOfficeSignInManager signInManager,
+ IUserService userService,
+ ILocalizedTextService textService,
+ IUmbracoMapper umbracoMapper,
+ IOptions globalSettings,
+ IOptions securitySettings,
+ ILogger logger,
+ IIpResolver ipResolver,
+ IOptions passwordConfiguration,
+ IEmailSender emailSender,
+ ISmsSender smsSender,
+ IHostingEnvironment hostingEnvironment,
+ LinkGenerator linkGenerator,
+ IBackOfficeExternalLoginProviders externalAuthenticationOptions,
+ IBackOfficeTwoFactorOptions backOfficeTwoFactorOptions)
+ : this(
+ backofficeSecurityAccessor,
+ backOfficeUserManager,
+ signInManager,
+ userService,
+ textService,
+ umbracoMapper,
+ globalSettings,
+ securitySettings,
+ logger,
+ ipResolver,
+ passwordConfiguration,
+ emailSender,
+ smsSender,
+ hostingEnvironment,
+ linkGenerator,
+ externalAuthenticationOptions,
+ backOfficeTwoFactorOptions,
+ StaticServiceProvider.Instance.GetRequiredService(),
+ StaticServiceProvider.Instance.GetRequiredService>())
+ {
}
///
@@ -629,7 +679,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
});
// Construct full URL using configured application URL (which will fall back to request)
- var applicationUri = _hostingEnvironment.ApplicationMainUrl;
+ Uri applicationUri = _httpContextAccessor.GetRequiredHttpContext().Request.GetApplicationUri(_webRoutingSettings);
var callbackUri = new Uri(applicationUri, action);
return callbackUri.ToString();
}
diff --git a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
index 79e7838110..72377c0670 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
@@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using MimeKit;
@@ -42,6 +43,7 @@ using Umbraco.Cms.Web.BackOffice.Security;
using Umbraco.Cms.Web.Common.ActionsResults;
using Umbraco.Cms.Web.Common.Attributes;
using Umbraco.Cms.Web.Common.Authorization;
+using Umbraco.Cms.Web.Common.DependencyInjection;
using Umbraco.Cms.Web.Common.Security;
using Umbraco.Extensions;
using Constants = Umbraco.Cms.Core.Constants;
@@ -75,7 +77,10 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
private readonly UserEditorAuthorizationHelper _userEditorAuthorizationHelper;
private readonly IPasswordChanger _passwordChanger;
private readonly ILogger _logger;
+ private readonly IHttpContextAccessor _httpContextAccessor;
+ private readonly WebRoutingSettings _webRoutingSettings;
+ [ActivatorUtilitiesConstructor]
public UsersController(
MediaFileManager mediaFileManager,
IOptions contentSettings,
@@ -96,7 +101,9 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
LinkGenerator linkGenerator,
IBackOfficeExternalLoginProviders externalLogins,
UserEditorAuthorizationHelper userEditorAuthorizationHelper,
- IPasswordChanger passwordChanger)
+ IPasswordChanger passwordChanger,
+ IHttpContextAccessor httpContextAccessor,
+ IOptions webRoutingSettings)
{
_mediaFileManager = mediaFileManager;
_contentSettings = contentSettings.Value;
@@ -119,6 +126,55 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
_userEditorAuthorizationHelper = userEditorAuthorizationHelper;
_passwordChanger = passwordChanger;
_logger = _loggerFactory.CreateLogger();
+ _httpContextAccessor = httpContextAccessor;
+ _webRoutingSettings = webRoutingSettings.Value;
+ }
+
+ [Obsolete("Use constructor that also takes IHttpAccessor and IOptions, scheduled for removal in V11")]
+ public UsersController(
+ MediaFileManager mediaFileManager,
+ IOptions contentSettings,
+ IHostingEnvironment hostingEnvironment,
+ ISqlContext sqlContext,
+ IImageUrlGenerator imageUrlGenerator,
+ IOptions securitySettings,
+ IEmailSender emailSender,
+ IBackOfficeSecurityAccessor backofficeSecurityAccessor,
+ AppCaches appCaches,
+ IShortStringHelper shortStringHelper,
+ IUserService userService,
+ ILocalizedTextService localizedTextService,
+ IUmbracoMapper umbracoMapper,
+ IOptions globalSettings,
+ IBackOfficeUserManager backOfficeUserManager,
+ ILoggerFactory loggerFactory,
+ LinkGenerator linkGenerator,
+ IBackOfficeExternalLoginProviders externalLogins,
+ UserEditorAuthorizationHelper userEditorAuthorizationHelper,
+ IPasswordChanger passwordChanger)
+ : this(mediaFileManager,
+ contentSettings,
+ hostingEnvironment,
+ sqlContext,
+ imageUrlGenerator,
+ securitySettings,
+ emailSender,
+ backofficeSecurityAccessor,
+ appCaches,
+ shortStringHelper,
+ userService,
+ localizedTextService,
+ umbracoMapper,
+ globalSettings,
+ backOfficeUserManager,
+ loggerFactory,
+ linkGenerator,
+ externalLogins,
+ userEditorAuthorizationHelper,
+ passwordChanger,
+ StaticServiceProvider.Instance.GetRequiredService(),
+ StaticServiceProvider.Instance.GetRequiredService>())
+ {
}
///
@@ -421,20 +477,25 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
///
public async Task> PostInviteUser(UserInvite userSave)
{
- if (userSave == null) throw new ArgumentNullException("userSave");
+ if (userSave == null)
+ {
+ throw new ArgumentNullException("userSave");
+ }
if (userSave.Message.IsNullOrWhiteSpace())
+ {
ModelState.AddModelError("Message", "Message cannot be empty");
+ }
IUser user;
if (_securitySettings.UsernameIsEmail)
{
- //ensure it's the same
+ // ensure it's the same
userSave.Username = userSave.Email;
}
else
{
- //first validate the username if we're showing it
+ // first validate the username if we're showing it
var userResult = CheckUniqueUsername(userSave.Username, u => u.LastLoginDate != default || u.EmailConfirmedDate.HasValue);
if (!(userResult.Result is null))
{
@@ -443,6 +504,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
user = userResult.Value;
}
+
user = CheckUniqueEmail(userSave.Email, u => u.LastLoginDate != default || u.EmailConfirmedDate.HasValue);
if (ModelState.IsValid == false)
@@ -455,7 +517,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
return ValidationProblem("No Email server is configured");
}
- //Perform authorization here to see if the current user can actually save this user with the info being requested
+ // Perform authorization here to see if the current user can actually save this user with the info being requested
var canSaveUser = _userEditorAuthorizationHelper.IsAuthorized(_backofficeSecurityAccessor.BackOfficeSecurity.CurrentUser, user, null, null, userSave.UserGroups);
if (canSaveUser == false)
{
@@ -464,8 +526,8 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
if (user == null)
{
- //we want to create the user with the UserManager, this ensures the 'empty' (special) password
- //format is applied without us having to duplicate that logic
+ // we want to create the user with the UserManager, this ensures the 'empty' (special) password
+ // format is applied without us having to duplicate that logic
var identityUser = BackOfficeIdentityUser.CreateNew(_globalSettings, userSave.Username, userSave.Email, _globalSettings.DefaultUILanguage);
identityUser.Name = userSave.Name;
@@ -475,21 +537,21 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
return ValidationProblem(created.Errors.ToErrorMessage());
}
- //now re-look the user back up
+ // now re-look the user back up
user = _userService.GetByEmail(userSave.Email);
}
- //map the save info over onto the user
+ // map the save info over onto the user
user = _umbracoMapper.Map(userSave, user);
- //ensure the invited date is set
+ // ensure the invited date is set
user.InvitedDate = DateTime.Now;
- //Save the updated user (which will process the user groups too)
+ // Save the updated user (which will process the user groups too)
_userService.Save(user);
var display = _umbracoMapper.Map(user);
- //send the email
+ // send the email
await SendUserInviteEmailAsync(display, _backofficeSecurityAccessor.BackOfficeSecurity.CurrentUser.Name, _backofficeSecurityAccessor.BackOfficeSecurity.CurrentUser.Email, user, userSave.Message);
display.AddSuccessNotification(_localizedTextService.Localize("speechBubbles","resendInviteHeader"), _localizedTextService.Localize("speechBubbles","resendInviteSuccess", new[] { user.Name }));
@@ -544,14 +606,14 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
});
// Construct full URL using configured application URL (which will fall back to request)
- var applicationUri = _hostingEnvironment.ApplicationMainUrl;
+ Uri applicationUri = _httpContextAccessor.GetRequiredHttpContext().Request.GetApplicationUri(_webRoutingSettings);
var inviteUri = new Uri(applicationUri, action);
var emailSubject = _localizedTextService.Localize("user","inviteEmailCopySubject",
- //Ensure the culture of the found user is used for the email!
+ // Ensure the culture of the found user is used for the email!
UmbracoUserExtensions.GetUserCulture(to.Language, _localizedTextService, _globalSettings));
var emailBody = _localizedTextService.Localize("user","inviteEmailCopyFormat",
- //Ensure the culture of the found user is used for the email!
+ // Ensure the culture of the found user is used for the email!
UmbracoUserExtensions.GetUserCulture(to.Language, _localizedTextService, _globalSettings),
new[] { userDisplay.Name, from, message, inviteUri.ToString(), senderEmail });
diff --git a/src/Umbraco.Web.Common/Extensions/HttpRequestExtensions.cs b/src/Umbraco.Web.Common/Extensions/HttpRequestExtensions.cs
index c7c2bb3115..2aeb2555eb 100644
--- a/src/Umbraco.Web.Common/Extensions/HttpRequestExtensions.cs
+++ b/src/Umbraco.Web.Common/Extensions/HttpRequestExtensions.cs
@@ -1,9 +1,12 @@
-using System.IO;
+using System;
+using System.IO;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Routing;
namespace Umbraco.Extensions
@@ -107,5 +110,31 @@ namespace Umbraco.Extensions
return result;
}
}
+
+ ///
+ /// Gets the application URI, will use the one specified in settings if present
+ ///
+ public static Uri GetApplicationUri(this HttpRequest request, WebRoutingSettings routingSettings)
+ {
+ if (request == null)
+ {
+ throw new ArgumentNullException(nameof(request));
+ }
+
+ if (routingSettings == null)
+ {
+ throw new ArgumentNullException(nameof(routingSettings));
+ }
+
+ if (string.IsNullOrEmpty(routingSettings.UmbracoApplicationUrl))
+ {
+ var requestUri = new Uri(request.GetDisplayUrl());
+
+ // Create a new URI with the relative uri as /, this ensures that only the base path is returned.
+ return new Uri(requestUri, "/");
+ }
+
+ return new Uri(routingSettings.UmbracoApplicationUrl);
+ }
}
}
From 763cb70e677ac0c85557b19b5df09eccfa1b9dfb Mon Sep 17 00:00:00 2001
From: Ronald Barendse
Date: Mon, 20 Dec 2021 08:45:11 +0100
Subject: [PATCH 4/4] Move member properties to Member Content App (V9 merge
regression) (#11768)
* Fix regression after merging to v9
* Update test to align with removed member properties
---
.../Mapping/MemberTabsAndPropertiesMapper.cs | 34 +++++--------------
.../Controllers/MemberControllerUnitTests.cs | 14 --------
2 files changed, 9 insertions(+), 39 deletions(-)
diff --git a/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs b/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs
index d61e32d88a..d8ac8d635d 100644
--- a/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs
+++ b/src/Umbraco.Core/Models/Mapping/MemberTabsAndPropertiesMapper.cs
@@ -65,14 +65,11 @@ namespace Umbraco.Cms.Core.Models.Mapping
var resolved = base.Map(source, context);
- // This is kind of a hack because a developer is supposed to be allowed to set their property editor - would have been much easier
- // if we just had all of the membership provider fields on the member table :(
- // TODO: But is there a way to map the IMember.IsLockedOut to the property ? i dunno.
+ // IMember.IsLockedOut can't be set to true, so make it readonly when that's the case (you can only unlock)
var isLockedOutProperty = resolved.SelectMany(x => x.Properties).FirstOrDefault(x => x.Alias == Constants.Conventions.Member.IsLockedOut);
if (isLockedOutProperty?.Value != null && isLockedOutProperty.Value.ToString() != "1")
{
- isLockedOutProperty.View = "readonlyvalue";
- isLockedOutProperty.Value = _localizedTextService.Localize("general", "no");
+ isLockedOutProperty.Readonly = true;
}
return resolved;
@@ -191,20 +188,6 @@ namespace Umbraco.Cms.Core.Models.Mapping
{
var properties = new List
{
- new ContentPropertyDisplay
- {
- Alias = $"{Constants.PropertyEditors.InternalGenericPropertiesPrefix}id",
- Label = _localizedTextService.Localize("general","id"),
- Value = new List {member.Id.ToString(), member.Key.ToString()},
- View = "idwithguid"
- },
- new ContentPropertyDisplay
- {
- Alias = $"{Constants.PropertyEditors.InternalGenericPropertiesPrefix}doctype",
- Label = _localizedTextService.Localize("content","membertype"),
- Value = _localizedTextService.UmbracoDictionaryTranslate(CultureDictionary, member.ContentType.Name),
- View = _propertyEditorCollection[Constants.PropertyEditors.Aliases.Label].GetValueEditor().View
- },
GetLoginProperty(member, _localizedTextService),
new ContentPropertyDisplay
{
@@ -212,7 +195,7 @@ namespace Umbraco.Cms.Core.Models.Mapping
Label = _localizedTextService.Localize("general","email"),
Value = member.Email,
View = "email",
- Validation = {Mandatory = true}
+ Validation = { Mandatory = true }
},
new ContentPropertyDisplay
{
@@ -221,12 +204,10 @@ namespace Umbraco.Cms.Core.Models.Mapping
Value = new Dictionary
{
// TODO: why ignoreCase, what are we doing here?!
- {"newPassword", member.GetAdditionalDataValueIgnoreCase("NewPassword", null)},
+ { "newPassword", member.GetAdditionalDataValueIgnoreCase("NewPassword", null) }
},
- // TODO: Hard coding this because the changepassword doesn't necessarily need to be a resolvable (real) property editor
View = "changepassword",
- // Initialize the dictionary with the configuration from the default membership provider
- Config = GetPasswordConfig(member)
+ Config = GetPasswordConfig(member) // Initialize the dictionary with the configuration from the default membership provider
},
new ContentPropertyDisplay
{
@@ -234,7 +215,10 @@ namespace Umbraco.Cms.Core.Models.Mapping
Label = _localizedTextService.Localize("content","membergroup"),
Value = GetMemberGroupValue(member.Username),
View = "membergroups",
- Config = new Dictionary {{"IsRequired", true}}
+ Config = new Dictionary
+ {
+ { "IsRequired", true }
+ }
}
};
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs
index da5175f272..069e94f732 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Controllers/MemberControllerUnitTests.cs
@@ -618,20 +618,6 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
Id = 77,
Properties = new List()
{
- new ContentPropertyDisplay()
- {
- Alias = "_umb_id",
- View = "idwithguid",
- Value = new []
- {
- "123",
- "guid"
- }
- },
- new ContentPropertyDisplay()
- {
- Alias = "_umb_doctype"
- },
new ContentPropertyDisplay()
{
Alias = "_umb_login"