import axios from 'axios'; import React from 'react'; import { useState, useEffect } from "react"; import ReactDOM from "react-dom"; import { BrowserRouter as Router, Switch, Route } from 'react-router-dom'; import { PageTransition, __esModule } from '@steveeeie/react-page-transition'; import { GuardProvider, GuardedRoute } from 'react-router-guards' import Config from '../config.js'; import Navbar from '../components/Navbar.js'; import Banner from '../components/Banner.js'; import Footer from '../components/Footer.js'; import Loader from '../Components/Loader.js'; import { Home } from '../Pages/Home.js'; import { Auth } from '../Pages/Auth.js'; import { NotFound, InternalServerError } from '../Pages/Errors.js'; import { Maintenance } from '../Pages/Maintenance.js'; import { Games } from '../Pages/Games.js'; import { About } from '../Pages/Legal/About.js'; import { Copyright } from '../Pages/Legal/Copyright.js'; import { Privacy } from '../Pages/Legal/Privacy.js'; import { Terms } from '../Pages/Legal/Terms.js'; import { getCookie, setCookie } from '../helpers/utils.js'; import Dashboard from '../pages/Dashboard.js'; import Forum from '../pages/Forum.js'; import Post from '../pages/Post.js'; import CreatePost from '../pages/CreatePost.js'; import CreateReply from '../pages/CreateReply.js'; import Settings from '../pages/Settings.js'; import User from '../pages/User.js'; import Catalog from '../pages/Catalog.js'; axios.defaults.withCredentials = true var url = Config.BaseUrl.replace('http://', ''); var protocol = Config.Protocol; const App = () => { const [state, setState] = useState({maintenance: false, theme: 0, banners: [], offlineFetch: false, loading: true}); const [user, setUser] = useState([]); const [userLoad, setUserLoad] = useState(true); function updateBanners() { axios.get(`${protocol}apis.${url}/banners/data`) .then((response) => { var result = []; response.data.map(function(banner){ result.push(); }); setState({banners: result}); }); } function fetchUser() { const body = new FormData(); body.append('token', encodeURIComponent(getCookie(`gtok`))); body.append('decision', `metaUser`); axios.post(`${protocol}apis.${url}/fetch/user`, body).then((res)=>{ if (res.data.data == `expired`) {setCookie(`gtok`, null, null);window.location.replace(`/login`);} setUser(res.data.data); setUserLoad(false); }); return new Promise(async (resolve, reject)=>{ resolve("good"); }); } function updateOfflineStatus() { axios.get(`${protocol}apis.${url}/`) .then((response) => { if(state.maintenance == true) window.location.reload(); }) .catch((error) => { if (error.response) { if(error.response.status == 503) setState({maintenance: true, theme: 1}); } }) .finally(() => { setState({offlineFetched: true}); }); } const authMiddleware = (to, from, next) => { if (to.meta.auth) { if (user) {next();} next.redirect(`/login`); }else if (to.meta.guest) { if (!user) {next();} next.redirect(`/home`); }else if (to.meta.staff) { if (user && user.power) {next();} next.redirect(`/`); } } useEffect(async ()=>{ await fetchUser(); updateBanners(); updateOfflineStatus(); setInterval(updateBanners, 2*60*1000 /* 2 mins */); setInterval(updateOfflineStatus, 10*60*1000 /* 10 mins */); setState({loading: true}); }, []); document.documentElement.classList.add(state.theme == 0 ? 'gtoria-light' : 'gtoria-dark'); document.documentElement.classList.remove(!(state.theme == 0) ? 'gtoria-light' : 'gtoria-dark'); return ( !state.loading && !userLoad? {state.banners && state.banners.length >= 1 ? state.banners : null} { return (
{ !state.isError ? {/* <- Simpler way of writing this */} {state.maintenance ? : null} : }