summaryrefslogtreecommitdiffhomepage
path: root/app
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 /app
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
Diffstat (limited to 'app')
-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;