blob: b1860d10559d1f40764d631ef13c609ae0a50709 [file] [log] [blame]
Yoshie Muranaka224d6ad2020-05-21 09:10:52 -07001import api, { getResponseCount } from '@/store/api';
2import i18n from '@/i18n';
Yoshie Muranaka35080ac2020-01-17 15:38:57 -06003
MichalX Szopinski5905f962021-06-07 15:46:59 +02004const getServerErrorMessages = function (error) {
5 let errorData = error.response.data.error
6 ? error.response.data.error
7 : error.response.data;
8 if (typeof errorData == 'string') {
9 return [];
10 }
11 return Object.values(errorData)
12 .reduce((a, b) => a.concat(b))
13 .filter((info) => info.Message)
14 .map((info) => info.Message);
15};
16
Sandeepa Singhb4406162021-07-26 15:05:39 +053017const UserManagementStore = {
Yoshie Muranaka35080ac2020-01-17 15:38:57 -060018 namespaced: true,
19 state: {
Yoshie Muranaka52b02232020-02-20 08:00:45 -080020 allUsers: [],
Yoshie Muranaka038a9da2020-04-17 11:22:56 -070021 accountRoles: [],
Yoshie Muranaka52b02232020-02-20 08:00:45 -080022 accountLockoutDuration: null,
23 accountLockoutThreshold: null,
24 accountMinPasswordLength: null,
Derick Montague602e98a2020-10-21 16:20:00 -050025 accountMaxPasswordLength: null,
Yoshie Muranaka35080ac2020-01-17 15:38:57 -060026 },
27 getters: {
28 allUsers(state) {
29 return state.allUsers;
Yoshie Muranaka52b02232020-02-20 08:00:45 -080030 },
Yoshie Muranaka038a9da2020-04-17 11:22:56 -070031 accountRoles(state) {
32 return state.accountRoles;
33 },
Yoshie Muranaka52b02232020-02-20 08:00:45 -080034 accountSettings(state) {
35 return {
36 lockoutDuration: state.accountLockoutDuration,
Derick Montague602e98a2020-10-21 16:20:00 -050037 lockoutThreshold: state.accountLockoutThreshold,
Yoshie Muranaka52b02232020-02-20 08:00:45 -080038 };
39 },
40 accountPasswordRequirements(state) {
41 return {
42 minLength: state.accountMinPasswordLength,
Derick Montague602e98a2020-10-21 16:20:00 -050043 maxLength: state.accountMaxPasswordLength,
Yoshie Muranaka52b02232020-02-20 08:00:45 -080044 };
Derick Montague602e98a2020-10-21 16:20:00 -050045 },
Yoshie Muranaka35080ac2020-01-17 15:38:57 -060046 },
47 mutations: {
48 setUsers(state, allUsers) {
49 state.allUsers = allUsers;
Yoshie Muranaka52b02232020-02-20 08:00:45 -080050 },
Yoshie Muranaka038a9da2020-04-17 11:22:56 -070051 setAccountRoles(state, accountRoles) {
52 state.accountRoles = accountRoles;
53 },
Yoshie Muranaka52b02232020-02-20 08:00:45 -080054 setLockoutDuration(state, lockoutDuration) {
55 state.accountLockoutDuration = lockoutDuration;
56 },
57 setLockoutThreshold(state, lockoutThreshold) {
58 state.accountLockoutThreshold = lockoutThreshold;
59 },
60 setAccountMinPasswordLength(state, minPasswordLength) {
61 state.accountMinPasswordLength = minPasswordLength;
62 },
63 setAccountMaxPasswordLength(state, maxPasswordLength) {
64 state.accountMaxPasswordLength = maxPasswordLength;
Derick Montague602e98a2020-10-21 16:20:00 -050065 },
Yoshie Muranaka35080ac2020-01-17 15:38:57 -060066 },
67 actions: {
Yoshie Muranaka346be2a2020-04-28 11:12:14 -070068 async getUsers({ commit }) {
69 return await api
Derick Montaguefded0d12019-12-11 06:16:40 -060070 .get('/redfish/v1/AccountService/Accounts')
Derick Montague602e98a2020-10-21 16:20:00 -050071 .then((response) =>
Ed Tanous81323992024-02-27 11:26:24 -080072 response.data.Members.map((user) => user['@odata.id']),
Derick Montague602e98a2020-10-21 16:20:00 -050073 )
74 .then((userIds) => api.all(userIds.map((user) => api.get(user))))
75 .then((users) => {
76 const userData = users.map((user) => user.data);
Derick Montaguefded0d12019-12-11 06:16:40 -060077 commit('setUsers', userData);
Yoshie Muranaka74c24f12019-12-03 10:45:46 -080078 })
Derick Montague602e98a2020-10-21 16:20:00 -050079 .catch((error) => {
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -080080 console.log(error);
Surya Vde23ea22024-07-11 15:19:46 +053081 const message = i18n.global.t(
82 'pageUserManagement.toast.errorLoadUsers',
83 );
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -070084 throw new Error(message);
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -080085 });
Yoshie Muranaka463a5702019-12-04 09:09:36 -080086 },
Yoshie Muranaka52b02232020-02-20 08:00:45 -080087 getAccountSettings({ commit }) {
88 api
89 .get('/redfish/v1/AccountService')
90 .then(({ data }) => {
91 commit('setLockoutDuration', data.AccountLockoutDuration);
92 commit('setLockoutThreshold', data.AccountLockoutThreshold);
93 commit('setAccountMinPasswordLength', data.MinPasswordLength);
94 commit('setAccountMaxPasswordLength', data.MaxPasswordLength);
95 })
Derick Montague602e98a2020-10-21 16:20:00 -050096 .catch((error) => {
Yoshie Muranaka52b02232020-02-20 08:00:45 -080097 console.log(error);
Surya Vde23ea22024-07-11 15:19:46 +053098 const message = i18n.global.t(
Ed Tanous81323992024-02-27 11:26:24 -080099 'pageUserManagement.toast.errorLoadAccountSettings',
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700100 );
101 throw new Error(message);
Yoshie Muranaka52b02232020-02-20 08:00:45 -0800102 });
103 },
Yoshie Muranaka038a9da2020-04-17 11:22:56 -0700104 getAccountRoles({ commit }) {
105 api
106 .get('/redfish/v1/AccountService/Roles')
107 .then(({ data: { Members = [] } = {} }) => {
Derick Montague602e98a2020-10-21 16:20:00 -0500108 const roles = Members.map((role) => {
Yoshie Muranaka038a9da2020-04-17 11:22:56 -0700109 return role['@odata.id'].split('/').pop();
110 });
111 commit('setAccountRoles', roles);
112 })
Derick Montague602e98a2020-10-21 16:20:00 -0500113 .catch((error) => console.log(error));
Yoshie Muranaka038a9da2020-04-17 11:22:56 -0700114 },
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800115 async createUser({ dispatch }, { username, password, privilege, status }) {
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800116 const data = {
117 UserName: username,
118 Password: password,
119 RoleId: privilege,
Derick Montague602e98a2020-10-21 16:20:00 -0500120 Enabled: status,
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800121 };
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800122 return await api
Derick Montaguefded0d12019-12-11 06:16:40 -0600123 .post('/redfish/v1/AccountService/Accounts', data)
124 .then(() => dispatch('getUsers'))
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700125 .then(() =>
Surya Vde23ea22024-07-11 15:19:46 +0530126 i18n.global.t('pageUserManagement.toast.successCreateUser', {
Derick Montague602e98a2020-10-21 16:20:00 -0500127 username,
Ed Tanous81323992024-02-27 11:26:24 -0800128 }),
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700129 )
Derick Montague602e98a2020-10-21 16:20:00 -0500130 .catch((error) => {
MichalX Szopinski5905f962021-06-07 15:46:59 +0200131 let serverMessages = getServerErrorMessages(error);
132 let message =
133 serverMessages.length > 0
134 ? serverMessages.join(' ')
Surya Vde23ea22024-07-11 15:19:46 +0530135 : i18n.global.t('pageUserManagement.toast.errorCreateUser', {
MichalX Szopinski5905f962021-06-07 15:46:59 +0200136 username: username,
137 });
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700138 throw new Error(message);
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800139 });
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800140 },
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800141 async updateUser(
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800142 { dispatch },
Ed Tanous81323992024-02-27 11:26:24 -0800143 { originalUsername, username, password, privilege, status, locked },
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800144 ) {
145 const data = {};
146 if (username) data.UserName = username;
147 if (password) data.Password = password;
148 if (privilege) data.RoleId = privilege;
149 if (status !== undefined) data.Enabled = status;
Yoshie Muranaka1f9ed4c2020-03-26 16:59:54 -0700150 if (locked !== undefined) data.Locked = locked;
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800151 return await api
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800152 .patch(`/redfish/v1/AccountService/Accounts/${originalUsername}`, data)
Derick Montaguefded0d12019-12-11 06:16:40 -0600153 .then(() => dispatch('getUsers'))
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700154 .then(() =>
Surya Vde23ea22024-07-11 15:19:46 +0530155 i18n.global.t('pageUserManagement.toast.successUpdateUser', {
Derick Montague602e98a2020-10-21 16:20:00 -0500156 username: originalUsername,
Ed Tanous81323992024-02-27 11:26:24 -0800157 }),
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700158 )
Derick Montague602e98a2020-10-21 16:20:00 -0500159 .catch((error) => {
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800160 console.log(error);
MichalX Szopinski5905f962021-06-07 15:46:59 +0200161 const serverMessages = getServerErrorMessages(error);
162 const message =
163 serverMessages.length > 0
164 ? serverMessages.join(' ')
Surya Vde23ea22024-07-11 15:19:46 +0530165 : i18n.global.t('pageUserManagement.toast.errorUpdateUser', {
MichalX Szopinski5905f962021-06-07 15:46:59 +0200166 username: originalUsername,
167 });
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700168 throw new Error(message);
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800169 });
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800170 },
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800171 async deleteUser({ dispatch }, username) {
172 return await api
Yoshie Muranaka463a5702019-12-04 09:09:36 -0800173 .delete(`/redfish/v1/AccountService/Accounts/${username}`)
Derick Montaguefded0d12019-12-11 06:16:40 -0600174 .then(() => dispatch('getUsers'))
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700175 .then(() =>
Surya Vde23ea22024-07-11 15:19:46 +0530176 i18n.global.t('pageUserManagement.toast.successDeleteUser', {
Derick Montague602e98a2020-10-21 16:20:00 -0500177 username,
Ed Tanous81323992024-02-27 11:26:24 -0800178 }),
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700179 )
Derick Montague602e98a2020-10-21 16:20:00 -0500180 .catch((error) => {
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800181 console.log(error);
Surya Vde23ea22024-07-11 15:19:46 +0530182 const message = i18n.global.t(
183 'pageUserManagement.toast.errorDeleteUser',
184 {
185 username,
186 },
187 );
Yoshie Muranaka8fc53ad2020-05-04 10:40:41 -0700188 throw new Error(message);
Yoshie Muranaka0fc91e72020-02-05 11:23:06 -0800189 });
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800190 },
191 async deleteUsers({ dispatch }, users) {
192 const promises = users.map(({ username }) => {
193 return api
194 .delete(`/redfish/v1/AccountService/Accounts/${username}`)
Derick Montague602e98a2020-10-21 16:20:00 -0500195 .catch((error) => {
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800196 console.log(error);
197 return error;
198 });
199 });
200 return await api
201 .all(promises)
Derick Montague602e98a2020-10-21 16:20:00 -0500202 .then((response) => {
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800203 dispatch('getUsers');
204 return response;
205 })
206 .then(
207 api.spread((...responses) => {
208 const { successCount, errorCount } = getResponseCount(responses);
209 let toastMessages = [];
210
211 if (successCount) {
Surya Vde23ea22024-07-11 15:19:46 +0530212 const message = i18n.global.t(
Sandeepa Singhb4406162021-07-26 15:05:39 +0530213 'pageUserManagement.toast.successBatchDelete',
Ed Tanous81323992024-02-27 11:26:24 -0800214 successCount,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800215 );
216 toastMessages.push({ type: 'success', message });
217 }
218
219 if (errorCount) {
Surya Vde23ea22024-07-11 15:19:46 +0530220 const message = i18n.global.t(
Sandeepa Singhb4406162021-07-26 15:05:39 +0530221 'pageUserManagement.toast.errorBatchDelete',
Ed Tanous81323992024-02-27 11:26:24 -0800222 errorCount,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800223 );
224 toastMessages.push({ type: 'error', message });
225 }
226
227 return toastMessages;
Ed Tanous81323992024-02-27 11:26:24 -0800228 }),
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800229 );
230 },
231 async enableUsers({ dispatch }, users) {
232 const data = {
Derick Montague602e98a2020-10-21 16:20:00 -0500233 Enabled: true,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800234 };
235 const promises = users.map(({ username }) => {
236 return api
237 .patch(`/redfish/v1/AccountService/Accounts/${username}`, data)
Derick Montague602e98a2020-10-21 16:20:00 -0500238 .catch((error) => {
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800239 console.log(error);
240 return error;
241 });
242 });
243 return await api
244 .all(promises)
Derick Montague602e98a2020-10-21 16:20:00 -0500245 .then((response) => {
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800246 dispatch('getUsers');
247 return response;
248 })
249 .then(
250 api.spread((...responses) => {
251 const { successCount, errorCount } = getResponseCount(responses);
252 let toastMessages = [];
253
254 if (successCount) {
Surya Vde23ea22024-07-11 15:19:46 +0530255 const message = i18n.global.t(
Sandeepa Singhb4406162021-07-26 15:05:39 +0530256 'pageUserManagement.toast.successBatchEnable',
Ed Tanous81323992024-02-27 11:26:24 -0800257 successCount,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800258 );
259 toastMessages.push({ type: 'success', message });
260 }
261
262 if (errorCount) {
Surya Vde23ea22024-07-11 15:19:46 +0530263 const message = i18n.global.t(
Sandeepa Singhb4406162021-07-26 15:05:39 +0530264 'pageUserManagement.toast.errorBatchEnable',
Ed Tanous81323992024-02-27 11:26:24 -0800265 errorCount,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800266 );
267 toastMessages.push({ type: 'error', message });
268 }
269
270 return toastMessages;
Ed Tanous81323992024-02-27 11:26:24 -0800271 }),
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800272 );
273 },
274 async disableUsers({ dispatch }, users) {
275 const data = {
Derick Montague602e98a2020-10-21 16:20:00 -0500276 Enabled: false,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800277 };
278 const promises = users.map(({ username }) => {
279 return api
280 .patch(`/redfish/v1/AccountService/Accounts/${username}`, data)
Derick Montague602e98a2020-10-21 16:20:00 -0500281 .catch((error) => {
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800282 console.log(error);
283 return error;
284 });
285 });
286 return await api
287 .all(promises)
Derick Montague602e98a2020-10-21 16:20:00 -0500288 .then((response) => {
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800289 dispatch('getUsers');
290 return response;
291 })
292 .then(
293 api.spread((...responses) => {
294 const { successCount, errorCount } = getResponseCount(responses);
295 let toastMessages = [];
296
297 if (successCount) {
Surya Vde23ea22024-07-11 15:19:46 +0530298 const message = i18n.global.t(
Sandeepa Singhb4406162021-07-26 15:05:39 +0530299 'pageUserManagement.toast.successBatchDisable',
Ed Tanous81323992024-02-27 11:26:24 -0800300 successCount,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800301 );
302 toastMessages.push({ type: 'success', message });
303 }
304
305 if (errorCount) {
Surya Vde23ea22024-07-11 15:19:46 +0530306 const message = i18n.global.t(
Sandeepa Singhb4406162021-07-26 15:05:39 +0530307 'pageUserManagement.toast.errorBatchDisable',
Ed Tanous81323992024-02-27 11:26:24 -0800308 errorCount,
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800309 );
310 toastMessages.push({ type: 'error', message });
311 }
312
313 return toastMessages;
Ed Tanous81323992024-02-27 11:26:24 -0800314 }),
Yoshie Muranaka183c2752020-02-12 11:30:49 -0800315 );
Yoshie Muranaka1b1c1002020-02-20 10:18:36 -0800316 },
317 async saveAccountSettings(
318 { dispatch },
Ed Tanous81323992024-02-27 11:26:24 -0800319 { lockoutThreshold, lockoutDuration },
Yoshie Muranaka1b1c1002020-02-20 10:18:36 -0800320 ) {
321 const data = {};
322 if (lockoutThreshold !== undefined) {
323 data.AccountLockoutThreshold = lockoutThreshold;
324 }
325 if (lockoutDuration !== undefined) {
326 data.AccountLockoutDuration = lockoutDuration;
327 }
328
329 return await api
330 .patch('/redfish/v1/AccountService', data)
331 //GET new settings to update view
332 .then(() => dispatch('getAccountSettings'))
Surya Vde23ea22024-07-11 15:19:46 +0530333 .then(() =>
334 i18n.global.t('pageUserManagement.toast.successSaveSettings'),
335 )
Derick Montague602e98a2020-10-21 16:20:00 -0500336 .catch((error) => {
Yoshie Muranaka1b1c1002020-02-20 10:18:36 -0800337 console.log(error);
Surya Vde23ea22024-07-11 15:19:46 +0530338 const message = i18n.global.t(
339 'pageUserManagement.toast.errorSaveSettings',
340 );
Yoshie Muranaka1b1c1002020-02-20 10:18:36 -0800341 throw new Error(message);
342 });
Derick Montague602e98a2020-10-21 16:20:00 -0500343 },
344 },
Yoshie Muranaka35080ac2020-01-17 15:38:57 -0600345};
346
Sandeepa Singhb4406162021-07-26 15:05:39 +0530347export default UserManagementStore;