From c639b434481901dd77139d5bbc96e89e76c5208e Mon Sep 17 00:00:00 2001 From: DomySh Date: Wed, 15 Jun 2022 01:23:54 +0200 Subject: [PATCH] Fixes, and made firegex responsive --- backend/proxy/__init__.py | 8 +- frontend/package-lock.json | 2 +- frontend/src/components/AddNewRegex.tsx | 97 +++++++++++--------- frontend/src/components/AddNewService.tsx | 65 +++++++------ frontend/src/components/Header/index.tsx | 46 +++++++--- frontend/src/components/RegexView/index.tsx | 2 +- frontend/src/components/ServiceRow/index.tsx | 67 ++++++++++---- frontend/src/js/utils.tsx | 12 +-- frontend/src/pages/HomePage.tsx | 23 ++++- frontend/src/pages/ServiceDetails.tsx | 43 +++------ 10 files changed, 211 insertions(+), 154 deletions(-) diff --git a/backend/proxy/__init__.py b/backend/proxy/__init__.py index 9ebe03b..d97b695 100755 --- a/backend/proxy/__init__.py +++ b/backend/proxy/__init__.py @@ -74,9 +74,11 @@ class Proxy: def compile_filters(self): res = {} for filter_obj in self.filters: - raw_filters = filter_obj.compile() - for filter in raw_filters: - res[filter] = filter_obj + try: + raw_filters = filter_obj.compile() + for filter in raw_filters: + res[filter] = filter_obj + except Exception: pass return res def add_filter(self, filter): diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5db9ac8..3f52145 100755 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -29141,4 +29141,4 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } -} +} \ No newline at end of file diff --git a/frontend/src/components/AddNewRegex.tsx b/frontend/src/components/AddNewRegex.tsx index 0d8945f..142894e 100755 --- a/frontend/src/components/AddNewRegex.tsx +++ b/frontend/src/components/AddNewRegex.tsx @@ -1,4 +1,4 @@ -import { Button, Group, Space, TextInput, Notification, Switch, NativeSelect, Tooltip } from '@mantine/core'; +import { Button, Group, Space, TextInput, Notification, Switch, NativeSelect, Tooltip, Modal } from '@mantine/core'; import { useForm } from '@mantine/hooks'; import React, { useState } from 'react'; import { RegexAddForm } from '../js/models'; @@ -15,7 +15,7 @@ type RegexAddInfo = { percentage_encoding:boolean } -function AddNewRegex({ closePopup, service }:{ closePopup:()=>void, service:string }) { +function AddNewRegex({ opened, onClose, service }:{ opened:boolean, onClose:()=>void, service:string }) { const form = useForm({ initialValues: { @@ -32,6 +32,11 @@ function AddNewRegex({ closePopup, service }:{ closePopup:()=>void, service:stri } }) + const close = () =>{ + onClose() + form.reset() + } + const [submitLoading, setSubmitLoading] = useState(false) const [error, setError] = useState(null) @@ -57,7 +62,7 @@ function AddNewRegex({ closePopup, service }:{ closePopup:()=>void, service:stri addregex(request).then( res => { if (!res){ setSubmitLoading(false) - closePopup(); + close(); okNotify(`Regex ${getHumanReadableRegex(request.regex)} has been added`, `Successfully added ${request.is_blacklist?"blacklist":"whitelist"} regex to ${request.service_id} service`) }else{ setSubmitLoading(false) @@ -71,50 +76,52 @@ function AddNewRegex({ closePopup, service }:{ closePopup:()=>void, service:stri } - return
- - - - + + - - - - - S', 'S -> C', 'C <-> S']} - label="Choose the source of the packets to filter" - variant="filled" - {...form.getInputProps('mode')} - /> - - - - - + + + + + + + + S', 'S -> C', 'C <-> S']} + label="Choose the source of the packets to filter" + variant="filled" + {...form.getInputProps('mode')} + /> + + + + + - - - {error?<> - } color="red" onClose={()=>{setError(null)}}> - Error: {error} - :null} - - + + + {error?<> + } color="red" onClose={()=>{setError(null)}}> + Error: {error} + :null} + + + } diff --git a/frontend/src/components/AddNewService.tsx b/frontend/src/components/AddNewService.tsx index 01a8c33..2331532 100755 --- a/frontend/src/components/AddNewService.tsx +++ b/frontend/src/components/AddNewService.tsx @@ -1,11 +1,11 @@ -import { Button, Group, NumberInput, Space, TextInput, Notification } from '@mantine/core'; +import { Button, Group, NumberInput, Space, TextInput, Notification, Modal } from '@mantine/core'; import { useForm } from '@mantine/hooks'; import React, { useState } from 'react'; import { ServiceAddForm } from '../js/models'; import { addservice, okNotify } from '../js/utils'; import { ImCross } from "react-icons/im" -function AddNewService({ closePopup }:{ closePopup:()=>void }) { +function AddNewService({ opened, onClose }:{ opened:boolean, onClose:()=>void }) { const form = useForm({ initialValues: { @@ -18,6 +18,11 @@ function AddNewService({ closePopup }:{ closePopup:()=>void }) { } }) + const close = () =>{ + onClose() + form.reset() + } + const [submitLoading, setSubmitLoading] = useState(false) const [error, setError] = useState(null) @@ -26,7 +31,7 @@ function AddNewService({ closePopup }:{ closePopup:()=>void }) { addservice(values).then( res => { if (!res){ setSubmitLoading(false) - closePopup(); + close(); okNotify(`Service ${values.name} has been added`, `Successfully added ${values.name} with port ${values.port}`) }else{ setSubmitLoading(false) @@ -39,37 +44,39 @@ function AddNewService({ closePopup }:{ closePopup:()=>void }) { } - return
- - + return + + + - + - + - - - + + + - - - {error?<> - } color="red" onClose={()=>{setError(null)}}> - Error: {error} - :null} - - + + + {error?<> + } color="red" onClose={()=>{setError(null)}}> + Error: {error} + :null} + + + } diff --git a/frontend/src/components/Header/index.tsx b/frontend/src/components/Header/index.tsx index f60261c..4a81fee 100755 --- a/frontend/src/components/Header/index.tsx +++ b/frontend/src/components/Header/index.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react'; -import { ActionIcon, Badge, Button, Divider, Group, Image, Menu, Modal, Notification, Space, Switch, TextInput, Tooltip, FloatingTooltip } from '@mantine/core'; +import { ActionIcon, Badge, Button, Divider, Group, Image, Menu, Modal, Notification, Space, Switch, TextInput, Tooltip, FloatingTooltip, MediaQuery } from '@mantine/core'; import style from "./Header.module.scss"; import { changepassword, errorNotify, generalstats, logout, okNotify } from '../../js/utils'; import { ChangePassword, GeneralStats, update_freq } from '../../js/models'; @@ -77,15 +77,35 @@ function Header() { const closeModal = () => {setOpen(false);} return
- +
Firegex logonavigator("/")}/>
- Services: {generalStats.services} - Filtered Connections: {generalStats.closed} - Regexes: {generalStats.regexes} + + +
+ Services: {generalStats.services} + + Filtered Connections: {generalStats.closed} + + Regexes: {generalStats.regexes} +
+
+ +
+
+ Services: {generalStats.services} + + Filtered Connections: {generalStats.closed} + + Regexes: {generalStats.regexes} +
+
+ + +
Firewall Access @@ -95,7 +115,7 @@ function Header() {
{ location.pathname !== "/"? - + navigator("/")}> @@ -103,22 +123,18 @@ function Header() { :null} - { location.pathname !== "/"? - + { srv_id? + setOpen(true)} size="xl" radius="md" variant="filled"> - : + : setOpen(true)} size="xl" radius="md" variant="filled"> } {srv_id? - - - : - - - + : + } setChangePasswordModal(false)} closeOnClickOutside={false} centered> diff --git a/frontend/src/components/RegexView/index.tsx b/frontend/src/components/RegexView/index.tsx index cf6c90d..ed7a7ae 100755 --- a/frontend/src/components/RegexView/index.tsx +++ b/frontend/src/components/RegexView/index.tsx @@ -43,7 +43,7 @@ function RegexView({ regexInfo }:{ regexInfo:RegexFilter }) { {regex_expr} - + setDeleteModal(true)} size="xl" radius="md" variant="filled"> diff --git a/frontend/src/components/ServiceRow/index.tsx b/frontend/src/components/ServiceRow/index.tsx index 0e52ede..f45f1f9 100755 --- a/frontend/src/components/ServiceRow/index.tsx +++ b/frontend/src/components/ServiceRow/index.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Badge, Grid, Space, Title, Tooltip } from '@mantine/core'; +import { ActionIcon, Badge, Grid, MediaQuery, Space, Title, Tooltip } from '@mantine/core'; import React, { useState } from 'react'; import { FaPause, FaPlay, FaStop } from 'react-icons/fa'; import { Service } from '../../js/models'; @@ -8,7 +8,7 @@ import YesNoModal from '../YesNoModal'; import { errorNotify, okNotify, pauseservice, startservice, stopservice } from '../../js/utils'; //"status":"stop"/"wait"/"active"/"pause", -function ServiceRow({ service, onClick, additional_buttons, add_new_regex }:{ service:Service, onClick?:()=>void, additional_buttons?:any, add_new_regex?:any }) { +function ServiceRow({ service, onClick, additional_buttons }:{ service:Service, onClick?:()=>void, additional_buttons?:any }) { let status_color = "gray"; switch(service.status){ @@ -63,38 +63,59 @@ function ServiceRow({ service, onClick, additional_buttons, add_new_regex }:{ se setButtonLoading(false) } - return <> - - -
-
{service.name} :{service.public_port}
- {service.internal_port} {"->"} {service.public_port} -
+ + +
+
+
{service.name} :{service.public_port}
+ {service.internal_port} {"->"} {service.public_port} +
+
+
+
+
{service.name} :{service.public_port}
+ + {service.internal_port} {"->"} {service.public_port} +
+
+ + + +
- -
- {add_new_regex} -
-
+ + + +
+ + + <> + +
Status: {service.status} Regex: {service.n_regex} Connections Blocked: {service.n_packets}
- + +
+ + + <> +
{additional_buttons} {["pause","wait"].includes(service.status)? - + setStopModal(true)} size="xl" radius="md" variant="filled" disabled={service.status === "stop"}> : - + @@ -104,7 +125,7 @@ function ServiceRow({ service, onClick, additional_buttons, add_new_regex }:{ se } - + @@ -112,8 +133,14 @@ function ServiceRow({ service, onClick, additional_buttons, add_new_regex }:{ se
- {onClick?:null} - + {onClick?
+ + +
:null} + + <> + + 1) { - regex = parts[1]; - options = parts[2]; - } + return true; // TO TEST try { - new RegExp(regex, options); + new RegExp(pattern); return true; } catch(e) { @@ -178,4 +172,4 @@ export function validateRegex(pattern:string) { export function b64encode(data:string){ return Buffer.from(data).toString('base64') -} \ No newline at end of file +} diff --git a/frontend/src/pages/HomePage.tsx b/frontend/src/pages/HomePage.tsx index 6b9743d..3d5535e 100755 --- a/frontend/src/pages/HomePage.tsx +++ b/frontend/src/pages/HomePage.tsx @@ -1,9 +1,11 @@ -import { LoadingOverlay, Space, Title } from '@mantine/core'; +import { ActionIcon, LoadingOverlay, Modal, Space, Title, Tooltip } from '@mantine/core'; import React, { useEffect, useState } from 'react'; +import { BsPlusLg } from "react-icons/bs"; import { useNavigate } from 'react-router-dom'; import ServiceRow from '../components/ServiceRow'; import { Service, update_freq } from '../js/models'; import { errorNotify, servicelist } from '../js/utils'; +import AddNewService from '../components/AddNewService'; function HomePage() { @@ -11,6 +13,8 @@ function HomePage() { const [services, setServices] = useState([]); const [loader, setLoader] = useState(true); const navigator = useNavigate() + const [open, setOpen] = useState(false); + const closeModal = () => {setOpen(false);} const updateInfo = async () => { await servicelist().then(res => { @@ -33,7 +37,22 @@ function HomePage() { {services.length > 0?services.map( srv => { navigator("/"+srv.id) - }} />):<> No services found! Add one clicking the "+" button above} + }} />):<> No services found! Add one clicking the "+" button above + +
+ + setOpen(true)} size="xl" radius="md" variant="filled"> + +
+ } + + + +
} diff --git a/frontend/src/pages/ServiceDetails.tsx b/frontend/src/pages/ServiceDetails.tsx index d356388..63f5b9c 100755 --- a/frontend/src/pages/ServiceDetails.tsx +++ b/frontend/src/pages/ServiceDetails.tsx @@ -84,47 +84,32 @@ function ServiceDetails() { return
- + setDeleteModal(true)} size="xl" radius="md" variant="filled"> - + setChangePortModal(true)} size="xl" radius="md" variant="filled"> - } add_new_regex={<> - - setOpen(true)} size="xl" radius="md" variant="filled"> - }> - {regexesList.length === 0? - <> No regex found for this service! Add one by clicking the "+" button - -
- - setOpen(true)} size="xl" radius="md" variant="filled"> - -
- - - - : + {regexesList.length === 0?<> + + No regex found for this service! Add one by clicking the "+" button + +
+ + setOpen(true)} size="xl" radius="md" variant="filled"> + +
+ : - {regexesList.map( (regexInfo) => )} + {regexesList.map( (regexInfo) => )} } - {srv_id? - - - : - null - } + {srv_id?:null}