| import api, { getResponseCount } from '@/store/api'; |
| import i18n from '@/i18n'; |
| |
| const getServerErrorMessages = function (error) { |
| let errorData = error.response.data.error |
| ? error.response.data.error |
| : error.response.data; |
| if (typeof errorData == 'string') { |
| return []; |
| } |
| return Object.values(errorData) |
| .reduce((a, b) => a.concat(b)) |
| .filter((info) => info.Message) |
| .map((info) => info.Message); |
| }; |
| |
| const UserManagementStore = { |
| namespaced: true, |
| state: { |
| allUsers: [], |
| accountRoles: [], |
| accountLockoutDuration: null, |
| accountLockoutThreshold: null, |
| accountMinPasswordLength: null, |
| accountMaxPasswordLength: null, |
| }, |
| getters: { |
| allUsers(state) { |
| return state.allUsers; |
| }, |
| accountRoles(state) { |
| return state.accountRoles; |
| }, |
| accountSettings(state) { |
| return { |
| lockoutDuration: state.accountLockoutDuration, |
| lockoutThreshold: state.accountLockoutThreshold, |
| }; |
| }, |
| accountPasswordRequirements(state) { |
| return { |
| minLength: state.accountMinPasswordLength, |
| maxLength: state.accountMaxPasswordLength, |
| }; |
| }, |
| }, |
| mutations: { |
| setUsers(state, allUsers) { |
| state.allUsers = allUsers; |
| }, |
| setAccountRoles(state, accountRoles) { |
| state.accountRoles = accountRoles; |
| }, |
| setLockoutDuration(state, lockoutDuration) { |
| state.accountLockoutDuration = lockoutDuration; |
| }, |
| setLockoutThreshold(state, lockoutThreshold) { |
| state.accountLockoutThreshold = lockoutThreshold; |
| }, |
| setAccountMinPasswordLength(state, minPasswordLength) { |
| state.accountMinPasswordLength = minPasswordLength; |
| }, |
| setAccountMaxPasswordLength(state, maxPasswordLength) { |
| state.accountMaxPasswordLength = maxPasswordLength; |
| }, |
| }, |
| actions: { |
| async getUsers({ commit }) { |
| return await api |
| .get('/redfish/v1/AccountService/Accounts') |
| .then((response) => |
| response.data.Members.map((user) => user['@odata.id']), |
| ) |
| .then((userIds) => api.all(userIds.map((user) => api.get(user)))) |
| .then((users) => { |
| const userData = users.map((user) => user.data); |
| commit('setUsers', userData); |
| }) |
| .catch((error) => { |
| console.log(error); |
| const message = i18n.t('pageUserManagement.toast.errorLoadUsers'); |
| throw new Error(message); |
| }); |
| }, |
| getAccountSettings({ commit }) { |
| api |
| .get('/redfish/v1/AccountService') |
| .then(({ data }) => { |
| commit('setLockoutDuration', data.AccountLockoutDuration); |
| commit('setLockoutThreshold', data.AccountLockoutThreshold); |
| commit('setAccountMinPasswordLength', data.MinPasswordLength); |
| commit('setAccountMaxPasswordLength', data.MaxPasswordLength); |
| }) |
| .catch((error) => { |
| console.log(error); |
| const message = i18n.t( |
| 'pageUserManagement.toast.errorLoadAccountSettings', |
| ); |
| throw new Error(message); |
| }); |
| }, |
| getAccountRoles({ commit }) { |
| api |
| .get('/redfish/v1/AccountService/Roles') |
| .then(({ data: { Members = [] } = {} }) => { |
| const roles = Members.map((role) => { |
| return role['@odata.id'].split('/').pop(); |
| }); |
| commit('setAccountRoles', roles); |
| }) |
| .catch((error) => console.log(error)); |
| }, |
| async createUser({ dispatch }, { username, password, privilege, status }) { |
| const data = { |
| UserName: username, |
| Password: password, |
| RoleId: privilege, |
| Enabled: status, |
| }; |
| return await api |
| .post('/redfish/v1/AccountService/Accounts', data) |
| .then(() => dispatch('getUsers')) |
| .then(() => |
| i18n.t('pageUserManagement.toast.successCreateUser', { |
| username, |
| }), |
| ) |
| .catch((error) => { |
| let serverMessages = getServerErrorMessages(error); |
| let message = |
| serverMessages.length > 0 |
| ? serverMessages.join(' ') |
| : i18n.t('pageUserManagement.toast.errorCreateUser', { |
| username: username, |
| }); |
| throw new Error(message); |
| }); |
| }, |
| async updateUser( |
| { dispatch }, |
| { originalUsername, username, password, privilege, status, locked }, |
| ) { |
| const data = {}; |
| if (username) data.UserName = username; |
| if (password) data.Password = password; |
| if (privilege) data.RoleId = privilege; |
| if (status !== undefined) data.Enabled = status; |
| if (locked !== undefined) data.Locked = locked; |
| return await api |
| .patch(`/redfish/v1/AccountService/Accounts/${originalUsername}`, data) |
| .then(() => dispatch('getUsers')) |
| .then(() => |
| i18n.t('pageUserManagement.toast.successUpdateUser', { |
| username: originalUsername, |
| }), |
| ) |
| .catch((error) => { |
| console.log(error); |
| const serverMessages = getServerErrorMessages(error); |
| const message = |
| serverMessages.length > 0 |
| ? serverMessages.join(' ') |
| : i18n.t('pageUserManagement.toast.errorUpdateUser', { |
| username: originalUsername, |
| }); |
| throw new Error(message); |
| }); |
| }, |
| async deleteUser({ dispatch }, username) { |
| return await api |
| .delete(`/redfish/v1/AccountService/Accounts/${username}`) |
| .then(() => dispatch('getUsers')) |
| .then(() => |
| i18n.t('pageUserManagement.toast.successDeleteUser', { |
| username, |
| }), |
| ) |
| .catch((error) => { |
| console.log(error); |
| const message = i18n.t('pageUserManagement.toast.errorDeleteUser', { |
| username, |
| }); |
| throw new Error(message); |
| }); |
| }, |
| async deleteUsers({ dispatch }, users) { |
| const promises = users.map(({ username }) => { |
| return api |
| .delete(`/redfish/v1/AccountService/Accounts/${username}`) |
| .catch((error) => { |
| console.log(error); |
| return error; |
| }); |
| }); |
| return await api |
| .all(promises) |
| .then((response) => { |
| dispatch('getUsers'); |
| return response; |
| }) |
| .then( |
| api.spread((...responses) => { |
| const { successCount, errorCount } = getResponseCount(responses); |
| let toastMessages = []; |
| |
| if (successCount) { |
| const message = i18n.tc( |
| 'pageUserManagement.toast.successBatchDelete', |
| successCount, |
| ); |
| toastMessages.push({ type: 'success', message }); |
| } |
| |
| if (errorCount) { |
| const message = i18n.tc( |
| 'pageUserManagement.toast.errorBatchDelete', |
| errorCount, |
| ); |
| toastMessages.push({ type: 'error', message }); |
| } |
| |
| return toastMessages; |
| }), |
| ); |
| }, |
| async enableUsers({ dispatch }, users) { |
| const data = { |
| Enabled: true, |
| }; |
| const promises = users.map(({ username }) => { |
| return api |
| .patch(`/redfish/v1/AccountService/Accounts/${username}`, data) |
| .catch((error) => { |
| console.log(error); |
| return error; |
| }); |
| }); |
| return await api |
| .all(promises) |
| .then((response) => { |
| dispatch('getUsers'); |
| return response; |
| }) |
| .then( |
| api.spread((...responses) => { |
| const { successCount, errorCount } = getResponseCount(responses); |
| let toastMessages = []; |
| |
| if (successCount) { |
| const message = i18n.tc( |
| 'pageUserManagement.toast.successBatchEnable', |
| successCount, |
| ); |
| toastMessages.push({ type: 'success', message }); |
| } |
| |
| if (errorCount) { |
| const message = i18n.tc( |
| 'pageUserManagement.toast.errorBatchEnable', |
| errorCount, |
| ); |
| toastMessages.push({ type: 'error', message }); |
| } |
| |
| return toastMessages; |
| }), |
| ); |
| }, |
| async disableUsers({ dispatch }, users) { |
| const data = { |
| Enabled: false, |
| }; |
| const promises = users.map(({ username }) => { |
| return api |
| .patch(`/redfish/v1/AccountService/Accounts/${username}`, data) |
| .catch((error) => { |
| console.log(error); |
| return error; |
| }); |
| }); |
| return await api |
| .all(promises) |
| .then((response) => { |
| dispatch('getUsers'); |
| return response; |
| }) |
| .then( |
| api.spread((...responses) => { |
| const { successCount, errorCount } = getResponseCount(responses); |
| let toastMessages = []; |
| |
| if (successCount) { |
| const message = i18n.tc( |
| 'pageUserManagement.toast.successBatchDisable', |
| successCount, |
| ); |
| toastMessages.push({ type: 'success', message }); |
| } |
| |
| if (errorCount) { |
| const message = i18n.tc( |
| 'pageUserManagement.toast.errorBatchDisable', |
| errorCount, |
| ); |
| toastMessages.push({ type: 'error', message }); |
| } |
| |
| return toastMessages; |
| }), |
| ); |
| }, |
| async saveAccountSettings( |
| { dispatch }, |
| { lockoutThreshold, lockoutDuration }, |
| ) { |
| const data = {}; |
| if (lockoutThreshold !== undefined) { |
| data.AccountLockoutThreshold = lockoutThreshold; |
| } |
| if (lockoutDuration !== undefined) { |
| data.AccountLockoutDuration = lockoutDuration; |
| } |
| |
| return await api |
| .patch('/redfish/v1/AccountService', data) |
| //GET new settings to update view |
| .then(() => dispatch('getAccountSettings')) |
| .then(() => i18n.t('pageUserManagement.toast.successSaveSettings')) |
| .catch((error) => { |
| console.log(error); |
| const message = i18n.t('pageUserManagement.toast.errorSaveSettings'); |
| throw new Error(message); |
| }); |
| }, |
| }, |
| }; |
| |
| export default UserManagementStore; |