From 6ab5d6657944507c98305be7672ad4ba6d8d2239 Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Tue, 15 Jul 2025 01:21:44 +0300 Subject: [PATCH] Add profile support to IP filtering components and update translations --- public/locales/en/translations.json | 4 +++- public/locales/ro/translations.json | 4 +++- src/components/common/chips/SlimChips.js | 6 +++--- .../advanced/ipFiltering/IpFilteringCard.js | 4 ++-- .../advanced/ipFiltering/IpFilteringRules.js | 17 ++++++++++++++++- .../advanced/ipFiltering/IpFilteringSummary.js | 17 ++++++++++++++++- 6 files changed, 43 insertions(+), 9 deletions(-) diff --git a/public/locales/en/translations.json b/public/locales/en/translations.json index 41bb3e4..648f67c 100644 --- a/public/locales/en/translations.json +++ b/public/locales/en/translations.json @@ -116,10 +116,12 @@ "Tooltip": "IPFiltering is used to filter the IP addresses that can access the forward. It can be used to allow or deny access to specific IP addresses or ranges of IP addresses.", "Mode": "Mode", "RulesCount": "Rules count", + "Profiles": "Profiles", "Rules": { "Title": "Rules", "IpAddress": "IP address", - "Description": "Description" + "Description": "Description", + "Profile": "Profile" } } } diff --git a/public/locales/ro/translations.json b/public/locales/ro/translations.json index a0d1e84..2520503 100644 --- a/public/locales/ro/translations.json +++ b/public/locales/ro/translations.json @@ -107,10 +107,12 @@ "Tooltip": "Filtrarea IP este utilizată pentru a filtra adresele IP care pot accesa redirecționarea. Poate fi utilizată pentru a permite sau a refuza accesul la anumite adrese IP sau intervale de adrese IP.", "Mode": "Mod", "RulesCount": "Număr reguli", + "Profiles": "Profiluri", "Rules": { "Title": "Reguli", "IpAddress": "Adresă IP", - "Description": "Descriere" + "Description": "Descriere", + "Profile": "Profil" } } } diff --git a/src/components/common/chips/SlimChips.js b/src/components/common/chips/SlimChips.js index 1091316..db16b18 100644 --- a/src/components/common/chips/SlimChips.js +++ b/src/components/common/chips/SlimChips.js @@ -11,11 +11,11 @@ const SlimChips = ({ elements }) => { return ( <> - {elements.map(protocol => ( + {elements.map(item => ( ))} diff --git a/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringCard.js b/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringCard.js index 6cc8113..0ba7999 100644 --- a/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringCard.js +++ b/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringCard.js @@ -2,7 +2,7 @@ import React from "react"; import PropTypes from "prop-types"; import ExpandableCard from "../../../../../../components/common/ExpandableCard"; import { useTranslation } from "react-i18next"; -import BlockIcon from "@material-ui/icons/Block"; +import FilterTiltShiftIcon from "@material-ui/icons/FilterTiltShift"; import IpFilteringSummary from "./IpFilteringSummary"; const IpFilteringCard = ({ data }) => { @@ -10,7 +10,7 @@ const IpFilteringCard = ({ data }) => { return ( } + Icon={} title={t("Forward.Options.IpFiltering.Label")} subtitle={t("Forward.Options.IpFiltering.Tooltip")} expandable={false} diff --git a/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringRules.js b/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringRules.js index c7129af..5cf6627 100644 --- a/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringRules.js +++ b/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringRules.js @@ -10,7 +10,8 @@ import { TableContainer, TableHead, TableRow, - Paper + Paper, + Chip } from "@material-ui/core"; import styles from "../../../../../../components/common/styles/tableStyles"; import { @@ -19,6 +20,7 @@ import { } from "../../../../../../components/common/MaterialTable"; import InputIcon from "@material-ui/icons/Input"; import BlockIcon from "@material-ui/icons/Block"; +import BrokenImageIcon from "@material-ui/icons/BrokenImage"; const useStyles = makeStyles(styles); @@ -48,6 +50,9 @@ const IpFilteringRules = ({ mode, rules }) => { {t("Forward.Options.IpFiltering.Rules.Description")} + + {t("Forward.Options.IpFiltering.Rules.Profile")} + @@ -70,6 +75,16 @@ const IpFilteringRules = ({ mode, rules }) => { {rule.ipAddress} {rule.description} + + {rule.profileReference && ( + } + size="small" + label={rule.profileReference} + style={{ maxHeight: 20 }} + /> + )} + ); })} diff --git a/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringSummary.js b/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringSummary.js index 0720988..082b854 100644 --- a/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringSummary.js +++ b/src/features/forwards/options/components/advanced/ipFiltering/IpFilteringSummary.js @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useMemo } from "react"; import PropTypes from "prop-types"; import { Grid } from "@material-ui/core"; import { useTranslation } from "react-i18next"; @@ -6,12 +6,21 @@ import ActiveIcon from "../../../../../../components/common/ActiveIcon"; import { makeStyles } from "@material-ui/core/styles"; import styles from "../../../../../../components/common/styles/gridStyles"; import IpFilteringRules from "./IpFilteringRules"; +import SlimChips from "../../../../../../components/common/chips/SlimChips"; const useStyles = makeStyles(styles); const IpFilteringSummary = ({ data }) => { const { t } = useTranslation(); const classes = useStyles(); + const profileCodes = useMemo(() => { + if (!data.rules) return null; + const codes = data.rules + .map(r => r.profileReference) + .filter(code => !!code); + return Array.from(new Set(codes)); + }, [data.rules]); + return ( <> @@ -27,6 +36,12 @@ const IpFilteringSummary = ({ data }) => { {`${t("Forward.Options.IpFiltering.RulesCount")}: `} {data.rules?.length || 0} + {profileCodes && ( + + {`${t("Forward.Options.IpFiltering.Profiles")}: `} + + + )}