at the end of the day, it was inevitable

This commit is contained in:
Mo Elzubeir
2022-12-09 08:36:26 -06:00
commit 1218570914
1768 changed files with 887087 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
import * as api from '../../../api/loginApi';
import $ from 'jquery';
import reduxModule from '../abstract/reduxModule';
import { tokenInject } from '../../utils/common';
import { addAlert } from './alerts';
import Cookies from 'cookies-js';
import axios from 'axios';
// import { TOGGLE_UPGRADE_PLAN } from './base';
const ACTIONS = {
PENDING: 'Login pending',
SAVE_USER_DATA: 'Save user data',
SET_FORM_ERROR: 'Set form error',
SET_RESTRICTIONS: 'Set user restrictions'
};
export const AuthNS = '[Auth]';
export const USER_LOGOUT = 'Logout user';
const REFRESH_TOKEN = 'refreshToken';
class Auth extends reduxModule {
getNamespace() {
return AuthNS;
}
getInitialState() {
return {
form: {
error: ''
},
isAuthPending: true,
token: '',
refreshToken: '',
user: {},
userSubscription: '15d',
userSubscriptionDate: '2017-03-01'
};
}
saveRefreshToken(refreshToken, rememberMe) {
if (rememberMe) {
localStorage.setItem(REFRESH_TOKEN, refreshToken);
} else {
Cookies.set(REFRESH_TOKEN, refreshToken);
}
}
clearRefreshToken() {
localStorage.removeItem(REFRESH_TOKEN);
delete axios.defaults.headers.common['Authorization'];
Cookies.expire(REFRESH_TOKEN);
}
getRefreshToken() {
return Cookies.get(REFRESH_TOKEN) || localStorage.getItem(REFRESH_TOKEN);
}
loginRequest(dispatch, promise, rememberMe) {
dispatch(this.loginPending(true));
return promise
.then((data) => {
const { token, refreshToken, user } = data;
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`; // to call api with axios
this.saveRefreshToken(data.refreshToken, rememberMe);
dispatch(this.saveUserData({ token, refreshToken, user }));
dispatch(this.loginPending(false));
dispatch(this.authSetError(''));
// history.replace(location); //rerun auth guards for routes
})
.catch((error) => {
dispatch(this.authSetError(error.msg));
dispatch(this.loginPending(false));
delete axios.defaults.headers.common['Authorization'];
// history.replace(location); //rerun auth guards for routes
});
}
refreshLogin = () => {
return (dispatch) => {
const refreshToken = this.getRefreshToken();
if (refreshToken) {
this.loginRequest(dispatch, api.loginRefresh(refreshToken));
} else {
dispatch(this.loginPending(false));
// history.replace(location); //rerun auth guards for routes
}
};
};
login = (email, password, rememberMe) => {
return (dispatch) => {
const validateEmail = /^(([^<>()[\]\\.,;:\s@]+(\.[^<>()[\]\\.,;:\s@]+)*)|(.+))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
const isEmailValid = validateEmail.test(email);
if (isEmailValid) {
this.loginRequest(dispatch, api.login({ email, password }), rememberMe);
} else {
dispatch(this.loginPending(false));
dispatch(this.authSetError('Please enter valid email address'));
}
};
};
logout = () => {
return (dispatch) => {
this.clearRefreshToken();
// dispatch(this.saveUserData({ token: '' }));
dispatch(this.userLogout(true));
dispatch(this.loginPending(false));
// history.push('/auth');
};
};
getRestrictions = () =>
tokenInject((dispatch, getState, token) => {
api
.getRestrictions(token)
.then((data) => {
dispatch(this.setRestrictions(data));
})
.catch((errors) => {
dispatch(addAlert(errors));
});
});
handleErrors = () => (dispatch) => {
$(document).ajaxError((event, jqXHR, settings, thrownError) => {
if (jqXHR.status === 402) {
const response = jqXHR.responseJSON;
const failedRestriction = response.failedRestriction;
const restrictions = response.restrictions;
const limit = restrictions.limits[failedRestriction];
if (limit) {
dispatch(this.setRestrictions(restrictions));
// dispatch({ type: `[Base] ${TOGGLE_UPGRADE_PLAN}`, payload: true }); // uncomment when upgrade page is ready
dispatch(
addAlert({
type: 'error',
transKey: 'restriction',
id: 'restriction'
})
);
}
}
});
};
defineActions() {
this.loginPending = this.set(ACTIONS.PENDING, 'isAuthPending');
this.saveUserData = this.merge(ACTIONS.SAVE_USER_DATA);
this.authSetError = this.setIn(ACTIONS.SET_FORM_ERROR, ['form', 'error']);
this.setRestrictions = this.mergeIn(ACTIONS.SET_RESTRICTIONS, [
'user',
'restrictions'
]);
this.userLogout = this.set(USER_LOGOUT, 'userLogout');
return {
login: this.login,
logout: this.logout,
refreshLogin: this.refreshLogin,
authSetError: this.authSetError,
handleErrors: this.handleErrors,
getRestrictions: this.getRestrictions
};
}
}
const auth = new Auth();
auth.init();
export const getRestrictions = auth.actions.getRestrictions;
export default auth;