import { Button, Group, Loader, LoadingOverlay, Notification, Space, PasswordInput, Title, Box } 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 { errorNotify, getstatus, HomeRedirector, IS_DEV, login, setpassword, socketio } from './js/utils'; import NFRegex from './pages/NFRegex'; import ServiceDetailsNFRegex from './pages/NFRegex/ServiceDetails'; import PortHijack from './pages/PortHijack'; import { Firewall } from './pages/Firewall'; import { useQueryClient } from '@tanstack/react-query'; import NFProxy from './pages/NFProxy'; import ServiceDetailsNFProxy from './pages/NFProxy/ServiceDetails'; import { useAuth } from './js/store'; 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 { isAuthenticated, access_token } = useAuth() useEffect(()=>{ socketio.auth = { token: access_token || "" } socketio.connect() getStatus() socketio.on("update", (data) => { queryClient.invalidateQueries({ queryKey: data }) }) socketio.on("connect_error", (err) => { if (access_token){ errorNotify("Socket.Io connection failed! ",`Error message: [${err.message}]`) } getStatus() }); return () => { socketio.off("update") socketio.off("connect_error") socketio.disconnect() } },[isAuthenticated]) const getStatus = () =>{ getstatus().then( res =>{ setSystemStatus(res) setReqError(undefined) }).catch(err=>{ setReqError(err.toString()) setTimeout(getStatus, 500) }).finally( ()=>setLoading(false) ) } useEffect(()=>{ getStatus() },[]) 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 } } const PageRouting = ({ getStatus }:{ getStatus:()=>void }) => { return }> } > } /> } > } /> } /> } /> } /> } export default App;