2023-03-29 15:20:05 +00:00

126 lines
4.2 KiB
JavaScript
Vendored

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Switch, Route, Redirect, useHistory } from 'react-router-dom';
import Axios from 'axios';
import ErrorPage from './components/ErrorPage';
import Loader from './components/Loader';
import { ToastContainer } from 'react-toastify';
import 'react-toastify/dist/ReactToastify.css';
import HomePage from './components/Home/HomePage';
import Cookies from 'js-cookie';
import SettingsIndex from './components/Settings/SettingsIndex';
import SpeedtestsPage from './components/SpeedtestsPage';
export default class Index extends Component {
constructor(props) {
super(props)
this.state = {
loading: true,
redirect: false,
}
}
componentDidMount = () => {
this.getConfig();
}
getConfig() {
var url = 'api/settings/config';
Axios.get(url)
.then((resp) => {
window.config = resp.data;
if(window.config.auth === true) {
var authCookie = Cookies.get('auth');
if(authCookie == undefined) {
window.authenticated = false;
this.setState({
loading: false,
redirect: true,
});
} else {
var url = 'api/auth/me?token=' + authCookie;
Axios.get(url)
.then((resp) => {
window.authenticated = true;
window.token = authCookie;
})
.catch((err) => {
Cookies.remove('auth');
window.authenticated = false;
})
.finally(() => {
this.setState({
loading: false,
redirect: true,
});
})
}
} else {
this.setState({
loading: false,
redirect: true,
});
}
})
}
render() {
var loading = this.state.loading;
var redirect = this.state.redirect;
var baseSet = this.isset(window.config);
if(loading) {
return (
<Loader />
);
} else {
if(baseSet && window.config.base) {
return (
<BrowserRouter>
<Route render={(props) => (<ToastContainer />)} />
<Switch>
<Route exact path={window.config.base} render={(props) => (
<div>
<HomePage />
</div>
)} />
<Route exact path={window.config.base + 'speedtests'} render={(props) => (
<div>
<SpeedtestsPage />
</div>
)} />
<Route exact path={window.config.base + 'settings'} render={(props) => (
<div>
<SettingsIndex refreshConfig={this.getConfig} />
</div>
)} />
<Route exact path={window.config.base + "error/:code"} render={(props) => ( <ErrorPage code={props.match.params.code} /> )} />
<Route render={(props) => (<ErrorPage code="404" />)} />
</Switch>
</BrowserRouter>
);
} else {
return (
<Loader />
);
}
}
}
isset(v) {
if(typeof v !== "undefined" || v !== null) {
return true;
} else {
return false;
}
}
}
if (document.getElementById('main')) {
ReactDOM.render(<Index />, document.getElementById('main'));
}