diff options
| author | Andrej Mihajlov <and@codeispoetry.ru> | 2017-02-28 11:46:15 +0000 |
|---|---|---|
| committer | Andrej Mihajlov <and@codeispoetry.ru> | 2017-02-28 11:46:15 +0000 |
| commit | bc060f9c4028c2b9624754cda61000f47fa631c9 (patch) | |
| tree | 779bff3867c34feb24c9c7b26e61f1fc53eddba5 | |
| parent | 71cb77b2b929b0e258a703c5d7f92c2337e76234 (diff) | |
| download | mullvadvpn-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.js | 17 | ||||
| -rw-r--r-- | app/routes.js | 43 |
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; |
