From 3f2a1db3245181d871ac25890f4685935ec567b6 Mon Sep 17 00:00:00 2001 From: Domingo Dirutigliano Date: Wed, 14 Jun 2023 21:49:15 +0200 Subject: [PATCH] fixed mantine forms and menu + improvements on dev mode with vite --- backend/utils/loader.py | 6 +-- frontend/src/App.tsx | 2 +- frontend/src/components/AddNewRegex.tsx | 6 +-- .../components/Header/ResetPasswordModal.tsx | 2 +- frontend/src/components/Header/index.tsx | 10 ++--- frontend/src/components/MainLayout.tsx | 14 +++++- .../src/components/NFRegex/AddNewService.tsx | 8 ++-- .../NFRegex/ServiceRow/RenameForm.tsx | 2 +- .../components/NFRegex/ServiceRow/index.tsx | 5 ++- frontend/src/components/PortAndInterface.tsx | 43 +++++++++++-------- .../components/PortHijack/AddNewService.tsx | 12 +++--- .../ServiceRow/ChangeDestination.tsx | 4 +- .../PortHijack/ServiceRow/RenameForm.tsx | 2 +- .../PortHijack/ServiceRow/index.tsx | 7 +-- .../components/RegexProxy/AddNewService.tsx | 6 +-- .../RegexProxy/ServiceRow/ChangePortModal.tsx | 4 +- .../RegexProxy/ServiceRow/RenameForm.tsx | 2 +- .../RegexProxy/ServiceRow/index.tsx | 5 ++- 18 files changed, 82 insertions(+), 58 deletions(-) diff --git a/backend/utils/loader.py b/backend/utils/loader.py index 5bbe676..43f32f6 100644 --- a/backend/utils/loader.py +++ b/backend/utils/loader.py @@ -16,7 +16,7 @@ async def frontend_debug_proxy(path): httpc = httpx.AsyncClient() req = httpc.build_request("GET",f"http://127.0.0.1:{os.getenv('F_PORT','5173')}/"+path) resp = await httpc.send(req, stream=True) - return StreamingResponse(resp.aiter_bytes(),status_code=resp.status_code) + return StreamingResponse(resp.aiter_bytes(),status_code=resp.status_code, headers=resp.headers) async def react_deploy(path): file_request = os.path.join(REACT_BUILD_DIR, path) @@ -35,10 +35,10 @@ def frontend_deploy(app): while True: data = await ws_b.recv() await ws_a.send_text(data) - @app.websocket("/ws") + @app.websocket("/") async def websocket_debug_proxy(ws: WebSocket): await ws.accept() - async with websockets.connect(f"ws://127.0.0.1:{os.getenv('F_PORT','5173')}/ws") as ws_b_client: + async with websockets.connect(f"ws://127.0.0.1:{os.getenv('F_PORT','5173')}/") as ws_b_client: fwd_task = asyncio.create_task(forward_websocket(ws, ws_b_client)) rev_task = asyncio.create_task(reverse_websocket(ws, ws_b_client)) await asyncio.gather(fwd_task, rev_task) diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 91419c2..dc5a16c 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -60,7 +60,7 @@ function App() { password:"", }, validate:{ - password: (value) => value !== "" + password: (value) => value !== "" ? null : "Password is required", } }) diff --git a/frontend/src/components/AddNewRegex.tsx b/frontend/src/components/AddNewRegex.tsx index c7b4ce8..be212d2 100644 --- a/frontend/src/components/AddNewRegex.tsx +++ b/frontend/src/components/AddNewRegex.tsx @@ -25,9 +25,9 @@ function AddNewRegex({ opened, onClose, service }:{ opened:boolean, onClose:()=> deactive:false }, validate:{ - regex: (value) => value !== "", - type: (value) => ["blacklist","whitelist"].includes(value), - mode: (value) => ['C -> S', 'S -> C', 'C <-> S'].includes(value) + regex: (value) => value !== "" ? null : "Regex is required", + type: (value) => ["blacklist","whitelist"].includes(value) ? null : "Invalid type", + mode: (value) => ['C -> S', 'S -> C', 'C <-> S'].includes(value) ? null : "Invalid mode", } }) diff --git a/frontend/src/components/Header/ResetPasswordModal.tsx b/frontend/src/components/Header/ResetPasswordModal.tsx index 89d284d..c3adeb5 100644 --- a/frontend/src/components/Header/ResetPasswordModal.tsx +++ b/frontend/src/components/Header/ResetPasswordModal.tsx @@ -12,7 +12,7 @@ function ResetPasswordModal({ opened, onClose }:{ opened: boolean, onClose: () = expire:true }, validate:{ - password: (value) => value !== "" + password: (value) => value !== ""? null : "Password is required" } }) const [loadingBtn, setLoadingBtn] = useState(false) diff --git a/frontend/src/components/Header/index.tsx b/frontend/src/components/Header/index.tsx index b61f298..b344b42 100644 --- a/frontend/src/components/Header/index.tsx +++ b/frontend/src/components/Header/index.tsx @@ -1,5 +1,5 @@ import React, { useState } from 'react'; -import { ActionIcon, Divider, Image, Menu, Tooltip, MediaQuery, Burger, Space, Header } from '@mantine/core'; +import { ActionIcon, Divider, Image, Menu, Tooltip, MediaQuery, Burger, Space, Header, Button, ThemeIcon } from '@mantine/core'; import style from "./index.module.scss"; import { errorNotify, getmainpath, logout } from '../../js/utils'; import { AiFillHome } from "react-icons/ai" @@ -9,6 +9,8 @@ import { MdOutlineSettingsBackupRestore } from 'react-icons/md'; import { ImExit } from 'react-icons/im'; import ResetPasswordModal from './ResetPasswordModal'; import ResetModal from './ResetModal'; +import { RiMenu5Fill } from 'react-icons/ri'; +import { MenuDropDownWithButton } from '../MainLayout'; function HeaderPage({navOpen, setNav, ...other}: { navOpen: boolean, setNav:React.Dispatch>}) { @@ -51,15 +53,13 @@ function HeaderPage({navOpen, setNav, ...other}: { navOpen: boolean, setNav:Reac
- - + Firewall Access } onClick={() => setChangePasswordModal(true)}>Change Password Actions } onClick={() => setResetFiregexModal(true)}>Reset Firegex - - + + + + + + + + {children} + + diff --git a/frontend/src/components/NFRegex/AddNewService.tsx b/frontend/src/components/NFRegex/AddNewService.tsx index 84068e5..928f1bd 100644 --- a/frontend/src/components/NFRegex/AddNewService.tsx +++ b/frontend/src/components/NFRegex/AddNewService.tsx @@ -25,10 +25,10 @@ function AddNewService({ opened, onClose }:{ opened:boolean, onClose:()=>void }) autostart: true }, validate:{ - name: (value) => value !== ""?true:false, - port: (value) => value>0 && value<65536, - proto: (value) => ["tcp","udp"].includes(value), - ip_int: (value) => value.match(regex_ipv6)?true:false || value.match(regex_ipv4)?true:false + name: (value) => value !== "" ? null : "Service name is required", + port: (value) => (value>0 && value<65536) ? null : "Invalid port", + proto: (value) => ["tcp","udp"].includes(value) ? null : "Invalid protocol", + ip_int: (value) => (value.match(regex_ipv6) || value.match(regex_ipv4)) ? null : "Invalid IP address", } }) diff --git a/frontend/src/components/NFRegex/ServiceRow/RenameForm.tsx b/frontend/src/components/NFRegex/ServiceRow/RenameForm.tsx index e3b7b42..ea71c43 100644 --- a/frontend/src/components/NFRegex/ServiceRow/RenameForm.tsx +++ b/frontend/src/components/NFRegex/ServiceRow/RenameForm.tsx @@ -9,7 +9,7 @@ function RenameForm({ opened, onClose, service }:{ opened:boolean, onClose:()=>v const form = useForm({ initialValues: { name:service.name }, - validate:{ name: (value) => value !== "" } + validate:{ name: (value) => value !== ""? null : "Service name is required" } }) const close = () =>{ diff --git a/frontend/src/components/NFRegex/ServiceRow/index.tsx b/frontend/src/components/NFRegex/ServiceRow/index.tsx index b0c0140..4433a16 100644 --- a/frontend/src/components/NFRegex/ServiceRow/index.tsx +++ b/frontend/src/components/NFRegex/ServiceRow/index.tsx @@ -9,6 +9,7 @@ import { errorNotify, okNotify, regex_ipv4 } from '../../../js/utils'; import { BsTrashFill } from 'react-icons/bs'; import { BiRename } from 'react-icons/bi' import RenameForm from './RenameForm'; +import { MenuDropDownWithButton } from '../../MainLayout'; function ServiceRow({ service, onClick }:{ service:Service, onClick?:()=>void }) { @@ -108,13 +109,13 @@ function ServiceRow({ service, onClick }:{ service:Service, onClick?:()=>void }) <>
- + Rename service } onClick={()=>setRenameModal(true)}>Change service name Danger zone } onClick={()=>setDeleteModal(true)}>Delete Service - + ( - ({ label, value, ...props }: ItemProps, ref) =>
- ( {label} ) -{">"} {value} + ({ netint, value, ...props }: ItemProps, ref) =>
+ ( {netint} ) -{">"} {value}
); @@ -21,7 +21,7 @@ export default function PortAndInterface({ form, int_name, port_name, label }:{ useEffect(()=>{ getipinterfaces().then(data => { - setIpInterfaces(data.map(item => ({label:item.name, value:item.addr}))); + setIpInterfaces(data.map(item => ({netint:item.name, value:item.addr, label:item.addr}))); }) },[]) @@ -29,17 +29,26 @@ export default function PortAndInterface({ form, int_name, port_name, label }:{ {label?<> {label} :null} - -
- - : - -
+
+