blob: 50361580a133fb1e0aeb60a04795a11eb5286353 [file] [log] [blame]
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;