From 13e3ec4b054a302a2ea9f91cc2a3135990211e1d Mon Sep 17 00:00:00 2001 From: Jack Buehner Date: Mon, 17 Nov 2025 18:30:31 -0500 Subject: [PATCH] docs: add documentation for all policies --- .../policies/alert-banners/index.md | 6 ++++ .../policies/centralized-publishing/index.md | 18 +++++++++++ .../policies/change-password/index.md | 26 ++++++++++++++++ .../profile-menu-change-password.webp | Bin 0 -> 1812 bytes .../sign-in-password-expired.webp | Bin 0 -> 5896 bytes .../policies/combine-alike-apps/index.md | 6 ++++ .../policies/configure-aliases/index.md | 2 ++ .../policies/favorites/index.md | 6 ++++ .../policies/flatten-folders/index.md | 6 ++++ .../policies/fulladdress-override/index.md | 6 ++++ .../policies/hide-ports/index.md | 6 ++++ .../policies/icon-backgrounds/index.md | 6 ++++ .../policies/inject-rdp-properties/index.md | 6 ++++ .../policies/show-multiuser-names/index.md | 6 ++++ .../policies/simple-mode/index.md | 6 ++++ .../policies/user-cache/index.md | 25 +++++++++++++++ .../publish-resources/index.md | 20 +++++++----- .../components/NavigationView/TreeView.vue | 1 + .../PolicyDetails/PolicyDetails.vue | 29 ++++++++++++++++++ frontend/lib/components/index.mjs | 2 ++ frontend/lib/docs-entry.dist.mjs | 26 ++++++++++++++-- frontend/lib/public/locales/en.json | 4 +-- 22 files changed, 200 insertions(+), 13 deletions(-) create mode 100644 frontend/docs/(administration)/policies/alert-banners/index.md create mode 100644 frontend/docs/(administration)/policies/centralized-publishing/index.md create mode 100644 frontend/docs/(administration)/policies/change-password/index.md create mode 100644 frontend/docs/(administration)/policies/change-password/profile-menu-change-password.webp create mode 100644 frontend/docs/(administration)/policies/change-password/sign-in-password-expired.webp create mode 100644 frontend/docs/(administration)/policies/combine-alike-apps/index.md create mode 100644 frontend/docs/(administration)/policies/favorites/index.md create mode 100644 frontend/docs/(administration)/policies/flatten-folders/index.md create mode 100644 frontend/docs/(administration)/policies/fulladdress-override/index.md create mode 100644 frontend/docs/(administration)/policies/hide-ports/index.md create mode 100644 frontend/docs/(administration)/policies/icon-backgrounds/index.md create mode 100644 frontend/docs/(administration)/policies/inject-rdp-properties/index.md create mode 100644 frontend/docs/(administration)/policies/show-multiuser-names/index.md create mode 100644 frontend/docs/(administration)/policies/simple-mode/index.md create mode 100644 frontend/docs/(administration)/policies/user-cache/index.md create mode 100644 frontend/lib/components/PolicyDetails/PolicyDetails.vue diff --git a/frontend/docs/(administration)/policies/alert-banners/index.md b/frontend/docs/(administration)/policies/alert-banners/index.md new file mode 100644 index 00000000..4b07819e --- /dev/null +++ b/frontend/docs/(administration)/policies/alert-banners/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.App.Alerts.SignedInUser.title }} +nav_title: User and group folders +--- + + diff --git a/frontend/docs/(administration)/policies/centralized-publishing/index.md b/frontend/docs/(administration)/policies/centralized-publishing/index.md new file mode 100644 index 00000000..1e95e048 --- /dev/null +++ b/frontend/docs/(administration)/policies/centralized-publishing/index.md @@ -0,0 +1,18 @@ +--- +title: $t{{ policies.RegistryApps.Enabled.title }} +nav_title: Centralized publishing (registry) +--- + +Enable this policy to store published RemoteApps and desktops in their own collection in the registry. If you have RAWeb and RDWeb running on the same server or multiple installations of RAWeb, enabling the policy ensures that visibility settings for RemoteApps and desktops do not conflict between the installations. + +This policy defaults to enabled, but older versions of RAWeb may have it disabled by default. If you are upgrading from an older version of RAWeb, you must enable this policy manually. + +This policy must be enabled for RDP file property customizations to be available. + +The TSWebAccess option in RemoteApp Tool only works when this policy is disabled. + +The option to show the system desktop in the web interface and in Workspace clients is only available when this policy is enabled. + +For instructions on managing published RemoteApps and desktops, see [Publish RemoteApps and Desktops](/docs/publish-resources/). + + diff --git a/frontend/docs/(administration)/policies/change-password/index.md b/frontend/docs/(administration)/policies/change-password/index.md new file mode 100644 index 00000000..66ad2900 --- /dev/null +++ b/frontend/docs/(administration)/policies/change-password/index.md @@ -0,0 +1,26 @@ +--- +title: $t{{ policies.PasswordChange.Enabled.title }} +nav_title: Change passwords via RAWeb +--- + +RAWeb allows users to change their passwords directly through the web interface. This feature can be enabled or disabled based on your organization's policies. + +Allowing password changes via RAWeb is particularly useful in environments where a user may have an expired password and is unable to sign in to RAWeb or connect to remote resources until they update their password. + + + +## Accessing the password change feature + +When the password change feature is enabled, users will see the password change option in the following locations: + +### Profile menu + +Any signed in user can access the password change feature from their profile menu in the top-right corner of the RAWeb interface. + + + +### Sign in + +If a user's password has expired or an administrator has chosen to force a password change, they will be prompted to change their password directly from the sign-in screen. + + diff --git a/frontend/docs/(administration)/policies/change-password/profile-menu-change-password.webp b/frontend/docs/(administration)/policies/change-password/profile-menu-change-password.webp new file mode 100644 index 0000000000000000000000000000000000000000..9d52d977ec592142d30cd52133fd84b32b453954 GIT binary patch literal 1812 zcmYL~c|6mPAICpqj><7PidZCbja(xnjL}q@wM>pC{c_F`!=y}o=j&RM!q3^X9AP3y z!sLv8lq;1ZM@h_)D`)0A{rn!k_v7(;yq=Hu`~7&m|9oT7R#rj+0Dwm!G4_~~4*LNB z5afy%1cU+rw<9mY4*;bwAPb}h29W_%?UXufz7j(L7CgN^3EMaA_k}Q97c#m<7q7JS zK(j~4hctw6JnaN4{#Wcx zhyjpu5RWrnSpqi(L>yLh^p%%qu^+en+<`0B(Qh0^@gUedr(v<%U!C%`c`iZ(Pk3FCa*4pAU^u;uK zTkJcC1+SeN!m?GT4|iAF$z1YgTOX|WxA>es+U!La3ukCVm=NZzF}O#QK=}5g&7x?t zZHvFXUWO$~y22bm17gttz*(>mElT)!t2ewmBqpHG`C7AN`OI8N>dwu|zfhjlcK8Qn zx1L2xhCBP{>Q{Z%V-4#u{QBvP_ZXk9P}JjcYefMo2{XA~_1+GCBud@DJO1!$FS_mu0nzur7Kt|f-{ zIby@Y_o0{3^k286?B$IWK`A>=CJ%>}n8Bs=k$!}+6lFoLnMAUCZ+}*0=TwK9gJZ6y z!r-?VCFOc0L{$9w=H5FJSShIkQ3XjCMuj6fBYlMKXrc*ECAKg4VZ{w9*_7_?)m(pc z-Lkb2enVakp7jag=J6XckdZ$u+x62rwcOs=TAH?;Oyh_+`nWLgi2}%}z8+ioV3F(J zmHG@?-+scKOU;{KAzS4a6LfZl9B)PIco>+T9zP>_&W%C80$F_*c03sn3CvYVyU(8j z8?jwI~j$;l`VI3R(7HZew=uOR9~^Nyw`=8Xkot}k?SgiJf}&Sw%t$%fxJE* zB_UBKLLlUd!dw)7-QnJqqMr6;5E9m%S*1uJWzIKER2m;OTq;3ScqN{ekc7yzT{}p1&xpEB)gswBU|tT^@9aVu|x0h%>0s5G#MfI7-Xt@}U##>NUw+o~dheaM9t-CL*)S{9^j}Bv@2jtODLh1nP(Dk+u!iwi?X%A#L;zzrP_IZ=sM+YXHrUP zw!_s~3+|TBm0b8{AYLUH&CKo`Z-Nf4MzL z&icD>Bw|xOayS^9`_8@RB$nrUY5-~eR~oaMth0hUhaSwImamPup!l_~p(Wz5EKS9R zN|DBg^S4qP0ys`J&pKpY$%qA2M6g$z)G=S#b2KR2S8CK~Ria>v=jN7g{?Ayx;2=Sf z0fMHdKf;7?fP@t&J%n$7+f+R+T=$NP6(){741=0`cL;%;109c)JZZOB^VJ$zXw$pB zRZHZE_ASiqYr8EDX)AXiZe30;6#w49-wo~hUZ!Y(f;Ua5On8wzf zzxs7)4fEv(g`|?!h%PP)>#>hu$>@*qt298LS-v4=8>K8S(W?!&6SMuoHtrCb@;0+a z4onqfaJCc5)yR|0g4Xwno%B5UAcG#uZ;|+-9*lQ>jySYjCWwH(9W?m+`OQaXkG;V4 ze5x-bmR5+6y&KDCHNCa^;lHS06Jq)+7$gXhxnfpf9^XAeOMZRI6En2qvEN2UtcFBY zt3M{kH+kc`GA9t!yE>6^DJC8|lRDJ;VVoTj*U(w!h+}def@MWcWcRiC1umi-&{m(h zjz+8f`4#-YK@cwh;&yf=1LFJR_FO))$5*(lvbV#-Wo-}-AjWlfuDqhbfA+~--Yr+I zc60vcn5$lXBu!fsP9CADt*NaI0DJ(DC;))DJ6bxrS|IxWZ}ZUqn+4_u@b2+$F5e#4 ZaCx_QxEFZ-Bw!6sa%nG3TT5$q`VaE?7|8$t literal 0 HcmV?d00001 diff --git a/frontend/docs/(administration)/policies/change-password/sign-in-password-expired.webp b/frontend/docs/(administration)/policies/change-password/sign-in-password-expired.webp new file mode 100644 index 0000000000000000000000000000000000000000..31bddc936891c44ffc57c0b862c7d1a05a205916 GIT binary patch literal 5896 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 diff --git a/frontend/docs/(administration)/policies/configure-aliases/index.md b/frontend/docs/(administration)/policies/configure-aliases/index.md index 2698523e..5cf42060 100644 --- a/frontend/docs/(administration)/policies/configure-aliases/index.md +++ b/frontend/docs/(administration)/policies/configure-aliases/index.md @@ -22,6 +22,8 @@ _Using ` + # Method 2: IIS Manager 1. Once RAWeb is installed, open **IIS Manager** and expand the tree in the **Connections pane** on the left side until you can see the **RAWeb** application. The default name is **RAWeb**, but it may have a different name if you performed a manual installation to a different folder. Click on the **RAWeb** application. diff --git a/frontend/docs/(administration)/policies/favorites/index.md b/frontend/docs/(administration)/policies/favorites/index.md new file mode 100644 index 00000000..d10d5cde --- /dev/null +++ b/frontend/docs/(administration)/policies/favorites/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.App.FavoritesEnabled.title }} +nav_title: Favorites +--- + + diff --git a/frontend/docs/(administration)/policies/flatten-folders/index.md b/frontend/docs/(administration)/policies/flatten-folders/index.md new file mode 100644 index 00000000..83bd3d07 --- /dev/null +++ b/frontend/docs/(administration)/policies/flatten-folders/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.App.FlatModeEnabled.title }} +nav_title: Flatten folders +--- + + diff --git a/frontend/docs/(administration)/policies/fulladdress-override/index.md b/frontend/docs/(administration)/policies/fulladdress-override/index.md new file mode 100644 index 00000000..a7da34b4 --- /dev/null +++ b/frontend/docs/(administration)/policies/fulladdress-override/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.RegistryApps.FullAddressOverride.title }} +nav_title: Override full address +--- + + diff --git a/frontend/docs/(administration)/policies/hide-ports/index.md b/frontend/docs/(administration)/policies/hide-ports/index.md new file mode 100644 index 00000000..d2c231fe --- /dev/null +++ b/frontend/docs/(administration)/policies/hide-ports/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.App.HidePortsEnabled.title }} +nav_title: Hide ports +--- + + diff --git a/frontend/docs/(administration)/policies/icon-backgrounds/index.md b/frontend/docs/(administration)/policies/icon-backgrounds/index.md new file mode 100644 index 00000000..7751e13e --- /dev/null +++ b/frontend/docs/(administration)/policies/icon-backgrounds/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.App.IconBackgroundsEnabled.title }} +nav_title: Icon backgrounds +--- + + diff --git a/frontend/docs/(administration)/policies/inject-rdp-properties/index.md b/frontend/docs/(administration)/policies/inject-rdp-properties/index.md new file mode 100644 index 00000000..e8859df1 --- /dev/null +++ b/frontend/docs/(administration)/policies/inject-rdp-properties/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.RegistryApps.AdditionalProperties.title }} +nav_title: Additional RemoteApp properties +--- + + diff --git a/frontend/docs/(administration)/policies/show-multiuser-names/index.md b/frontend/docs/(administration)/policies/show-multiuser-names/index.md new file mode 100644 index 00000000..0125a34b --- /dev/null +++ b/frontend/docs/(administration)/policies/show-multiuser-names/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.Workspace.ShowMultiuserResourcesUserAndGroupNames.title }} +nav_title: User and group folders +--- + + diff --git a/frontend/docs/(administration)/policies/simple-mode/index.md b/frontend/docs/(administration)/policies/simple-mode/index.md new file mode 100644 index 00000000..2b0dbb56 --- /dev/null +++ b/frontend/docs/(administration)/policies/simple-mode/index.md @@ -0,0 +1,6 @@ +--- +title: $t{{ policies.App.SimpleModeEnabled.title }} +nav_title: Simple mode +--- + + diff --git a/frontend/docs/(administration)/policies/user-cache/index.md b/frontend/docs/(administration)/policies/user-cache/index.md new file mode 100644 index 00000000..e4a4ec6b --- /dev/null +++ b/frontend/docs/(administration)/policies/user-cache/index.md @@ -0,0 +1,25 @@ +--- +title: Configure the user cache +nav_title: User cache +--- + +## Enable the user cache + +The user cache stores details about a user every time they sign in, and RAWeb will fall back to the details in the user cache if the domain controller cannot be reached. If RAWeb is unable to load group memberships from the domain, the group membership cached in the user cache is used instead. + +For domain-joined Windows machines, when the user cache is enabled and the domain controller cannot be accessed, the authentication mechanism will populate RAWeb's user cache with the [cached domain logon information](https://learn.microsoft.com/en-us/troubleshoot/windows-server/user-profiles-and-logon/cached-domain-logon-information) stored by Windows, if available. By default, Windows caches the credentials of the last 10 users who have logged on to the machine. + +RAWeb's mechanism for verifying user and group information may be unable to access user information if the machine with RAWeb is in a domain environment with one-way trust relationships. In such environments, if the domain controller for the user's domain cannot be reached, RAWeb will only be able to populate the user cache upon initial logon. + +When the `UserCache.Enabled` appSetting (policy) is enabled, a SQLite database is created in the App_Data folder that contains username, full name, domain, user sid, and group names and sids. + + + +## Leverge the user cache for faster load times + +The user cache also improves the time it takes for RAWeb to load user details. When the user cache is enabled, RAWeb will use the cached user details while it revalidates the details in the background. This can significantly improve performance in environments with a large number of groups or slow domain controllers. + +By default, RAWeb will use the cached user details for up to 1 minute before requiring revalidation. This duration can be adjusted using the `UserCache.StaleWhileRevalidate` policy. \ +If RAWeb is unable to revalidate the user details (for example, if the domain controller is unreachable), it will continue to use the cached details until revalidation is successful. + + diff --git a/frontend/docs/(administration)/publish-resources/index.md b/frontend/docs/(administration)/publish-resources/index.md index 46aed794..e709b909 100644 --- a/frontend/docs/(administration)/publish-resources/index.md +++ b/frontend/docs/(administration)/publish-resources/index.md @@ -152,7 +152,9 @@ See [Configuring user-based and group‐based access to resources](/docs/publish RAWeb allows you to customize most RDP file properties for managed resources. This allows you to optimize the experience for individual RemoteApps and desktops. - Properties will be ignored and possibly overwritten for any properties specified in the policy: Add additional RDP file properties to RemoteApps listed in the registry. + + Properties will be ignored and possibly overwritten for any properties specified in the policy: [Add additional RDP file properties to RemoteApps listed in the registry](/docs/policies/inject-rdp-properties/). + 1. Navigate to **Policies**. @@ -160,7 +162,9 @@ RAWeb allows you to customize most RDP file properties for managed resources. Th 3. Click the RemoteApp for which you want to configure RDP file properties. 4. In the **Advanced** group, click the **Edit RDP file** button. - If you do not see the Edit RDP file button, make sure the Use a dedicated collection for RemoteApps in the registry instead of the global list policy is set to Disabled or Not configured. + + If you do not see the **Edit RDP file** button, make sure the [Use a dedicated collection for RemoteApps in the registry instead of the global list](/docs/policies/centralized-publishing/) policy is set to **Disabled** or **Not configured**. + 5. You will see a dialog where you can edit supported RDP file properties. Properties related to settings that are available in the main RemoteApp properties dialog are disabled in this dialog. If you want to test the properties before you save them, click the **Download** button to download a test RDP file.\ @@ -183,7 +187,9 @@ RAWeb allows you to customize most RDP file properties for managed resources. Th RAWeb can publish RDP files from `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications`. Only applications with the `ShowInTSWA` DWORD set to `1` will be published. This behavior is not the preferred method of adding registry RemoteApps, and support may be removed in a future release. Use the RemoteApps and desktops manager in RAWeb's web interface instead. - You must set the Use a dedicated collection for RemoteApps in the registry instead of the global list policy to Disabled in order for RAWeb to publish RemoteApps from the registry path HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications. + + You must set the [Use a dedicated collection for RemoteApps in the registry instead of the global list](/docs/policies/centralized-publishing/) policy to **Disabled** in order for RAWeb to publish RemoteApps from the registry path `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList\Applications`. + Use [RemoteApp Tool](https://github.com/kimmknight/remoteapptool) to add, remove, and configure RemoteApps in the registry. @@ -216,7 +222,9 @@ Publishing the host system desktop also makes it easy to access any application - If you do not see the host system desktop in the resources manager, make sure the Use a dedicated collection for RemoteApps in the registry instead of the global list policy is set to Disabled or Not configured. + + If you do not see the host system desktop in the resources manager, make sure the [Use a dedicated collection for RemoteApps in the registry instead of the global list](/docs/policies/centralized-publishing/) policy is set to **Disabled** or **Not configured**. + To publishing the host system desktop, follow these steps: @@ -276,7 +284,3 @@ RAWeb uses standard Windows security descriptors when determining user access to #### Use folder-based permissions You can optionally provide different RemoteApps and desktops to different users based on their username or group membership via **App_Data\multiuser-resources**. See [Configuring user and group access via folder-based permissions](/docs/publish-resources/resource-folder-permissions/#multiuser-resources). - - diff --git a/frontend/lib/components/NavigationView/TreeView.vue b/frontend/lib/components/NavigationView/TreeView.vue index b79b2d8b..c0632273 100644 --- a/frontend/lib/components/NavigationView/TreeView.vue +++ b/frontend/lib/components/NavigationView/TreeView.vue @@ -283,6 +283,7 @@ .tree-view :deep(.tree-view) { flex-grow: 0; flex-shrink: 0; + overflow: unset; } hr { diff --git a/frontend/lib/components/PolicyDetails/PolicyDetails.vue b/frontend/lib/components/PolicyDetails/PolicyDetails.vue new file mode 100644 index 00000000..3e86372e --- /dev/null +++ b/frontend/lib/components/PolicyDetails/PolicyDetails.vue @@ -0,0 +1,29 @@ + + + diff --git a/frontend/lib/components/index.mjs b/frontend/lib/components/index.mjs index d24edeab..52712776 100644 --- a/frontend/lib/components/index.mjs +++ b/frontend/lib/components/index.mjs @@ -16,6 +16,7 @@ import { default as NavigationRail } from './Navigation/NavigationRail.vue'; import { default as NavigationPane } from './NavigationView/NavigationPane.vue'; import { default as TreeView } from './NavigationView/TreeView.vue'; import { default as PickerItem } from './PickerItem/PickerItem.vue'; +import { default as PolicyDetails } from './PolicyDetails/PolicyDetails.vue'; import { default as PolicyDialog } from './PolicyDialog/PolicyDialog.vue'; import { default as ProgressRing } from './ProgressRing/ProgressRing.vue'; import { default as RadioButton } from './RadioButton/RadioButton.vue'; @@ -43,6 +44,7 @@ export { NavigationPane, NavigationRail, PickerItem, + PolicyDetails, PolicyDialog, ProgressRing, RadioButton, diff --git a/frontend/lib/docs-entry.dist.mjs b/frontend/lib/docs-entry.dist.mjs index ff26f9a0..c6685a13 100644 --- a/frontend/lib/docs-entry.dist.mjs +++ b/frontend/lib/docs-entry.dist.mjs @@ -4,9 +4,12 @@ import { createApp, reactive } from 'vue'; import { createRouter, createWebHistory } from 'vue-router'; import NotFound from './404.vue'; import Documentation from './Documentation.vue'; -import i18n from './i18n.ts'; +import i18n, { i18nextPromise } from './i18n.ts'; import { useCoreDataStore } from './stores/index.mjs'; +const app = i18n(createApp(Documentation)); +const t = await i18nextPromise; + /** @type {Record>} */ const docsPages = import.meta.glob('../docs/**/*.md', { eager: true }); @@ -17,6 +20,23 @@ const docsMarkdownRoutes = await Promise.all( name = 'index'; } + // if the frontmatter contains $t, look for translation keys and replace them + if (frontmatter) { + for (const [key, value] of Object.entries(frontmatter)) { + if (!value || typeof value !== 'string' || !value.includes('$t{{')) { + continue; + } + + // the $t{{ some.key }} syntax may appear multiple times in a string, + // so extract and replace all matches + const regex = /\$t\{\{\s*([^\}]+)\s*\}\}/g; + frontmatter[key] = value.replaceAll(regex, (_, translationKey) => { + const translation = t(translationKey.trim(), { lng: 'en-US' }); + return translation; + }); + } + } + return { path: '/docs/' + @@ -63,7 +83,6 @@ const router = createRouter({ } } - console.log(to.hash); // scroll to the hash if it exists if (to.hash) { // wait for the element to exist before scrolling @@ -158,10 +177,11 @@ router.afterEach((to) => { const pinia = createPinia(); await useCoreDataStore(pinia).fetchData(); // fetch core data before mounting the app -const app = i18n(createApp(Documentation)); app.use(pinia); app.use(router); app.component('CodeBlock', (await import('$components')).CodeBlock); +app.component('PolicyDetails', (await import('$components')).PolicyDetails); +app.component('InfoBar', (await import('$components')).InfoBar); app.provide('docsNavigationContext', docsNavigationContext); app.directive('swap', (el, binding) => { diff --git a/frontend/lib/public/locales/en.json b/frontend/lib/public/locales/en.json index eaf17f4b..b64f2fb5 100644 --- a/frontend/lib/public/locales/en.json +++ b/frontend/lib/public/locales/en.json @@ -153,7 +153,7 @@ }, "RegistryApps.FullAddressOverride": { "title": "Override the full address for generated RDP files for RemoteApps listed in the registry", - "help": "Replace the default 'full address' in generated RDP files for registry RemoteApps. By default, the 'full address' is formed by the terminal server's IPv4 address and RDP port. \n\nIf enabled, the 'full address' will be set to the value of the origin option. \n\nIf disabled or not configured, the full address will not be changed from the default.\n\nThe origin option should be a well-formed origin, such as https://example.com:3389. The port is optional, and if not specified, the default RDP port (3389) will be used by most clients. \n\nThis option is useful when the terminal server is behind a reverse proxy or should be accessed via a specific hostname or IP address." + "help": "Replace the default 'full address' in generated RDP files for managed RemoteApps. By default, the 'full address' is formed by the terminal server's IPv4 address and RDP port. \n\nIf enabled, the 'full address' will be set to the value of the origin option. \n\nIf disabled or not configured, the full address will not be changed from the default.\n\nThe origin option should be a well-formed origin, such as https://example.com:3389. The port is optional, and if not specified, the default RDP port (3389) will be used by most clients. \n\nThis option is useful when the terminal server is behind a reverse proxy or should be accessed via a specific hostname or IP address." }, "RegistryApps.AdditionalProperties": { "title": "Add additional RDP file properties to RemoteApps listed in the registry", @@ -177,7 +177,7 @@ }, "App.Alerts.SignedInUser": { "title": "Configure alerts or announcements at the top of every route for signed-in users", - "help": "Configure custom alerts to be displayed at the top of the web client. \n\nIf enabled, alerts will be shown to users if they are sign in. \n\nIf disabled or not configured, no alerts will be shown. \n\nAlerts may contain a title, message, and hyperlink. Multiple alerts may be displayed. The link will appear at the end of the alert message on a new line and will open in a popup window or new tab. The link will not appear unless the text and URL are specified." + "help": "Configure custom alerts to be displayed at the top of the web client. \n\nIf enabled, alerts will be shown to users if they are signed in. \n\nIf disabled or not configured, no alerts will be shown. \n\nAlerts may contain a title, message, and hyperlink. Multiple alerts may be displayed. The link will appear at the end of the alert message on a new line and will open in a popup window or new tab. The link will not appear unless the text and URL are specified." } }, "wiki": {