diff --git a/10/umbraco-forms/installation/the-licensing-model.md b/10/umbraco-forms/installation/the-licensing-model.md index 53977090fc1..748b9876d85 100644 --- a/10/umbraco-forms/installation/the-licensing-model.md +++ b/10/umbraco-forms/installation/the-licensing-model.md @@ -7,7 +7,7 @@ Umbraco Forms is a commercial product. You have a 14-day free trial to try out t Licenses are sold per domain and will also work on all subdomains. With every license, you will be able to configure two development/testing domains. {% hint style="info" %} -The licenses are not bound to a specific product version. They will work for all versions of the related product. +The licenses are not bound to a specific product version. They will work for all versions of the related product, but version 17+ will only be available through a subscription based license (see [announcement](https://github.com/umbraco/Announcements/issues/25)). {% endhint %} ### Example diff --git a/13/umbraco-forms/developer/configuration/README.md b/13/umbraco-forms/developer/configuration/README.md index f7fdfa5dfa1..f4417e7cd54 100644 --- a/13/umbraco-forms/developer/configuration/README.md +++ b/13/umbraco-forms/developer/configuration/README.md @@ -73,7 +73,8 @@ For illustration purposes, the following structure represents the full set of op "PrevalueSourceTypes": {}, "WorkflowTypes": {}, }, - "MandatoryFieldsetLegends": false + "MandatoryFieldsetLegends": false, + "UseViewEngineFormThemeResolver": false }, "Options": { "IgnoreWorkFlowsOnEdit": "True", @@ -241,6 +242,10 @@ When creating a form with Umbraco Forms, adding captions to the groups for field If you want to ensure form creators always have to provide a caption, you can set the value of this setting to `true`. +### UseViewEngineFormThemeResolver + +Switches the `IFormThemeResolver` to use the View Engine (`ICompositeViewEngine`) to resolve theme views. This is done instead of relying on physical files to exist and doing I/O lookups via the `PartialViews` file system abstraction. To take advantage of this new resolver (available since 13.6), you can set the value of this setting to `true`. + ### Form default settings configuration The following configured values are applied to all forms as they are created. They can then be amended on a per-form basis via the Umbraco backoffice. diff --git a/13/umbraco-forms/installation/the-licensing-model.md b/13/umbraco-forms/installation/the-licensing-model.md index 5284bc59a67..37ec26cc1ba 100644 --- a/13/umbraco-forms/installation/the-licensing-model.md +++ b/13/umbraco-forms/installation/the-licensing-model.md @@ -1,13 +1,15 @@ # Licensing -Umbraco Forms is a commercial product. You have a 14-day free trial to try out the product. After your trial expires, you'll need to have a **valid license** to keep using the product on your site. +Umbraco Forms is a commercial product. You can run Umbraco Forms unrestricted locally without the need for a license. Running Umbraco Forms in the public domain will require a valid license. + +Version 13 supports both the one-off purchase and (in 13.6+) subscription license. ## How does it work? Licenses are sold per domain and will also work on all subdomains. With every license, you will be able to configure two development/testing domains. {% hint style="info" %} -The licenses are not bound to a specific product version. They will work for all versions of the related product. +The licenses are not bound to a specific product version. They will work for all versions of the related product, but version 17+ will only be available through a subscription-based license (see [announcement](https://github.com/umbraco/Announcements/issues/25)). {% endhint %} Let's say that you have a license configured for your domain, `mysite.com`, and you've configured two development domains, `devdomain.com` and `devdomain2.com`. @@ -49,50 +51,38 @@ This is an add-on domain for existing licenses. Refunds will not be given for th You can look at the pricing, features, and purchase the license on the [Umbraco Forms](https://umbraco.com/products/add-ons/forms/) page. -When you've bought a license you need to configure it with your domains. You can either configure your license right away or you can do it later by visiting your account on Umbraco.com. - -1. Login to your account at [shop.umbraco.com](https://shop.umbraco.com). -2. Navigate to the **Manage Licenses** section. -3. Locate your unconfigured Forms license and choose **Configure / Add domain**. -4. Define the primary as well as up to two development domains for which the license will be used. - ### Add additional domains -Once you have a configured Umbraco Forms license, you can add additional domains. This is relevant if you need your forms to be available on multiple public domains. - -1. Login to your account at [shop.umbraco.com](https://shop.umbraco.com). -2. Navigate to the **Manage Licenses** section. -3. Locate your configured Forms license. -4. Choose **Configure / Add domain**. - -
- -5. Select **Click here to buy** at the bottom of the configuration page. -6. Configure the additional domain after completing the purchase, or do it later via your account. +If you require to add addition domains to the license, [reach out the sales team](https://umbraco.com/products/add-ons/forms/) with your request and they will manage this process. ### Reconfiguration of domains Once a license has been configured with the domains, it is not possible to reconfigure them. An exception is when there is a mistake in the domain URL. + As reconfiguration is not possible, you will either need to purchase an additional domain or a [new license](https://umbraco.com/products/umbraco-forms/). ## Installing your license +You can configure either the one-off purchase license file or when using version 13.6+ the subscription license product key. We do not recommend having both a license file and product key configured, but if you have, the product key is checked first. + +### Installing one-off purchase license file + Once you've configured your license with the correct domains, you are ready to install the license on your Umbraco installation. -1. Download your license from your Umbraco.com account - this will give you a `.lic` file +1. Obtain the license (a `.lic` file) from the sales team 2. Place the file in the `/umbraco/Licenses` directory in your Umbraco installation The `.lic` file must be placed in the `/umbraco/Licenses` directory to be registered by Umbraco Forms. If the file isn't placed correctly, the application will automatically switch to trial mode. -### Multiple license files +#### Multiple license files You can install multiple Umbraco Forms license files without merging them. Place each license file in the `/umbraco/Licenses` directory (or an alternative location). Each file should begin with `umbracoForms`, for example, `umbracoForms.example1.lic` and `umbracoForms.example2.lic`. This setup allows your installation to recognize multiple licensed domains. -### Alternative license location +#### Alternative license location If you can't include the license file in the `/umbraco/Licenses` directory for any reason, it is possible to configure an alternative location for the file. -It can be configured in the Umbraco installation's `appSettings.json` file by adding the following configuration: +It can be configured in the Umbraco installation's `appsettings.json` file by adding the following configuration: ```json { @@ -110,7 +100,7 @@ The value contains the path of your custom license directory relative to the roo This will also change the location for other Umbraco-related licenses in this project. {% endhint %} -## Federal Information Processing Standards (FIPS) Compliant Environments +#### Federal Information Processing Standards (FIPS) Compliant Environments The algorithm used to decrypt Forms licenses is not supported on locked down FIPS compliant environments, such as those used in the defense industry. @@ -129,4 +119,122 @@ Apply the following configuration with the appropriate algorithm - `DES` (the de "Licensing": { "LicenseEncodeAndDecodeAlgorithm": "DES|TripleDES|AES" }, -`````` \ No newline at end of file +``` + +### Installing subscription license product key + +Once you have received your license code it needs to be installed on your site. + +1. Open the root directory for your project files. +2. Locate and open the `appsettings.json` file. +3. Add your Umbraco Forms license key to `Umbraco:Licenses:Umbraco.Forms`: + +```json +"Umbraco": { + "Licenses": { + "Umbraco.Forms": "YOUR_LICENSE_KEY" + } +} +``` + +{% hint style="info" %} +You might run into issues when using a period in the product name when using environment variables. Use an underscore in the product name instead, to avoid problems. + +```json +"Umbraco_Forms": "YOUR_LICENSE_KEY" +``` +{% endhint %} + +#### Verify the license installation + +You can verify that your license is successfully installed by logging into your project's backoffice and navigating to the settings section. Here you will see a license dashboard which should display the status of your license. + +### When and how to configure an `UmbracoApplicationUrl` + +If you are running on a single domain for both your frontend and backend environments, it's not necessary to configure a `UmbracoApplicationUrl`. + +If you have different domains for your frontend and backend, it's advised to configure an `UmbracoApplicationUrl` set to your backoffice URL. This helps the licensing engine know which domain should be used for validation checks. Without this configuration setting, the licensing engine will use the domain from the HTTP request object. This can lead to errors when switching between domains. + +An `UmbracoApplicationUrl` can be configured in your `appSettings.json` file like so: + +```json +{ + "Umbraco": { + "CMS": { + "WebRouting": { + "UmbracoApplicationUrl": "https://admin.my-custom-domain.com/" + } + } + } +} +``` + +See the [Fixed Application URL](https://docs.umbraco.com/umbraco-cms/extending/health-check/guides/fixedapplicationurl) documentation for more details about this setting. + +#### Configuring `UmbracoApplicationUrl` on Umbraco Cloud + +If you are hosting on Umbraco Cloud, you can find that the configuration described above won't be reflected in your environment. The reason for this is that Umbraco Cloud sets this value as an environment variable set to the Cloud project domain (`.umbraco.io`). This overrides what is set via the `appsettings.json` file. + +There are two options in this case: + +- Either the domains for each of your Cloud environments can be added to your license. +- Or, you can apply the configuration via code for more control and to ensure this value is set correctly for other reasons. + +For example, in your `Program.cs`: + +```csharp +services.Configure(o => o.UmbracoApplicationUrl = ""); +``` + +In practice, make this more sophisticated. You can read the value from another configuration key, removing the need to hard-code it and have it set as appropriate in different environments. You can also move this code into a composer or an extension method if you prefer. + +#### Validating a license without an outgoing Internet connection + +Some Umbraco installations will have a highly locked-down production environment, with firewall rules that prevent outgoing HTTP requests. This will interfere with the normal process of license validation. + +On start-up, and periodically whilst Umbraco is running, the license component will make an HTTP POST request to `https://license-validation.umbraco.com/api/ValidateLicense`. + +The firewall rules should be adjusted to allow this request. + +If such a change is not feasible, there is another approach, which is outlined below. + +You will need to have a server, or serverless function, that is running and can request the online license validation service. That needs to run on a daily schedule, making a request and relaying it to the restricted Umbraco environment. + +To set this up, follow these steps: + +1. Ensure you have a reference to `Umbraco.Licenses` version 13.1 or higher. If the version of Forms you are using depends on an earlier version, add a direct package reference for `Umbraco.Licenses`. +2. Configure a random string as an authorization key in the configuration. This is used as protection to ensure only valid requests are handled. + +Alternatively, you can also disable the normal regular license checks, as there is no point in these running if they will be blocked: + +```json + "Umbraco": { + "Licenses": { + "Umbraco.Forms": "" + }, + "LicensesOptions": { + "EnableScheduledValidation": false, + "ValidatedLicenseRelayAuthKey": "" + } +``` + +Your Internet-enabled server requests the following form from the online license validation service: + +``` +POST https://license-validation.umbraco.com/api/ValidateLicense +{ + "ProductId": "Umbraco.Forms", + "LicenseKey": "", + "Domain": "" +} +``` + +The response is relayed exactly via an HTTP request to your restricted Umbraco environment: + +``` +POST http:///umbraco/licenses/validatedLicense/relay?productId=&licenseKey= +``` + +A header with a key of `X-AUTH-KEY` and the value of the authorization key you have configured is provided. + +This triggers the same processes that occur when the normal scheduled validation completes, ensuring your product is licensed. diff --git a/13/umbraco-forms/release-notes.md b/13/umbraco-forms/release-notes.md index f084ef3d95c..c04145741b1 100644 --- a/13/umbraco-forms/release-notes.md +++ b/13/umbraco-forms/release-notes.md @@ -16,6 +16,39 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 13 including all changes for this version. +### [13.6.0](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.6.0) (August 28th 2025) + +#### Add support for subscription licensing using product key + +In addition to the existing one-off license using the `umbracoForms.lic` file, support for configuring a subscription license using a product key is added. As [announced](https://github.com/umbraco/Announcements/issues/25), Forms 17 will only be available through a subscription-based license. You can already purchase a new subscription (avoiding the one-off purchase) or convert your recently purchased one-off license into a subscription. + +The 14-day trial license is no longer generated on install. You can still fully test Forms on `localhost`. The option to configure the license from the backoffice is removed. This is due to the direct integration with the legacy license infrastructure and to align the license management to the Licenses dashboard. + +Read more about [the licensing model](./installation/the-licensing-model.md). + +#### Only show reCAPTCHA v2 or v3 fields when settings are configured + +Forms provides reCAPTCHA v2 and v3 fields out of the box, but both were always shown to editors in the backoffice. These fields are now only shown when their respective settings are configured. This avoids editors adding a reCAPTCHA field that doesn't work due to missing configuration and/or mixing up the v2 and v3 versions. + +If the settings aren't configured in `appsettings.json` or environment variables (and thus available through `IConfiguration`), the required field needs to be manually added. This can be the case when manually configuring the `Recaptcha2Settings` or `Recaptcha3Settings` object in code: + +```csharp +builder.Services.Configure(options => +{ + options.SiteKey = "..."; + options.PrivateKey = "..."; +}); + +// Ensure the field is added and available +builder.FormsFields().Add(); +``` + +#### Allow using ViewEngine to resolve theme views + +The default theme views are resolved using the [Partial Views file system](../umbraco-cms/extending/filesystemproviders/README.md#other-ifilesystems) (an abstraction over the `/Views/Partials` directory). This requires I/O lookups to determine whether specific theme views exist and manually specifying all files when using a [Razor Class Library](./developer/themes.md#shipping-themes-in-a-razor-class-library). + +By enabling the [`UseViewEngineFormThemeResolver` setting](./developer/configuration/README.md#useviewengineformthemeresolver), theme vies are resolved using the `ICompositeViewEngine`, which will include compiled views (including those shipped in RCLs). + ### [13.5.0](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F13.5.0) (June 12th 2025) * All items detailed under 13.5.0-rc diff --git a/14/umbraco-forms/installation/the-licensing-model.md b/14/umbraco-forms/installation/the-licensing-model.md index 5284bc59a67..a96377b2963 100644 --- a/14/umbraco-forms/installation/the-licensing-model.md +++ b/14/umbraco-forms/installation/the-licensing-model.md @@ -7,7 +7,7 @@ Umbraco Forms is a commercial product. You have a 14-day free trial to try out t Licenses are sold per domain and will also work on all subdomains. With every license, you will be able to configure two development/testing domains. {% hint style="info" %} -The licenses are not bound to a specific product version. They will work for all versions of the related product. +The licenses are not bound to a specific product version. They will work for all versions of the related product, but version 17+ will only be available through a subscription based license (see [announcement](https://github.com/umbraco/Announcements/issues/25)). {% endhint %} Let's say that you have a license configured for your domain, `mysite.com`, and you've configured two development domains, `devdomain.com` and `devdomain2.com`. diff --git a/15/umbraco-forms/installation/the-licensing-model.md b/15/umbraco-forms/installation/the-licensing-model.md index dfbef439635..295dab3d7b8 100644 --- a/15/umbraco-forms/installation/the-licensing-model.md +++ b/15/umbraco-forms/installation/the-licensing-model.md @@ -7,7 +7,7 @@ Umbraco Forms is a commercial product. You have a 14-day free trial to try out t Licenses are sold per domain and will also work on all subdomains. With every license, you will be able to configure two development/testing domains. {% hint style="info" %} -The licenses are not bound to a specific product version. They will work for all versions of the related product. +The licenses are not bound to a specific product version. They will work for all versions of the related product, but version 17+ will only be available through a subscription based license (see [announcement](https://github.com/umbraco/Announcements/issues/25)). {% endhint %} Let's say that you have a license configured for your domain, `mysite.com`, and you've configured two development domains, `devdomain.com` and `devdomain2.com`. diff --git a/16/umbraco-forms/developer/configuration/README.md b/16/umbraco-forms/developer/configuration/README.md index a693ca25a11..e18e064beed 100644 --- a/16/umbraco-forms/developer/configuration/README.md +++ b/16/umbraco-forms/developer/configuration/README.md @@ -10,7 +10,7 @@ With Umbraco Forms it's possible to customize the functionality with various con ## Editing configuration values -All configuration for Umbraco Forms is held in the `appSettings.json` file found at the root of your Umbraco website. If the configuration has been customized to use another source, then the same keys and values discussed in this article can be applied there. +All configuration for Umbraco Forms is held in the `appsettings.json` file found at the root of your Umbraco website. If the configuration has been customized to use another source, then the same keys and values discussed in this article can be applied there. The convention for Umbraco configuration is to have package based options stored as a child structure below the `Umbraco` element, and as a sibling of `CMS`. Forms configuration follows this pattern, i.e.: @@ -72,7 +72,8 @@ For illustration purposes, the following structure represents the full set of op "PrevalueSourceTypes": {}, "WorkflowTypes": {}, }, - "MandatoryFieldsetLegends": false + "MandatoryFieldsetLegends": false, + "UseViewEngineFormThemeResolver": false }, "Options": { "IgnoreWorkFlowsOnEdit": "True", @@ -236,6 +237,10 @@ When creating a form with Umbraco Forms, adding captions to the groups for field If you want to ensure form creators always have to provide a caption, you can set the value of this setting to `true`. +### UseViewEngineFormThemeResolver + +Switches the `IFormThemeResolver` to use the View Engine (`ICompositeViewEngine`) to resolve theme views. This is done instead of relying on physical files to exist and doing I/O lookups via the `PartialViews` file system abstraction. To take advantage of this new resolver (available since 16.1), you can set the value of this setting to `true`. + ### Form default settings configuration The following configured values are applied to all forms as they are created. They can then be amended on a per-form basis via the Umbraco backoffice. @@ -428,7 +433,7 @@ Forms will by default track relations between forms and the content pages they a If you would like to disable this feature, you can set the value of this setting to `true`. -## TrackRenderedFormsStorageMethod +### TrackRenderedFormsStorageMethod Forms tracks the forms rendered on a page in order that the associated scripts can be placed in a different location within the HTML. Usually this is used to [render the scripts](../rendering-scripts.md) at the bottom of the page. @@ -436,13 +441,13 @@ By default, `HttpContext.Items` is used as the storage mechanism for this tracki You can optionally revert to the legacy behavior of using `TempData` by changing this setting from the default of `HttpContextItems` to `TempData`. -## EnableMultiPageFormSettings +### EnableMultiPageFormSettings This setting determines whether [multi-page form settings](../../editor/creating-a-form/form-settings.md#multi-page-forms) are available to editors. By default the value is `true`. To disable the feature, set the value to `false`. -## EnableAdvancedValidationRules +### EnableAdvancedValidationRules This setting determines whether [advanced form validation rules](../../editor/creating-a-form/form-advanced.md) are available to editors. @@ -450,7 +455,6 @@ By default, the value is `false`. This is partly because the feature is only co To make the feature available to editors and include the dependency when using `@Html.RenderUmbracoFormDependencies(Url)`, set the value to `true`. - ## Security configuration ### DisallowedFileUploadExtensions diff --git a/16/umbraco-forms/installation/the-licensing-model.md b/16/umbraco-forms/installation/the-licensing-model.md index cd6cbee17a8..b159ebf046d 100644 --- a/16/umbraco-forms/installation/the-licensing-model.md +++ b/16/umbraco-forms/installation/the-licensing-model.md @@ -1,13 +1,15 @@ # Licensing -Umbraco Forms is a commercial product. You have a 14-day free trial to try out the product. After your trial expires, you'll need to have a **valid license** to keep using the product on your site. +Umbraco Forms is a commercial product. You can run Umbraco Forms unrestricted locally without the need for a license. Running Umbraco Forms in the public domain will require a valid license. + +Version 16 supports both the one-off purchase and (in 16.1+) subscription license. ## How does it work? Licenses are sold per domain and will also work on all subdomains. With every license, you will be able to configure two development/testing domains. {% hint style="info" %} -The licenses are not bound to a specific product version. They will work for all versions of the related product. +The licenses are not bound to a specific product version. They will work for all versions of the related product, but version 17+ will only be available through a subscription-based license (see [announcement](https://github.com/umbraco/Announcements/issues/25)). {% endhint %} Let's say that you have a license configured for your domain, `mysite.com`, and you've configured two development domains, `devdomain.com` and `devdomain2.com`. @@ -49,50 +51,38 @@ This is an add-on domain for existing licenses. Refunds will not be given for th You can look at the pricing, features, and purchase the license on the [Umbraco Forms](https://umbraco.com/products/add-ons/forms/) page. -When you've bought a license you need to configure it with your domains. You can either configure your license right away or you can do it later by visiting your account on Umbraco.com. - -1. Login to your account at [shop.umbraco.com](https://shop.umbraco.com). -2. Navigate to the **Manage Licenses** section. -3. Locate your unconfigured Forms license and choose **Configure / Add domain**. -4. Define the primary as well as up to two development domains for which the license will be used. - ### Add additional domains -Once you have a configured Umbraco Forms license, you can add additional domains. This is relevant if you need your forms to be available on multiple public domains. - -1. Login to your account at [shop.umbraco.com](https://shop.umbraco.com). -2. Navigate to the **Manage Licenses** section. -3. Locate your configured Forms license. -4. Choose **Configure / Add domain**. - -
- -5. Select **Click here to buy** at the bottom of the configuration page. -6. Configure the additional domain after completing the purchase, or do it later via your account. +If you require to add addition domains to the license, [reach out the sales team](https://umbraco.com/products/add-ons/forms/) with your request and they will manage this process. ### Reconfiguration of domains Once a license has been configured with the domains, it is not possible to reconfigure them. An exception is when there is a mistake in the domain URL. + As reconfiguration is not possible, you will either need to purchase an additional domain or a [new license](https://umbraco.com/products/umbraco-forms/). ## Installing your license +You can configure either the one-off purchase license file or when using version 16.1+ the subscription license product key. We do not recommend having both a license file and product key configured, but if you have, the product key is checked first. + +### Installing one-off purchase license file + Once you've configured your license with the correct domains, you are ready to install the license on your Umbraco installation. -1. Download your license from your Umbraco.com account - this will give you a `.lic` file +1. Obtain the license (a `.lic` file) from the sales team 2. Place the file in the `/umbraco/Licenses` directory in your Umbraco installation -The `.lic` file must be placed in the `/umbraco/Licenses` directory to be registered by Umbraco Forms. If the file isn't placed correctly, the application will automatically switch to trial mode. It is also recommended to restart your site after you have added the license file. +The `.lic` file must be placed in the `/umbraco/Licenses` directory to be registered by Umbraco Forms. If the file isn't placed correctly, the application will automatically switch to trial mode. -### Multiple license files +#### Multiple license files You can install multiple Umbraco Forms license files without merging them. Place each license file in the `/umbraco/Licenses` directory (or an alternative location). Each file should begin with `umbracoForms`, for example, `umbracoForms.example1.lic` and `umbracoForms.example2.lic`. This setup allows your installation to recognize multiple licensed domains. -### Alternative license location +#### Alternative license location If you can't include the license file in the `/umbraco/Licenses` directory for any reason, it is possible to configure an alternative location for the file. -It can be configured in the Umbraco installation's `appSettings.json` file by adding the following configuration: +It can be configured in the Umbraco installation's `appsettings.json` file by adding the following configuration: ```json { @@ -110,7 +100,7 @@ The value contains the path of your custom license directory relative to the roo This will also change the location for other Umbraco-related licenses in this project. {% endhint %} -## Federal Information Processing Standards (FIPS) Compliant Environments +#### Federal Information Processing Standards (FIPS) Compliant Environments The algorithm used to decrypt Forms licenses is not supported on locked down FIPS compliant environments, such as those used in the defense industry. @@ -118,10 +108,6 @@ If you are in this situation and unable to resolve it via configuration of the e We have the possibility of generating and providing Forms licenses using alternate algorithms. -{% hint style="info" %} -You can use this configuration if you reference `Umbraco.Licensing` version `13.0.1` or higher. -{% endhint %} - Apply the following configuration with the appropriate algorithm - `DES` (the default), `TripleDES`, or `AES`: ```json @@ -129,4 +115,119 @@ Apply the following configuration with the appropriate algorithm - `DES` (the de "Licensing": { "LicenseEncodeAndDecodeAlgorithm": "DES|TripleDES|AES" }, -`````` \ No newline at end of file +``` + +### Installing subscription license product key + +Once you have received your license code it needs to be installed on your site. + +1. Open the root directory for your project files. +2. Locate and open the `appsettings.json` file. +3. Add your Umbraco Forms license key to `Umbraco:Licenses:Umbraco.Forms`: + +```json +"Umbraco": { + "Licenses": { + "Umbraco.Forms": "YOUR_LICENSE_KEY" + } +} +``` + +{% hint style="info" %} +You might run into issues when using a period in the product name when using environment variables. Use an underscore in the product name instead, to avoid problems. + +```json +"Umbraco_Forms": "YOUR_LICENSE_KEY" +``` +{% endhint %} + +#### Verify the license installation + +You can verify that your license is successfully installed by logging into your project's backoffice and navigating to the settings section. Here you will see a license dashboard which should display the status of your license. + +### When and how to configure an `UmbracoApplicationUrl` + +If you are running on a single domain for both your frontend and backend environments, it's not necessary to configure a `UmbracoApplicationUrl`. + +If you have different domains for your frontend and backend, it's advised to configure an `UmbracoApplicationUrl` set to your backoffice URL. This helps the licensing engine know which domain should be used for validation checks. Without this configuration setting, the licensing engine will use the domain from the HTTP request object. This can lead to errors when switching between domains. + +An `UmbracoApplicationUrl` can be configured in your `appSettings.json` file like so: + +```json +{ + "Umbraco": { + "CMS": { + "WebRouting": { + "UmbracoApplicationUrl": "https://admin.my-custom-domain.com/" + } + } + } +} +``` + +See the [Fixed Application URL](https://docs.umbraco.com/umbraco-cms/extending/health-check/guides/fixedapplicationurl) documentation for more details about this setting. + +#### Configuring `UmbracoApplicationUrl` on Umbraco Cloud + +If you are hosting on Umbraco Cloud, you can find that the configuration described above won't be reflected in your environment. The reason for this is that Umbraco Cloud sets this value as an environment variable set to the Cloud project domain (`.umbraco.io`). This overrides what is set via the `appsettings.json` file. + +There are two options in this case: + +- Either the domains for each of your Cloud environments can be added to your license. +- Or, you can apply the configuration via code for more control and to ensure this value is set correctly for other reasons. + +For example, in your `Program.cs`: + +```csharp +services.Configure(o => o.UmbracoApplicationUrl = ""); +``` + +In practice, make this more sophisticated. You can read the value from another configuration key, removing the need to hard-code it and have it set as appropriate in different environments. You can also move this code into a composer or an extension method if you prefer. + +#### Validating a license without an outgoing Internet connection + +Some Umbraco installations will have a highly locked-down production environment, with firewall rules that prevent outgoing HTTP requests. This will interfere with the normal process of license validation. + +On start-up, and periodically whilst Umbraco is running, the license component will make an HTTP POST request to `https://license-validation.umbraco.com/api/ValidateLicense`. + +The firewall rules should be adjusted to allow this request. + +If such a change is not feasible, there is another approach, which is outlined below. + +You will need to have a server, or serverless function, that is running and can request the online license validation service. That needs to run on a daily schedule, making a request and relaying it to the restricted Umbraco environment. + +Then configure a random string as an authorization key in the configuration. This is used as protection to ensure only valid requests are handled. + +Alternatively, you can also disable the normal regular license checks, as there is no point in these running if they will be blocked: + +```json + "Umbraco": { + "Licenses": { + "Umbraco.Forms": "" + }, + "LicensesOptions": { + "EnableScheduledValidation": false, + "ValidatedLicenseRelayAuthKey": "" + } +``` + +Your Internet-enabled server requests the following form from the online license validation service: + +``` +POST https://license-validation.umbraco.com/api/ValidateLicense +{ + "ProductId": "Umbraco.Forms", + "LicenseKey": "", + "Domain": "" +} +``` + +The response is relayed exactly via an HTTP request to your restricted Umbraco environment: + +``` +POST http:///umbraco/licenses/validatedLicense/relay?productId=&licenseKey= +``` + +A header with a key of `X-AUTH-KEY` and the value of the authorization key you have configured is provided. + +This triggers the same processes that occur when the normal scheduled validation completes, ensuring your product is licensed. diff --git a/16/umbraco-forms/release-notes.md b/16/umbraco-forms/release-notes.md index 3f1fa431a4c..4e268bd54a3 100644 --- a/16/umbraco-forms/release-notes.md +++ b/16/umbraco-forms/release-notes.md @@ -16,6 +16,39 @@ If you are upgrading to a new major version, you can find information about the This section contains the release notes for Umbraco Forms 16 including all changes for this version. +### [16.1.0](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F16.1.0) (August 28th 2025) + +#### Add support for subscription licensing using product key + +In addition to the existing one-off license using the `umbracoForms.lic` file, support for configuring a subscription license using a product key is added. As [announced](https://github.com/umbraco/Announcements/issues/25), Forms 17 will only be available through a subscription-based license. You can already purchase a new subscription (avoiding the one-off purchase) or convert your recently purchased one-off license into a subscription. + +The 14-day trial license is no longer generated on install. You can still fully test Forms on `localhost`. The option to configure the license from the backoffice is removed. This is due to the direct integration with the legacy license infrastructure and to align the license management to the Licenses dashboard. + +Read more about [the licensing model](./installation/the-licensing-model.md). + +#### Only show reCAPTCHA v2 or v3 fields when settings are configured + +Forms provides reCAPTCHA v2 and v3 fields out-of-the-box, but both were always shown to editors in the backoffice. These fields are now only shown when their respective settings are configured. This avoids editors adding a reCAPTCHA field that doesn't work due to missing configuration and/or mixing up the v2 and v3 versions. + +If the settings aren't configured in `appsettings.json` or environment variables (and thus available through `IConfiguration`), the required field needs to be manually added. This can be the case when manually configuring the `Recaptcha2Settings` or `Recaptcha3Settings` object in code: + +```csharp +builder.Services.Configure(options => +{ + options.SiteKey = "..."; + options.PrivateKey = "..."; +}); + +// Ensure the field is added and available +builder.FormsFields().Add(); +``` + +#### Allow using ViewEngine to resolve theme views + +The default theme views are resolved using the [Partial Views file system](../umbraco-cms/extending/filesystemproviders/README.md#other-ifilesystems) (an abstraction over the `/Views/Partials` directory). This requires I/O lookups to determine whether specific theme views exist and manually specifying all files when using a [Razor Class Library](./developer/themes.md#shipping-themes-in-a-razor-class-library). + +By enabling the [`UseViewEngineFormThemeResolver` setting](./developer/configuration/README.md#useviewengineformthemeresolver), theme vies are resolved using the `ICompositeViewEngine`, which will include compiled views (including those shipped in RCLs). + ### [16.0.0](https://github.com/umbraco/Umbraco.Forms.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F16.0.0) (June 12th 2025) * Compatibility with Umbraco 16.0.0