From f7b4ec5e136d105da7a158d7e16701c66d168d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=90=E6=AE=87?= Date: Sat, 23 Nov 2024 23:36:35 +0800 Subject: [PATCH] fix process-name/ipcidr copy --- .../connections/connection-detail-modal.tsx | 107 ++++++++---------- 1 file changed, 47 insertions(+), 60 deletions(-) diff --git a/src/renderer/src/components/connections/connection-detail-modal.tsx b/src/renderer/src/components/connections/connection-detail-modal.tsx index d618a28d..fecbe05e 100644 --- a/src/renderer/src/components/connections/connection-detail-modal.tsx +++ b/src/renderer/src/components/connections/connection-detail-modal.tsx @@ -26,8 +26,7 @@ const CopyableSettingItem: React.FC<{ value: string | string[] displayName?: string prefix?: string[] - suffix?: string -}> = ({ title, value, displayName, prefix = [], suffix = '' }) => { +}> = ({ title, value, displayName, prefix = [] }) => { const getSubDomains = (domain: string): string[] => domain.split('.').length <= 2 ? [domain] @@ -35,64 +34,54 @@ const CopyableSettingItem: React.FC<{ .split('.') .map((_, i, parts) => parts.slice(i).join('.')) .slice(0, -1) + const isIPv6 = (ip: string) => ip.includes(':') const menuItems = [ { key: 'raw', text: displayName || (Array.isArray(value) ? value.join(', ') : value) }, - ...(Array.isArray(value) && value.length === prefix.length - ? prefix - .map((p, i) => - value[i] - ? { - key: `${p},${p === 'IP-ASN' ? value[i].split(' ')[0] : value[i]}${suffix}`, - text: `${p},${p === 'IP-ASN' ? value[i].split(' ')[0] : value[i]}${suffix}` + ...prefix.flatMap((p) => + Array.isArray(value) + ? value + .map((v) => + p === 'DOMAIN-SUFFIX' + ? getSubDomains(v).map((subV) => ({ + key: `${p},${subV}`, + text: `${p},${subV}` + })) + : p === 'IP-ASN' || p === 'SRC-IP-ASN' + ? [ + { + key: `${p},${v.split(' ')[0]}`, + text: `${p},${v.split(' ')[0]}` + } + ] + : [ + { + key: `${p},${v}${(p === 'IP-CIDR' || p === 'SRC-IP-CIDR') ? (isIPv6(v) ? '/128' : '/32') : ''}`, + text: `${p},${v}${(p === 'IP-CIDR' || p === 'SRC-IP-CIDR') ? (isIPv6(v) ? '/128' : '/32') : ''}` + } + ] + ) + .flat() + : p === 'DOMAIN-SUFFIX' + ? getSubDomains(value).map((v) => ({ + key: `${p},${v}`, + text: `${p},${v}` + })) + : p === 'IP-ASN' || p === 'SRC-IP-ASN' + ? [ + { + key: `${p},${value.split(' ')[0]}`, + text: `${p},${value.split(' ')[0]}` } - : null - ) - .filter(Boolean) - : prefix.flatMap((p) => - Array.isArray(value) - ? value - .map((v) => - p === 'DOMAIN-SUFFIX' - ? getSubDomains(v).map((subV) => ({ - key: `${p},${subV}${suffix}`, - text: `${p},${subV}${suffix}` - })) - : p === 'IP-ASN' || p === 'SRC-IP-ASN' - ? [ - { - key: `${p},${v.split(' ')[0]}${suffix}`, - text: `${p},${v.split(' ')[0]}${suffix}` - } - ] - : [ - { - key: `${p},${v}${suffix}`, - text: `${p},${v}${suffix}` - } - ] - ) - .flat() - : p === 'DOMAIN-SUFFIX' - ? getSubDomains(value).map((v) => ({ - key: `${p},${v}${suffix}`, - text: `${p},${v}${suffix}` - })) - : p === 'IP-ASN' || p === 'SRC-IP-ASN' - ? [ - { - key: `${p},${value.split(' ')[0]}${suffix}`, - text: `${p},${value.split(' ')[0]}${suffix}` - } - ] - : [ - { - key: `${p},${value}${suffix}`, - text: `${p},${value}${suffix}` - } - ] - )) - ] + ] + : [ + { + key: `${p},${value}${(p === 'IP-CIDR' || p === 'SRC-IP-CIDR') ? (isIPv6(value) ? '/128' : '/32') : ''}`, + text: `${p},${value}${(p === 'IP-CIDR' || p === 'SRC-IP-CIDR') ? (isIPv6(value) ? '/128' : '/32') : ''}` + } + ] + ) + ] return ( = (props) => { title="进程名" value={[ connection.metadata.process, - connection.metadata.uid ? connection.metadata.uid.toString() : '' + ...(connection.metadata.uid ? [connection.metadata.uid.toString()] : []) ]} displayName={`${connection.metadata.process}${connection.metadata.uid ? `(${connection.metadata.uid})` : ''}`} - prefix={['PROCESS-NAME', 'UID']} + prefix={['PROCESS-NAME', ...(connection.metadata.uid ? ['UID'] : [])]} /> )} {connection.metadata.processPath && ( @@ -193,7 +182,6 @@ const ConnectionDetailModal: React.FC = (props) => { title="来源IP" value={connection.metadata.sourceIP} prefix={['SRC-IP-CIDR']} - suffix="/32" /> )} {connection.metadata.sourceGeoIP && connection.metadata.sourceGeoIP.length > 0 && ( @@ -215,7 +203,6 @@ const ConnectionDetailModal: React.FC = (props) => { title="目标IP" value={connection.metadata.destinationIP} prefix={['IP-CIDR']} - suffix="/32" /> )} {connection.metadata.destinationGeoIP &&