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" - /> + > + + 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))