From a66bb599cedcd152fd7898abe901e47fed32f190 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Thu, 24 Oct 2019 23:15:40 +0200 Subject: [PATCH 1/8] Add try/catch to actions that moderate users --- src/store/modules/users.js | 79 ++++++++++++++++++++++++++++++-------- src/views/users/index.vue | 13 +------ 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/src/store/modules/users.js b/src/store/modules/users.js index ae5ed146..5513d7ca 100644 --- a/src/store/modules/users.js +++ b/src/store/modules/users.js @@ -1,3 +1,5 @@ +import { Message } from 'element-ui' +import i18n from '@/lang' import { activateUsers, addRight, @@ -78,8 +80,13 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await activateUsers(usersNicknames, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await activateUsers(usersNicknames, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } }, async AddRight({ commit, dispatch, getters, state }, { users, right }) { const updatedUsers = users.map(user => { @@ -88,8 +95,13 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await addRight(usersNicknames, right, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await addRight(usersNicknames, right, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } }, async AddTag({ commit, dispatch, getters, state }, { users, tag }) { const updatedUsers = users.map(user => { @@ -98,16 +110,31 @@ const users = { commit('SWAP_USERS', updatedUsers) const nicknames = users.map(user => user.nickname) - await tagUser(nicknames, [tag], getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await tagUser(nicknames, [tag], getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } }, async ClearFilters({ commit, dispatch, state }) { commit('CLEAR_USERS_FILTERS') dispatch('SearchUsers', { query: state.searchQuery, page: 1 }) }, async CreateNewAccount({ dispatch, getters, state }, { nickname, email, password }) { - await createNewAccount(nickname, email, password, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await createNewAccount(nickname, email, password, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } + Message({ + message: i18n.t('users.accountCreated'), + type: 'success', + duration: 5 * 1000 + }) }, async DeactivateUsers({ commit, dispatch, getters, state }, users) { const updatedUsers = users.map(user => { @@ -116,8 +143,13 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await deactivateUsers(usersNicknames, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await deactivateUsers(usersNicknames, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } }, async DeleteRight({ commit, dispatch, getters, state }, { users, right }) { const updatedUsers = users.map(user => { @@ -126,16 +158,24 @@ const users = { commit('SWAP_USERS', updatedUsers) const usersNicknames = users.map(user => user.nickname) - await deleteRight(usersNicknames, right, getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await deleteRight(usersNicknames, right, getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } }, async DeleteUsers({ commit, getters, state }, users) { + const usersNicknames = users.map(user => user.nickname) + try { + await deleteUsers(usersNicknames, getters.authHost, getters.token) + } catch (_e) { + return + } const deletedUsersIds = users.map(deletedUser => deletedUser.id) const updatedUsers = state.fetchedUsers.filter(user => !deletedUsersIds.includes(user.id)) commit('SET_USERS', updatedUsers) - - const usersNicknames = users.map(user => user.nickname) - await deleteUsers(usersNicknames, getters.authHost, getters.token) }, async RequirePasswordReset({ getters }, user) { await requirePasswordReset(user.nickname, getters.authHost, getters.token) @@ -161,8 +201,13 @@ const users = { commit('SWAP_USERS', updatedUsers) const nicknames = users.map(user => user.nickname) - await untagUser(nicknames, [tag], getters.authHost, getters.token) - dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + try { + await untagUser(nicknames, [tag], getters.authHost, getters.token) + } catch (_e) { + return + } finally { + dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage }) + } }, async SearchUsers({ commit, dispatch, state, getters }, { query, page }) { if (query.length === 0) { diff --git a/src/views/users/index.vue b/src/views/users/index.vue index 9e592846..4e67ee70 100644 --- a/src/views/users/index.vue +++ b/src/views/users/index.vue @@ -245,17 +245,8 @@ export default { this.$refs.usersTable.clearSelection() }, async createNewAccount(accountData) { - try { - await this.$store.dispatch('CreateNewAccount', accountData) - } catch (_e) { - return - } finally { - this.createAccountDialogOpen = false - } - this.$message({ - type: 'success', - message: this.$t('users.accountCreated') - }) + await this.$store.dispatch('CreateNewAccount', accountData) + this.createAccountDialogOpen = false }, getFirstLetter(str) { return str.charAt(0).toUpperCase() From 453cde8435da2ca32638125843d96bc0348d7823 Mon Sep 17 00:00:00 2001 From: Angelina Filippova Date: Thu, 24 Oct 2019 23:24:56 +0200 Subject: [PATCH 2/8] Move try/catch and success message from view files to action in module --- src/store/modules/settings.js | 13 +++++++++++-- src/views/settings/components/ActivityPub.vue | 13 ++----------- src/views/settings/components/Authentication.vue | 13 ++----------- src/views/settings/components/AutoLinker.vue | 13 ++----------- src/views/settings/components/Captcha.vue | 13 ++----------- src/views/settings/components/Database.vue | 13 ++----------- src/views/settings/components/Endpoint.vue | 13 ++----------- src/views/settings/components/Esshd.vue | 13 ++----------- src/views/settings/components/Frontend.vue | 13 ++----------- src/views/settings/components/Gopher.vue | 13 ++----------- src/views/settings/components/Http.vue | 13 ++----------- src/views/settings/components/Instance.vue | 13 ++----------- src/views/settings/components/JobQueue.vue | 13 ++----------- src/views/settings/components/Logger.vue | 13 ++----------- src/views/settings/components/MRF.vue | 13 ++----------- src/views/settings/components/Mailer.vue | 13 ++----------- src/views/settings/components/MediaProxy.vue | 13 ++----------- src/views/settings/components/Metadata.vue | 13 ++----------- src/views/settings/components/Other.vue | 13 ++----------- src/views/settings/components/RateLimiters.vue | 13 ++----------- src/views/settings/components/Upload.vue | 13 ++----------- src/views/settings/components/WebPush.vue | 13 ++----------- 22 files changed, 53 insertions(+), 233 deletions(-) diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js index bb6bd8c1..9c3a2c79 100644 --- a/src/store/modules/settings.js +++ b/src/store/modules/settings.js @@ -1,5 +1,7 @@ +import i18n from '@/lang' import { fetchSettings, updateSettings, uploadMedia } from '@/api/settings' import { filterIgnored, parseTuples, valueHasTuples, wrapConfig } from './normalizers' +import { Message } from 'element-ui' const settings = { state: { @@ -124,10 +126,17 @@ const settings = { async SubmitChanges({ getters, commit, state }, data) { const filteredSettings = filterIgnored(state.settings, state.ignoredIfNotEnabled) const configs = data || wrapConfig(filteredSettings) - const response = await updateSettings(configs, getters.authHost, getters.token) - if (data) { + try { + const response = await updateSettings(configs, getters.authHost, getters.token) commit('SET_SETTINGS', response.data.configs) + } catch (_e) { + return } + Message({ + message: i18n.t('settings.success'), + type: 'success', + duration: 5 * 1000 + }) }, UpdateSettings({ commit }, { tab, data }) { commit('UPDATE_SETTINGS', { tab, data }) diff --git a/src/views/settings/components/ActivityPub.vue b/src/views/settings/components/ActivityPub.vue index 903e34fe..2067be0a 100644 --- a/src/views/settings/components/ActivityPub.vue +++ b/src/views/settings/components/ActivityPub.vue @@ -37,7 +37,6 @@