diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-09-19 02:23:12 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-19 02:23:12 +0900 |
| commit | 54e0a7f8a8d977c7befc255cc4950a86ac2e72fb (patch) | |
| tree | 037bf47ed77a983ec51e6bc85134974e4433fd88 /src/client | |
| parent | fix style (diff) | |
| download | sharkey-54e0a7f8a8d977c7befc255cc4950a86ac2e72fb.tar.gz sharkey-54e0a7f8a8d977c7befc255cc4950a86ac2e72fb.tar.bz2 sharkey-54e0a7f8a8d977c7befc255cc4950a86ac2e72fb.zip | |
feat: 凍結された場合のダイアログを実装 (#7811)
* feat: 凍結された場合のダイアログを実装
* Update CHANGELOG.md
* Update basic.js
* improve error handling
* cypressなんもわからん
* Update basic.js
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/account.ts | 22 | ||||
| -rwxr-xr-x | src/client/components/signin.vue | 41 | ||||
| -rw-r--r-- | src/client/scripts/show-suspended-dialog.ts | 10 |
3 files changed, 51 insertions, 22 deletions
diff --git a/src/client/account.ts b/src/client/account.ts index e469bae5a2..6e26ac1f7d 100644 --- a/src/client/account.ts +++ b/src/client/account.ts @@ -3,6 +3,7 @@ import { reactive } from 'vue'; import { apiUrl } from '@client/config'; import { waiting } from '@client/os'; import { unisonReload, reloadChannel } from '@client/scripts/unison-reload'; +import { showSuspendedDialog } from './scripts/show-suspended-dialog'; // TODO: 他のタブと永続化されたstateを同期 @@ -82,17 +83,20 @@ function fetchAccount(token): Promise<Account> { i: token }) }) + .then(res => res.json()) .then(res => { - // When failed to authenticate user - if (res.status !== 200 && res.status < 500) { - return signout(); + if (res.error) { + if (res.error.id === 'a8c724b3-6e9c-4b46-b1a8-bc3ed6258370') { + showSuspendedDialog().then(() => { + signout(); + }); + } else { + signout(); + } + } else { + res.token = token; + done(res); } - - // Parse response - res.json().then(i => { - i.token = token; - done(i); - }); }) .catch(fail); }); diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue index c051288d0a..69f527b7d6 100755 --- a/src/client/components/signin.vue +++ b/src/client/components/signin.vue @@ -54,6 +54,7 @@ import { apiUrl, host } from '@client/config'; import { byteify, hexify } from '@client/scripts/2fa'; import * as os from '@client/os'; import { login } from '@client/account'; +import { showSuspendedDialog } from '../scripts/show-suspended-dialog'; export default defineComponent({ components: { @@ -169,15 +170,7 @@ export default defineComponent({ this.signing = false; this.challengeData = res; return this.queryKey(); - }).catch(() => { - os.dialog({ - type: 'error', - text: this.$ts.signinFailed - }); - this.challengeData = null; - this.totpLogin = false; - this.signing = false; - }); + }).catch(this.loginFailed); } else { this.totpLogin = true; this.signing = false; @@ -190,14 +183,36 @@ export default defineComponent({ }).then(res => { this.$emit('login', res); this.onLogin(res); - }).catch(() => { + }).catch(this.loginFailed); + } + }, + + loginFailed(err) { + switch (err.id) { + case '6cc579cc-885d-43d8-95c2-b8c7fc963280': { os.dialog({ type: 'error', - text: this.$ts.loginFailed + title: this.$ts.loginFailed, + text: this.$ts.noSuchUser }); - this.signing = false; - }); + break; + } + case 'e03a5f46-d309-4865-9b69-56282d94e1eb': { + showSuspendedDialog(); + break; + } + default: { + os.dialog({ + type: 'error', + title: this.$ts.loginFailed, + text: JSON.stringify(err) + }); + } } + + this.challengeData = null; + this.totpLogin = false; + this.signing = false; }, resetPassword() { diff --git a/src/client/scripts/show-suspended-dialog.ts b/src/client/scripts/show-suspended-dialog.ts new file mode 100644 index 0000000000..dde829cdae --- /dev/null +++ b/src/client/scripts/show-suspended-dialog.ts @@ -0,0 +1,10 @@ +import * as os from '@client/os'; +import { i18n } from '@client/i18n'; + +export function showSuspendedDialog() { + return os.dialog({ + type: 'error', + title: i18n.locale.yourAccountSuspendedTitle, + text: i18n.locale.yourAccountSuspendedDescription + }); +} |