2019-10-24 21:15:40 +00:00
|
|
|
import { Message } from 'element-ui'
|
|
|
|
import i18n from '@/lang'
|
2019-09-24 22:55:42 +00:00
|
|
|
import {
|
2019-10-11 00:28:55 +00:00
|
|
|
activateUsers,
|
2019-09-24 22:55:42 +00:00
|
|
|
addRight,
|
|
|
|
createNewAccount,
|
2019-10-11 00:28:55 +00:00
|
|
|
deactivateUsers,
|
2019-09-24 22:55:42 +00:00
|
|
|
deleteRight,
|
2019-10-16 12:24:35 +00:00
|
|
|
deleteUsers,
|
2020-07-01 20:48:04 +00:00
|
|
|
disableMfa,
|
2019-09-24 22:55:42 +00:00
|
|
|
fetchUsers,
|
|
|
|
getPasswordResetToken,
|
|
|
|
searchUsers,
|
|
|
|
tagUser,
|
|
|
|
untagUser,
|
2020-01-28 13:06:49 +00:00
|
|
|
forcePasswordReset,
|
2019-11-19 11:15:15 +00:00
|
|
|
confirmUserEmail,
|
|
|
|
resendConfirmationEmail
|
2019-09-24 22:55:42 +00:00
|
|
|
} from '@/api/users'
|
2019-02-23 21:40:26 +00:00
|
|
|
|
2019-03-22 20:58:58 +00:00
|
|
|
const users = {
|
2019-02-23 21:40:26 +00:00
|
|
|
state: {
|
2019-02-24 22:31:05 +00:00
|
|
|
fetchedUsers: [],
|
2019-03-03 20:01:00 +00:00
|
|
|
loading: true,
|
|
|
|
searchQuery: '',
|
|
|
|
totalUsersCount: 0,
|
2019-03-06 19:44:37 +00:00
|
|
|
currentPage: 1,
|
2020-04-30 21:52:32 +00:00
|
|
|
pageSize: 50,
|
2019-03-29 14:25:53 +00:00
|
|
|
filters: {
|
|
|
|
local: false,
|
|
|
|
external: false,
|
|
|
|
active: false,
|
|
|
|
deactivated: false
|
2019-09-23 19:00:28 +00:00
|
|
|
},
|
|
|
|
passwordResetToken: {
|
|
|
|
token: '',
|
|
|
|
link: ''
|
2019-03-29 14:25:53 +00:00
|
|
|
}
|
2019-02-23 21:40:26 +00:00
|
|
|
},
|
|
|
|
mutations: {
|
|
|
|
SET_USERS: (state, users) => {
|
2019-03-01 17:32:03 +00:00
|
|
|
state.fetchedUsers = users
|
2019-02-24 22:31:05 +00:00
|
|
|
},
|
|
|
|
SET_LOADING: (state, status) => {
|
|
|
|
state.loading = status
|
2019-02-26 19:50:25 +00:00
|
|
|
},
|
2019-05-16 15:16:53 +00:00
|
|
|
SWAP_USERS: (state, users) => {
|
|
|
|
const usersWithoutSwapped = users.reduce((acc, user) => {
|
|
|
|
return acc.filter(u => u.id !== user.id)
|
|
|
|
}, state.fetchedUsers)
|
|
|
|
|
2019-12-11 14:49:11 +00:00
|
|
|
if (state.fetchedUsers.length === 0) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2020-05-18 17:10:33 +00:00
|
|
|
const updatedUsers = [...usersWithoutSwapped, ...users]
|
|
|
|
state.fetchedUsers = updatedUsers
|
|
|
|
.filter(user => user.nickname && user.id)
|
|
|
|
.sort((a, b) => a.nickname.localeCompare(b.nickname))
|
|
|
|
.concat(updatedUsers.filter(user => !user.nickname || !user.id))
|
2019-05-16 15:16:53 +00:00
|
|
|
},
|
2019-02-27 22:13:20 +00:00
|
|
|
SET_COUNT: (state, count) => {
|
|
|
|
state.totalUsersCount = count
|
|
|
|
},
|
2019-03-03 20:46:14 +00:00
|
|
|
SET_PAGE: (state, page) => {
|
|
|
|
state.currentPage = page
|
|
|
|
},
|
2019-02-27 22:13:20 +00:00
|
|
|
SET_PAGE_SIZE: (state, pageSize) => {
|
|
|
|
state.pageSize = pageSize
|
2019-03-03 20:01:00 +00:00
|
|
|
},
|
2019-09-23 19:00:28 +00:00
|
|
|
SET_PASSWORD_RESET_TOKEN: (state, { token, link }) => {
|
|
|
|
state.passwordResetToken.token = token
|
|
|
|
state.passwordResetToken.link = link
|
|
|
|
},
|
2019-03-03 20:01:00 +00:00
|
|
|
SET_SEARCH_QUERY: (state, query) => {
|
|
|
|
state.searchQuery = query
|
2019-03-06 19:44:37 +00:00
|
|
|
},
|
2019-03-29 14:25:53 +00:00
|
|
|
SET_USERS_FILTERS: (state, filters) => {
|
|
|
|
state.filters = filters
|
2019-02-23 21:40:26 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
actions: {
|
2020-02-04 19:47:49 +00:00
|
|
|
async ActivateUsers({ dispatch, getters }, { users, _userId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return { ...user, deactivated: false }
|
|
|
|
})
|
2020-01-27 18:07:23 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
|
|
|
const callApiFn = async() => await activateUsers(nicknames, getters.authHost, getters.token)
|
|
|
|
|
2020-02-04 19:47:49 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId })
|
2020-01-27 18:07:23 +00:00
|
|
|
},
|
2020-05-19 20:21:03 +00:00
|
|
|
async ApplyChanges({ commit, dispatch, state }, { updatedUsers, callApiFn, userId, statusId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
commit('SWAP_USERS', updatedUsers)
|
|
|
|
|
2019-10-24 21:15:40 +00:00
|
|
|
try {
|
2020-01-27 18:07:23 +00:00
|
|
|
await callApiFn()
|
2019-10-24 21:15:40 +00:00
|
|
|
} catch (_e) {
|
|
|
|
return
|
|
|
|
} finally {
|
|
|
|
dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage })
|
|
|
|
}
|
2020-05-19 20:21:03 +00:00
|
|
|
if (statusId) {
|
2020-05-28 18:15:58 +00:00
|
|
|
dispatch('FetchStatusAfterUserModeration', statusId)
|
2020-05-19 20:21:03 +00:00
|
|
|
} else if (userId) {
|
2020-02-04 19:47:49 +00:00
|
|
|
dispatch('FetchUserProfile', { userId, godmode: false })
|
|
|
|
}
|
2019-10-24 22:00:23 +00:00
|
|
|
dispatch('SuccessMessage')
|
2019-10-11 00:28:55 +00:00
|
|
|
},
|
2020-05-19 20:21:03 +00:00
|
|
|
async AddRight({ dispatch, getters }, { users, right, _userId, _statusId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return user.local ? { ...user, roles: { ...user.roles, [right]: true }} : user
|
|
|
|
})
|
2020-01-27 18:07:23 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
|
|
|
const callApiFn = async() => await addRight(nicknames, right, getters.authHost, getters.token)
|
2020-01-27 16:41:16 +00:00
|
|
|
|
2020-05-19 20:21:03 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId, statusId: _statusId })
|
2019-10-10 23:49:16 +00:00
|
|
|
},
|
2020-05-19 20:21:03 +00:00
|
|
|
async AddTag({ dispatch, getters }, { users, tag, _userId, _statusId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return { ...user, tags: [...user.tags, tag] }
|
|
|
|
})
|
2019-05-16 15:16:53 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
2020-01-27 18:07:23 +00:00
|
|
|
const callApiFn = async() => await tagUser(nicknames, [tag], getters.authHost, getters.token)
|
2020-01-27 16:41:16 +00:00
|
|
|
|
2020-05-19 20:21:03 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId, statusId: _statusId })
|
2019-05-16 15:16:53 +00:00
|
|
|
},
|
2020-05-18 19:50:32 +00:00
|
|
|
ClearUsersState({ commit }) {
|
|
|
|
commit('SET_SEARCH_QUERY', '')
|
|
|
|
commit('SET_USERS_FILTERS', { local: false, external: false, active: false, deactivated: false })
|
|
|
|
},
|
2019-05-16 15:16:53 +00:00
|
|
|
async ClearFilters({ commit, dispatch, state }) {
|
|
|
|
commit('CLEAR_USERS_FILTERS')
|
|
|
|
dispatch('SearchUsers', { query: state.searchQuery, page: 1 })
|
|
|
|
},
|
2019-06-11 15:13:48 +00:00
|
|
|
async CreateNewAccount({ dispatch, getters, state }, { nickname, email, password }) {
|
2019-10-24 21:15:40 +00:00
|
|
|
try {
|
|
|
|
await createNewAccount(nickname, email, password, getters.authHost, getters.token)
|
|
|
|
} catch (_e) {
|
|
|
|
return
|
|
|
|
} finally {
|
|
|
|
dispatch('SearchUsers', { query: state.searchQuery, page: state.currentPage })
|
|
|
|
}
|
2019-10-24 22:00:23 +00:00
|
|
|
dispatch('SuccessMessage')
|
2019-06-11 15:13:48 +00:00
|
|
|
},
|
2020-02-04 19:47:49 +00:00
|
|
|
async DeactivateUsers({ dispatch, getters }, { users, _userId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return { ...user, deactivated: true }
|
|
|
|
})
|
2020-01-27 18:07:23 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
|
|
|
const callApiFn = async() => await deactivateUsers(nicknames, getters.authHost, getters.token)
|
2020-01-27 16:41:16 +00:00
|
|
|
|
2020-02-04 19:47:49 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId })
|
2019-10-11 00:28:55 +00:00
|
|
|
},
|
2020-07-01 20:48:04 +00:00
|
|
|
async DisableMfa({ dispatch, getters }, nickname) {
|
|
|
|
try {
|
|
|
|
await disableMfa(nickname, getters.authHost, getters.token)
|
|
|
|
} catch (_e) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
dispatch('SuccessMessage')
|
|
|
|
},
|
2020-05-19 20:21:03 +00:00
|
|
|
async ConfirmUsersEmail({ dispatch, getters }, { users, _userId, _statusId }) {
|
2019-11-19 11:15:15 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return { ...user, confirmation_pending: false }
|
|
|
|
})
|
2020-01-27 18:07:23 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
|
|
|
const callApiFn = async() => await confirmUserEmail(nicknames, getters.authHost, getters.token)
|
2019-11-19 11:15:15 +00:00
|
|
|
|
2020-05-19 20:21:03 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId, statusId: _statusId })
|
2019-11-19 11:15:15 +00:00
|
|
|
},
|
|
|
|
async ResendConfirmationEmail({ dispatch, getters }, users) {
|
|
|
|
const usersNicknames = users.map(user => user.nickname)
|
|
|
|
try {
|
|
|
|
await resendConfirmationEmail(usersNicknames, getters.authHost, getters.token)
|
|
|
|
} catch (_e) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
dispatch('SuccessMessage')
|
|
|
|
},
|
2020-05-19 20:21:03 +00:00
|
|
|
async DeleteRight({ dispatch, getters }, { users, right, _userId, _statusId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return user.local ? { ...user, roles: { ...user.roles, [right]: false }} : user
|
|
|
|
})
|
2020-01-27 18:07:23 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
|
|
|
const callApiFn = async() => await deleteRight(nicknames, right, getters.authHost, getters.token)
|
2020-01-27 16:41:16 +00:00
|
|
|
|
2020-05-19 20:21:03 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId, statusId: _statusId })
|
2019-10-10 23:49:16 +00:00
|
|
|
},
|
2020-02-04 19:47:49 +00:00
|
|
|
async DeleteUsers({ commit, dispatch, getters, state }, { users, _userId }) {
|
2019-10-24 21:15:40 +00:00
|
|
|
const usersNicknames = users.map(user => user.nickname)
|
|
|
|
try {
|
|
|
|
await deleteUsers(usersNicknames, getters.authHost, getters.token)
|
|
|
|
} catch (_e) {
|
|
|
|
return
|
|
|
|
}
|
2020-07-17 11:15:39 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return { ...user, deactivated: true }
|
|
|
|
})
|
|
|
|
commit('SWAP_USERS', updatedUsers)
|
2020-01-27 16:41:16 +00:00
|
|
|
|
2020-07-17 10:47:50 +00:00
|
|
|
if (_userId) {
|
|
|
|
dispatch('FetchUserProfile', { userId: _userId, godmode: false })
|
|
|
|
}
|
2019-10-24 22:00:23 +00:00
|
|
|
dispatch('SuccessMessage')
|
2019-09-24 22:55:42 +00:00
|
|
|
},
|
2019-10-16 12:24:35 +00:00
|
|
|
async FetchUsers({ commit, dispatch, getters, state }, { page }) {
|
2019-04-01 21:17:35 +00:00
|
|
|
commit('SET_LOADING', true)
|
2019-03-29 14:25:53 +00:00
|
|
|
const filters = Object.keys(state.filters).filter(filter => state.filters[filter]).join()
|
|
|
|
const response = await fetchUsers(filters, getters.authHost, getters.token, page)
|
2019-10-18 16:12:55 +00:00
|
|
|
await dispatch('GetNodeInfo')
|
2019-03-03 20:46:14 +00:00
|
|
|
loadUsers(commit, page, response.data)
|
2019-02-26 19:50:25 +00:00
|
|
|
},
|
2019-10-16 12:24:35 +00:00
|
|
|
async GetPasswordResetToken({ commit, getters }, nickname) {
|
2019-09-23 19:00:28 +00:00
|
|
|
const { data } = await getPasswordResetToken(nickname, getters.authHost, getters.token)
|
|
|
|
commit('SET_PASSWORD_RESET_TOKEN', data)
|
|
|
|
},
|
|
|
|
RemovePasswordToken({ commit }) {
|
|
|
|
commit('SET_PASSWORD_RESET_TOKEN', { link: '', token: '' })
|
|
|
|
},
|
2020-05-19 20:21:03 +00:00
|
|
|
async RemoveTag({ dispatch, getters }, { users, tag, _userId, _statusId }) {
|
2019-10-17 20:42:04 +00:00
|
|
|
const updatedUsers = users.map(user => {
|
|
|
|
return { ...user, tags: user.tags.filter(userTag => userTag !== tag) }
|
|
|
|
})
|
2019-05-16 15:16:53 +00:00
|
|
|
const nicknames = users.map(user => user.nickname)
|
2020-01-27 18:07:23 +00:00
|
|
|
const callApiFn = async() => await untagUser(nicknames, [tag], getters.authHost, getters.token)
|
2020-01-27 16:41:16 +00:00
|
|
|
|
2020-05-19 20:21:03 +00:00
|
|
|
dispatch('ApplyChanges', { updatedUsers, callApiFn, userId: _userId, statusId: _statusId })
|
2019-10-24 22:00:23 +00:00
|
|
|
},
|
2020-01-28 13:06:49 +00:00
|
|
|
async RequirePasswordReset({ dispatch, getters }, users) {
|
|
|
|
const nicknames = users.map(user => user.nickname)
|
2019-10-24 22:47:04 +00:00
|
|
|
try {
|
2020-01-28 13:06:49 +00:00
|
|
|
await forcePasswordReset(nicknames, getters.authHost, getters.token)
|
2019-10-24 22:47:04 +00:00
|
|
|
} catch (_e) {
|
|
|
|
return
|
|
|
|
}
|
2019-10-24 22:00:23 +00:00
|
|
|
dispatch('SuccessMessage')
|
2019-03-01 17:32:03 +00:00
|
|
|
},
|
2019-03-22 20:58:58 +00:00
|
|
|
async SearchUsers({ commit, dispatch, state, getters }, { query, page }) {
|
2019-03-03 20:01:00 +00:00
|
|
|
if (query.length === 0) {
|
|
|
|
commit('SET_SEARCH_QUERY', query)
|
2019-06-11 15:13:48 +00:00
|
|
|
dispatch('FetchUsers', { page })
|
2019-03-01 17:32:03 +00:00
|
|
|
} else {
|
2019-03-03 20:01:00 +00:00
|
|
|
commit('SET_LOADING', true)
|
|
|
|
commit('SET_SEARCH_QUERY', query)
|
|
|
|
|
2019-03-29 14:25:53 +00:00
|
|
|
const filters = Object.keys(state.filters).filter(filter => state.filters[filter]).join()
|
|
|
|
const response = await searchUsers(query, filters, getters.authHost, getters.token, page)
|
2019-03-03 20:01:00 +00:00
|
|
|
|
2019-03-03 20:46:14 +00:00
|
|
|
loadUsers(commit, page, response.data)
|
2019-03-01 17:32:03 +00:00
|
|
|
}
|
2019-03-06 19:44:37 +00:00
|
|
|
},
|
2019-10-24 22:00:23 +00:00
|
|
|
SuccessMessage() {
|
2019-12-20 13:51:54 +00:00
|
|
|
Message.success({
|
2019-10-24 22:00:23 +00:00
|
|
|
message: i18n.t('users.completed'),
|
|
|
|
duration: 5 * 1000
|
|
|
|
})
|
|
|
|
},
|
2019-03-29 14:25:53 +00:00
|
|
|
async ToggleUsersFilter({ commit, dispatch, state }, filters) {
|
|
|
|
const defaultFilters = {
|
|
|
|
local: false,
|
|
|
|
external: false,
|
|
|
|
active: false,
|
|
|
|
deactivated: false
|
|
|
|
}
|
|
|
|
const currentFilters = { ...defaultFilters, ...filters }
|
|
|
|
commit('SET_USERS_FILTERS', currentFilters)
|
|
|
|
dispatch('SearchUsers', { query: state.searchQuery, page: 1 })
|
2019-02-23 21:40:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-03-03 20:46:14 +00:00
|
|
|
const loadUsers = (commit, page, { users, count, page_size }) => {
|
2019-03-03 20:01:00 +00:00
|
|
|
commit('SET_USERS', users)
|
|
|
|
commit('SET_COUNT', count)
|
2019-03-03 20:46:14 +00:00
|
|
|
commit('SET_PAGE', page)
|
2019-03-03 20:01:00 +00:00
|
|
|
commit('SET_PAGE_SIZE', page_size)
|
|
|
|
commit('SET_LOADING', false)
|
|
|
|
}
|
|
|
|
|
2019-03-22 20:58:58 +00:00
|
|
|
export default users
|