import {Badge, Layout, Menu, theme} from "antd"; import { ApiOutlined, BankOutlined, CloudServerOutlined, FileProtectOutlined, FileSearchOutlined, InfoCircleOutlined, LineChartOutlined, LoginOutlined, LogoutOutlined, QuestionCircleOutlined, SearchOutlined, TeamOutlined, UserOutlined } from "@ant-design/icons"; import {Link, Navigate, Route, Routes, useLocation, useNavigate} from "react-router-dom"; import TextPage from "./pages/TextPage"; import tos from "./content/tos.md"; import privacy from "./content/privacy.md"; import DomainSearchPage from "./pages/search/DomainSearchPage"; import EntitySearchPage from "./pages/search/EntitySearchPage"; import NameserverSearchPage from "./pages/search/NameserverSearchPage"; import TldPage from "./pages/info/TldPage"; import StatisticsPage from "./pages/info/StatisticsPage"; import WatchlistsPage from "./pages/tracking/WatchlistsPage"; import UserPage from "./pages/watchdog/UserPage"; import React, {useCallback, useEffect, useMemo, useState} from "react"; import {getUser} from "./utils/api"; import FAQPage from "./pages/FAQPage"; import LoginPage, {AuthenticatedContext} from "./pages/LoginPage"; import ConnectorsPage from "./pages/tracking/ConnectorsPage"; import NotFoundPage from "./pages/NotFoundPage"; export default function App() { const { token: {colorBgContainer, borderRadiusLG}, } = theme.useToken() const navigate = useNavigate() const location = useLocation() const [isAuthenticated, setIsAuthenticated] = useState(false) const authenticated = useCallback((authenticated: boolean) => { setIsAuthenticated(authenticated) }, []); const contextValue = useMemo(() => ({ authenticated, setIsAuthenticated }), [authenticated, setIsAuthenticated]); useEffect(() => { getUser().then(() => { setIsAuthenticated(true) if (location.pathname === '/login') navigate('/search/domain') }).catch(() => { setIsAuthenticated(false) if (location.pathname !== '/login') navigate('/login') }) }, []); const menuItems = [ { key: '1', label: 'Search', icon: , children: [ { key: '1-1', icon: , label: 'Domain', title: 'Domain Finder', disabled: !isAuthenticated, onClick: () => navigate('/search/domain') }, { key: '1-2', icon: , label: 'Entity', title: 'Entity Finder', disabled: !isAuthenticated, onClick: () => navigate('/search/entity') }, { key: '1-3', icon: , label: 'Nameserver', title: 'Nameserver Finder', disabled: !isAuthenticated, onClick: () => navigate('/search/nameserver') } ] }, { key: '2', label: 'Information', icon: , children: [ { key: '2-1', icon: , label: 'TLD', title: 'TLD list', disabled: !isAuthenticated, onClick: () => navigate('/info/tld') }, { key: '2-2', icon: , label: 'Statistics', disabled: !isAuthenticated, onClick: () => navigate('/info/stats') } ] }, { key: '3', label: 'Tracking', icon: , children: [ { key: '3-1', icon: , label: 'My Watchlists', disabled: !isAuthenticated, onClick: () => navigate('/tracking/watchlist') }, { key: '3-2', icon: , label: 'My connectors', disabled: !isAuthenticated, onClick: () => navigate('/tracking/connectors') } ] }, { key: '4', label: 'My Watchdog', icon: , children: [ { key: '4-1', icon: , label: 'My Account', disabled: !isAuthenticated, onClick: () => navigate('/user') }, { key: '4-2', icon: , label: 'TOS', onClick: () => navigate('/tos') }, { key: '4-3', icon: , label: 'Privacy Policy', onClick: () => navigate('/privacy') } ] }, { key: '5', icon: , label: 'FAQ', onClick: () => navigate('/faq') }, ] return , label: 'Log out', danger: true, onClick: () => window.location.replace("/logout") } : { key: '8', icon: , label: 'Log in', onClick: () => navigate('/login') }]} />
}/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/>
Domain Watchdog ©{new Date().getFullYear()} Created by Maël Gangloff
}