summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@codeispoetry.ru>2017-02-28 11:46:15 +0000
committerAndrej Mihajlov <and@codeispoetry.ru>2017-02-28 11:46:15 +0000
commitbc060f9c4028c2b9624754cda61000f47fa631c9 (patch)
tree779bff3867c34feb24c9c7b26e61f1fc53eddba5
parent71cb77b2b929b0e258a703c5d7f92c2337e76234 (diff)
downloadmullvadvpn-bc060f9c4028c2b9624754cda61000f47fa631c9.tar.xz
mullvadvpn-bc060f9c4028c2b9624754cda61000f47fa631c9.zip
Add routes validation
1. Redirect user to login when not logged in 2. Redirect user to main screen when logged in but still on login screen
-rw-r--r--app/app.js17
-rw-r--r--app/routes.js43
2 files changed, 51 insertions, 9 deletions
diff --git a/app/app.js b/app/app.js
index 960a9b6a78..1438984cf7 100644
--- a/app/app.js
+++ b/app/app.js
@@ -4,7 +4,7 @@ import { Provider } from 'react-redux';
import { Router, createMemoryHistory } from 'react-router';
import { syncHistoryWithStore, replace } from 'react-router-redux';
import { webFrame, ipcRenderer } from 'electron';
-import routes from './routes';
+import makeRoutes from './routes';
import configureStore from './store';
import userActions from './actions/user';
import connectActions from './actions/connect';
@@ -14,6 +14,21 @@ import { LoginState, ConnectionState } from './constants';
const initialState = {};
const memoryHistory = createMemoryHistory();
const store = configureStore(initialState, memoryHistory);
+const routes = makeRoutes(store);
+
+// reset login state if user quit the app during login
+if([LoginState.connecting, LoginState.failed].includes(store.getState().user.status)) {
+ store.dispatch(userActions.loginChange({
+ status: LoginState.none
+ }));
+}
+
+// reset connection state if user quit the app when connecting
+if([ConnectionState.connecting, ConnectionState.failed].includes(store.getState().connect.status)) {
+ store.dispatch(connectActions.connectionChange({
+ status: ConnectionState.disconnected
+ }));
+}
// desperately trying to fix https://github.com/reactjs/react-router-redux/issues/534
memoryHistory.replace('/');
diff --git a/app/routes.js b/app/routes.js
index 8ce2e06433..92ba2ee024 100644
--- a/app/routes.js
+++ b/app/routes.js
@@ -7,11 +7,38 @@ import ConnectPage from './containers/ConnectPage';
import SettingsPage from './containers/SettingsPage';
import SelectLocationPage from './containers/SelectLocationPage';
-export default (
- <Route path="/" component={ App }>
- <IndexRoute component={ LoginPage } />
- <Route path="connect" component={ ConnectPage } />
- <Route path="settings" component={ SettingsPage } />
- <Route path="select-location" component={ SelectLocationPage } />
- </Route>
-);
+import { LoginState } from './constants';
+
+const makeRoutes = (store) => {
+
+ /**
+ * Ensures that user is redirected to /connect if logged in
+ */
+ const ensureConnect = (nextState, replace) => {
+ let { user } = store.getState();
+ if(user.status === LoginState.ok) {
+ replace('/connect');
+ }
+ };
+
+ /**
+ * Ensures that user is redirected to / login if not logged in
+ */
+ const ensureLoggedIn = (nextState, replace) => {
+ let { user } = store.getState();
+ if(user.status !== LoginState.ok) {
+ replace('/');
+ }
+ };
+
+ return (
+ <Route path="/" component={ App }>
+ <IndexRoute component={ LoginPage } onEnter={ ensureConnect } />
+ <Route path="connect" component={ ConnectPage } onEnter={ ensureLoggedIn } />
+ <Route path="settings" component={ SettingsPage } onEnter={ ensureLoggedIn } />
+ <Route path="select-location" component={ SelectLocationPage } onEnter={ ensureLoggedIn } />
+ </Route>
+ );
+};
+
+export default makeRoutes;