Removed auth

Doesn't really need user account, no sensitive data held in DB, plus routes that do stuff are rate limited anyway.

Shouldn't be accessible to untrusted users (i.e. should be behind a RP that handles user auth)
This commit is contained in:
Henry Whitaker
2020-04-08 19:45:20 +01:00
parent bff43c205c
commit 4f79645191
6 changed files with 28 additions and 243 deletions

114
public/js/app.js vendored
View File

@@ -126714,7 +126714,7 @@ var HistoryGraph = /*#__PURE__*/function (_Component) {
_defineProperty(_assertThisInitialized(_this), "getData", function () { _defineProperty(_assertThisInitialized(_this), "getData", function () {
var days = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.state.days; var days = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.state.days;
var url = '/api/speedtest/time/' + days + '?token=' + _this.state.token.access_token; var url = '/api/speedtest/time/' + days;
axios__WEBPACK_IMPORTED_MODULE_2___default.a.get(url).then(function (resp) { axios__WEBPACK_IMPORTED_MODULE_2___default.a.get(url).then(function (resp) {
var duData = { var duData = {
labels: [], labels: [],
@@ -126836,7 +126836,6 @@ var HistoryGraph = /*#__PURE__*/function (_Component) {
_this.state = { _this.state = {
days: 30, days: 30,
token: _this.props.token,
duData: {}, duData: {},
duOptions: {}, duOptions: {},
pingData: {}, pingData: {},
@@ -127013,7 +127012,7 @@ var LatestResults = /*#__PURE__*/function (_Component) {
}); });
_defineProperty(_assertThisInitialized(_this), "getData", function () { _defineProperty(_assertThisInitialized(_this), "getData", function () {
var url = '/api/speedtest/latest?token=' + _this.state.token.access_token; var url = '/api/speedtest/latest';
axios__WEBPACK_IMPORTED_MODULE_2___default.a.get(url).then(function (resp) { axios__WEBPACK_IMPORTED_MODULE_2___default.a.get(url).then(function (resp) {
_this.setState({ _this.setState({
data: resp.data, data: resp.data,
@@ -127025,7 +127024,7 @@ var LatestResults = /*#__PURE__*/function (_Component) {
}); });
_defineProperty(_assertThisInitialized(_this), "newScan", function () { _defineProperty(_assertThisInitialized(_this), "newScan", function () {
var url = '/api/speedtest/run?token=' + _this.state.token.access_token; var url = '/api/speedtest/run';
axios__WEBPACK_IMPORTED_MODULE_2___default.a.get(url).then(function (resp) { axios__WEBPACK_IMPORTED_MODULE_2___default.a.get(url).then(function (resp) {
react_toastify__WEBPACK_IMPORTED_MODULE_5__["toast"].info('A scan has been queued. This page will refresh when the scan has finished.'); react_toastify__WEBPACK_IMPORTED_MODULE_5__["toast"].info('A scan has been queued. This page will refresh when the scan has finished.');
})["catch"](function (err) { })["catch"](function (err) {
@@ -127042,7 +127041,6 @@ var LatestResults = /*#__PURE__*/function (_Component) {
}); });
_this.state = { _this.state = {
token: _this.props.token,
data: {}, data: {},
interval: null, interval: null,
loading: true loading: true
@@ -127412,29 +127410,18 @@ var HomePage = /*#__PURE__*/function (_Component) {
var _super = _createSuper(HomePage); var _super = _createSuper(HomePage);
function HomePage(props) { function HomePage() {
var _this;
_classCallCheck(this, HomePage); _classCallCheck(this, HomePage);
_this = _super.call(this, props); return _super.apply(this, arguments);
_this.state = {
token: _this.props.token
};
return _this;
} }
_createClass(HomePage, [{ _createClass(HomePage, [{
key: "render", key: "render",
value: function render() { value: function render() {
var token = this.state.token;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
className: "my-4" className: "my-4"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Graphics_LatestResults__WEBPACK_IMPORTED_MODULE_3__["default"], { }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Graphics_LatestResults__WEBPACK_IMPORTED_MODULE_3__["default"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Graphics_HistoryGraph__WEBPACK_IMPORTED_MODULE_2__["default"], null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Footer__WEBPACK_IMPORTED_MODULE_4__["default"], null));
token: token
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Graphics_HistoryGraph__WEBPACK_IMPORTED_MODULE_2__["default"], {
token: token
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Footer__WEBPACK_IMPORTED_MODULE_4__["default"], null));
} }
}]); }]);
@@ -127741,8 +127728,6 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function"
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -127765,81 +127750,17 @@ var Index = /*#__PURE__*/function (_Component) {
_classCallCheck(this, Index); _classCallCheck(this, Index);
_this = _super.call(this, props); _this = _super.call(this, props);
_defineProperty(_assertThisInitialized(_this), "lookForToken", function () {
var token = JSON.parse(localStorage.getItem('token'));
if (token == null) {
_this.setState({
loading: false
});
} else {
_this.tryToken(token);
}
});
_defineProperty(_assertThisInitialized(_this), "setToken", function (token) {
localStorage.setItem('token', JSON.stringify(token));
_this.setState({
loading: true,
token: token
});
_this.tryToken(token);
});
_defineProperty(_assertThisInitialized(_this), "tryToken", function (token) {
var reload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
axios__WEBPACK_IMPORTED_MODULE_3___default.a.get('/api/auth/me?token=' + token.access_token).then(function (resp) {
_this.setState({
user: resp.data,
loading: false,
redirectLogin: false,
token: token
});
if (reload) {
_this.setState({
redirectHome: true
});
}
})["catch"](function (err) {
console.log('Invalid token');
console.log(err);
_this.setState({
redirectLogin: true
});
});
});
_this.state = { _this.state = {
loading: true, loading: true
redirectLogin: true,
redirectHome: false,
token: null,
user: null
}; };
return _this; return _this;
} }
_createClass(Index, [{ _createClass(Index, [{
key: "componentDidMount",
value: function componentDidMount() {
this.lookForToken();
}
}, {
key: "render", key: "render",
value: function render() { value: function render() {
var _this2 = this;
var loading = this.state.loading; var loading = this.state.loading;
var redirectLogin = this.state.redirectLogin; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["BrowserRouter"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
var redirectHome = this.state.redirectHome;
var user = this.state.user;
var token = this.state.token;
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, loading ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Loader__WEBPACK_IMPORTED_MODULE_5__["default"], null)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["BrowserRouter"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
render: function render(props) { render: function render(props) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_toastify__WEBPACK_IMPORTED_MODULE_7__["ToastContainer"], null); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_toastify__WEBPACK_IMPORTED_MODULE_7__["ToastContainer"], null);
} }
@@ -127847,18 +127768,7 @@ var Index = /*#__PURE__*/function (_Component) {
exact: true, exact: true,
path: "/", path: "/",
render: function render(props) { render: function render(props) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Home_HomePage__WEBPACK_IMPORTED_MODULE_9__["default"], { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Home_HomePage__WEBPACK_IMPORTED_MODULE_9__["default"], null));
user: user,
token: token
}));
}
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
exact: true,
path: "/login",
render: function render(props) {
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_Login__WEBPACK_IMPORTED_MODULE_6__["default"], {
setToken: _this2.setToken
}));
} }
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], { }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Route"], {
exact: true, exact: true,
@@ -127874,11 +127784,7 @@ var Index = /*#__PURE__*/function (_Component) {
code: "404" code: "404"
}); });
} }
})), redirectLogin && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Redirect"], { })));
to: "/login"
}), redirectHome && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__["Redirect"], {
to: "/"
}))));
} }
}]); }]);

View File

@@ -12,7 +12,6 @@ export default class HistoryGraph extends Component {
this.state = { this.state = {
days: 30, days: 30,
token: this.props.token,
duData: {}, duData: {},
duOptions: {}, duOptions: {},
pingData: {}, pingData: {},
@@ -31,7 +30,7 @@ export default class HistoryGraph extends Component {
} }
getData = (days = this.state.days) => { getData = (days = this.state.days) => {
var url = '/api/speedtest/time/' + days + '?token=' + this.state.token.access_token; var url = '/api/speedtest/time/' + days;
Axios.get(url) Axios.get(url)
.then((resp) => { .then((resp) => {

View File

@@ -12,7 +12,6 @@ export default class LatestResults extends Component {
super(props) super(props)
this.state = { this.state = {
token: this.props.token,
data: {}, data: {},
interval: null, interval: null,
loading: true, loading: true,
@@ -28,7 +27,7 @@ export default class LatestResults extends Component {
} }
getData = () => { getData = () => {
var url = '/api/speedtest/latest?token=' + this.state.token.access_token; var url = '/api/speedtest/latest';
Axios.get(url) Axios.get(url)
.then((resp) => { .then((resp) => {
@@ -43,7 +42,7 @@ export default class LatestResults extends Component {
} }
newScan = () => { newScan = () => {
var url = '/api/speedtest/run?token=' + this.state.token.access_token; var url = '/api/speedtest/run';
Axios.get(url) Axios.get(url)
.then((resp) => { .then((resp) => {

View File

@@ -5,22 +5,13 @@ import LatestResults from '../Graphics/LatestResults';
import Footer from './Footer'; import Footer from './Footer';
export default class HomePage extends Component { export default class HomePage extends Component {
constructor(props) {
super(props)
this.state = {
token: this.props.token,
}
}
render() { render() {
var token = this.state.token;
return ( return (
<div> <div>
<div className="my-4"> <div className="my-4">
<LatestResults token={token} /> <LatestResults />
<HistoryGraph token={token} /> <HistoryGraph />
</div> </div>
<Footer /> <Footer />
</div> </div>

101
resources/js/index.js vendored
View File

@@ -15,102 +15,25 @@ export default class Index extends Component {
this.state = { this.state = {
loading: true, loading: true,
redirectLogin: true,
redirectHome: false,
token: null,
user: null,
} }
} }
componentDidMount() {
this.lookForToken();
}
lookForToken = () => {
var token = JSON.parse(localStorage.getItem('token'));
if(token == null) {
this.setState({
loading: false,
});
} else {
this.tryToken(token)
}
}
setToken = (token) => {
localStorage.setItem('token', JSON.stringify(token));
this.setState({
loading: true,
token: token,
});
this.tryToken(token);
}
tryToken = (token, reload = true) => {
Axios.get('/api/auth/me?token=' + token.access_token)
.then((resp) => {
this.setState({
user: resp.data,
loading: false,
redirectLogin: false,
token: token
});
if(reload) {
this.setState({
redirectHome: true
});
}
})
.catch((err) => {
console.log('Invalid token');
console.log(err);
this.setState({
redirectLogin: true
});
})
}
render() { render() {
var loading = this.state.loading; var loading = this.state.loading;
var redirectLogin = this.state.redirectLogin;
var redirectHome = this.state.redirectHome;
var user = this.state.user;
var token = this.state.token;
return ( return (
<div> <BrowserRouter>
{loading ? <Route render={(props) => (<ToastContainer />)} />
<div> <Switch>
<Loader /> <Route exact path="/" render={(props) => (
</div> <div>
: <HomePage />
<div> </div>
<BrowserRouter> )} />
<Route render={(props) => (<ToastContainer />)} /> <Route exact path="/error/:code" render={(props) => ( <ErrorPage code={props.match.params.code} /> )} />
<Switch> <Route render={(props) => (<ErrorPage code="404" />)} />
<Route exact path="/" render={(props) => ( </Switch>
<div> </BrowserRouter>
<HomePage user={user} token={token} />
</div>
)} />
<Route exact path="/login" render={(props) => (
<div>
<Login setToken={this.setToken} />
</div>
)} />
<Route exact path="/error/:code" render={(props) => ( <ErrorPage code={props.match.params.code} /> )} />
<Route render={(props) => (<ErrorPage code="404" />)} />
</Switch>
{redirectLogin &&
<Redirect to="/login"></Redirect>
}
{redirectHome &&
<Redirect to="/"></Redirect>
}
</BrowserRouter>
</div>
}
</div>
); );
} }
} }

View File

@@ -15,41 +15,8 @@ use Illuminate\Support\Facades\Route;
| |
*/ */
Route::group(
[
'middleware' => 'api',
'prefix' => 'auth'
],
function ($router) {
Route::post('register', 'AuthController@register')->name('auth.register');
Route::get('verify-email', 'AuthController@verifyEmail')->middleware('throttle:5,1')->name('auth.verify_email');
Route::post('login', 'AuthController@login')->middleware('throttle:10,1')->name('auth.login');
Route::get('logout', 'AuthController@logout')->name('auth.logout');
Route::get('refresh', 'AuthController@refresh')->middleware(['throttle:5,1' ])->name('auth.refresh');
Route::get('me', 'AuthController@me')->middleware(['session_active' ])->name('auth.me');
Route::put('details', 'UserController@update')->name('auth.user.update_details');
Route::group(
[
'middleware' => ['api', 'session_active' ],
'prefix' => 'sessions'
],
function($router) {
Route::get('/', 'AuthController@getSessions')->name('auth.sessions.all');
Route::delete('/{id}', 'AuthController@deleteSession')->name('auth.sessions.delete');
}
);
}
);
Route::group([ Route::group([
'middleware' => [ 'api', 'session_active' ], 'middleware' => [ 'api' ],
'prefix' => 'speedtest' 'prefix' => 'speedtest'
], function($router) { ], function($router) {
Route::get('/', 'SpeedtestController@index') Route::get('/', 'SpeedtestController@index')