367 lines
12 KiB
JavaScript
367 lines
12 KiB
JavaScript
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'
|
|
})
|
|
.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;
|
|
|
|
dispatch(loggedIn({
|
|
accessToken: token,
|
|
userInfo: {
|
|
"id": 2,
|
|
"name": "Customer User",
|
|
"mail": "customer@mail.com",
|
|
"phone": "",
|
|
"userType": "customer",
|
|
"vatCode": "556084-6783",
|
|
"companyName": "Coor Service Management AB",
|
|
"billingAddresses": [
|
|
{
|
|
"id": 1,
|
|
"city": "fsdfcsdfcs",
|
|
"countryName": "SE",
|
|
"detailedAddress": "sdfcsvfsdf, fdfvds, fdfvds",
|
|
"firstName": "Customer",
|
|
"lastName": "User",
|
|
"zipCode": "323232"
|
|
}
|
|
],
|
|
"profileAddresses": [
|
|
{
|
|
"id": 1,
|
|
"city": "fsdfcsdfcs",
|
|
"countryName": "fsdfcsdfcs",
|
|
"detailedAddress": "sdfcsvfsdf, fdfvds, fdfvds",
|
|
"zipCode": "323232"
|
|
}
|
|
]
|
|
}
|
|
}));
|
|
// refreshToken = response.data.refreshToken;
|
|
// startRefreshTimer(dispatch, serverTime);
|
|
// dispatch(setUserAsCompanyAdmin(response.data.userInfo.wiaas_is_company_admin));
|
|
dispatch(setUserAsCompanyAdmin(false));
|
|
} else {
|
|
dispatch(loginFail(response.data));
|
|
}
|
|
|
|
})
|
|
.catch(error => {
|
|
localStorage.removeItem('accessToken');
|
|
htmlClient.onError(error, dispatch);
|
|
});
|
|
}
|
|
}
|
|
|
|
export const setUserAsCompanyAdmin = (isCompanyAdmin) => ({type: SET_COMPANY_ADMIN_FLAG, isCompanyAdmin});
|
|
|
|
export const validateCredentials = (username, password) => {
|
|
return dispatch => {
|
|
|
|
dispatch(login());
|
|
return htmlClient.fetch({
|
|
url: `${API_SERVER}/wp-json/jwt-auth/v1/token`,
|
|
method: 'post',
|
|
data: {
|
|
"username": username,
|
|
"password": password
|
|
}
|
|
})
|
|
.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'}));
|
|
// }
|
|
} 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());
|
|
let appModules = {
|
|
modules: {
|
|
modules: [
|
|
{
|
|
id: '15',
|
|
name: 'Terms',
|
|
menuName: 'Terms',
|
|
url: 'terms',
|
|
isInMenu: '0'
|
|
},
|
|
{
|
|
id: '19',
|
|
name: 'Cart',
|
|
menuName: 'Cart',
|
|
url: 'cart',
|
|
isInMenu: '0'
|
|
},
|
|
{
|
|
id: '14',
|
|
name: 'ProfileSettings',
|
|
menuName: 'ProfileSettings',
|
|
url: 'profileSettings',
|
|
isInMenu: '0'
|
|
},
|
|
{
|
|
id: '23',
|
|
name: 'OrderProjects',
|
|
menuName: 'OrderProjects',
|
|
url: 'orderProjects',
|
|
isInMenu: '0'
|
|
},
|
|
{
|
|
id: '1',
|
|
name: 'Dashboards',
|
|
menuName: 'Overview',
|
|
url: 'dashboards',
|
|
isInMenu: '1'
|
|
},
|
|
{
|
|
id: '18',
|
|
name: 'CoMarket',
|
|
menuName: 'Co-Market',
|
|
url: 'co-market',
|
|
isInMenu: '1'
|
|
}
|
|
],
|
|
subModules: {
|
|
'co-market': [
|
|
{
|
|
moduleUrl: 'co-market',
|
|
menuName: 'Orders',
|
|
name: 'Orders',
|
|
url: 'orders'
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
return dispatch(recieveModules(appModules));
|
|
// return htmlClient.fetch({
|
|
// url: `${API_SERVER}/login/api/getModules`,
|
|
// })
|
|
// .then(response => {
|
|
// dispatch(recieveModules(response.data));
|
|
// })
|
|
// .catch(error => {
|
|
// htmlClient.onError(error, dispatch);
|
|
// });
|
|
// return {activeModule : ""}
|
|
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
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);
|
|
});
|
|
}
|
|
}
|