diff --git a/public/i18n/en/translation.json b/public/i18n/en/translation.json
index 8cb7af2a3..1f34db17f 100644
--- a/public/i18n/en/translation.json
+++ b/public/i18n/en/translation.json
@@ -1306,6 +1306,7 @@
"enter_restricted_addresses": "Enter restricted addresses",
"restricted_addresses": "Restricted addresses",
"restricted_object": "Restricted object",
+ "restricted_object_tooltip": "All objects supported, except host sets with IP ranges",
"no_object": "No object",
"port_forwards_for_destination_name": "Port forwards for destination '{name}'"
},
diff --git a/src/components/standalone/firewall/CreateOrEditPortForwardDrawer.vue b/src/components/standalone/firewall/CreateOrEditPortForwardDrawer.vue
index 024ca87cd..67fa130c9 100644
--- a/src/components/standalone/firewall/CreateOrEditPortForwardDrawer.vue
+++ b/src/components/standalone/firewall/CreateOrEditPortForwardDrawer.vue
@@ -766,7 +766,15 @@ async function createOrEditPortForward() {
:selected-label="t('ne_combobox.selected')"
:user-input-label="t('ne_combobox.user_input_label')"
ref="restrictObjectRef"
- />
+ >
+
+ {{
+ t('standalone.port_forward.restricted_object_tooltip')
+ }}
+
+
-
- {{ ipaddr }}
-
- -
-
- {{ children.name }}
+
+
+
+ {{ objects.getRecord(ipaddr)?.name || '-' }}
+
+ {{ ipaddr }}
+
diff --git a/src/stores/standalone/objects.ts b/src/stores/standalone/objects.ts
index 3d83684a8..65a06356e 100644
--- a/src/stores/standalone/objects.ts
+++ b/src/stores/standalone/objects.ts
@@ -3,6 +3,16 @@ import { computed, ref } from 'vue'
import type { IpVersion } from '@/composables/useObjects'
import { ubusCall } from '@/lib/standalone/ubus'
import type { AxiosResponse } from 'axios'
+import {
+ faDesktop,
+ faNetworkWired,
+ faArrowsLeftRightToLine,
+ faAddressCard,
+ faBoxArchive,
+ faGlobe,
+ faCloud,
+ faCircleQuestion
+} from '@fortawesome/free-solid-svg-icons'
export type NsObject = {
id: string
@@ -70,6 +80,32 @@ export const useObjectStore = defineStore('objects', () => {
})
}
+ function getObjectIcon(subtype: string) {
+ switch (subtype) {
+ case 'host':
+ case 'dns_record':
+ return faDesktop
+ case 'cidr':
+ return faNetworkWired
+ case 'range':
+ return faArrowsLeftRightToLine
+ case 'dhcp_static_lease':
+ return faAddressCard
+ case 'host_set':
+ return faBoxArchive
+ case 'vpn_user':
+ return faGlobe
+ case 'domain_set':
+ return faCloud
+ default:
+ return faCircleQuestion
+ }
+ }
+
+ function getRecord(record: string) {
+ return objects.value.find((obj) => obj.id === record)
+ }
+
const objects = computed>(() => {
return [...hostSets.value, ...domainSets.value]
})
@@ -77,5 +113,5 @@ export const useObjectStore = defineStore('objects', () => {
// loading objects on store usage
load()
- return { loading, load, hostSets, error, objects }
+ return { loading, load, hostSets, error, objects, getObjectIcon, getRecord }
})
diff --git a/src/views/standalone/firewall/PortForward.vue b/src/views/standalone/firewall/PortForward.vue
index e8bc0670b..911272079 100644
--- a/src/views/standalone/firewall/PortForward.vue
+++ b/src/views/standalone/firewall/PortForward.vue
@@ -145,12 +145,7 @@ async function listObjectSuggestions() {
try {
const res = await ubusCall('ns.redirects', 'list-object-suggestions')
destinationObjectSuggestions.value = res.data.objects.ns_dst
- restrictObjectSuggestions.value = res.data.objects.ns_src.map((domainSet: DomainSet) => {
- return {
- ...domainSet,
- id: `objects/${domainSet.id}`
- }
- })
+ restrictObjectSuggestions.value = res.data.objects.ns_src
} catch (err: any) {
console.error(err)
error.value.listObjectSuggestions = t(getAxiosErrorMessage(err))