mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-20 01:34:24 +08:00
migrate token store to composition API and typescript
This commit is contained in:
+1
-1
@@ -23,7 +23,7 @@ import { mapStores } from 'pinia';
|
|||||||
import { useRootStore } from '@/stores/index.js';
|
import { useRootStore } from '@/stores/index.js';
|
||||||
import { useSettingsStore } from '@/stores/setting.ts';
|
import { useSettingsStore } from '@/stores/setting.ts';
|
||||||
import { useUserStore } from '@/stores/user.ts';
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
import { useTokensStore } from '@/stores/token.js';
|
import { useTokensStore } from '@/stores/token.ts';
|
||||||
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
||||||
|
|
||||||
import { APPLICATION_LOGO_PATH } from '@/consts/asset.ts';
|
import { APPLICATION_LOGO_PATH } from '@/consts/asset.ts';
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ import { mapStores } from 'pinia';
|
|||||||
import { useRootStore } from '@/stores/index.js';
|
import { useRootStore } from '@/stores/index.js';
|
||||||
import { useSettingsStore } from '@/stores/setting.ts';
|
import { useSettingsStore } from '@/stores/setting.ts';
|
||||||
import { useUserStore } from '@/stores/user.ts';
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
import { useTokensStore } from '@/stores/token.js';
|
import { useTokensStore } from '@/stores/token.ts';
|
||||||
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
||||||
|
|
||||||
import { APPLICATION_LOGO_PATH } from '@/consts/asset.ts';
|
import { APPLICATION_LOGO_PATH } from '@/consts/asset.ts';
|
||||||
|
|||||||
@@ -1,115 +0,0 @@
|
|||||||
import { defineStore } from 'pinia';
|
|
||||||
|
|
||||||
import { useUserStore } from './user.ts';
|
|
||||||
|
|
||||||
import { updateCurrentToken } from '@/lib/userstate.ts';
|
|
||||||
import services from '@/lib/services.ts';
|
|
||||||
import logger from '@/lib/logger.ts';
|
|
||||||
import { isObject } from '@/lib/common.ts';
|
|
||||||
|
|
||||||
export const useTokensStore = defineStore('tokens', {
|
|
||||||
actions: {
|
|
||||||
getAllTokens() {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
services.getTokens().then(response => {
|
|
||||||
const data = response.data;
|
|
||||||
|
|
||||||
if (!data || !data.success || !data.result) {
|
|
||||||
reject({ message: 'Unable to retrieve session list' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(data.result);
|
|
||||||
}).catch(error => {
|
|
||||||
logger.error('failed to load token list', error);
|
|
||||||
|
|
||||||
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
||||||
reject({ error: error.response.data });
|
|
||||||
} else if (!error.processed) {
|
|
||||||
reject({ message: 'Unable to retrieve session list' });
|
|
||||||
} else {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
refreshTokenAndRevokeOldToken() {
|
|
||||||
const self = this;
|
|
||||||
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
services.refreshToken().then(response => {
|
|
||||||
const data = response.data;
|
|
||||||
|
|
||||||
if (data && data.success && data.result && data.result.user && isObject(data.result.user)) {
|
|
||||||
const userStore = useUserStore();
|
|
||||||
userStore.storeUserBasicInfo(data.result.user);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data && data.success && data.result && data.result.newToken) {
|
|
||||||
updateCurrentToken(data.result.newToken);
|
|
||||||
|
|
||||||
if (data.result.oldTokenId) {
|
|
||||||
self.revokeToken({
|
|
||||||
tokenId: data.result.oldTokenId,
|
|
||||||
ignoreError: true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(data.result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
revokeToken({ tokenId, ignoreError }) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
services.revokeToken({
|
|
||||||
tokenId: tokenId,
|
|
||||||
ignoreError: !!ignoreError
|
|
||||||
}).then(response => {
|
|
||||||
const data = response.data;
|
|
||||||
|
|
||||||
if (!data || !data.success || !data.result) {
|
|
||||||
reject({ message: 'Unable to logout from this session' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(data.result);
|
|
||||||
}).catch(error => {
|
|
||||||
logger.error('failed to revoke token', error);
|
|
||||||
|
|
||||||
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
||||||
reject({ error: error.response.data });
|
|
||||||
} else if (!error.processed) {
|
|
||||||
reject({ message: 'Unable to logout from this session' });
|
|
||||||
} else {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
revokeAllTokens() {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
services.revokeAllTokens().then(response => {
|
|
||||||
const data = response.data;
|
|
||||||
|
|
||||||
if (!data || !data.success || !data.result) {
|
|
||||||
reject({ message: 'Unable to logout all other sessions' });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(data.result);
|
|
||||||
}).catch(error => {
|
|
||||||
logger.error('failed to revoke all tokens', error);
|
|
||||||
|
|
||||||
if (error.response && error.response.data && error.response.data.errorMessage) {
|
|
||||||
reject({ error: error.response.data });
|
|
||||||
} else if (!error.processed) {
|
|
||||||
reject({ message: 'Unable to logout all other sessions' });
|
|
||||||
} else {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
import { defineStore } from 'pinia';
|
||||||
|
|
||||||
|
import { useUserStore } from './user.ts';
|
||||||
|
|
||||||
|
import type { TokenRefreshResponse, TokenInfoResponse } from '@/models/token.ts';
|
||||||
|
|
||||||
|
import { isObject } from '@/lib/common.ts';
|
||||||
|
import { updateCurrentToken } from '@/lib/userstate.ts';
|
||||||
|
|
||||||
|
import logger from '@/lib/logger.ts';
|
||||||
|
import services from '@/lib/services.ts';
|
||||||
|
|
||||||
|
export const useTokensStore = defineStore('tokens', () => {
|
||||||
|
function getAllTokens(): Promise<TokenInfoResponse[]> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
services.getTokens().then(response => {
|
||||||
|
const data = response.data;
|
||||||
|
|
||||||
|
if (!data || !data.success || !data.result) {
|
||||||
|
reject({ message: 'Unable to retrieve session list' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(data.result);
|
||||||
|
}).catch(error => {
|
||||||
|
logger.error('failed to load token list', error);
|
||||||
|
|
||||||
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
||||||
|
reject({ error: error.response.data });
|
||||||
|
} else if (!error.processed) {
|
||||||
|
reject({ message: 'Unable to retrieve session list' });
|
||||||
|
} else {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshTokenAndRevokeOldToken(): Promise<TokenRefreshResponse> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
services.refreshToken().then(response => {
|
||||||
|
const data = response.data;
|
||||||
|
|
||||||
|
if (data && data.success && data.result && data.result.user && isObject(data.result.user)) {
|
||||||
|
const userStore = useUserStore();
|
||||||
|
userStore.storeUserBasicInfo(data.result.user);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data && data.success && data.result && data.result.newToken) {
|
||||||
|
updateCurrentToken(data.result.newToken);
|
||||||
|
|
||||||
|
if (data.result.oldTokenId) {
|
||||||
|
revokeToken({
|
||||||
|
tokenId: data.result.oldTokenId,
|
||||||
|
ignoreError: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(data.result);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function revokeToken(req: { tokenId: string, ignoreError?: boolean }): Promise<boolean> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
services.revokeToken({
|
||||||
|
tokenId: req.tokenId,
|
||||||
|
ignoreError: !!req.ignoreError
|
||||||
|
}).then(response => {
|
||||||
|
const data = response.data;
|
||||||
|
|
||||||
|
if (!data || !data.success || !data.result) {
|
||||||
|
reject({ message: 'Unable to logout from this session' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(data.result);
|
||||||
|
}).catch(error => {
|
||||||
|
logger.error('failed to revoke token', error);
|
||||||
|
|
||||||
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
||||||
|
reject({ error: error.response.data });
|
||||||
|
} else if (!error.processed) {
|
||||||
|
reject({ message: 'Unable to logout from this session' });
|
||||||
|
} else {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function revokeAllTokens(): Promise<boolean> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
services.revokeAllTokens().then(response => {
|
||||||
|
const data = response.data;
|
||||||
|
|
||||||
|
if (!data || !data.success || !data.result) {
|
||||||
|
reject({ message: 'Unable to logout all other sessions' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(data.result);
|
||||||
|
}).catch(error => {
|
||||||
|
logger.error('failed to revoke all tokens', error);
|
||||||
|
|
||||||
|
if (error.response && error.response.data && error.response.data.errorMessage) {
|
||||||
|
reject({ error: error.response.data });
|
||||||
|
} else if (!error.processed) {
|
||||||
|
reject({ message: 'Unable to logout all other sessions' });
|
||||||
|
} else {
|
||||||
|
reject(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
// functions
|
||||||
|
getAllTokens,
|
||||||
|
refreshTokenAndRevokeOldToken,
|
||||||
|
revokeToken,
|
||||||
|
revokeAllTokens
|
||||||
|
};
|
||||||
|
});
|
||||||
@@ -113,7 +113,7 @@ import { mapStores } from 'pinia';
|
|||||||
import { useRootStore } from '@/stores/index.js';
|
import { useRootStore } from '@/stores/index.js';
|
||||||
import { useSettingsStore } from '@/stores/setting.ts';
|
import { useSettingsStore } from '@/stores/setting.ts';
|
||||||
import { useUserStore } from '@/stores/user.ts';
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
import { useTokensStore } from '@/stores/token.js';
|
import { useTokensStore } from '@/stores/token.ts';
|
||||||
import { useTransactionsStore } from '@/stores/transaction.js';
|
import { useTransactionsStore } from '@/stores/transaction.js';
|
||||||
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ import { mapStores } from 'pinia';
|
|||||||
import { useRootStore } from '@/stores/index.js';
|
import { useRootStore } from '@/stores/index.js';
|
||||||
import { useSettingsStore } from '@/stores/setting.ts';
|
import { useSettingsStore } from '@/stores/setting.ts';
|
||||||
import { useUserStore } from '@/stores/user.ts';
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
import { useTokensStore } from '@/stores/token.js';
|
import { useTokensStore } from '@/stores/token.ts';
|
||||||
|
|
||||||
import { isEquals } from '@/lib/common.ts';
|
import { isEquals } from '@/lib/common.ts';
|
||||||
import { parseSessionInfo } from '@/lib/session.ts';
|
import { parseSessionInfo } from '@/lib/session.ts';
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ import { mapStores } from 'pinia';
|
|||||||
import { useRootStore } from '@/stores/index.js';
|
import { useRootStore } from '@/stores/index.js';
|
||||||
import { useSettingsStore } from '@/stores/setting.ts';
|
import { useSettingsStore } from '@/stores/setting.ts';
|
||||||
import { useUserStore } from '@/stores/user.ts';
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
import { useTokensStore } from '@/stores/token.js';
|
import { useTokensStore } from '@/stores/token.ts';
|
||||||
import { useTransactionsStore } from '@/stores/transaction.js';
|
import { useTransactionsStore } from '@/stores/transaction.js';
|
||||||
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
import { useExchangeRatesStore } from '@/stores/exchangeRates.js';
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapStores } from 'pinia';
|
import { mapStores } from 'pinia';
|
||||||
import { useUserStore } from '@/stores/user.ts';
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
import { useTokensStore } from '@/stores/token.js';
|
import { useTokensStore } from '@/stores/token.ts';
|
||||||
|
|
||||||
import { isEquals } from '@/lib/common.ts';
|
import { isEquals } from '@/lib/common.ts';
|
||||||
import { parseSessionInfo } from '@/lib/session.ts';
|
import { parseSessionInfo } from '@/lib/session.ts';
|
||||||
|
|||||||
Reference in New Issue
Block a user