mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-14 15:07:33 +08:00
280 lines
9.1 KiB
JavaScript
280 lines
9.1 KiB
JavaScript
import userState from '../lib/userstate.js';
|
|
import services from '../lib/services.js';
|
|
import settings from '../lib/settings.js';
|
|
import logger from '../lib/logger.js';
|
|
import utils from '../lib/utils.js';
|
|
|
|
import {
|
|
RESET_STATE,
|
|
|
|
STORE_USER_INFO,
|
|
CLEAR_USER_INFO
|
|
} from './mutations.js';
|
|
|
|
export function authorize(context, { loginName, password }) {
|
|
return new Promise((resolve, reject) => {
|
|
services.authorize({
|
|
loginName: loginName,
|
|
password: password
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result || !data.result.token) {
|
|
reject({ message: 'Unable to login' });
|
|
return;
|
|
}
|
|
|
|
if (data.result.need2FA) {
|
|
resolve(data.result);
|
|
return;
|
|
}
|
|
|
|
if (settings.isEnableApplicationLock() || userState.getUserAppLockState()) {
|
|
const appLockState = userState.getUserAppLockState();
|
|
|
|
if (!appLockState || appLockState.username !== data.result.user.username) {
|
|
userState.clearTokenAndUserInfo(true);
|
|
settings.setEnableApplicationLock(false);
|
|
settings.setEnableApplicationLockWebAuthn(false);
|
|
userState.clearWebAuthnConfig();
|
|
}
|
|
}
|
|
|
|
userState.updateToken(data.result.token);
|
|
|
|
if (data.result.user && utils.isObject(data.result.user)) {
|
|
context.commit(STORE_USER_INFO, data.result.user);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to login', error);
|
|
|
|
if (error && error.processed) {
|
|
reject(error);
|
|
} else if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else {
|
|
reject({ message: 'Unable to login' });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function authorize2FA(context, { token, passcode, recoveryCode }) {
|
|
return new Promise((resolve, reject) => {
|
|
let promise = null;
|
|
|
|
if (passcode) {
|
|
promise = services.authorize2FA({
|
|
passcode: passcode,
|
|
token: token
|
|
});
|
|
} else if (recoveryCode) {
|
|
promise = services.authorize2FAByBackupCode({
|
|
recoveryCode: recoveryCode,
|
|
token: token
|
|
});
|
|
} else {
|
|
reject({ message: 'An error has occurred' });
|
|
return;
|
|
}
|
|
|
|
promise.then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result || !data.result.token) {
|
|
reject({ message: 'Unable to verify' });
|
|
return;
|
|
}
|
|
|
|
if (settings.isEnableApplicationLock() || userState.getUserAppLockState()) {
|
|
const appLockState = userState.getUserAppLockState();
|
|
|
|
if (!appLockState || appLockState.username !== data.result.user.username) {
|
|
userState.clearTokenAndUserInfo(true);
|
|
settings.setEnableApplicationLock(false);
|
|
settings.setEnableApplicationLockWebAuthn(false);
|
|
userState.clearWebAuthnConfig();
|
|
}
|
|
}
|
|
|
|
userState.updateToken(data.result.token);
|
|
|
|
if (data.result.user && utils.isObject(data.result.user)) {
|
|
context.commit(STORE_USER_INFO, data.result.user);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to verify 2fa', error);
|
|
|
|
if (error && error.processed) {
|
|
reject(error);
|
|
} else if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else {
|
|
reject({ message: 'Unable to verify' });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function register(context, { user }) {
|
|
return new Promise((resolve, reject) => {
|
|
services.register({
|
|
username: user.username,
|
|
password: user.password,
|
|
email: user.email,
|
|
nickname: user.nickname,
|
|
defaultCurrency: user.defaultCurrency
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to sign up' });
|
|
return;
|
|
}
|
|
|
|
if (settings.isEnableApplicationLock()) {
|
|
settings.setEnableApplicationLock(false);
|
|
settings.setEnableApplicationLockWebAuthn(false);
|
|
userState.clearWebAuthnConfig();
|
|
}
|
|
|
|
if (data.result.token && utils.isString(data.result.token)) {
|
|
userState.updateToken(data.result.token);
|
|
}
|
|
|
|
if (data.result.user && utils.isObject(data.result.user)) {
|
|
context.commit(STORE_USER_INFO, data.result.user);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to sign up', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to sign up' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function logout(context) {
|
|
return new Promise((resolve, reject) => {
|
|
services.logout().then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to logout' });
|
|
return;
|
|
}
|
|
|
|
context.commit(CLEAR_USER_INFO);
|
|
userState.clearTokenAndUserInfo(true);
|
|
userState.clearWebAuthnConfig();
|
|
|
|
context.commit(RESET_STATE);
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to log out', error);
|
|
|
|
if (error && error.processed) {
|
|
reject(error);
|
|
} else if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else {
|
|
reject({ message: 'Unable to logout' });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function getCurrentUserProfile() {
|
|
return new Promise((resolve, reject) => {
|
|
services.getProfile().then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to get user profile' });
|
|
return;
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to get user profile', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to get user profile' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function updateUserProfile(context, { profile, currentPassword }) {
|
|
return new Promise((resolve, reject) => {
|
|
services.updateProfile({
|
|
password: profile.password,
|
|
oldPassword: currentPassword,
|
|
email: profile.email,
|
|
nickname: profile.nickname,
|
|
defaultCurrency: profile.defaultCurrency
|
|
}).then(response => {
|
|
const data = response.data;
|
|
|
|
if (!data || !data.success || !data.result) {
|
|
reject({ message: 'Unable to update user profile' });
|
|
return;
|
|
}
|
|
|
|
if (data.result.newToken && utils.isString(data.result.newToken)) {
|
|
userState.updateToken(data.result.newToken);
|
|
}
|
|
|
|
if (data.result.user && utils.isObject(data.result.user)) {
|
|
context.commit(STORE_USER_INFO, data.result.user);
|
|
}
|
|
|
|
resolve(data.result);
|
|
}).catch(error => {
|
|
logger.error('failed to save user profile', error);
|
|
|
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
reject({ error: error.response.data });
|
|
} else if (!error.processed) {
|
|
reject({ message: 'Unable to update user profile' });
|
|
} else {
|
|
reject(error);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
export function clearUserInfoState(context) {
|
|
context.commit(CLEAR_USER_INFO);
|
|
}
|
|
|
|
export function resetState(context) {
|
|
context.commit(RESET_STATE);
|
|
}
|
|
|
|
export function currentUserNickname(state) {
|
|
const userInfo = state.currentUserInfo || {};
|
|
return userInfo.nickname || userInfo.username || null;
|
|
}
|
|
|
|
export function currentUserDefaultCurrency(state) {
|
|
const userInfo = state.currentUserInfo || {};
|
|
return userInfo.defaultCurrency || null;
|
|
}
|