import { Button, Group, Loader, LoadingOverlay, Notification, Space, PasswordInput, Title } from '@mantine/core'; import { useForm } from '@mantine/form'; import { useEffect, useState } from 'react'; import { ImCross } from 'react-icons/im'; import { Outlet, Route, Routes } from 'react-router-dom'; import MainLayout from './components/MainLayout'; import { PasswordSend, ServerStatusResponse } from './js/models'; import { DEV_IP_BACKEND, errorNotify, getstatus, HomeRedirector, IS_DEV, login, setpassword } from './js/utils'; import NFRegex from './pages/NFRegex'; import io from 'socket.io-client'; import RegexProxy from './pages/RegexProxy'; import ServiceDetailsNFRegex from './pages/NFRegex/ServiceDetails'; import ServiceDetailsProxyRegex from './pages/RegexProxy/ServiceDetails'; import PortHijack from './pages/PortHijack'; import { Firewall } from './pages/Firewall'; import { useQueryClient } from '@tanstack/react-query'; const socket = IS_DEV?io("ws://"+DEV_IP_BACKEND, {transports: ["websocket", "polling"], path:"/sock" }):io({transports: ["websocket", "polling"], path:"/sock"}); function App() { const [loading, setLoading] = useState(true); const [systemStatus, setSystemStatus] = useState({status:"", loggined:false}) const [reqError, setReqError] = useState() const [error, setError] = useState() const [loadinBtn, setLoadingBtn] = useState(false); const queryClient = useQueryClient() const getStatus = () =>{ getstatus().then( res =>{ setSystemStatus(res) setReqError(undefined) setLoading(false) }).catch(err=>{ setReqError(err.toString()) setLoading(false) setTimeout(getStatus, 500) }) } useEffect(()=>{ getStatus() socket.on("update", (data) => { queryClient.invalidateQueries({ queryKey: data }) }) socket.on("connect_error", (err) => { errorNotify("Socket.Io connection failed! ",`Error message: [${err.message}]`) getStatus() }); return () => { socket.off("update") socket.off("connect_error") } },[]) const form = useForm({ initialValues: { password:"", }, validate:{ password: (value) => value !== "" ? null : "Password is required", } }) if (loading){ return }else if (reqError){ return
Error launching Firegex! 🔥 Error communicating with backend Error: {reqError}
}else if (systemStatus.status === "init"){ const submitRequest = async (values:PasswordSend) => { setLoadingBtn(true) await setpassword(values).then(res => { if(!res){ setSystemStatus({loggined:true, status:"run"}) }else{ setError(res) } }).catch( err => setError(err.toString())) setLoadingBtn(false) } return
Setup: Choose the password for access to the firewall 🔒
{error?<> } color="red" onClose={()=>{setError(null)}}> Error: {error} :null}
}else if (systemStatus.status === "run" && !systemStatus.loggined){ const submitRequest = async (values:PasswordSend) => { setLoadingBtn(true) await login(values).then(res => { if(!res){ setSystemStatus({...systemStatus, loggined:true}) }else{ setError("Login failed") } }).catch( err => setError(err.toString())) setLoadingBtn(false) } return
Welcome to Firegex 🔥 Before you use the firewall, insert the password 🔒
{error?<> } color="red" onClose={()=>{setError(null)}}> Error: {error} :null}
}else if (systemStatus.status === "run" && systemStatus.loggined){ return }> } > } /> } > } /> } /> } /> } /> }else{ return
Error launching Firegex! 🔥 Error communicating with backend
} } export default App;