diff options
Diffstat (limited to 'src/store/modules/SecurityAndAccess/UserManagementStore.js')
-rw-r--r-- | src/store/modules/SecurityAndAccess/UserManagementStore.js | 318 |
1 files changed, 318 insertions, 0 deletions
diff --git a/src/store/modules/SecurityAndAccess/UserManagementStore.js b/src/store/modules/SecurityAndAccess/UserManagementStore.js new file mode 100644 index 00000000..362f3f64 --- /dev/null +++ b/src/store/modules/SecurityAndAccess/UserManagementStore.js @@ -0,0 +1,318 @@ +import api, { getResponseCount } from '@/store/api'; +import i18n from '@/i18n'; + +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) => { + console.log(error); + const message = i18n.t('pageUserManagement.toast.errorCreateUser', { + 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 message = 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; |