import React, { useState, useEffect } from "react"; import { Link, Route, Routes, BrowserRouter, useNavigate } from "react-router-dom"; import { CookiesProvider } from "react-cookie"; import { removeCookies, useCookies } from "react-cookie"; import Workflows from "./views/Workflows"; import GettingStarted from "./views/GettingStarted"; import AngularWorkflow from "./views/AngularWorkflow.jsx"; import Header from "./components/NewHeader.jsx"; import HealthPage from "./components/HealthPage.jsx"; //import Header from "./components/Header.jsx"; import theme from "./theme"; import Apps from "./views/Apps"; import Apps2 from "./views/Apps2.jsx"; import AppCreator from "./views/AppCreator"; import DetectionDashBoard from "./views/DetectionDashboard.jsx"; import Welcome from "./views/Welcome.jsx"; import Dashboard from "./views/Dashboard.jsx"; import DashboardView from "./views/DashboardViews.jsx"; import AdminSetup from "./views/AdminSetup"; import Admin from "./views/Admin"; import Docs from "./views/Docs.jsx"; import Usecases2 from "./views/Usecases2.jsx"; //import Introduction from "./views/Introduction"; import SetAuthentication from "./views/SetAuthentication"; import SetAuthenticationSSO from "./views/SetAuthenticationSSO"; import Search from "./views/Search.jsx"; import RunWorkflow from "./views/RunWorkflow.jsx"; import LoginPage from "./views/LoginPage"; import SettingsPage from "./views/SettingsPage"; import KeepAlive from "./views/KeepAlive.jsx"; import { ThemeProvider } from "@mui/material/styles"; import CssBaseline from '@mui/material/CssBaseline'; import UpdateAuthentication from "./views/UpdateAuthentication.jsx"; import FrameworkWrapper from "./views/FrameworkWrapper.jsx"; import ScrollToTop from "./components/ScrollToTop"; import AlertTemplate from "./components/AlertTemplate"; import { isMobile } from "react-device-detect"; import RuntimeDebugger from "./components/RuntimeDebugger.jsx" import MFASetUp from './components/MFASetUP.jsx'; import ApiExplorerWrapper from './views/ApiExplorerWrapper.jsx'; import LeftSideBar from './components/LeftSideBar.jsx'; import CodeWorkflow from './views/CodeWorkflow.jsx'; import NotFound from './views/404.jsx'; import { ToastContainer, toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import Drift from "react-driftjs"; import { AppContext } from './context/ContextApi.jsx'; import Workflows2 from "./views/Workflows2.jsx"; // Production - backend proxy forwarding in nginx var globalUrl = window.location.origin; // CORS used for testing purposes. Should only happen with specific port and http if (window.location.port === "3000") { globalUrl = "http://localhost:5001"; //globalUrl = "http://localhost:5002" } // Development on Github Codespaces if (globalUrl.includes("app.github.dev")) { globalUrl = globalUrl.replace("-3000.", "-5001.") globalUrl = globalUrl.replace("-3001.", "-5001.") } const App = (message, props) => { const [userdata, setUserData] = useState({}); const [notifications, setNotifications] = useState([]) const [cookies, setCookie, removeCookie] = useCookies([]) const [isLoggedIn, setIsLoggedIn] = useState(false) const [dataset, setDataset] = useState(false) const [isLoaded, setIsLoaded] = useState(false) const [curpath, setCurpath] = useState(typeof window === "undefined" || window.location === undefined ? "" : window.location.pathname) useEffect(() => { if (dataset === false) { getUserNotifications(); checkLogin(); setDataset(true); } }, []); if ( isLoaded && !isLoggedIn && !window.location.pathname.startsWith("/login") && !window.location.pathname.startsWith("/docs") && !window.location.pathname.startsWith("/support") && !window.location.pathname.startsWith("/detectionframework") && !window.location.pathname.startsWith("/appframework") && !window.location.pathname.startsWith("/adminsetup") && !window.location.pathname.startsWith("/usecases") ) { window.location = "/login"; } const getUserNotifications = () => { fetch(`${globalUrl}/api/v1/users/notifications`, { credentials: "include", headers: { "Content-Type": "application/json", }, cors: "cors", }) .then((response) => response.json()) .then((responseJson) => { if ( responseJson.success === true && responseJson.notifications !== null && responseJson.notifications !== undefined && responseJson.notifications.length > 0 ) { //console.log("RESP: ", responseJson) setNotifications(responseJson.notifications); } }) .catch((error) => { console.log("Failed getting notifications for user: ", error); }); }; const checkLogin = () => { var baseurl = globalUrl; fetch(`${globalUrl}/api/v1/getinfo`, { credentials: "include", headers: { "Content-Type": "application/json", }, }) .then((response) => response.json()) .then((responseJson) => { var userInfo = {}; if (responseJson.success === true) { //console.log("USER: ", responseJson); userInfo = responseJson; setIsLoggedIn(true); //console.log("Cookies: ", cookies) // Updating cookie every request for (var key in responseJson["cookies"]) { setCookie( responseJson["cookies"][key].key, responseJson["cookies"][key].value, { path: "/" } ); } } // Handling Ethereum update //console.log("USER: ", userInfo) setUserData(userInfo); setIsLoaded(true); }) .catch((error) => { setIsLoaded(true); }); }; // Dumb for content load (per now), but good for making the site not suddenly reload parts (ajax thingies) const handleFirstInteraction = (event) => { console.log("First interaction: ", event) } const includedData =
{!isLoaded ? null : userdata.chat_disabled === true ? null : } {curpath.includes("/workflows") && curpath.includes("/run") ?
: isLoggedIn ?
:
} {/*
*/} } /> } /> } /> } /> } /> } /> {userdata.id !== undefined ? ( } /> ) : null} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } />
return ( {includedData} ); }; export default App;