Files
old-new-wiaas/frontend/src/actions/login/authActions.js

341 lines
10 KiB
JavaScript
Raw Normal View History

2018-06-14 16:49:28 +02:00
import jwtDecode from 'jwt-decode';
import {
API_SERVER
} from '../../config';
import {
LOGIN,
LOGOUT,
LOGIN_SUCCESS,
LOGIN_FAIL,
VALIDATE_TOKEN,
REQUEST_MODULES,
RECIEVE_MODULES,
REQUEST_FORGOT_PASSWORD,
FORGOT_PASSWORD,
REFRESH_TOKEN,
REQUEST_CHANGE,
PASSWORD_CHANGED,
SET_COMPANY_ADMIN_FLAG,
authActivity
} from '../../constants/authConstants';
import HtmlClient from '../../helpers/HtmlClient';
const htmlClient = new HtmlClient();
let refreshToken = '';
let refreshTimer = {};
const REFRESH_TIME = 1000 * 60 * 50; //refresh 10 minutes before expired
export const login = () => ({
type: LOGIN
});
export const validateToken = () => ({
type: VALIDATE_TOKEN
});
export const validateAccessToken = (token) => {
return dispatch => {
dispatch(validateToken());
return htmlClient.fetch({
url: `${API_SERVER}/wp-json/jwt-auth/v1/token/validate`,
method: 'post'
2018-06-14 16:49:28 +02:00
})
.then(response => {
if (response.data && response.data.data.status === 200) {
// TODO: Implement refresh logic on backend as it was on old wias , or find a nother way
// to handle token validation another way
// const serverTime = response.data.serverTime || 1;
2018-06-14 16:49:28 +02:00
dispatch(loggedIn({
accessToken: token
// userInfo: response.data.userInfo
2018-06-14 16:49:28 +02:00
}));
// refreshToken = response.data.refreshToken;
// startRefreshTimer(dispatch, serverTime);
// dispatch(setUserAsCompanyAdmin(response.data.userInfo.wiaas_is_company_admin));
dispatch(setUserAsCompanyAdmin(false));
2018-06-14 16:49:28 +02:00
} else {
dispatch(loginFail(response.data));
}
})
.catch(error => {
htmlClient.onError(error, dispatch);
});
}
}
export const setUserAsCompanyAdmin = (isCompanyAdmin) => ({type: SET_COMPANY_ADMIN_FLAG, isCompanyAdmin});
export const validateCredentials = (username, password) => {
return dispatch => {
2018-06-14 16:49:28 +02:00
dispatch(login());
return htmlClient.fetch({
url: `${API_SERVER}/wp-json/jwt-auth/v1/token`,
method: 'post',
data: {
"username": username,
"password": password
}
})
2018-06-14 16:49:28 +02:00
.then(response => {
if (response.data && response.data.token) {
const decodedAceessToken = jwtDecode(response.data.token);
// TODO : Uncomment code, and fix user type logic after adding customer type to woocommerce backend
// if(decodedAceessToken.data.wiaas_user_type === 'customer'){
localStorage.setItem('accessToken', response.data.token);
const serverTime = decodedAceessToken.nbf || 1;
// refreshToken = response.data.refreshToken;
startRefreshTimer(dispatch, serverTime);
dispatch(loggedIn(response.data));
// dispatch(setUserAsCompanyAdmin(response.data.userInfo.wiaas_is_company_admin));
dispatch(setUserAsCompanyAdmin(false));
// }else{
// dispatch(loginFail({status: 'fail', errorMessage: 'INVALID_USER_TYPE'}));
// }
2018-06-14 16:49:28 +02:00
} else {
dispatch(loginFail(response.data));
}
})
.catch(error => {
htmlClient.onError(error, dispatch);
});
}
}
const startRefreshTimer = (dispatch, serverTime) => {
const decodedAceessToken = jwtDecode(localStorage.accessToken);
const TEN_MINUTES = 600;
const tokenTimeLeft = decodedAceessToken.exp - serverTime;
const refreshTime = tokenTimeLeft ? (tokenTimeLeft - TEN_MINUTES) * 1000 : REFRESH_TIME;
if(refreshTime <= 0){
dispatch(validateRefreshToken());
}else{
refreshTimer = setTimeout(()=>{
dispatch(validateRefreshToken());
}, refreshTime);
}
}
const requestRefreshToken = () => ({
type: REFRESH_TOKEN
});
const validateRefreshToken = () => {
return dispatch => {
dispatch(requestRefreshToken());
return htmlClient.fetch({
url: `${API_SERVER}/login/api/refreshToken`,
method: 'post',
data: {
refreshToken,
lastActivity: authActivity.lastActivity
}
})
.then(response => {
if (response.data.status === 'success') {
localStorage.setItem('accessToken', response.data.accessToken);
const serverTime = response.data.serverTime || 1;
refreshToken = response.data.refreshToken;
dispatch(setUserAsCompanyAdmin(response.data.userInfo.wiaas_is_company_admin));
startRefreshTimer(dispatch, serverTime);
} else {
dispatch(logout(response.data));
dispatch(loginFail(response.data));
}
})
.catch(error => {
htmlClient.onError(error, dispatch);
});
}
}
export const getModules = () => {
return dispatch => {
dispatch(requestModules());
//TODO : check how to solve modules, don't hardocde values
const modules={
modules:{
modules:[
{
id:"19",
isInMenu:"0",
menuName:"Cart",
name:"Cart",
url:"cart",
},
{
id:"14",
isInMenu:"0",
menuName:"ProfileSettings",
name:"ProfileSettings",
url:"profileSettings",
},
{
id:"23",
isInMenu:"0",
menuName:"OrderProjects",
name:"OrderProjects",
url:"orderProjects",
},
{
id:"15",
isInMenu:"0",
menuName:"Terms",
name:"Terms",
url:"terms",
},
{
id:"1",
isInMenu:"1",
menuName:"Overview",
name:"Dashboards",
url:"dashboards",
},
{
id:"18",
isInMenu:"1",
menuName:"Co-Market",
name:"CoMarket",
url:"co-market",
}
],
subModules:{
"co-market":[
{
menuName:"Orders",
name:"Orders",
url:"orders",
moduleUrl:"co-market",
}
]
}
}
}
dispatch(recieveModules(modules));
/*
2018-06-14 16:49:28 +02:00
return htmlClient.fetch({
url: `${API_SERVER}/login/api/getModules`,
})
.then(response => {
dispatch(recieveModules(response.data));
})
.catch(error => {
htmlClient.onError(error, dispatch);
});
*/
2018-06-14 16:49:28 +02:00
}
}
const requestModules = () => ({
type: REQUEST_MODULES
});
const recieveModules = (json) => ({
type: RECIEVE_MODULES,
modules: json.modules
});
export const logout = () => {
localStorage.removeItem('accessToken');
clearInterval(refreshTimer);
return {
type: LOGOUT,
isLoggedIn: false,
errorMessage: 'LOGGED_OUT'
}
}
export const loggedIn = (jsonData) => {
return {
type: LOGIN_SUCCESS,
isLoggedIn: true
// userInfo: jsonData.userInfo
2018-06-14 16:49:28 +02:00
}
}
export const loginFail = (jsonData) => {
return {
type: LOGIN_FAIL,
isLoggedIn: false,
errorMessage: jsonData.errorMessage
}
}
export const generatePassword = (mail) => {
return dispatch => {
dispatch(requestForgotPassword());
return htmlClient.fetch({
url: `${API_SERVER}/login/api/forgotPassword`,
method: 'post',
data: {mail},
header: {}
})
.then(response => {
if(typeof response.data !== 'undefined' && 'messages' in response.data) {
dispatch(forgotPasswordMessage(response.data.messages[0]));
}
})
.catch(error => {
htmlClient.onError(error, dispatch);
});
}
}
const requestForgotPassword = () => ({
type: REQUEST_FORGOT_PASSWORD,
errorMessage: 'FORGOT_REQUEST_SENT'
});
const forgotPasswordMessage = (jsonData) => {
return {
type: FORGOT_PASSWORD,
errorMessage: jsonData.message,
messageColor: jsonData.code
}
}
const requestChange = () => ({
type: REQUEST_CHANGE
});
const passwordChanged = (messageObj) => {
const code = messageObj.code === 'error' ? 'danger' : messageObj.code;
const isPasswordChanged = messageObj.message === 'PASSWORD_GENERATED' ? true : false;
return {
type: PASSWORD_CHANGED,
errorMessage: messageObj.message,
messageColor: code,
isPasswordChanged: isPasswordChanged
}
};
export const changePassword = (token, newPassword, confirmPassword) => {
return dispatch => {
dispatch(requestChange());
return htmlClient.fetch({
url: `${API_SERVER}/login/api/changePassword`,
method: 'post',
data: {token, newPassword, confirmPassword},
header: {}
})
.then(response => {
if(response.data.messages && response.data.messages.length > 0){
dispatch(passwordChanged(response.data.messages[0]));
}
})
.catch(error => {
htmlClient.onError(error, dispatch);
});
}
}