diff --git a/client/coral-admin/src/actions/auth.js b/client/coral-admin/src/actions/auth.js
index 89b56d4dc..faa18a199 100644
--- a/client/coral-admin/src/actions/auth.js
+++ b/client/coral-admin/src/actions/auth.js
@@ -1,7 +1,12 @@
import * as actions from '../constants/auth';
+import * as Storage from 'coral-framework/helpers/storage';
import coralApi from 'coral-framework/helpers/response';
+import {handleAuthToken, logout} from 'coral-framework/actions/auth';
+
+//==============================================================================
+// SIGN IN
+//==============================================================================
-// Log In.
export const handleLogin = (email, password, recaptchaResponse) => dispatch => {
dispatch({type: actions.LOGIN_REQUEST});
const params = {method: 'POST', body: {email, password}};
@@ -9,27 +14,44 @@ export const handleLogin = (email, password, recaptchaResponse) => dispatch => {
params.headers = {'X-Recaptcha-Response': recaptchaResponse};
}
return coralApi('/auth/local', params)
- .then(({user}) => {
+ .then(({user, token}) => {
if (!user) {
+ Storage.removeItem('token');
return dispatch(checkLoginFailure('not logged in'));
}
-
+ dispatch(handleAuthToken(token));
const isAdmin = !!user.roles.filter(i => i === 'ADMIN').length;
dispatch(checkLoginSuccess(user, isAdmin));
})
.catch(error => {
-
+ console.log(error);
if (error.translation_key === 'LOGIN_MAXIMUM_EXCEEDED') {
- dispatch({type: actions.LOGIN_MAXIMUM_EXCEEDED, message: error.translation_key});
+ dispatch({
+ type: actions.LOGIN_MAXIMUM_EXCEEDED,
+ message: error.translation_key
+ });
} else {
dispatch({type: actions.LOGIN_FAILURE, message: error.translation_key});
}
});
};
-const forgotPassowordRequest = () => ({type: actions.FETCH_FORGOT_PASSWORD_REQUEST});
-const forgotPassowordSuccess = () => ({type: actions.FETCH_FORGOT_PASSWORD_SUCCESS});
-const forgotPassowordFailure = () => ({type: actions.FETCH_FORGOT_PASSWORD_FAILURE});
+//==============================================================================
+// FORGOT PASSWORD
+//==============================================================================
+
+
+const forgotPassowordRequest = () => ({
+ type: actions.FETCH_FORGOT_PASSWORD_REQUEST
+});
+
+const forgotPassowordSuccess = () => ({
+ type: actions.FETCH_FORGOT_PASSWORD_SUCCESS
+});
+
+const forgotPassowordFailure = () => ({
+ type: actions.FETCH_FORGOT_PASSWORD_FAILURE
+});
export const requestPasswordReset = email => dispatch => {
dispatch(forgotPassowordRequest(email));
@@ -38,17 +60,31 @@ export const requestPasswordReset = email => dispatch => {
.catch(error => dispatch(forgotPassowordFailure(error)));
};
-// Check Login
+//==============================================================================
+// CHECK LOGIN
+//==============================================================================
-const checkLoginRequest = () => ({type: actions.CHECK_LOGIN_REQUEST});
-const checkLoginSuccess = (user, isAdmin) => ({type: actions.CHECK_LOGIN_SUCCESS, user, isAdmin});
-const checkLoginFailure = error => ({type: actions.CHECK_LOGIN_FAILURE, error});
+const checkLoginRequest = () => ({
+ type: actions.CHECK_LOGIN_REQUEST
+});
+
+const checkLoginSuccess = (user, isAdmin) => ({
+ type: actions.CHECK_LOGIN_SUCCESS,
+ user,
+ isAdmin
+});
+
+const checkLoginFailure = error => ({
+ type: actions.CHECK_LOGIN_FAILURE,
+ error
+});
export const checkLogin = () => dispatch => {
dispatch(checkLoginRequest());
return coralApi('/auth')
.then(({user}) => {
if (!user) {
+ Storage.removeItem('token');
return dispatch(checkLoginFailure('not logged in'));
}
@@ -59,17 +95,4 @@ export const checkLogin = () => dispatch => {
console.error(error);
dispatch(checkLoginFailure(`${error.translation_key}`));
});
-};
-
-// LogOut Actions
-
-const logOutRequest = () => ({type: actions.LOGOUT_REQUEST});
-const logOutSuccess = () => ({type: actions.LOGOUT_SUCCESS});
-const logOutFailure = () => ({type: actions.LOGOUT_FAILURE});
-
-export const logout = () => dispatch => {
- dispatch(logOutRequest());
- return coralApi('/auth', {method: 'DELETE'})
- .then(() => dispatch(logOutSuccess()))
- .catch(error => dispatch(logOutFailure(error)));
-};
+};
\ No newline at end of file
diff --git a/client/coral-admin/src/constants/auth.js b/client/coral-admin/src/constants/auth.js
index 610b21c89..a0c06f72e 100644
--- a/client/coral-admin/src/constants/auth.js
+++ b/client/coral-admin/src/constants/auth.js
@@ -2,9 +2,7 @@ export const CHECK_LOGIN_REQUEST = 'CHECK_LOGIN_REQUEST';
export const CHECK_LOGIN_SUCCESS = 'CHECK_LOGIN_SUCCESS';
export const CHECK_LOGIN_FAILURE = 'CHECK_LOGIN_FAILURE';
-export const LOGOUT_REQUEST = 'LOGOUT_REQUEST';
-export const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS';
-export const LOGOUT_FAILURE = 'LOGOUT_FAILURE';
+export const LOGOUT = 'LOGOUT';
export const LOGIN_REQUEST = 'LOGIN_REQUEST';
export const LOGIN_SUCCESS = 'LOGIN_SUCCESS';
diff --git a/client/coral-admin/src/containers/LayoutContainer.js b/client/coral-admin/src/containers/LayoutContainer.js
index 42e2baade..04a83e39b 100644
--- a/client/coral-admin/src/containers/LayoutContainer.js
+++ b/client/coral-admin/src/containers/LayoutContainer.js
@@ -1,20 +1,21 @@
import React, {Component} from 'react';
import {connect} from 'react-redux';
import Layout from '../components/ui/Layout';
-import {checkLogin, handleLogin, logout, requestPasswordReset} from '../actions/auth';
-import {toggleModal as toggleShortcutModal} from '../actions/moderation';
import {fetchConfig} from '../actions/config';
+import {logout} from 'coral-framework/actions/auth';
import {FullLoading} from '../components/FullLoading';
import AdminLogin from '../components/AdminLogin';
+import {toggleModal as toggleShortcutModal} from '../actions/moderation';
+import {checkLogin, handleLogin, requestPasswordReset} from '../actions/auth';
class LayoutContainer extends Component {
- componentWillMount () {
+ componentWillMount() {
const {checkLogin, fetchConfig} = this.props;
checkLogin();
fetchConfig();
}
- render () {
+ render() {
const {
isAdmin,
loggedIn,
@@ -24,19 +25,34 @@ class LayoutContainer extends Component {
passwordRequestSuccess
} = this.props.auth;
- const {handleLogout, toggleShortcutModal, TALK_RECAPTCHA_PUBLIC} = this.props;
- if (loadingUser) { return ; }
+ const {
+ handleLogout,
+ toggleShortcutModal,
+ TALK_RECAPTCHA_PUBLIC
+ } = this.props;
+ if (loadingUser) {
+ return ;
+ }
if (!isAdmin) {
- return ;
+ return (
+
+ );
}
if (isAdmin && loggedIn) {
- return ;
+ return (
+
+ );
}
return ;
}
@@ -44,19 +60,19 @@ class LayoutContainer extends Component {
const mapStateToProps = state => ({
auth: state.auth.toJS(),
- TALK_RECAPTCHA_PUBLIC: state.config.get('data').get('TALK_RECAPTCHA_PUBLIC', null)
+ TALK_RECAPTCHA_PUBLIC: state.config
+ .get('data')
+ .get('TALK_RECAPTCHA_PUBLIC', null)
});
const mapDispatchToProps = dispatch => ({
checkLogin: () => dispatch(checkLogin()),
fetchConfig: () => dispatch(fetchConfig()),
- handleLogin: (username, password, recaptchaResponse) => dispatch(handleLogin(username, password, recaptchaResponse)),
+ handleLogin: (username, password, recaptchaResponse) =>
+ dispatch(handleLogin(username, password, recaptchaResponse)),
requestPasswordReset: email => dispatch(requestPasswordReset(email)),
toggleShortcutModal: toggle => dispatch(toggleShortcutModal(toggle)),
handleLogout: () => dispatch(logout())
});
-export default connect(
- mapStateToProps,
- mapDispatchToProps
-)(LayoutContainer);
+export default connect(mapStateToProps, mapDispatchToProps)(LayoutContainer);
diff --git a/client/coral-admin/src/reducers/auth.js b/client/coral-admin/src/reducers/auth.js
index a7054ddfa..1e080d37e 100644
--- a/client/coral-admin/src/reducers/auth.js
+++ b/client/coral-admin/src/reducers/auth.js
@@ -26,10 +26,8 @@ export default function auth (state = initialState, action) {
.set('loadingUser', false)
.set('isAdmin', action.isAdmin)
.set('user', action.user);
- case actions.LOGOUT_SUCCESS:
+ case actions.LOGOUT:
return initialState;
- case actions.LOGIN_REQUEST:
- return state.set('loginError', null);
case actions.LOGIN_SUCCESS:
return state.set('loginMaxExceeded', false).set('loginError', null);
case actions.LOGIN_FAILURE:
diff --git a/client/coral-admin/src/services/PymConnection.js b/client/coral-admin/src/services/PymConnection.js
index ca592b824..1ac24ec45 100644
--- a/client/coral-admin/src/services/PymConnection.js
+++ b/client/coral-admin/src/services/PymConnection.js
@@ -3,7 +3,7 @@ import Pym from '../../node_modules/pym.js';
const pym = new Pym.Child({polling: 100});
export default pym;
-export const link = (url) => (e) => {
+export const link = url => e => {
e.preventDefault();
pym.sendMessage('navigate', url);
};
diff --git a/client/coral-admin/src/services/client.js b/client/coral-admin/src/services/client.js
index 7d65f3f92..ff8216373 100644
--- a/client/coral-admin/src/services/client.js
+++ b/client/coral-admin/src/services/client.js
@@ -1,5 +1,5 @@
import ApolloClient, {addTypename} from 'apollo-client';
-import getNetworkInterface from './transport';
+import {networkInterface} from 'coral-framework/services/transport';
import fragmentMatcher from './fragmentMatcher';
export const client = new ApolloClient({
@@ -12,5 +12,5 @@ export const client = new ApolloClient({
}
return null;
},
- networkInterface: getNetworkInterface()
+ networkInterface
});
diff --git a/client/coral-admin/src/services/fragmentMatcher.js b/client/coral-admin/src/services/fragmentMatcher.js
index 531708f31..3b57de0b1 100644
--- a/client/coral-admin/src/services/fragmentMatcher.js
+++ b/client/coral-admin/src/services/fragmentMatcher.js
@@ -39,7 +39,7 @@ const fm = new IntrospectionFragmentMatcher({
{name: 'DefaultAction'},
{name: 'FlagAction'},
{name: 'DontAgreeAction'}
- ],
+ ]
},
{
kind: 'INTERFACE',
@@ -48,18 +48,18 @@ const fm = new IntrospectionFragmentMatcher({
{name: 'DefaultActionSummary'},
{name: 'FlagActionSummary'},
{name: 'DontAgreeActionSummary'}
- ],
+ ]
},
{
kind: 'INTERFACE',
name: 'AssetActionSummary',
possibleTypes: [
{name: 'DefaultAssetActionSummary'},
- {name: 'FlagAssetActionSummary'},
+ {name: 'FlagAssetActionSummary'}
]
}
- ],
- },
+ ]
+ }
}
});
diff --git a/client/coral-admin/src/services/transport.js b/client/coral-admin/src/services/transport.js
deleted file mode 100644
index 2bd6ac636..000000000
--- a/client/coral-admin/src/services/transport.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import {createNetworkInterface} from 'apollo-client';
-
-export default function getNetworkInterface(apiUrl = '/api/v1/graph/ql', headers = {}) {
- return new createNetworkInterface({
- uri: apiUrl,
- opts: {
- credentials: 'same-origin',
- headers,
- },
- });
-}
diff --git a/client/coral-framework/actions/auth.js b/client/coral-framework/actions/auth.js
index 976b8ee1f..98c87845f 100644
--- a/client/coral-framework/actions/auth.js
+++ b/client/coral-framework/actions/auth.js
@@ -139,7 +139,7 @@ const signInFailure = error => ({
// AUTH TOKEN
//==============================================================================
-const handleAuthToken = token => dispatch => {
+export const handleAuthToken = token => dispatch => {
Storage.setItem('exp', jwtDecode(token).exp);
Storage.setItem('token', token);
dispatch({type: 'HANDLE_AUTH_TOKEN'});