diff --git a/FRONT/BUILD/resources/app/src/components/workSpace/modules/workModules/networkInterfaces.tsx b/FRONT/BUILD/resources/app/src/components/workSpace/modules/workModules/networkInterfaces.tsx index d0325ef..1996ddd 100644 --- a/FRONT/BUILD/resources/app/src/components/workSpace/modules/workModules/networkInterfaces.tsx +++ b/FRONT/BUILD/resources/app/src/components/workSpace/modules/workModules/networkInterfaces.tsx @@ -76,7 +76,7 @@ export const NetworkInterfaces = ({ startConnection, ws }: Props) => { setHasInited(false) initializationAttempt.current = 0; - const newSocket = new WebSocket(`ws://${ws}:8001/api/v1`); + const newSocket = new WebSocket(`wss://${ws}:8001/api/v1`); let connectionTimeout; setSocket(newSocket); diff --git a/FRONT/BUILD/resources/app/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx b/FRONT/BUILD/resources/app/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx index dd5ca2b..8b919f4 100644 --- a/FRONT/BUILD/resources/app/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx +++ b/FRONT/BUILD/resources/app/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx @@ -115,7 +115,7 @@ export const DevicesBar = () => { const checkWebSocketAvailability = async (ip: string): Promise => { return new Promise((resolve) => { - const testSocket = new WebSocket(`ws://${ip}:8001/api/v1`); + const testSocket = new WebSocket(`wss://${ip}:8001/api/v1`); const timeout = setTimeout(() => { testSocket.close(); resolve(false); diff --git a/FRONT/DEV/src/api/request.ts b/FRONT/DEV/src/api/request.ts index ce00ee9..d0ad0b1 100644 --- a/FRONT/DEV/src/api/request.ts +++ b/FRONT/DEV/src/api/request.ts @@ -1,13 +1,13 @@ import axios, { AxiosResponse } from "axios"; const axiosWithoutCredentials = axios.create({ - baseURL: `http://localhost:8001`, + baseURL: `https://localhost:8001`, }) export class NetworkService { static createAxiosInstance(ipAddress: string) { return axios.create({ - baseURL: `http://${ipAddress}:8001`, + baseURL: `https://${ipAddress}:8001`, }); } diff --git a/FRONT/DEV/src/components/workSpace/modules/appModules/usersScanner/modules/TableScanner.tsx b/FRONT/DEV/src/components/workSpace/modules/appModules/usersScanner/modules/TableScanner.tsx index 5f15b23..d317634 100644 --- a/FRONT/DEV/src/components/workSpace/modules/appModules/usersScanner/modules/TableScanner.tsx +++ b/FRONT/DEV/src/components/workSpace/modules/appModules/usersScanner/modules/TableScanner.tsx @@ -69,41 +69,13 @@ const StatusBadge = styled.span<{ status:string }>` border-radius:4px; ` -const TableScanner = ({devices}:TableScannerProps) => { +export const TableScanner = ({ devices }: TableScannerProps) => { const { openModal } = useModalContext(); const nameSetting = useNameSetting(); - - const openModalNote = (e: React.MouseEvent, device:DeviceUser ) => { - e.stopPropagation(); - openModal(ModalMap['6'], { - address: device.mac, - currentNote: device.note || '' - }); - }; - - // Применение настроек отображения const ordersColumns = useOrdersColumns(); const disabledColumns = useDisabledColumns(); - const columnVisibility = useMemo(() => { - return { - status: !disabledColumns.includes(ordersColumns.indexOf('Онлайн')), - name: !disabledColumns.includes(ordersColumns.indexOf('Имя')), - vendor: !disabledColumns.includes(ordersColumns.indexOf('Производитель')), - ip: !disabledColumns.includes(ordersColumns.indexOf('IP адрес')), - ports: !disabledColumns.includes(ordersColumns.indexOf('Открытые порты')), - activity: !disabledColumns.includes(ordersColumns.indexOf('Последняя активность')), - note: !disabledColumns.includes(ordersColumns.indexOf('Заметка')), - action: !disabledColumns.includes(ordersColumns.indexOf('Действие')) - }; - }, [ordersColumns, disabledColumns]); - const sortedColumns = useMemo(() => { - return ordersColumns.filter(column => - !disabledColumns.includes(ordersColumns.indexOf(column)) - ); - }, [ordersColumns, disabledColumns]); - - // Пагинация const paginateSetting = usePaginateSetting(); + const [currentPage, setCurrentPage] = useState(1); const [devicesPerPage, setDevicesPerPage] = useState(paginateSetting); @@ -111,76 +83,119 @@ const TableScanner = ({devices}:TableScannerProps) => { setDevicesPerPage(paginateSetting); }, [paginateSetting]); + const openModalNote = (e: React.MouseEvent, device: DeviceUser) => { + e.stopPropagation(); + openModal(ModalMap['6'], { + address: device.mac, + currentNote: device.note || '' + }); + }; + + const visibleColumns = useMemo(() => { + return ordersColumns + .filter(column => !disabledColumns.includes(ordersColumns.indexOf(column))) + .map(column => { + switch(column) { + case 'Онлайн': return 'status'; + case 'Имя': return 'name'; + case 'Производитель': return 'vendor'; + case 'IP адрес': return 'ip'; + case 'Открытые порты': return 'ports'; + case 'Последняя активность': return 'activity'; + case 'Заметка': return 'note'; + case 'Действие': return 'action'; + default: return ''; + } + }) + .filter(Boolean); // Убираем пустые значения + }, [ordersColumns, disabledColumns]); + + // Пагинация const indexOfLastDevice = currentPage * devicesPerPage; const indexOfFirstDevice = indexOfLastDevice - devicesPerPage; const currentDevices = devices.slice(indexOfFirstDevice, indexOfLastDevice); const totalPages = Math.ceil(devices.length / devicesPerPage); const handlePrevPage = () => { - if(currentPage > 1) setCurrentPage(currentPage - 1); - } + if (currentPage > 1) setCurrentPage(currentPage - 1); + }; + const handleNextPage = () => { - if(currentPage < totalPages) setCurrentPage(currentPage + 1); - } + if (currentPage < totalPages) setCurrentPage(currentPage + 1); + }; + const onPageChange = (page: number) => { setCurrentPage(page); - } + }; + + // Рендер ячейки таблицы + const renderTableCell = (column: string, item: DeviceUser) => { + switch (column) { + case 'status': + return ; + case 'name': + return {item.hostname || (nameSetting === 'ip' ? item.ip : 'Неизвестно')}; + case 'vendor': + return {item.vendor}; + case 'ip': + return {item.ip}; + case 'ports': + return {item.open_ports.join(', ') || '-'}; + case 'activity': + return {item.last_seen}; + case 'note': + return {item.note || '-'}; + case 'action': + return ( + + + + ); + default: + return null; + } + }; return ( - - - - - {columnVisibility.status && } - {columnVisibility.name && Имя} - {columnVisibility.vendor && Производитель} - {columnVisibility.ip && IP адрес} - {columnVisibility.ports && Открытые порты} - {columnVisibility.activity && Последняя активность} - {columnVisibility.note && Заметка} - {columnVisibility.action && } - - - - {currentDevices.map((item, i) => ( - - {columnVisibility.status && ( - - )} - {columnVisibility.name && ( - - {item.hostname || (nameSetting === 'ip' ? item.ip : 'Неизвестно')} - - )} - {columnVisibility.vendor && {item.vendor}} - {columnVisibility.ip && {item.ip}} - {columnVisibility.ports && ( - {item.open_ports.join(', ') || '-'} - )} - {columnVisibility.activity && {item.last_seen}} - {columnVisibility.note && {item.note || '-'}} - {columnVisibility.action && ( - - - - )} - - ))} - - - {totalPages > 1 && ( - - )} - - ); -}; + + + + + {visibleColumns.map(column => { + switch (column) { + case 'status': return ; + case 'name': return Имя; + case 'vendor': return Производитель; + case 'ip': return IP адрес; + case 'ports': return Открытые порты; + case 'activity': return Последняя активность; + case 'note': return Заметка; + case 'action': return ; + default: return null; + } + })} + + + + {currentDevices.map((item, index) => ( + + {visibleColumns.map(column => renderTableCell(column, item))} + + ))} + + -export default TableScanner; \ No newline at end of file + {totalPages > 1 && ( + + )} + + ); +}; \ No newline at end of file diff --git a/FRONT/DEV/src/components/workSpace/modules/workModules/networkInterfaces.tsx b/FRONT/DEV/src/components/workSpace/modules/workModules/networkInterfaces.tsx index d0325ef..1996ddd 100644 --- a/FRONT/DEV/src/components/workSpace/modules/workModules/networkInterfaces.tsx +++ b/FRONT/DEV/src/components/workSpace/modules/workModules/networkInterfaces.tsx @@ -76,7 +76,7 @@ export const NetworkInterfaces = ({ startConnection, ws }: Props) => { setHasInited(false) initializationAttempt.current = 0; - const newSocket = new WebSocket(`ws://${ws}:8001/api/v1`); + const newSocket = new WebSocket(`wss://${ws}:8001/api/v1`); let connectionTimeout; setSocket(newSocket); diff --git a/FRONT/DEV/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx b/FRONT/DEV/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx index dd5ca2b..8b919f4 100644 --- a/FRONT/DEV/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx +++ b/FRONT/DEV/src/components/workSpace/sideBar/toolSpace/devicesBar.tsx @@ -115,7 +115,7 @@ export const DevicesBar = () => { const checkWebSocketAvailability = async (ip: string): Promise => { return new Promise((resolve) => { - const testSocket = new WebSocket(`ws://${ip}:8001/api/v1`); + const testSocket = new WebSocket(`wss://${ip}:8001/api/v1`); const timeout = setTimeout(() => { testSocket.close(); resolve(false);