From f04b86c6eda5b9cf86e817e28a168aa70983cae7 Mon Sep 17 00:00:00 2001 From: Warren Buckley Date: Fri, 22 Jul 2022 12:48:16 +0100 Subject: [PATCH] Update to use Umbraco 10.0.1 # Conflicts: # src/Articulate/Articulate.csproj --- .../Articulate.Tests.Website.csproj | 7 +- src/Articulate.Tests.Website/Program.cs | 15 +- .../appsettings-schema.json | 3880 +++++++++++++++++ .../appsettings.Development.json | 2 +- src/Articulate.Tests.Website/appsettings.json | 2 +- src/Articulate/Articulate.csproj | 6 +- src/Articulate/DateFormattedUrlProvider.cs | 8 +- .../Routing/DateFormattedPostContentFinder.cs | 3 +- .../Services/ArticulateTagRepository.cs | 1 + .../Services/ArticulateTagService.cs | 6 +- 10 files changed, 3904 insertions(+), 26 deletions(-) create mode 100644 src/Articulate.Tests.Website/appsettings-schema.json diff --git a/src/Articulate.Tests.Website/Articulate.Tests.Website.csproj b/src/Articulate.Tests.Website/Articulate.Tests.Website.csproj index e484004e..ea6b9844 100644 --- a/src/Articulate.Tests.Website/Articulate.Tests.Website.csproj +++ b/src/Articulate.Tests.Website/Articulate.Tests.Website.csproj @@ -1,14 +1,11 @@ - net5.0 + net6.0 false - - - - + diff --git a/src/Articulate.Tests.Website/Program.cs b/src/Articulate.Tests.Website/Program.cs index 3b061b25..9a68ddbb 100644 --- a/src/Articulate.Tests.Website/Program.cs +++ b/src/Articulate.Tests.Website/Program.cs @@ -14,14 +14,11 @@ public static void Main(string[] args) public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) -#if DEBUG - .ConfigureAppConfiguration(config - => config.AddJsonFile( - "appsettings.Local.json", - optional: true, - reloadOnChange: true)) -#endif - .ConfigureLogging(x => x.ClearProviders()) - .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup()); + .ConfigureUmbracoDefaults() + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStaticWebAssets(); + webBuilder.UseStartup(); + }); } } diff --git a/src/Articulate.Tests.Website/appsettings-schema.json b/src/Articulate.Tests.Website/appsettings-schema.json new file mode 100644 index 00000000..cc264cd7 --- /dev/null +++ b/src/Articulate.Tests.Website/appsettings-schema.json @@ -0,0 +1,3880 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "definitions": { + "webOptimizer": { + "type": "object", + "description": "Settings for WebOptimizer.Core", + "properties": { + "enableCaching": { + "description": "Determines if the \"cache-control\" HTTP headers should be set and if conditional GET (304) requests should be supported. This could be helpful to disable while in development mode.", + "type": "boolean" + }, + "enableTagHelperBundling": { + "description": "Determines if `" + }, + "MacroErrors": { + "description": "Gets or sets a value for the macro error behaviour.", + "default": "Inline", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreMacrosMacroErrorBehaviour" + } + ] + }, + "DisallowedUploadFiles": { + "type": "array", + "description": "Gets or sets a value for the collection of file extensions that are disallowed for upload.", + "default": "ashx,aspx,ascx,config,cshtml,vbhtml,asmx,air,axd,xamlx", + "items": { + "type": "string" + } + }, + "AllowedUploadFiles": { + "type": "array", + "description": "Gets or sets a value for the collection of file extensions that are allowed for upload.", + "items": { + "type": "string" + } + }, + "ShowDeprecatedPropertyEditors": { + "type": "boolean", + "description": "Gets or sets a value indicating whether deprecated property editors should be shown.", + "default": false + }, + "LoginBackgroundImage": { + "type": "string", + "description": "Gets or sets a value for the path to the login screen background image.", + "default": "assets/img/login.jpg" + }, + "LoginLogoImage": { + "type": "string", + "description": "Gets or sets a value for the path to the login screen logo image.", + "default": "assets/img/application/umbraco_logo_white.svg" + }, + "HideBackOfficeLogo": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to hide the backoffice umbraco logo or not.", + "default": false + }, + "DisableDeleteWhenReferenced": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to disable the deletion of items referenced by other items.", + "default": false + }, + "DisableUnpublishWhenReferenced": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to disable the unpublishing of items referenced by other items.", + "default": false + }, + "ContentVersionCleanupPolicy": { + "description": "Get or sets the model representing the global content version cleanup policy", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsContentVersionCleanupPolicySettings" + } + ] + } + } + }, + "UmbracoCmsCoreConfigurationModelsContentNotificationSettings": { + "type": "object", + "description": "Typed configuration options for content notification settings.", + "properties": { + "Email": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the email address for notifications." + }, + "DisableHtmlEmail": { + "type": "boolean", + "description": "Gets or sets a value indicating whether HTML email notifications should be disabled.", + "default": false + } + } + }, + "UmbracoCmsCoreConfigurationModelsContentImagingSettings": { + "type": "object", + "description": "Typed configuration options for content imaging settings.", + "properties": { + "ImageFileTypes": { + "type": "array", + "description": "Gets or sets a value for the collection of accepted image file extensions.", + "default": "jpeg,jpg,gif,bmp,png,tiff,tif,webp", + "items": { + "type": "string" + } + }, + "AutoFillImageProperties": { + "type": "array", + "description": "Gets or sets a value for the imaging autofill following media file upload fields.", + "items": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsImagingAutoFillUploadField" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsImagingAutoFillUploadField": { + "allOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsValidationValidatableEntryBase" + }, + { + "type": "object", + "description": "Typed configuration options for image autofill upload settings.", + "required": [ + "Alias", + "WidthFieldAlias", + "HeightFieldAlias", + "LengthFieldAlias", + "ExtensionFieldAlias" + ], + "properties": { + "Alias": { + "type": "string", + "description": "Gets or sets a value for the alias of the image upload property.", + "minLength": 1 + }, + "WidthFieldAlias": { + "type": "string", + "description": "Gets or sets a value for the width field alias of the image upload property.", + "minLength": 1 + }, + "HeightFieldAlias": { + "type": "string", + "description": "Gets or sets a value for the height field alias of the image upload property.", + "minLength": 1 + }, + "LengthFieldAlias": { + "type": "string", + "description": "Gets or sets a value for the length field alias of the image upload property.", + "minLength": 1 + }, + "ExtensionFieldAlias": { + "type": "string", + "description": "Gets or sets a value for the extension field alias of the image upload property.", + "minLength": 1 + } + } + } + ] + }, + "UmbracoCmsCoreConfigurationModelsValidationValidatableEntryBase": { + "type": "object", + "description": "Provides a base class for configuration models that can be validated based on data annotations.", + "x-abstract": true + }, + "UmbracoCmsCoreConfigurationModelsContentErrorPage": { + "allOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsValidationValidatableEntryBase" + }, + { + "type": "object", + "description": "Typed configuration for a content error page.", + "required": [ + "Culture" + ], + "properties": { + "ContentId": { + "type": "integer", + "description": "Gets or sets a value for the content Id.", + "format": "int32" + }, + "ContentKey": { + "type": "string", + "description": "Gets or sets a value for the content key.", + "format": "guid" + }, + "ContentXPath": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the content XPath." + }, + "Culture": { + "type": "string", + "description": "Gets or sets a value for the content culture.", + "minLength": 1 + } + } + } + ] + }, + "UmbracoCmsCoreMacrosMacroErrorBehaviour": { + "type": "string", + "description": "", + "x-enumNames": [ + "Inline", + "Silent", + "Throw", + "Content" + ], + "enum": [ + "Inline", + "Silent", + "Throw", + "Content" + ] + }, + "UmbracoCmsCoreConfigurationModelsContentVersionCleanupPolicySettings": { + "type": "object", + "description": "Model representing the global content version cleanup policy", + "properties": { + "EnableCleanup": { + "type": "boolean", + "description": "Gets or sets a value indicating whether or not the cleanup job should be executed.", + "default": false + }, + "KeepAllVersionsNewerThanDays": { + "type": "integer", + "description": "Gets or sets the number of days where all historical content versions are kept.", + "format": "int32", + "default": 7 + }, + "KeepLatestVersionPerDayForDays": { + "type": "integer", + "description": "Gets or sets the number of days where the latest historical content version for that day are kept.", + "format": "int32", + "default": 90 + } + } + }, + "UmbracoCmsCoreConfigurationModelsCoreDebugSettings": { + "type": "object", + "description": "Typed configuration options for core debug settings.", + "properties": { + "LogIncompletedScopes": { + "type": "boolean", + "description": "Gets or sets a value indicating whether incompleted scopes should be logged.", + "default": false + }, + "DumpOnTimeoutThreadAbort": { + "type": "boolean", + "description": "Gets or sets a value indicating whether memory dumps on thread abort should be taken.", + "default": false + } + } + }, + "UmbracoCmsCoreConfigurationModelsExceptionFilterSettings": { + "type": "object", + "description": "Typed configuration options for exception filter settings.", + "properties": { + "Disabled": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the exception filter is disabled.", + "default": false + } + } + }, + "UmbracoCmsCoreConfigurationModelsModelsBuilderSettings": { + "type": "object", + "description": "Typed configuration options for models builder settings.", + "properties": { + "ModelsMode": { + "description": "Gets or sets a value for the models mode.", + "default": "InMemoryAuto", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsMode" + } + ] + }, + "ModelsNamespace": { + "type": "string", + "description": "Gets or sets a value for models namespace.", + "default": "Umbraco.Cms.Web.Common.PublishedModels" + }, + "FlagOutOfDateModels": { + "type": "boolean", + "description": "Gets or sets a value indicating whether we should flag out-of-date models." + }, + "ModelsDirectory": { + "type": "string", + "description": "Gets or sets a value for the models directory.", + "default": "~/umbraco/models" + }, + "AcceptUnsafeModelsDirectory": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to accept an unsafe value for ModelsDirectory.", + "default": false + }, + "DebugLevel": { + "type": "integer", + "description": "Gets or sets a value indicating the debug log level.", + "format": "int32", + "default": 0 + } + } + }, + "UmbracoCmsCoreConfigurationModelsMode": { + "type": "string", + "description": "Defines the models generation modes.", + "x-enumNames": [ + "Nothing", + "InMemoryAuto", + "SourceCodeManual", + "SourceCodeAuto" + ], + "enum": [ + "Nothing", + "InMemoryAuto", + "SourceCodeManual", + "SourceCodeAuto" + ] + }, + "UmbracoCmsCoreConfigurationModelsGlobalSettings": { + "type": "object", + "description": "Typed configuration options for global settings.", + "properties": { + "ReservedUrls": { + "type": "string", + "description": "Gets or sets a value for the reserved URLs (must end with a comma).", + "default": "~/.well-known," + }, + "ReservedPaths": { + "type": "string", + "description": "Gets or sets a value for the reserved paths (must end with a comma).", + "default": "~/app_plugins/,~/install/,~/mini-profiler-resources/,~/umbraco/," + }, + "TimeOut": { + "type": "string", + "description": "Gets or sets a value for the back-office login timeout.", + "format": "duration", + "default": "00:20:00" + }, + "DefaultUILanguage": { + "type": "string", + "description": "Gets or sets a value for the default UI language.", + "default": "en-US" + }, + "HideTopLevelNodeFromPath": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to hide the top level node from the path.", + "default": true + }, + "UseHttps": { + "type": "boolean", + "description": "Gets or sets a value indicating whether HTTPS should be used.", + "default": false + }, + "VersionCheckPeriod": { + "type": "integer", + "description": "Gets or sets a value for the version check period in days.", + "format": "int32", + "default": 7 + }, + "UmbracoPath": { + "type": "string", + "description": "Gets or sets a value for the Umbraco back-office path.", + "default": "~/umbraco" + }, + "IconsPath": { + "type": "string", + "description": "Gets or sets a value for the Umbraco icons path.", + "default": "umbraco/assets/icons" + }, + "UmbracoCssPath": { + "type": "string", + "description": "Gets or sets a value for the Umbraco CSS path.", + "default": "~/css" + }, + "UmbracoScriptsPath": { + "type": "string", + "description": "Gets or sets a value for the Umbraco scripts path.", + "default": "~/scripts" + }, + "UmbracoMediaPath": { + "type": "string", + "description": "Gets or sets a value for the Umbraco media request path.", + "default": "~/media" + }, + "UmbracoMediaPhysicalRootPath": { + "type": "string", + "description": "Gets or sets a value for the physical Umbraco media root path (falls back to UmbracoMediaPath when empty)." + }, + "InstallMissingDatabase": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to install the database when it is missing.", + "default": false + }, + "DisableElectionForSingleServer": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to disable the election for a single server.", + "default": false + }, + "DatabaseFactoryServerVersion": { + "type": "string", + "description": "Gets or sets a value for the database factory server version." + }, + "MainDomLock": { + "type": "string", + "description": "Gets or sets a value for the main dom lock." + }, + "MainDomKeyDiscriminator": { + "type": "string", + "description": "Gets or sets a value to discriminate MainDom boundaries.\n\nGenerally the default should suffice but useful for advanced scenarios e.g. azure deployment slot based zero downtime deployments." + }, + "MainDomReleaseSignalPollingInterval": { + "type": "integer", + "description": "Gets or sets the duration (in milliseconds) for which the MainDomLock release signal polling task should sleep.", + "format": "int32", + "default": 2000 + }, + "Id": { + "type": "string", + "description": "Gets or sets the telemetry ID." + }, + "NoNodesViewPath": { + "type": "string", + "description": "Gets or sets a value for the path to the no content view.", + "default": "~/umbraco/UmbracoWebsite/NoNodes.cshtml" + }, + "DatabaseServerRegistrar": { + "description": "Gets or sets a value for the database server registrar settings.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsDatabaseServerRegistrarSettings" + } + ] + }, + "DatabaseServerMessenger": { + "description": "Gets or sets a value for the database server messenger settings.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsDatabaseServerMessengerSettings" + } + ] + }, + "Smtp": { + "description": "Gets or sets a value for the SMTP settings.", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsSmtpSettings" + } + ] + }, + "SanitizeTinyMce": { + "type": "boolean", + "description": "Gets or sets a value indicating whether TinyMCE scripting sanitization should be applied.", + "default": false + }, + "DistributedLockingReadLockDefaultTimeout": { + "type": "string", + "description": "Gets or sets a value representing the maximum time to wait whilst attempting to obtain a distributed read lock.", + "format": "duration", + "default": "00:01:00" + }, + "DistributedLockingWriteLockDefaultTimeout": { + "type": "string", + "description": "Gets or sets a value representing the maximum time to wait whilst attempting to obtain a distributed write lock.", + "format": "duration", + "default": "00:00:05" + }, + "DistributedLockingMechanism": { + "type": "string", + "description": "Gets or sets a value representing the DistributedLockingMechanism to use." + } + } + }, + "UmbracoCmsCoreConfigurationModelsDatabaseServerRegistrarSettings": { + "type": "object", + "description": "Typed configuration options for database server registrar settings.", + "properties": { + "WaitTimeBetweenCalls": { + "type": "string", + "description": "Gets or sets a value for the amount of time to wait between calls to the database on the background thread.", + "format": "duration", + "default": "00:01:00" + }, + "StaleServerTimeout": { + "type": "string", + "description": "Gets or sets a value for the time span to wait before considering a server stale, after it has last been accessed.", + "format": "duration", + "default": "00:02:00" + } + } + }, + "UmbracoCmsCoreConfigurationModelsDatabaseServerMessengerSettings": { + "type": "object", + "description": "Typed configuration options for database server messaging settings.", + "properties": { + "MaxProcessingInstructionCount": { + "type": "integer", + "description": "Gets or sets a value for the maximum number of instructions that can be processed at startup; otherwise the server cold-boots (rebuilds its caches).", + "format": "int32", + "default": 1000 + }, + "TimeToRetainInstructions": { + "type": "string", + "description": "Gets or sets a value for the time to keep instructions in the database; records older than this number will be pruned.", + "format": "duration", + "default": "2.00:00:00" + }, + "TimeBetweenSyncOperations": { + "type": "string", + "description": "Gets or sets a value for the time to wait between each sync operations.", + "format": "duration", + "default": "00:00:05" + }, + "TimeBetweenPruneOperations": { + "type": "string", + "description": "Gets or sets a value for the time to wait between each prune operations.", + "format": "duration", + "default": "00:01:00" + } + } + }, + "UmbracoCmsCoreConfigurationModelsSmtpSettings": { + "allOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsValidationValidatableEntryBase" + }, + { + "type": "object", + "description": "Typed configuration options for SMTP settings.", + "required": [ + "From" + ], + "properties": { + "From": { + "type": "string", + "description": "Gets or sets a value for the SMTP from address to use for messages.", + "format": "email", + "minLength": 1 + }, + "Host": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the SMTP host." + }, + "Port": { + "type": "integer", + "description": "Gets or sets a value for the SMTP port.", + "format": "int32" + }, + "SecureSocketOptions": { + "description": "Gets or sets a value for the secure socket options.", + "default": "Auto", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsSecureSocketOptions" + } + ] + }, + "PickupDirectoryLocation": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the SMTP pick-up directory." + }, + "DeliveryMethod": { + "description": "Gets or sets a value for the SMTP delivery method.", + "default": "Network", + "oneOf": [ + { + "$ref": "#/definitions/SystemNetMailSmtpDeliveryMethod" + } + ] + }, + "Username": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the SMTP user name." + }, + "Password": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the SMTP password." + } + } + } + ] + }, + "UmbracoCmsCoreConfigurationModelsSecureSocketOptions": { + "type": "string", + "description": "Matches MailKit.Security.SecureSocketOptions and defined locally to avoid having to take\na dependency on this external library into Umbraco.Core.", + "x-enumNames": [ + "None", + "Auto", + "SslOnConnect", + "StartTls", + "StartTlsWhenAvailable" + ], + "enum": [ + "None", + "Auto", + "SslOnConnect", + "StartTls", + "StartTlsWhenAvailable" + ] + }, + "SystemNetMailSmtpDeliveryMethod": { + "type": "string", + "description": "", + "x-enumNames": [ + "Network", + "SpecifiedPickupDirectory", + "PickupDirectoryFromIis" + ], + "enum": [ + "Network", + "SpecifiedPickupDirectory", + "PickupDirectoryFromIis" + ] + }, + "UmbracoCmsCoreConfigurationModelsHealthChecksSettings": { + "type": "object", + "description": "Typed configuration options for healthchecks settings.", + "properties": { + "DisabledChecks": { + "type": "array", + "description": "Gets or sets a value for the collection of healthchecks that are disabled.", + "items": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsDisabledHealthCheckSettings" + } + }, + "Notification": { + "description": "Gets or sets a value for the healthcheck notification settings.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsHealthChecksNotificationSettings" + } + ] + } + } + }, + "UmbracoCmsCoreConfigurationModelsDisabledHealthCheckSettings": { + "type": "object", + "description": "Typed configuration options for disabled healthcheck settings.", + "properties": { + "Id": { + "type": "string", + "description": "Gets or sets a value for the healthcheck Id to disable.", + "format": "guid" + }, + "DisabledOn": { + "type": "string", + "description": "Gets or sets a value for the date the healthcheck was disabled.", + "format": "date-time" + }, + "DisabledBy": { + "type": "integer", + "description": "Gets or sets a value for Id of the user that disabled the healthcheck.", + "format": "int32" + } + } + }, + "UmbracoCmsCoreConfigurationModelsHealthChecksNotificationSettings": { + "type": "object", + "description": "Typed configuration options for healthcheck notification settings.", + "properties": { + "Enabled": { + "type": "boolean", + "description": "Gets or sets a value indicating whether health check notifications are enabled.", + "default": false + }, + "FirstRunTime": { + "type": "string", + "description": "Gets or sets a value for the first run time of a healthcheck notification in crontab format." + }, + "Period": { + "type": "string", + "description": "Gets or sets a value for the period of the healthcheck notification.", + "format": "duration", + "default": "1.00:00:00" + }, + "NotificationMethods": { + "type": "object", + "description": "Gets or sets a value for the collection of health check notification methods.", + "additionalProperties": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsHealthChecksNotificationMethodSettings" + } + }, + "DisabledChecks": { + "type": "array", + "description": "Gets or sets a value for the collection of health checks that are disabled for notifications.", + "items": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsDisabledHealthCheckSettings" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsHealthChecksNotificationMethodSettings": { + "type": "object", + "description": "Typed configuration options for healthcheck notification method settings.", + "properties": { + "Enabled": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the health check notification method is enabled.", + "default": false + }, + "Verbosity": { + "description": "Gets or sets a value for the health check notifications reporting verbosity.", + "default": "Summary", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreHealthChecksHealthCheckNotificationVerbosity" + } + ] + }, + "FailureOnly": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the health check notifications should occur on failures only.", + "default": false + }, + "Settings": { + "type": "object", + "description": "Gets or sets a value providing provider specific settings for the health check notification method.", + "additionalProperties": { + "type": "string" + } + } + } + }, + "UmbracoCmsCoreHealthChecksHealthCheckNotificationVerbosity": { + "type": "string", + "description": "", + "x-enumNames": [ + "Summary", + "Detailed" + ], + "enum": [ + "Summary", + "Detailed" + ] + }, + "UmbracoCmsCoreConfigurationModelsHostingSettings": { + "type": "object", + "description": "Typed configuration options for hosting settings.", + "properties": { + "ApplicationVirtualPath": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the application virtual path." + }, + "LocalTempStorageLocation": { + "description": "Gets or sets a value for the location of temporary files.", + "default": "Default", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationLocalTempStorage" + } + ] + }, + "Debug": { + "type": "boolean", + "description": "Gets or sets a value indicating whether umbraco is running in [debug mode].", + "default": false + }, + "SiteName": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value specifying the name of the site." + } + } + }, + "UmbracoCmsCoreConfigurationLocalTempStorage": { + "type": "string", + "description": "", + "x-enumNames": [ + "Unknown", + "Default", + "EnvironmentTemp" + ], + "enum": [ + "Unknown", + "Default", + "EnvironmentTemp" + ] + }, + "UmbracoCmsCoreConfigurationModelsImagingSettings": { + "type": "object", + "description": "Typed configuration options for imaging settings.", + "properties": { + "Cache": { + "description": "Gets or sets a value for imaging cache settings.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsImagingCacheSettings" + } + ] + }, + "Resize": { + "description": "Gets or sets a value for imaging resize settings.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsImagingResizeSettings" + } + ] + } + } + }, + "UmbracoCmsCoreConfigurationModelsImagingCacheSettings": { + "type": "object", + "description": "Typed configuration options for image cache settings.", + "properties": { + "BrowserMaxAge": { + "type": "string", + "description": "Gets or sets a value for the browser image cache maximum age.", + "format": "duration", + "default": "7.00:00:00" + }, + "CacheMaxAge": { + "type": "string", + "description": "Gets or sets a value for the image cache maximum age.", + "format": "duration", + "default": "365.00:00:00" + }, + "CacheHashLength": { + "type": "integer", + "description": "Gets or sets a value for the image cache hash length.", + "default": 12 + }, + "CacheFolderDepth": { + "type": "integer", + "description": "Gets or sets a value for the image cache folder depth.", + "default": 8 + }, + "CacheFolder": { + "type": "string", + "description": "Gets or sets a value for the image cache folder.", + "default": "~/umbraco/Data/TEMP/MediaCache" + } + } + }, + "UmbracoCmsCoreConfigurationModelsImagingResizeSettings": { + "type": "object", + "description": "Typed configuration options for image resize settings.", + "properties": { + "MaxWidth": { + "type": "integer", + "description": "Gets or sets a value for the maximim resize width.", + "format": "int32", + "default": 5000 + }, + "MaxHeight": { + "type": "integer", + "description": "Gets or sets a value for the maximim resize height.", + "format": "int32", + "default": 5000 + } + } + }, + "UmbracoCmsCoreConfigurationModelsIndexCreatorSettings": { + "type": "object", + "description": "Typed configuration options for index creator settings.", + "properties": { + "LuceneDirectoryFactory": { + "description": "Gets or sets a value for lucene directory factory type.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsLuceneDirectoryFactory" + } + ] + } + } + }, + "UmbracoCmsCoreConfigurationModelsLuceneDirectoryFactory": { + "type": "string", + "description": "", + "x-enumNames": [ + "Default", + "SyncedTempFileSystemDirectoryFactory", + "TempFileSystemDirectoryFactory" + ], + "enum": [ + "Default", + "SyncedTempFileSystemDirectoryFactory", + "TempFileSystemDirectoryFactory" + ] + }, + "UmbracoCmsCoreConfigurationModelsKeepAliveSettings": { + "type": "object", + "description": "Typed configuration options for keep alive settings.", + "properties": { + "DisableKeepAliveTask": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the keep alive task is disabled.", + "default": false + }, + "KeepAlivePingUrl": { + "type": "string", + "description": "Gets or sets a value for the keep alive ping URL.", + "default": "~/api/keepalive/ping" + } + } + }, + "UmbracoCmsCoreConfigurationModelsLoggingSettings": { + "type": "object", + "description": "Typed configuration options for logging settings.", + "properties": { + "MaxLogAge": { + "type": "string", + "description": "Gets or sets a value for the maximum age of a log file.", + "format": "duration", + "default": "1.00:00:00" + } + } + }, + "UmbracoCmsCoreConfigurationModelsMemberPasswordConfigurationSettings": { + "type": "object", + "description": "Typed configuration options for member password settings.", + "properties": { + "RequiredLength": { + "type": "integer", + "description": "Gets a value for the minimum required length for the password.", + "format": "int32", + "default": 10 + }, + "RequireNonLetterOrDigit": { + "type": "boolean", + "description": "Gets a value indicating whether at least one non-letter or digit is required for the password.", + "default": false + }, + "RequireDigit": { + "type": "boolean", + "description": "Gets a value indicating whether at least one digit is required for the password.", + "default": false + }, + "RequireLowercase": { + "type": "boolean", + "description": "Gets a value indicating whether at least one lower-case character is required for the password.", + "default": false + }, + "RequireUppercase": { + "type": "boolean", + "description": "Gets a value indicating whether at least one upper-case character is required for the password.", + "default": false + }, + "HashAlgorithmType": { + "type": "string", + "description": "Gets a value for the password hash algorithm type.", + "default": "PBKDF2.ASPNETCORE.V3" + }, + "MaxFailedAccessAttemptsBeforeLockout": { + "type": "integer", + "description": "Gets a value for the maximum failed access attempts before lockout.", + "format": "int32", + "default": 5 + } + } + }, + "UmbracoCmsCoreConfigurationModelsNuCacheSettings": { + "type": "object", + "description": "Typed configuration options for NuCache settings.", + "properties": { + "BTreeBlockSize": { + "type": [ + "integer", + "null" + ], + "description": "Gets or sets a value defining the BTree block size.", + "format": "int32" + }, + "NuCacheSerializerType": { + "description": "The serializer type that nucache uses to persist documents in the database.", + "default": "MessagePack", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsNuCacheSerializerType" + } + ] + }, + "SqlPageSize": { + "type": "integer", + "description": "The paging size to use for nucache SQL queries.", + "format": "int32", + "default": 1000 + }, + "KitBatchSize": { + "type": "integer", + "description": "The size to use for nucache Kit batches. Higher value means more content loaded into memory at a time.", + "format": "int32", + "default": 1 + }, + "UnPublishedContentCompression": { + "type": "boolean" + } + } + }, + "UmbracoCmsCoreConfigurationModelsNuCacheSerializerType": { + "type": "string", + "description": "The serializer type that nucache uses to persist documents in the database.", + "x-enumNames": [ + "MessagePack", + "JSON" + ], + "enum": [ + "MessagePack", + "JSON" + ] + }, + "UmbracoCmsCoreConfigurationModelsRequestHandlerSettings": { + "type": "object", + "description": "Typed configuration options for request handler settings.", + "properties": { + "AddTrailingSlash": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to add a trailing slash to URLs.", + "default": true + }, + "ConvertUrlsToAscii": { + "type": "string", + "description": "Gets or sets a value indicating whether to convert URLs to ASCII (valid values: \"true\", \"try\" or \"false\").", + "default": "try" + }, + "EnableDefaultCharReplacements": { + "type": "boolean", + "description": "Disable all default character replacements", + "default": true + }, + "UserDefinedCharCollection": { + "type": [ + "array", + "null" + ], + "description": "Add additional character replacements, or override defaults", + "items": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsCharItem" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsCharItem": { + "type": "object", + "properties": { + "Char": { + "type": "string", + "description": "The character to replace" + }, + "Replacement": { + "type": "string", + "description": "The replacement character" + } + } + }, + "UmbracoCmsCoreConfigurationModelsRuntimeSettings": { + "type": "object", + "description": "Typed configuration options for runtime settings.", + "properties": { + "MaxQueryStringLength": { + "type": [ + "integer", + "null" + ], + "description": "Gets or sets a value for the maximum query string length.", + "format": "int32" + }, + "MaxRequestLength": { + "type": [ + "integer", + "null" + ], + "description": "Gets or sets a value for the maximum request length in kb.", + "format": "int32" + } + } + }, + "UmbracoCmsCoreConfigurationModelsSecuritySettings": { + "type": "object", + "description": "Typed configuration options for security settings.", + "properties": { + "KeepUserLoggedIn": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to keep the user logged in.", + "default": false + }, + "HideDisabledUsersInBackOffice": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to hide disabled users in the back-office.", + "default": false + }, + "AllowPasswordReset": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to allow user password reset.", + "default": true + }, + "AuthCookieName": { + "type": "string", + "description": "Gets or sets a value for the authorization cookie name.", + "default": "UMB_UCONTEXT" + }, + "AuthCookieDomain": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value for the authorization cookie domain." + }, + "UsernameIsEmail": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the user's email address is to be considered as their username." + }, + "AllowedUserNameCharacters": { + "type": "string", + "description": "Gets or sets the set of allowed characters for a username", + "default": "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+\\" + }, + "UserPassword": { + "description": "Gets or sets a value for the user password settings.", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsUserPasswordConfigurationSettings" + } + ] + }, + "MemberPassword": { + "description": "Gets or sets a value for the member password settings.", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsMemberPasswordConfigurationSettings" + } + ] + }, + "MemberBypassTwoFactorForExternalLogins": { + "type": "boolean", + "description": "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.", + "default": true + }, + "UserBypassTwoFactorForExternalLogins": { + "type": "boolean", + "description": "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.", + "default": true + } + } + }, + "UmbracoCmsCoreConfigurationModelsUserPasswordConfigurationSettings": { + "type": "object", + "description": "Typed configuration options for user password settings.", + "properties": { + "RequiredLength": { + "type": "integer", + "description": "Gets a value for the minimum required length for the password.", + "format": "int32", + "default": 10 + }, + "RequireNonLetterOrDigit": { + "type": "boolean", + "description": "Gets a value indicating whether at least one non-letter or digit is required for the password.", + "default": false + }, + "RequireDigit": { + "type": "boolean", + "description": "Gets a value indicating whether at least one digit is required for the password.", + "default": false + }, + "RequireLowercase": { + "type": "boolean", + "description": "Gets a value indicating whether at least one lower-case character is required for the password.", + "default": false + }, + "RequireUppercase": { + "type": "boolean", + "description": "Gets a value indicating whether at least one upper-case character is required for the password.", + "default": false + }, + "HashAlgorithmType": { + "type": "string", + "description": "Gets a value for the password hash algorithm type.", + "default": "PBKDF2.ASPNETCORE.V3" + }, + "MaxFailedAccessAttemptsBeforeLockout": { + "type": "integer", + "description": "Gets a value for the maximum failed access attempts before lockout.", + "format": "int32", + "default": 5 + } + } + }, + "UmbracoCmsCoreConfigurationModelsTourSettings": { + "type": "object", + "description": "Typed configuration options for tour settings.", + "properties": { + "EnableTours": { + "type": "boolean", + "description": "Gets or sets a value indicating whether back-office tours are enabled.", + "default": true + } + } + }, + "UmbracoCmsCoreConfigurationModelsTypeFinderSettings": { + "type": "object", + "description": "Typed configuration options for type finder settings.", + "required": [ + "AssembliesAcceptingLoadExceptions" + ], + "properties": { + "AssembliesAcceptingLoadExceptions": { + "type": "string", + "description": "Gets or sets a value for the assemblies that accept load exceptions during type finder operations.", + "minLength": 1 + }, + "AdditionalEntryAssemblies": { + "type": [ + "array", + "null" + ], + "description": "By default the entry assemblies for scanning plugin types is the Umbraco DLLs. If you require\nscanning for plugins based on different root referenced assemblies you can add the assembly name to this list.", + "items": { + "type": "string" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsWebRoutingSettings": { + "type": "object", + "description": "Typed configuration options for web routing settings.", + "properties": { + "TryMatchingEndpointsForAllPages": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to check if any routed endpoints match a front-end request before\nthe Umbraco dynamic router tries to map the request to an Umbraco content item.", + "default": false + }, + "TrySkipIisCustomErrors": { + "type": "boolean", + "description": "Gets or sets a value indicating whether IIS custom errors should be skipped.", + "default": false + }, + "InternalRedirectPreservesTemplate": { + "type": "boolean", + "description": "Gets or sets a value indicating whether an internal redirect should preserve the template.", + "default": false + }, + "DisableAlternativeTemplates": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the use of alternative templates are disabled.", + "default": false + }, + "ValidateAlternativeTemplates": { + "type": "boolean", + "description": "Gets or sets a value indicating whether the use of alternative templates should be validated.", + "default": false + }, + "DisableFindContentByIdPath": { + "type": "boolean", + "description": "Gets or sets a value indicating whether find content ID by path is disabled.", + "default": false + }, + "DisableRedirectUrlTracking": { + "type": "boolean", + "description": "Gets or sets a value indicating whether redirect URL tracking is disabled.", + "default": false + }, + "UrlProviderMode": { + "description": "Gets or sets a value for the URL provider mode (UrlMode).", + "default": "Auto", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreModelsPublishedContentUrlMode" + } + ] + }, + "UmbracoApplicationUrl": { + "type": "string", + "description": "Gets or sets a value for the Umbraco application URL." + } + } + }, + "UmbracoCmsCoreModelsPublishedContentUrlMode": { + "type": "string", + "description": "Specifies the type of URLs that the URL provider should produce, Auto is the default.", + "x-enumNames": [ + "Default", + "Relative", + "Absolute", + "Auto" + ], + "enum": [ + "Default", + "Relative", + "Absolute", + "Auto" + ] + }, + "UmbracoCmsCoreConfigurationModelsUmbracoPluginSettings": { + "type": "object", + "description": "Typed configuration options for the plugins.", + "properties": { + "BrowsableFileExtensions": { + "type": "array", + "description": "Gets or sets the allowed file extensions (including the period \".\") that should be accessible from the browser.", + "items": { + "type": "string" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsUnattendedSettings": { + "type": "object", + "description": "Typed configuration options for unattended settings.", + "properties": { + "InstallUnattended": { + "type": "boolean", + "description": "Gets or sets a value indicating whether unattended installs are enabled.", + "default": false + }, + "UpgradeUnattended": { + "type": "boolean", + "description": "Gets or sets a value indicating whether unattended upgrades are enabled.", + "default": false + }, + "PackageMigrationsUnattended": { + "type": "boolean", + "description": "Gets or sets a value indicating whether unattended package migrations are enabled." + }, + "UnattendedUserName": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value to use for creating a user with a name for Unattended Installs" + }, + "UnattendedUserEmail": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value to use for creating a user with an email for Unattended Installs", + "format": "email" + }, + "UnattendedUserPassword": { + "type": [ + "null", + "string" + ], + "description": "Gets or sets a value to use for creating a user with a password for Unattended Installs" + } + } + }, + "UmbracoCmsCoreConfigurationModelsRichTextEditorSettings": { + "type": "object", + "properties": { + "Commands": { + "type": "array", + "description": "HTML RichText Editor TinyMCE Commands", + "items": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsRichTextEditorCommand" + } + }, + "Plugins": { + "type": "array", + "description": "HTML RichText Editor TinyMCE Plugins", + "items": { + "type": "string" + } + }, + "CustomConfig": { + "type": "object", + "description": "HTML RichText Editor TinyMCE Custom Config", + "additionalProperties": { + "type": "string" + } + }, + "ValidElements": { + "type": "string", + "description": " ", + "default": "+a[id|style|rel|data-id|data-udi|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|reversed|start|style|type],-ul[class|style],-li[class|style],br[class],img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align|umbracoorgwidth|umbracoorgheight|onresize|onresizestart|onresizeend|rel|data-id],-sub[style|class],-sup[style|class],-blockquote[dir|style|class],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[class|align|style],-pre[class|align|style],address[class|align|style],-h1[id|dir|class|align|style],-h2[id|dir|class|align|style],-h3[id|dir|class|align|style],-h4[id|dir|class|align|style],-h5[id|dir|class|align|style],-h6[id|style|dir|class|align|style],hr[class|style],small[class|style],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],object[class|id|width|height|codebase|*],param[name|value|_value|class],embed[type|width|height|src|class|*],map[name|class],area[shape|coords|href|alt|target|class],bdo[class],button[class],iframe[*],figure,figcaption" + }, + "InvalidElements": { + "type": "string", + "description": "Invalid HTML elements for RichText Editor", + "default": "font" + } + } + }, + "UmbracoCmsCoreConfigurationModelsRichTextEditorCommand": { + "type": "object", + "required": [ + "Alias", + "Name", + "Mode" + ], + "properties": { + "Alias": { + "type": "string", + "minLength": 1 + }, + "Name": { + "type": "string", + "minLength": 1 + }, + "Mode": { + "$ref": "#/definitions/UmbracoCmsCoreModelsContentEditingRichTextEditorCommandMode" + } + } + }, + "UmbracoCmsCoreModelsContentEditingRichTextEditorCommandMode": { + "type": "string", + "description": "", + "x-enumNames": [ + "Insert", + "Selection", + "All" + ], + "enum": [ + "Insert", + "Selection", + "All" + ] + }, + "UmbracoCmsCoreConfigurationModelsRuntimeMinificationSettings": { + "type": "object", + "properties": { + "UseInMemoryCache": { + "type": "boolean", + "description": "Use in memory cache", + "default": false + }, + "CacheBuster": { + "description": "The cache buster type to use", + "default": "Version", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsRuntimeMinificationCacheBuster" + } + ] + }, + "Version": { + "type": [ + "null", + "string" + ], + "description": "The unique version string used if CacheBuster is 'Version'." + } + } + }, + "UmbracoCmsCoreConfigurationModelsRuntimeMinificationCacheBuster": { + "type": "string", + "description": "", + "x-enumNames": [ + "Version", + "AppDomain", + "Timestamp" + ], + "enum": [ + "Version", + "AppDomain", + "Timestamp" + ] + }, + "UmbracoCmsCoreConfigurationModelsBasicAuthSettings": { + "type": "object", + "description": "Typed configuration options for basic authentication settings.", + "properties": { + "Enabled": { + "type": "boolean", + "description": "Gets or sets a value indicating whether to keep the user logged in.", + "default": false + }, + "AllowedIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "SharedSecret": { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsSharedSecret" + }, + "RedirectToLoginPage": { + "type": "boolean" + } + } + }, + "UmbracoCmsCoreConfigurationModelsSharedSecret": { + "type": "object", + "properties": { + "HeaderName": { + "type": [ + "null", + "string" + ], + "default": "X-Authentication-Shared-Secret" + }, + "Value": { + "type": [ + "null", + "string" + ] + } + } + }, + "UmbracoCmsCoreConfigurationModelsPackageMigrationSettings": { + "type": "object", + "description": "Typed configuration options for package migration settings.", + "properties": { + "RunSchemaAndContentMigrations": { + "type": "boolean", + "description": "Gets or sets a value indicating whether package migration steps that install schema and content should run.", + "default": true + }, + "AllowComponentOverrideOfRunSchemaAndContentMigrations": { + "type": "boolean", + "description": "Gets or sets a value indicating whether components can override the configured value for RunSchemaAndContentMigrations.", + "default": true + } + } + }, + "UmbracoCmsCoreConfigurationModelsLegacyPasswordMigrationSettings": { + "type": "object", + "description": "Typed configuration options for legacy machine key settings used for migration of members from a v8 solution.", + "properties": { + "MachineKeyDecryptionKey": { + "type": "string", + "description": "Gets or sets the decryption hex-formatted string key found in legacy web.config machineKey configuration-element.", + "default": "" + } + } + }, + "UmbracoCmsCoreConfigurationContentDashboardSettings": { + "type": "object", + "description": "Typed configuration options for content dashboard settings.", + "properties": { + "AllowContentDashboardAccessToAllUsers": { + "type": "boolean", + "description": "Gets a value indicating whether the content dashboard should be available to all users." + }, + "ContentDashboardPath": { + "type": "string", + "description": "Gets the path to use when constructing the URL for retrieving data for the content dashboard.", + "default": "cms" + }, + "ContentDashboardUrlAllowlist": { + "type": [ + "array", + "null" + ], + "description": "Gets the allowed addresses to retrieve data for the content dashboard.", + "items": { + "type": "string" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsHelpPageSettings": { + "type": "object", + "properties": { + "HelpPageUrlAllowList": { + "type": [ + "array", + "null" + ], + "description": "Gets or sets the allowed addresses to retrieve data for the content dashboard.", + "items": { + "type": "string" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsInstallDefaultDataSettings": { + "type": "object", + "description": "Typed configuration options for installation of default data.", + "properties": { + "InstallData": { + "description": "Gets or sets a value indicating whether to create default data on installation.", + "oneOf": [ + { + "$ref": "#/definitions/UmbracoCmsCoreConfigurationModelsInstallDefaultDataOption" + } + ] + }, + "Values": { + "type": "array", + "description": "Gets or sets a value indicating which default data (languages, data types, etc.) should be created when InstallData is\nset to Values or ExceptValues.", + "items": { + "type": "string" + } + } + } + }, + "UmbracoCmsCoreConfigurationModelsInstallDefaultDataOption": { + "type": "string", + "description": "An enumeration of options available for control over installation of default Umbraco data.", + "x-enumNames": [ + "None", + "Values", + "ExceptValues", + "All" + ], + "enum": [ + "None", + "Values", + "ExceptValues", + "All" + ] + }, + "JsonSchemaFormsDefinition": { + "type": "object", + "description": "Configurations for the Umbraco Forms package to Umbraco CMS\n ", + "properties": { + "FormDesign": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationFormDesignSettings" + }, + "Options": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationPackageOptionSettings" + }, + "Security": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationSecuritySettings" + }, + "FieldTypes": { + "$ref": "#/definitions/JsonSchemaFieldTypesDefinition" + } + } + }, + "UmbracoFormsCoreConfigurationFormDesignSettings": { + "type": "object", + "properties": { + "Defaults": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationDefaultFormSettings" + }, + "DisableAutomaticAdditionOfDataConsentField": { + "type": "boolean" + }, + "DisableDefaultWorkflow": { + "type": "boolean" + }, + "MaxNumberOfColumnsInFormGroup": { + "type": "integer", + "format": "int32" + }, + "DefaultTheme": { + "type": "string" + }, + "DefaultEmailTemplate": { + "type": "string" + } + } + }, + "UmbracoFormsCoreConfigurationDefaultFormSettings": { + "type": "object", + "properties": { + "ManualApproval": { + "type": "boolean" + }, + "DisableStylesheet": { + "type": "boolean" + }, + "MarkFieldsIndicator": { + "$ref": "#/definitions/UmbracoFormsCoreEnumsFormFieldIndication" + }, + "Indicator": { + "type": "string" + }, + "RequiredErrorMessage": { + "type": "string" + }, + "InvalidErrorMessage": { + "type": "string" + }, + "ShowValidationSummary": { + "type": "boolean" + }, + "HideFieldValidationLabels": { + "type": "boolean" + }, + "MessageOnSubmit": { + "type": "string" + }, + "StoreRecordsLocally": { + "type": "boolean" + }, + "AutocompleteAttribute": { + "type": "string" + } + } + }, + "UmbracoFormsCoreEnumsFormFieldIndication": { + "type": "string", + "description": "", + "x-enumNames": [ + "NoIndicator", + "MarkMandatoryFields", + "MarkOptionalFields" + ], + "enum": [ + "NoIndicator", + "MarkMandatoryFields", + "MarkOptionalFields" + ] + }, + "UmbracoFormsCoreConfigurationPackageOptionSettings": { + "type": "object", + "properties": { + "IgnoreWorkFlowsOnEdit": { + "type": "string" + }, + "ExecuteWorkflowAsync": { + "type": "string" + }, + "AllowEditableFormSubmissions": { + "type": "boolean" + }, + "AppendQueryStringOnRedirectAfterFormSubmission": { + "type": "boolean" + } + } + }, + "UmbracoFormsCoreConfigurationSecuritySettings": { + "type": "object", + "properties": { + "DisallowedFileUploadExtensions": { + "type": "string" + }, + "EnableAntiForgeryToken": { + "type": "boolean" + }, + "SavePlainTextPasswords": { + "type": "boolean" + }, + "DisableFileUploadAccessProtection": { + "type": "boolean" + }, + "ManageSecurityWithUserGroups": { + "type": "boolean" + }, + "GrantAccessToNewFormsForUserGroups": { + "type": "string" + }, + "DefaultUserAccessToNewForms": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationFormAccess" + } + } + }, + "UmbracoFormsCoreConfigurationFormAccess": { + "type": "string", + "description": "", + "x-enumNames": [ + "Grant", + "Deny" + ], + "enum": [ + "Grant", + "Deny" + ] + }, + "JsonSchemaFieldTypesDefinition": { + "type": "object", + "description": "Configurations for the Umbraco Forms Field Types\n ", + "properties": { + "DatePicker": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationDatePickerSettings" + }, + "Recaptcha2": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationRecaptcha2Settings" + }, + "Recaptcha3": { + "$ref": "#/definitions/UmbracoFormsCoreConfigurationRecaptcha3Settings" + } + } + }, + "UmbracoFormsCoreConfigurationDatePickerSettings": { + "type": "object", + "properties": { + "DatePickerYearRange": { + "type": "integer", + "format": "int32" + } + } + }, + "UmbracoFormsCoreConfigurationRecaptcha2Settings": { + "type": "object", + "properties": { + "PublicKey": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + } + } + }, + "UmbracoFormsCoreConfigurationRecaptcha3Settings": { + "type": "object", + "properties": { + "SiteKey": { + "type": "string" + }, + "PrivateKey": { + "type": "string" + } + } + }, + "JsonSchemaDeployDefinition": { + "type": "object", + "description": "Configurations for the Umbraco Deploy package to Umbraco CMS\n ", + "properties": { + "Settings": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployConfigurationDeploySettings" + }, + "Project": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployProjectConfigurationDeployProjectConfig" + }, + "Debug": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDebugConfigurationDebugSettings" + } + } + }, + "UmbracoDeployCoreConfigurationDeployConfigurationDeploySettings": { + "type": "object", + "properties": { + "ApiKey": { + "type": "string" + }, + "ExcludedEntityTypes": { + "type": "array", + "items": { + "type": "string" + } + }, + "RelationTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployConfigurationRelationTypeSetting" + } + }, + "ValueConnectors": { + "type": "array", + "items": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployConfigurationValueConnectorSetting" + } + }, + "Edition": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationEdition" + }, + "Kabum": { + "type": "string" + }, + "SessionTimeout": { + "type": "string", + "format": "duration" + }, + "SourceDeployTimeout": { + "type": "string", + "format": "duration" + }, + "DatabaseCommandTimeout": { + "type": "string", + "format": "duration" + }, + "EnableSignatureCacheReads": { + "type": "boolean" + }, + "HttpClientTimeout": { + "type": "string", + "format": "duration" + }, + "IgnoreBrokenDependencies": { + "type": "boolean" + }, + "IgnoreBrokenDependenciesBehavior": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployConfigurationIgnoreBrokenDependenciesBehavior" + }, + "TransferFormsAsContent": { + "type": "boolean" + }, + "TransferDictionaryAsContent": { + "type": "boolean" + }, + "AllowMembersDeploymentOperations": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployConfigurationMembersDeploymentOperations" + }, + "TransferMemberGroupsAsContent": { + "type": "boolean" + }, + "AcceptInvalidCertificates": { + "type": "boolean" + }, + "ExportMemberGroups": { + "type": "boolean" + } + } + }, + "UmbracoDeployCoreConfigurationDeployConfigurationRelationTypeSetting": { + "type": "object", + "properties": { + "Alias": { + "type": "string" + }, + "Mode": { + "$ref": "#/definitions/UmbracoDeployCoreCoreRelationMode" + } + } + }, + "UmbracoDeployCoreCoreRelationMode": { + "type": "string", + "description": "", + "x-enumNames": [ + "Exclude", + "Weak", + "Strong" + ], + "enum": [ + "Exclude", + "Weak", + "Strong" + ] + }, + "UmbracoDeployCoreConfigurationDeployConfigurationValueConnectorSetting": { + "type": "object", + "properties": { + "Alias": { + "type": "string" + }, + "TypeName": { + "type": "string" + } + } + }, + "UmbracoDeployCoreConfigurationEdition": { + "type": "string", + "description": "", + "x-enumNames": [ + "Default", + "BackOfficeOnly" + ], + "enum": [ + "Default", + "BackOfficeOnly" + ] + }, + "UmbracoDeployCoreConfigurationDeployConfigurationIgnoreBrokenDependenciesBehavior": { + "type": "string", + "description": "", + "x-enumFlags": true, + "x-enumNames": [ + "None", + "Restore", + "Transfer", + "All" + ], + "enum": [ + "None", + "Restore", + "Transfer", + "All" + ] + }, + "UmbracoDeployCoreConfigurationDeployConfigurationMembersDeploymentOperations": { + "type": "string", + "description": "", + "x-enumFlags": true, + "x-enumNames": [ + "None", + "Restore", + "Transfer", + "All" + ], + "enum": [ + "None", + "Restore", + "Transfer", + "All" + ] + }, + "UmbracoDeployCoreConfigurationDeployProjectConfigurationDeployProjectConfig": { + "type": "object", + "properties": { + "Workspaces": { + "type": "array", + "items": { + "$ref": "#/definitions/UmbracoDeployCoreConfigurationDeployProjectConfigurationWorkspace" + } + } + } + }, + "UmbracoDeployCoreConfigurationDeployProjectConfigurationWorkspace": { + "type": "object", + "properties": { + "Id": { + "type": "string", + "format": "guid" + }, + "Name": { + "type": "string" + }, + "Type": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + }, + "UmbracoDeployCoreConfigurationDebugConfigurationDebugSettings": { + "type": "object", + "properties": { + "IsDebug": { + "type": "boolean" + }, + "IsSqlAzure": { + "type": "boolean" + }, + "EnvironmentId": { + "type": "string" + }, + "EnvironmentName": { + "type": "string" + }, + "IsRunningCloud": { + "type": "boolean" + }, + "IsRunningHosted": { + "type": "boolean" + }, + "PortalUrl": { + "type": "string" + } + } + } + }, + "patternProperties": { + "^WebOptimizer$": { + "$ref": "#/definitions/webOptimizer" + }, + "^webOptimizer$": { + "$ref": "#/definitions/webOptimizer" + }, + "^weboptimizer$": { + "$ref": "#/definitions/webOptimizer" + }, + "^(cdn|Cdn)$": { + "$ref": "#/definitions/cdn" + }, + "^(pwa|PWA|Pwa)$": { + "$ref": "#/definitions/pwa" + }, + "^(ElmahIo|Elmahio|elmahIo|elmahio)$": { + "$ref": "#/definitions/ElmahIo" + }, + "^(nlog|Nlog|NLog)$": { + "$ref": "#/definitions/NLog" + }, + "^(Umbraco|umbraco)$": { + "$ref": "#/definitions/umbraco" + } + }, + "properties": { + "Kestrel": { + "$ref": "#/definitions/kestrel" + }, + "Logging": { + "$ref": "#/definitions/logging" + }, + "AllowedHosts": { + "$ref": "#/definitions/allowedHosts" + }, + "ConnectionStrings": { + "$ref": "#/definitions/connectionStrings" + }, + "Umbraco": { + "description": "Gets or sets the Umbraco\n ", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/definitions/JsonSchemaUmbracoDefinition" + } + ] + } + }, + "title": "JsonSchemaAppSettings", + "type": "object" +} \ No newline at end of file diff --git a/src/Articulate.Tests.Website/appsettings.Development.json b/src/Articulate.Tests.Website/appsettings.Development.json index fee0ce24..5fd45491 100644 --- a/src/Articulate.Tests.Website/appsettings.Development.json +++ b/src/Articulate.Tests.Website/appsettings.Development.json @@ -1,5 +1,5 @@ { - "$schema" : "./umbraco/config/appsettings-schema.json", + "$schema": "./appsettings-schema.json", "Serilog": { "MinimumLevel": { "Default": "Information" diff --git a/src/Articulate.Tests.Website/appsettings.json b/src/Articulate.Tests.Website/appsettings.json index 5d7aa4ae..7dde9790 100644 --- a/src/Articulate.Tests.Website/appsettings.json +++ b/src/Articulate.Tests.Website/appsettings.json @@ -1,5 +1,5 @@ { - "$schema": "./umbraco/config/appsettings-schema.json", + "$schema": "./appsettings-schema.json", "Serilog": { "MinimumLevel": { "Default": "Information", diff --git a/src/Articulate/Articulate.csproj b/src/Articulate/Articulate.csproj index d5fc7502..82f16756 100644 --- a/src/Articulate/Articulate.csproj +++ b/src/Articulate/Articulate.csproj @@ -1,7 +1,7 @@ - net5.0 + net6.0 Library ..\ true @@ -55,8 +55,8 @@ - - + + diff --git a/src/Articulate/DateFormattedUrlProvider.cs b/src/Articulate/DateFormattedUrlProvider.cs index 3ab1396d..20a7980d 100644 --- a/src/Articulate/DateFormattedUrlProvider.cs +++ b/src/Articulate/DateFormattedUrlProvider.cs @@ -4,6 +4,7 @@ using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Routing; +using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Web; using Umbraco.Extensions; @@ -12,12 +13,13 @@ namespace Articulate public class DateFormattedUrlProvider : DefaultUrlProvider { public DateFormattedUrlProvider( - IOptions requestSettings, + IOptionsMonitor requestSettings, ILogger logger, ISiteDomainMapper siteDomainMapper, IUmbracoContextAccessor umbracoContextAccessor, - UriUtility uriUtility) - : base(requestSettings, logger, siteDomainMapper, umbracoContextAccessor, uriUtility) + UriUtility uriUtility, + ILocalizationService localizationService) + : base(requestSettings, logger, siteDomainMapper, umbracoContextAccessor, uriUtility, localizationService) { } diff --git a/src/Articulate/Routing/DateFormattedPostContentFinder.cs b/src/Articulate/Routing/DateFormattedPostContentFinder.cs index 0aaa27cb..91025984 100644 --- a/src/Articulate/Routing/DateFormattedPostContentFinder.cs +++ b/src/Articulate/Routing/DateFormattedPostContentFinder.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Web; @@ -13,7 +14,7 @@ public DateFormattedPostContentFinder(ILogger logger, IUmbra { } - public override bool TryFindContent(IPublishedRequestBuilder contentRequest) + public override async Task TryFindContent(IPublishedRequestBuilder contentRequest) { // This simple logic should do the trick: basically if I find an url with more than 4 segments (the 3 date parts and the slug) // I leave the last segment (the slug), remove the 3 date parts, and keep all the rest. diff --git a/src/Articulate/Services/ArticulateTagRepository.cs b/src/Articulate/Services/ArticulateTagRepository.cs index b88fe7e1..6e930c86 100644 --- a/src/Articulate/Services/ArticulateTagRepository.cs +++ b/src/Articulate/Services/ArticulateTagRepository.cs @@ -11,6 +11,7 @@ using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement; +using Umbraco.Cms.Infrastructure.Scoping; using Umbraco.Cms.Web.Common; using Umbraco.Extensions; diff --git a/src/Articulate/Services/ArticulateTagService.cs b/src/Articulate/Services/ArticulateTagService.cs index 911d4fab..f059334c 100644 --- a/src/Articulate/Services/ArticulateTagService.cs +++ b/src/Articulate/Services/ArticulateTagService.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.PublishedCache; using Umbraco.Cms.Core.Scoping; -using Umbraco.Cms.Core.Services.Implement; +using Umbraco.Cms.Core.Services; using Umbraco.Cms.Web.Common; namespace Articulate.Services @@ -30,7 +30,7 @@ public IEnumerable GetContentByTags( string tagGroup, string baseUrlName) { - using (ScopeProvider.CreateScope(autoComplete: true)) + using (ScopeProvider.CreateCoreScope(autoComplete: true)) { return _repository.GetContentByTags( helper, @@ -50,7 +50,7 @@ public PostsByTagModel GetContentByTag( long page, long pageSize) { - using (ScopeProvider.CreateScope(autoComplete: true)) + using (ScopeProvider.CreateCoreScope(autoComplete: true)) { return _repository.GetContentByTag( helper,