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
143 lines
6.6 KiB
C#
143 lines
6.6 KiB
C#
// Copyright (c) Umbraco.
|
|
// See LICENSE for more details.
|
|
|
|
using System.ComponentModel;
|
|
|
|
namespace Umbraco.Cms.Core.Configuration.Models;
|
|
|
|
/// <summary>
|
|
/// Typed configuration options for security settings.
|
|
/// </summary>
|
|
[UmbracoOptions(Constants.Configuration.ConfigSecurity)]
|
|
public class SecuritySettings
|
|
{
|
|
internal const bool StaticMemberBypassTwoFactorForExternalLogins = true;
|
|
internal const bool StaticUserBypassTwoFactorForExternalLogins = true;
|
|
internal const bool StaticKeepUserLoggedIn = false;
|
|
internal const bool StaticHideDisabledUsersInBackOffice = false;
|
|
internal const bool StaticAllowPasswordReset = true;
|
|
internal const bool StaticAllowEditInvariantFromNonDefault = false;
|
|
internal const bool StaticAllowConcurrentLogins = false;
|
|
internal const string StaticAuthCookieName = "UMB_UCONTEXT";
|
|
internal const bool StaticUsernameIsEmail = true;
|
|
internal const bool StaticMemberRequireUniqueEmail = true;
|
|
|
|
internal const string StaticAllowedUserNameCharacters =
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+\\";
|
|
|
|
internal const int StaticMemberDefaultLockoutTimeInMinutes = 30 * 24 * 60;
|
|
internal const int StaticUserDefaultLockoutTimeInMinutes = 30 * 24 * 60;
|
|
internal const string StaticAuthorizeCallbackPathName = "/umbraco/oauth_complete";
|
|
internal const string StaticAuthorizeCallbackLogoutPathName = "/umbraco/logout";
|
|
internal const string StaticAuthorizeCallbackErrorPathName = "/umbraco/error";
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to keep the user logged in.
|
|
/// </summary>
|
|
[DefaultValue(StaticKeepUserLoggedIn)]
|
|
public bool KeepUserLoggedIn { get; set; } = StaticKeepUserLoggedIn;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to hide disabled users in the back-office.
|
|
/// </summary>
|
|
[DefaultValue(StaticHideDisabledUsersInBackOffice)]
|
|
public bool HideDisabledUsersInBackOffice { get; set; } = StaticHideDisabledUsersInBackOffice;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to allow user password reset.
|
|
/// </summary>
|
|
[DefaultValue(StaticAllowPasswordReset)]
|
|
public bool AllowPasswordReset { get; set; } = StaticAllowPasswordReset;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value for the authorization cookie name.
|
|
/// </summary>
|
|
[DefaultValue(StaticAuthCookieName)]
|
|
public string AuthCookieName { get; set; } = StaticAuthCookieName;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value for the authorization cookie domain.
|
|
/// </summary>
|
|
public string? AuthCookieDomain { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether the user's email address is to be considered as their username.
|
|
/// </summary>
|
|
[DefaultValue(StaticUsernameIsEmail)]
|
|
public bool UsernameIsEmail { get; set; } = StaticUsernameIsEmail;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether the member's email address must be unique.
|
|
/// </summary>
|
|
[DefaultValue(StaticMemberRequireUniqueEmail)]
|
|
public bool MemberRequireUniqueEmail { get; set; } = StaticMemberRequireUniqueEmail;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the set of allowed characters for a username
|
|
/// </summary>
|
|
[DefaultValue(StaticAllowedUserNameCharacters)]
|
|
public string AllowedUserNameCharacters { get; set; } = StaticAllowedUserNameCharacters;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to bypass the two factor requirement in Umbraco when using external login
|
|
/// for members. Thereby rely on the External login and potential 2FA at that provider.
|
|
/// </summary>
|
|
[DefaultValue(StaticMemberBypassTwoFactorForExternalLogins)]
|
|
public bool MemberBypassTwoFactorForExternalLogins { get; set; } = StaticMemberBypassTwoFactorForExternalLogins;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to bypass the two factor requirement in Umbraco when using external login
|
|
/// for users. Thereby rely on the External login and potential 2FA at that provider.
|
|
/// </summary>
|
|
[DefaultValue(StaticUserBypassTwoFactorForExternalLogins)]
|
|
public bool UserBypassTwoFactorForExternalLogins { get; set; } = StaticUserBypassTwoFactorForExternalLogins;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value for how long (in minutes) a member is locked out when a lockout occurs.
|
|
/// </summary>
|
|
[DefaultValue(StaticMemberDefaultLockoutTimeInMinutes)]
|
|
public int MemberDefaultLockoutTimeInMinutes { get; set; } = StaticMemberDefaultLockoutTimeInMinutes;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value for how long (in minutes) a user is locked out when a lockout occurs.
|
|
/// </summary>
|
|
[DefaultValue(StaticUserDefaultLockoutTimeInMinutes)]
|
|
public int UserDefaultLockoutTimeInMinutes { get; set; } = StaticUserDefaultLockoutTimeInMinutes;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to allow editing invariant properties from a non-default language variation.
|
|
/// </summary>
|
|
[Obsolete("Use ContentSettings.AllowEditFromInvariant instead")]
|
|
[DefaultValue(StaticAllowEditInvariantFromNonDefault)]
|
|
public bool AllowEditInvariantFromNonDefault { get; set; } = StaticAllowEditInvariantFromNonDefault;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether to allow concurrent logins.
|
|
/// </summary>
|
|
[DefaultValue(StaticAllowConcurrentLogins)]
|
|
public bool AllowConcurrentLogins { get; set; } = StaticAllowConcurrentLogins;
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value of the back-office host URI. Use this when running the back-office client and the Management API on different hosts. Leave empty when running both on the same host.
|
|
/// </summary>
|
|
public Uri? BackOfficeHost { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the path to use for authorization callback. Will be appended to the BackOfficeHost.
|
|
/// </summary>
|
|
[DefaultValue(StaticAuthorizeCallbackPathName)]
|
|
public string AuthorizeCallbackPathName { get; set; } = StaticAuthorizeCallbackPathName;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the path to use for authorization callback logout. Will be appended to the BackOfficeHost.
|
|
/// </summary>
|
|
[DefaultValue(StaticAuthorizeCallbackLogoutPathName)]
|
|
public string AuthorizeCallbackLogoutPathName { get; set; } = StaticAuthorizeCallbackLogoutPathName;
|
|
|
|
/// <summary>
|
|
/// Gets or sets the path to use for authorization callback error. Will be appended to the BackOfficeHost.
|
|
/// </summary>
|
|
[DefaultValue(StaticAuthorizeCallbackErrorPathName)]
|
|
public string AuthorizeCallbackErrorPathName { get; set; } = StaticAuthorizeCallbackErrorPathName;
|
|
}
|