xref: /openbmc/phosphor-webui/app/access-control/controllers/user-controller.js (revision 339db9a4c8610c5ecb92993c0bbc2219933bc858)
1afc8a799Smiramurali23/**
2afc8a799Smiramurali23 * Controller for user Accounts
3afc8a799Smiramurali23 *
4afc8a799Smiramurali23 * @module app/access-control
5afc8a799Smiramurali23 * @exports userController
6afc8a799Smiramurali23 * @name userController
7afc8a799Smiramurali23 */
8afc8a799Smiramurali23
9afc8a799Smiramurali23window.angular && (function(angular) {
10afc8a799Smiramurali23  'use strict';
11afc8a799Smiramurali23
12afc8a799Smiramurali23  angular.module('app.accessControl').controller('userController', [
13afc8a799Smiramurali23    '$scope', 'APIUtils', 'toastService', '$uibModal', '$q',
14afc8a799Smiramurali23    function($scope, APIUtils, toastService, $uibModal, $q) {
15afc8a799Smiramurali23      $scope.loading;
16afc8a799Smiramurali23      $scope.accountSettings;
17afc8a799Smiramurali23      $scope.userRoles;
18afc8a799Smiramurali23      $scope.localUsers;
19afc8a799Smiramurali23
20afc8a799Smiramurali23      $scope.tableData = [];
21afc8a799Smiramurali23      $scope.tableHeader = [
22afc8a799Smiramurali23        {label: 'Username'}, {label: 'Privilege'}, {label: 'Account status'}
23afc8a799Smiramurali23      ];
24afc8a799Smiramurali23      $scope.tableBatchActions = [
25afc8a799Smiramurali23        {type: 'delete', label: 'Remove'},
26afc8a799Smiramurali23        {type: 'enable', label: 'Enable'},
27afc8a799Smiramurali23        {type: 'disable', label: 'Disable'},
28afc8a799Smiramurali23      ];
29afc8a799Smiramurali23
30afc8a799Smiramurali23      /**
31afc8a799Smiramurali23       * Returns true if username is 'root'
32afc8a799Smiramurali23       * @param {*} user
33afc8a799Smiramurali23       */
34afc8a799Smiramurali23      function checkIfRoot(user) {
35afc8a799Smiramurali23        return user.UserName === 'root' ? true : false;
36afc8a799Smiramurali23      }
37afc8a799Smiramurali23
38afc8a799Smiramurali23      /**
39afc8a799Smiramurali23       * Data table mapper
40afc8a799Smiramurali23       * @param {*} user
41afc8a799Smiramurali23       * @returns user
42afc8a799Smiramurali23       */
43afc8a799Smiramurali23      function mapTableData(user) {
44*339db9a4SPatrick Williams        const accountStatus = user.Locked ? 'Locked' :
45*339db9a4SPatrick Williams            user.Enabled                  ? 'Enabled' :
46*339db9a4SPatrick Williams                                            'Disabled';
47afc8a799Smiramurali23        const editAction = {type: 'Edit', enabled: true, file: 'icon-edit.svg'};
48afc8a799Smiramurali23        const deleteAction = {
49afc8a799Smiramurali23          type: 'Delete',
50afc8a799Smiramurali23          enabled: checkIfRoot(user) ? false : true,
51afc8a799Smiramurali23          file: 'icon-trashcan.svg'
52afc8a799Smiramurali23        };
53afc8a799Smiramurali23        user.selectable = checkIfRoot(user) ? false : true;
54afc8a799Smiramurali23        user.actions = [editAction, deleteAction];
55afc8a799Smiramurali23        user.uiData = [user.UserName, user.RoleId, accountStatus];
56afc8a799Smiramurali23        return user;
57afc8a799Smiramurali23      }
58afc8a799Smiramurali23
59afc8a799Smiramurali23      /**
60afc8a799Smiramurali23       * Returns lockout method based on the lockout duration property
61afc8a799Smiramurali23       * If the lockoutDuration is greater than 0 the lockout method
62afc8a799Smiramurali23       * is automatic otherwise the lockout method is manual
63afc8a799Smiramurali23       * @param {number} lockoutDuration
64afc8a799Smiramurali23       * @returns {number} : returns the account lockout method
65afc8a799Smiramurali23       *                     1(automatic) / 0(manual)
66afc8a799Smiramurali23       */
67afc8a799Smiramurali23      function mapLockoutMethod(lockoutDuration) {
68afc8a799Smiramurali23        return lockoutDuration > 0 ? 1 : 0;
69afc8a799Smiramurali23      }
70afc8a799Smiramurali23
71afc8a799Smiramurali23      /**
72afc8a799Smiramurali23       * API call to get all user accounts
73afc8a799Smiramurali23       */
74afc8a799Smiramurali23      function getLocalUsers() {
75afc8a799Smiramurali23        $scope.loading = true;
76afc8a799Smiramurali23        APIUtils.getAllUserAccounts()
77afc8a799Smiramurali23            .then((users) => {
78afc8a799Smiramurali23              $scope.localUsers = users;
79afc8a799Smiramurali23              $scope.tableData = users.map(mapTableData);
80afc8a799Smiramurali23            })
81afc8a799Smiramurali23            .catch((error) => {
82afc8a799Smiramurali23              console.log(JSON.stringify(error));
83afc8a799Smiramurali23              toastService.error('Failed to load users.');
84afc8a799Smiramurali23            })
85afc8a799Smiramurali23            .finally(() => {
86afc8a799Smiramurali23              $scope.loading = false;
87afc8a799Smiramurali23            })
88afc8a799Smiramurali23      }
89afc8a799Smiramurali23
90afc8a799Smiramurali23      /**
91afc8a799Smiramurali23       * API call to get current Account settings
92afc8a799Smiramurali23       */
93afc8a799Smiramurali23      function getAccountSettings() {
94afc8a799Smiramurali23        APIUtils.getAllUserAccountProperties()
95afc8a799Smiramurali23            .then((settings) => {
96afc8a799Smiramurali23              $scope.accountSettings = settings;
97afc8a799Smiramurali23            })
98afc8a799Smiramurali23            .catch((error) => {
99afc8a799Smiramurali23              console.log(JSON.stringify(error));
100afc8a799Smiramurali23              $scope.accountSettings = null;
101afc8a799Smiramurali23            })
102afc8a799Smiramurali23      }
103afc8a799Smiramurali23
104afc8a799Smiramurali23      /**
105afc8a799Smiramurali23       * API call to get local user roles
106afc8a799Smiramurali23       */
107afc8a799Smiramurali23      function getUserRoles() {
108afc8a799Smiramurali23        APIUtils.getAccountServiceRoles()
109afc8a799Smiramurali23            .then((roles) => {
110afc8a799Smiramurali23              $scope.userRoles = roles;
111afc8a799Smiramurali23            })
112afc8a799Smiramurali23            .catch((error) => {
113afc8a799Smiramurali23              console.log(JSON.stringify(error));
114afc8a799Smiramurali23              $scope.userRoles = null;
115afc8a799Smiramurali23            })
116afc8a799Smiramurali23      }
117afc8a799Smiramurali23
118afc8a799Smiramurali23      /**
119afc8a799Smiramurali23       * API call to create new user
120afc8a799Smiramurali23       * @param {*} user
121afc8a799Smiramurali23       */
122afc8a799Smiramurali23      function createUser(username, password, role, enabled) {
123afc8a799Smiramurali23        $scope.loading = true;
124afc8a799Smiramurali23        APIUtils.createUser(username, password, role, enabled)
125afc8a799Smiramurali23            .then(() => {
126afc8a799Smiramurali23              getLocalUsers();
127afc8a799Smiramurali23              toastService.success(`User '${username}' has been created.`);
128afc8a799Smiramurali23            })
129afc8a799Smiramurali23            .catch((error) => {
130afc8a799Smiramurali23              console.log(JSON.stringify(error));
131afc8a799Smiramurali23              toastService.error(`Failed to create new user '${username}'.`);
132afc8a799Smiramurali23            })
133afc8a799Smiramurali23            .finally(() => {
134afc8a799Smiramurali23              $scope.loading = false;
135afc8a799Smiramurali23            });
136afc8a799Smiramurali23      }
137afc8a799Smiramurali23
138afc8a799Smiramurali23      /**
139afc8a799Smiramurali23       * API call to update existing user
140afc8a799Smiramurali23       */
141afc8a799Smiramurali23      function updateUser(
142afc8a799Smiramurali23          originalUsername, username, password, role, enabled, locked) {
143afc8a799Smiramurali23        $scope.loading = true;
144afc8a799Smiramurali23        APIUtils
145afc8a799Smiramurali23            .updateUser(
146afc8a799Smiramurali23                originalUsername, username, password, role, enabled, locked)
147afc8a799Smiramurali23            .then(() => {
148afc8a799Smiramurali23              getLocalUsers();
149afc8a799Smiramurali23              toastService.success('User has been updated successfully.')
150afc8a799Smiramurali23            })
151afc8a799Smiramurali23            .catch((error) => {
152afc8a799Smiramurali23              console.log(JSON.stringify(error));
153afc8a799Smiramurali23              toastService.error(`Unable to update user '${originalUsername}'.`)
154afc8a799Smiramurali23            })
155afc8a799Smiramurali23            .finally(() => {
156afc8a799Smiramurali23              $scope.loading = false;
157afc8a799Smiramurali23            })
158afc8a799Smiramurali23      }
159afc8a799Smiramurali23
160afc8a799Smiramurali23      /**
161afc8a799Smiramurali23       * API call to delete users
162afc8a799Smiramurali23       * @param {*} users : Array of users to delete
163afc8a799Smiramurali23       */
164afc8a799Smiramurali23      function deleteUsers(users = []) {
165afc8a799Smiramurali23        $scope.loading = true;
166afc8a799Smiramurali23        const promises =
167afc8a799Smiramurali23            users.map((user) => APIUtils.deleteUser(user.UserName));
168afc8a799Smiramurali23        $q.all(promises)
169afc8a799Smiramurali23            .then(() => {
170afc8a799Smiramurali23              let message;
171afc8a799Smiramurali23              if (users.length > 1) {
172afc8a799Smiramurali23                message = 'Users have been removed.'
173afc8a799Smiramurali23              } else {
174afc8a799Smiramurali23                message = `User '${users[0].UserName}' has been removed.`
175afc8a799Smiramurali23              }
176afc8a799Smiramurali23              toastService.success(message);
177afc8a799Smiramurali23            })
178afc8a799Smiramurali23            .catch((error) => {
179afc8a799Smiramurali23              console.log(JSON.stringify(error));
180afc8a799Smiramurali23              let message;
181afc8a799Smiramurali23              if (users.length > 1) {
182afc8a799Smiramurali23                message = 'Failed to remove users.'
183afc8a799Smiramurali23              } else {
184afc8a799Smiramurali23                message = `Failed to remove user '${users[0].UserName}'.`
185afc8a799Smiramurali23              }
186afc8a799Smiramurali23              toastService.error(message);
187afc8a799Smiramurali23            })
188afc8a799Smiramurali23            .finally(() => {
189afc8a799Smiramurali23              getLocalUsers();
190afc8a799Smiramurali23              $scope.loading = false;
191afc8a799Smiramurali23            });
192afc8a799Smiramurali23      }
193afc8a799Smiramurali23
194afc8a799Smiramurali23      /**
195afc8a799Smiramurali23       * API call to update user status enabled/disabled
196afc8a799Smiramurali23       * @param {*} users : Array of users to update
197afc8a799Smiramurali23       * @param {boolean} enabled : status
198afc8a799Smiramurali23       */
199afc8a799Smiramurali23      function updateUserStatus(users = [], enabled = true) {
200afc8a799Smiramurali23        $scope.loading = true;
201afc8a799Smiramurali23        const promises = users.map(
202afc8a799Smiramurali23            (user) => APIUtils.updateUser(
203afc8a799Smiramurali23                user.UserName, null, null, null, enabled, null));
204afc8a799Smiramurali23        $q.all(promises)
205afc8a799Smiramurali23            .then(() => {
206afc8a799Smiramurali23              let message;
207afc8a799Smiramurali23              let statusLabel = enabled ? 'enabled' : 'disabled';
208afc8a799Smiramurali23              if (users.length > 1) {
209afc8a799Smiramurali23                message = `Users ${statusLabel}.`
210afc8a799Smiramurali23              } else {
211afc8a799Smiramurali23                message = `User '${users[0].UserName}' ${statusLabel}.`;
212afc8a799Smiramurali23              }
213afc8a799Smiramurali23              toastService.success(message);
214afc8a799Smiramurali23            })
215afc8a799Smiramurali23            .catch((error) => {
216afc8a799Smiramurali23              console.log(JSON.stringify(error));
217afc8a799Smiramurali23              let message;
218afc8a799Smiramurali23              let statusLabel = enabled ? 'enable' : 'disable';
219afc8a799Smiramurali23              if (users.length > 1) {
220afc8a799Smiramurali23                message = `Failed to ${statusLabel} users.`
221afc8a799Smiramurali23              } else {
222afc8a799Smiramurali23                message =
223afc8a799Smiramurali23                    `Failed to ${statusLabel} user '${users[0].UserName}'.`
224afc8a799Smiramurali23              }
225afc8a799Smiramurali23              toastService.error(message);
226afc8a799Smiramurali23            })
227afc8a799Smiramurali23            .finally(() => {
228afc8a799Smiramurali23              getLocalUsers();
229afc8a799Smiramurali23              $scope.loading = false;
230afc8a799Smiramurali23            });
231afc8a799Smiramurali23      }
232afc8a799Smiramurali23
233afc8a799Smiramurali23      /**
234afc8a799Smiramurali23       * API call to save account policy settings
235afc8a799Smiramurali23       * @param {number} lockoutDuration
236afc8a799Smiramurali23       * @param {number} lockoutThreshold
237afc8a799Smiramurali23       */
238afc8a799Smiramurali23      function updateAccountSettings(lockoutDuration, lockoutThreshold) {
239afc8a799Smiramurali23        $scope.loading = true;
240afc8a799Smiramurali23        APIUtils.saveUserAccountProperties(lockoutDuration, lockoutThreshold)
241afc8a799Smiramurali23            .then(() => {
242afc8a799Smiramurali23              $scope.accountSettings['AccountLockoutDuration'] =
243afc8a799Smiramurali23                  lockoutDuration;
244afc8a799Smiramurali23              $scope.accountSettings['AccountLockoutThreshold'] =
245afc8a799Smiramurali23                  lockoutThreshold;
246afc8a799Smiramurali23              toastService.success(
247afc8a799Smiramurali23                  'Account policy settings have been updated.');
248afc8a799Smiramurali23            })
249afc8a799Smiramurali23            .catch((error) => {
250afc8a799Smiramurali23              console.log(JSON.stringify(error));
251afc8a799Smiramurali23              toastService.error('Failed to update account policy settings.');
252afc8a799Smiramurali23            })
253afc8a799Smiramurali23            .finally(() => {
254afc8a799Smiramurali23              $scope.loading = false;
255afc8a799Smiramurali23            });
256afc8a799Smiramurali23      }
257afc8a799Smiramurali23
258afc8a799Smiramurali23      /**
259afc8a799Smiramurali23       * Initiate account settings modal
260afc8a799Smiramurali23       */
261afc8a799Smiramurali23      function initAccountSettingsModal() {
262afc8a799Smiramurali23        const template = require('./user-accounts-modal-settings.html');
263afc8a799Smiramurali23        $uibModal
264afc8a799Smiramurali23            .open({
265afc8a799Smiramurali23              template,
266afc8a799Smiramurali23              windowTopClass: 'uib-modal',
267afc8a799Smiramurali23              ariaLabelledBy: 'dialog_label',
268afc8a799Smiramurali23              controllerAs: 'modalCtrl',
269afc8a799Smiramurali23              controller: function() {
270afc8a799Smiramurali23                const lockoutMethod = mapLockoutMethod(
271afc8a799Smiramurali23                    $scope.accountSettings.AccountLockoutDuration);
272afc8a799Smiramurali23
273afc8a799Smiramurali23                this.settings = {};
274afc8a799Smiramurali23                this.settings.maxLogin =
275afc8a799Smiramurali23                    $scope.accountSettings.AccountLockoutThreshold;
276afc8a799Smiramurali23                this.settings.lockoutMethod = lockoutMethod;
277afc8a799Smiramurali23                this.settings.timeoutDuration = !lockoutMethod ?
278afc8a799Smiramurali23                    null :
279afc8a799Smiramurali23                    $scope.accountSettings.AccountLockoutDuration;
280afc8a799Smiramurali23              }
281afc8a799Smiramurali23            })
282afc8a799Smiramurali23            .result
283afc8a799Smiramurali23            .then((form) => {
284afc8a799Smiramurali23              if (form.$valid) {
285afc8a799Smiramurali23                const lockoutDuration = form.lockoutMethod.$modelValue ?
286afc8a799Smiramurali23                    form.timeoutDuration.$modelValue :
287afc8a799Smiramurali23                    0;
288afc8a799Smiramurali23                const lockoutThreshold = form.maxLogin.$modelValue;
289afc8a799Smiramurali23                updateAccountSettings(lockoutDuration, lockoutThreshold);
290afc8a799Smiramurali23              }
291afc8a799Smiramurali23            })
292afc8a799Smiramurali23            .catch(
293afc8a799Smiramurali23                () => {
294afc8a799Smiramurali23                    // do nothing
295afc8a799Smiramurali23                })
296afc8a799Smiramurali23      }
297afc8a799Smiramurali23
298afc8a799Smiramurali23      /**
299afc8a799Smiramurali23       * Initiate user modal
300afc8a799Smiramurali23       * Can be triggered by clicking edit in table or 'Add user' button
301afc8a799Smiramurali23       * If triggered from the table, user parameter will be provided
302afc8a799Smiramurali23       * If triggered by add user button, user parameter will be undefined
303afc8a799Smiramurali23       * @optional @param {*} user
304afc8a799Smiramurali23       */
305afc8a799Smiramurali23      function initUserModal(user) {
306afc8a799Smiramurali23        if ($scope.userRoles === null || $scope.userRoles === undefined) {
307afc8a799Smiramurali23          // If userRoles failed to load,  do not allow add/edit
308afc8a799Smiramurali23          // functionality
309afc8a799Smiramurali23          return;
310afc8a799Smiramurali23        }
311afc8a799Smiramurali23        const newUser = user ? false : true;
312afc8a799Smiramurali23        const originalUsername = user ? angular.copy(user.UserName) : null;
313afc8a799Smiramurali23        const template = require('./user-accounts-modal-user.html');
314afc8a799Smiramurali23        $uibModal
315afc8a799Smiramurali23            .open({
316afc8a799Smiramurali23              template,
317afc8a799Smiramurali23              windowTopClass: 'uib-modal',
318afc8a799Smiramurali23              ariaLabelledBy: 'dialog_label',
319afc8a799Smiramurali23              controllerAs: 'modalCtrl',
320afc8a799Smiramurali23              controller: function() {
321afc8a799Smiramurali23                // Set default status to Enabled
322afc8a799Smiramurali23                const status = newUser ? true : user.Enabled;
323afc8a799Smiramurali23                // Check if UserName is root
324afc8a799Smiramurali23                // Some form controls will be disabled for root users:
325afc8a799Smiramurali23                // edit enabled status, edit username, edit role
326*339db9a4SPatrick Williams                const isRoot = newUser ? false :
327*339db9a4SPatrick Williams                    checkIfRoot(user)  ? true :
328*339db9a4SPatrick Williams                                         false;
329afc8a799Smiramurali23                // Array of existing usernames (excluding current user instance)
330afc8a799Smiramurali23                const existingUsernames =
331afc8a799Smiramurali23                    $scope.localUsers.reduce((acc, val) => {
332afc8a799Smiramurali23                      if (user && (val.UserName === user.UserName)) {
333afc8a799Smiramurali23                        return acc;
334afc8a799Smiramurali23                      }
335afc8a799Smiramurali23                      acc.push(val.UserName);
336afc8a799Smiramurali23                      return acc;
337afc8a799Smiramurali23                    }, []);
338afc8a799Smiramurali23
339afc8a799Smiramurali23                this.user = {};
340afc8a799Smiramurali23                this.user.isRoot = isRoot;
341afc8a799Smiramurali23                this.user.new = newUser;
342afc8a799Smiramurali23                this.user.accountStatus = status;
343afc8a799Smiramurali23                this.user.username = newUser ? '' : user.UserName;
344afc8a799Smiramurali23                this.user.privilege = newUser ? '' : user.RoleId;
345afc8a799Smiramurali23                this.user.locked = newUser ? null : user.Locked;
346afc8a799Smiramurali23
347afc8a799Smiramurali23                this.manualUnlockProperty = false;
348afc8a799Smiramurali23                this.automaticLockout = mapLockoutMethod(
349afc8a799Smiramurali23                    $scope.accountSettings.AccountLockoutDuration);
350afc8a799Smiramurali23                this.privilegeRoles = $scope.userRoles;
351afc8a799Smiramurali23                this.existingUsernames = existingUsernames;
352afc8a799Smiramurali23                this.minPasswordLength = $scope.accountSettings ?
353afc8a799Smiramurali23                    $scope.accountSettings.MinPasswordLength :
354afc8a799Smiramurali23                    null;
355afc8a799Smiramurali23                this.maxPasswordLength = $scope.accountSettings ?
356afc8a799Smiramurali23                    $scope.accountSettings.MaxPasswordLength :
357afc8a799Smiramurali23                    null;
358afc8a799Smiramurali23              }
359afc8a799Smiramurali23            })
360afc8a799Smiramurali23            .result
361afc8a799Smiramurali23            .then((form) => {
362afc8a799Smiramurali23              if (form.$valid) {
363afc8a799Smiramurali23                // If form control is pristine set property to null
364afc8a799Smiramurali23                // this will make sure only changed values are updated when
365afc8a799Smiramurali23                // modifying existing users
366afc8a799Smiramurali23                // API utils checks for null values
367afc8a799Smiramurali23                const username =
368afc8a799Smiramurali23                    form.username.$pristine ? null : form.username.$modelValue;
369afc8a799Smiramurali23                const password =
370afc8a799Smiramurali23                    form.password.$pristine ? null : form.password.$modelValue;
371afc8a799Smiramurali23                const role = form.privilege.$pristine ?
372afc8a799Smiramurali23                    null :
373afc8a799Smiramurali23                    form.privilege.$modelValue;
374afc8a799Smiramurali23                const enabled = (form.accountStatus.$pristine &&
375afc8a799Smiramurali23                                 form.accountStatus1.$pristine) ?
376afc8a799Smiramurali23                    null :
377afc8a799Smiramurali23                    form.accountStatus.$modelValue;
378afc8a799Smiramurali23                const locked = (form.lock && form.lock.$dirty) ?
379afc8a799Smiramurali23                    form.lock.$modelValue :
380afc8a799Smiramurali23                    null;
381afc8a799Smiramurali23
382afc8a799Smiramurali23                if (!newUser) {
383afc8a799Smiramurali23                  updateUser(
384afc8a799Smiramurali23                      originalUsername, username, password, role, enabled,
385afc8a799Smiramurali23                      locked);
386afc8a799Smiramurali23                } else {
387afc8a799Smiramurali23                  createUser(
388afc8a799Smiramurali23                      username, password, role, form.accountStatus.$modelValue);
389afc8a799Smiramurali23                }
390afc8a799Smiramurali23              }
391afc8a799Smiramurali23            })
392afc8a799Smiramurali23            .catch(
393afc8a799Smiramurali23                () => {
394afc8a799Smiramurali23                    // do nothing
395afc8a799Smiramurali23                })
396afc8a799Smiramurali23      }
397afc8a799Smiramurali23
398afc8a799Smiramurali23      /**
399afc8a799Smiramurali23       * Intiate remove users modal
400afc8a799Smiramurali23       * @param {*} users
401afc8a799Smiramurali23       */
402afc8a799Smiramurali23      function initRemoveModal(users) {
403afc8a799Smiramurali23        const template = require('./user-accounts-modal-remove.html');
404afc8a799Smiramurali23        $uibModal
405afc8a799Smiramurali23            .open({
406afc8a799Smiramurali23              template,
407afc8a799Smiramurali23              windowTopClass: 'uib-modal',
408afc8a799Smiramurali23              ariaLabelledBy: 'dialog_label',
409afc8a799Smiramurali23              controllerAs: 'modalCtrl',
410afc8a799Smiramurali23              controller: function() {
411afc8a799Smiramurali23                this.users = users;
412afc8a799Smiramurali23              }
413afc8a799Smiramurali23            })
414afc8a799Smiramurali23            .result
415afc8a799Smiramurali23            .then(() => {
416afc8a799Smiramurali23              deleteUsers(users);
417afc8a799Smiramurali23            })
418afc8a799Smiramurali23            .catch(
419afc8a799Smiramurali23                () => {
420afc8a799Smiramurali23                    // do nothing
421afc8a799Smiramurali23                })
422afc8a799Smiramurali23      }
423afc8a799Smiramurali23
424afc8a799Smiramurali23      /**
425afc8a799Smiramurali23       * Callback when action emitted from table
426afc8a799Smiramurali23       * @param {*} value
427afc8a799Smiramurali23       */
428afc8a799Smiramurali23      $scope.onEmitRowAction = (value) => {
429afc8a799Smiramurali23        switch (value.action) {
430afc8a799Smiramurali23          case 'Edit':
431afc8a799Smiramurali23            initUserModal(value.row);
432afc8a799Smiramurali23            break;
433afc8a799Smiramurali23          case 'Delete':
434afc8a799Smiramurali23            initRemoveModal([value.row]);
435afc8a799Smiramurali23            break;
436afc8a799Smiramurali23          default:
437afc8a799Smiramurali23        }
438afc8a799Smiramurali23      };
439afc8a799Smiramurali23
440afc8a799Smiramurali23      /**
441afc8a799Smiramurali23       * Callback when batch action emitted from table
442afc8a799Smiramurali23       */
443afc8a799Smiramurali23      $scope.onEmitBatchAction = (value) => {
444afc8a799Smiramurali23        switch (value.action) {
445afc8a799Smiramurali23          case 'delete':
446afc8a799Smiramurali23            initRemoveModal(value.filteredRows);
447afc8a799Smiramurali23            break;
448afc8a799Smiramurali23          case 'enable':
449afc8a799Smiramurali23            updateUserStatus(value.filteredRows, true)
450afc8a799Smiramurali23            break;
451afc8a799Smiramurali23          case 'disable':
452afc8a799Smiramurali23            updateUserStatus(value.filteredRows, false)
453afc8a799Smiramurali23            break;
454afc8a799Smiramurali23          default:
455afc8a799Smiramurali23            break;
456afc8a799Smiramurali23        }
457afc8a799Smiramurali23      };
458afc8a799Smiramurali23
459afc8a799Smiramurali23      /**
460afc8a799Smiramurali23       * Callback when 'Account settings policy' button clicked
461afc8a799Smiramurali23       */
462afc8a799Smiramurali23      $scope.onClickAccountSettingsPolicy = () => {
463afc8a799Smiramurali23        initAccountSettingsModal();
464afc8a799Smiramurali23      };
465afc8a799Smiramurali23
466afc8a799Smiramurali23      /**
467afc8a799Smiramurali23       * Callback when 'Add user' button clicked
468afc8a799Smiramurali23       */
469afc8a799Smiramurali23      $scope.onClickAddUser = () => {
470afc8a799Smiramurali23        initUserModal();
471afc8a799Smiramurali23      };
472afc8a799Smiramurali23
473afc8a799Smiramurali23      /**
474afc8a799Smiramurali23       * Callback when controller view initially loaded
475afc8a799Smiramurali23       */
476afc8a799Smiramurali23      $scope.$on('$viewContentLoaded', () => {
477afc8a799Smiramurali23        getLocalUsers();
478afc8a799Smiramurali23        getUserRoles();
479afc8a799Smiramurali23        getAccountSettings();
480afc8a799Smiramurali23      })
481afc8a799Smiramurali23    }
482afc8a799Smiramurali23  ]);
483afc8a799Smiramurali23})(angular);
484