|  | import api from '@/store/api'; | 
|  | import i18n from '@/i18n'; | 
|  | import { find } from 'lodash'; | 
|  |  | 
|  | const LdapStore = { | 
|  | namespaced: true, | 
|  | state: { | 
|  | isServiceEnabled: null, | 
|  | ldap: { | 
|  | serviceEnabled: null, | 
|  | serviceAddress: null, | 
|  | bindDn: null, | 
|  | baseDn: null, | 
|  | userAttribute: null, | 
|  | groupsAttribute: null, | 
|  | roleGroups: [] | 
|  | }, | 
|  | activeDirectory: { | 
|  | serviceEnabled: null, | 
|  | serviceAddress: null, | 
|  | bindDn: null, | 
|  | baseDn: null, | 
|  | userAttribute: null, | 
|  | groupsAttribute: null, | 
|  | roleGroups: [] | 
|  | } | 
|  | }, | 
|  | getters: { | 
|  | isServiceEnabled: state => state.isServiceEnabled, | 
|  | ldap: state => state.ldap, | 
|  | activeDirectory: state => state.activeDirectory, | 
|  | isActiveDirectoryEnabled: state => { | 
|  | return state.activeDirectory.serviceEnabled; | 
|  | }, | 
|  | enabledRoleGroups: (state, getters) => { | 
|  | const serviceType = getters.isActiveDirectoryEnabled | 
|  | ? 'activeDirectory' | 
|  | : 'ldap'; | 
|  | return state[serviceType].roleGroups; | 
|  | } | 
|  | }, | 
|  | mutations: { | 
|  | setServiceEnabled: (state, serviceEnabled) => | 
|  | (state.isServiceEnabled = serviceEnabled), | 
|  | setLdapProperties: ( | 
|  | state, | 
|  | { | 
|  | ServiceEnabled, | 
|  | ServiceAddresses, | 
|  | Authentication = {}, | 
|  | LDAPService: { SearchSettings = {} } = {}, | 
|  | RemoteRoleMapping = [] | 
|  | } | 
|  | ) => { | 
|  | state.ldap.serviceAddress = ServiceAddresses[0]; | 
|  | state.ldap.serviceEnabled = ServiceEnabled; | 
|  | state.ldap.baseDn = SearchSettings.BaseDistinguishedNames[0]; | 
|  | state.ldap.bindDn = Authentication.Username; | 
|  | state.ldap.userAttribute = SearchSettings.UsernameAttribute; | 
|  | state.ldap.groupsAttribute = SearchSettings.GroupsAttribute; | 
|  | state.ldap.roleGroups = RemoteRoleMapping; | 
|  | }, | 
|  | setActiveDirectoryProperties: ( | 
|  | state, | 
|  | { | 
|  | ServiceEnabled, | 
|  | ServiceAddresses, | 
|  | Authentication = {}, | 
|  | LDAPService: { SearchSettings = {} } = {}, | 
|  | RemoteRoleMapping = [] | 
|  | } | 
|  | ) => { | 
|  | state.activeDirectory.serviceEnabled = ServiceEnabled; | 
|  | state.activeDirectory.serviceAddress = ServiceAddresses[0]; | 
|  | state.activeDirectory.bindDn = Authentication.Username; | 
|  | state.activeDirectory.baseDn = SearchSettings.BaseDistinguishedNames[0]; | 
|  | state.activeDirectory.userAttribute = SearchSettings.UsernameAttribute; | 
|  | state.activeDirectory.groupsAttribute = SearchSettings.GroupsAttribute; | 
|  | state.activeDirectory.roleGroups = RemoteRoleMapping; | 
|  | } | 
|  | }, | 
|  | actions: { | 
|  | getAccountSettings({ commit }) { | 
|  | api | 
|  | .get('/redfish/v1/AccountService') | 
|  | .then(({ data: { LDAP = {}, ActiveDirectory = {} } }) => { | 
|  | const ldapEnabled = LDAP.ServiceEnabled; | 
|  | const activeDirectoryEnabled = ActiveDirectory.ServiceEnabled; | 
|  |  | 
|  | commit('setServiceEnabled', ldapEnabled || activeDirectoryEnabled); | 
|  | commit('setLdapProperties', LDAP); | 
|  | commit('setActiveDirectoryProperties', ActiveDirectory); | 
|  | }) | 
|  | .catch(error => console.log(error)); | 
|  | }, | 
|  | async saveLdapSettings({ state, dispatch }, properties) { | 
|  | const data = { LDAP: properties }; | 
|  | if (state.activeDirectory.serviceEnabled) { | 
|  | // Disable Active Directory service if enabled | 
|  | await api.patch('/redfish/v1/AccountService', { | 
|  | ActiveDirectory: { ServiceEnabled: false } | 
|  | }); | 
|  | } | 
|  | return await api | 
|  | .patch('/redfish/v1/AccountService', data) | 
|  | .then(() => dispatch('getAccountSettings')) | 
|  | .then(() => i18n.t('pageLdap.toast.successSaveLdapSettings')) | 
|  | .catch(error => { | 
|  | console.log(error); | 
|  | throw new Error(i18n.t('pageLdap.toast.errorSaveLdapSettings')); | 
|  | }); | 
|  | }, | 
|  | async saveActiveDirectorySettings({ state, dispatch }, properties) { | 
|  | const data = { ActiveDirectory: properties }; | 
|  | if (state.ldap.serviceEnabled) { | 
|  | // Disable LDAP service if enabled | 
|  | await api.patch('/redfish/v1/AccountService', { | 
|  | LDAP: { ServiceEnabled: false } | 
|  | }); | 
|  | } | 
|  | return await api | 
|  | .patch('/redfish/v1/AccountService', data) | 
|  | .then(() => dispatch('getAccountSettings')) | 
|  | .then(() => i18n.t('pageLdap.toast.successSaveActiveDirectorySettings')) | 
|  | .catch(error => { | 
|  | console.log(error); | 
|  | throw new Error( | 
|  | i18n.t('pageLdap.toast.errorSaveActiveDirectorySettings') | 
|  | ); | 
|  | }); | 
|  | }, | 
|  | async saveAccountSettings( | 
|  | { dispatch }, | 
|  | { | 
|  | serviceEnabled, | 
|  | serviceAddress, | 
|  | activeDirectoryEnabled, | 
|  | bindDn, | 
|  | bindPassword, | 
|  | baseDn, | 
|  | userIdAttribute, | 
|  | groupIdAttribute | 
|  | } | 
|  | ) { | 
|  | const data = { | 
|  | ServiceEnabled: serviceEnabled, | 
|  | ServiceAddresses: [serviceAddress], | 
|  | Authentication: { | 
|  | Username: bindDn, | 
|  | Password: bindPassword | 
|  | }, | 
|  | LDAPService: { | 
|  | SearchSettings: { | 
|  | BaseDistinguishedNames: [baseDn] | 
|  | } | 
|  | } | 
|  | }; | 
|  | if (groupIdAttribute) | 
|  | data.LDAPService.SearchSettings.GroupsAttribute = groupIdAttribute; | 
|  | if (userIdAttribute) | 
|  | data.LDAPService.SearchSettings.UsernameAttribute = userIdAttribute; | 
|  |  | 
|  | if (activeDirectoryEnabled) { | 
|  | return await dispatch('saveActiveDirectorySettings', data); | 
|  | } else { | 
|  | return await dispatch('saveLdapSettings', data); | 
|  | } | 
|  | }, | 
|  | async addNewRoleGroup( | 
|  | { dispatch, getters }, | 
|  | { groupName, groupPrivilege } | 
|  | ) { | 
|  | const data = {}; | 
|  | const enabledRoleGroups = getters['enabledRoleGroups']; | 
|  | const isActiveDirectoryEnabled = getters['isActiveDirectoryEnabled']; | 
|  | const RemoteRoleMapping = [ | 
|  | ...enabledRoleGroups, | 
|  | { | 
|  | LocalRole: groupPrivilege, | 
|  | RemoteGroup: groupName | 
|  | } | 
|  | ]; | 
|  | if (isActiveDirectoryEnabled) { | 
|  | data.ActiveDirectory = { RemoteRoleMapping }; | 
|  | } else { | 
|  | data.LDAP = { RemoteRoleMapping }; | 
|  | } | 
|  | return await api | 
|  | .patch('/redfish/v1/AccountService', data) | 
|  | .then(() => dispatch('getAccountSettings')) | 
|  | .then(() => | 
|  | i18n.t('pageLdap.toast.successAddRoleGroup', { | 
|  | groupName | 
|  | }) | 
|  | ) | 
|  | .catch(error => { | 
|  | console.log(error); | 
|  | throw new Error(i18n.t('pageLdap.toast.errorAddRoleGroup')); | 
|  | }); | 
|  | }, | 
|  | async saveRoleGroup({ dispatch, getters }, { groupName, groupPrivilege }) { | 
|  | const data = {}; | 
|  | const enabledRoleGroups = getters['enabledRoleGroups']; | 
|  | const isActiveDirectoryEnabled = getters['isActiveDirectoryEnabled']; | 
|  | const RemoteRoleMapping = enabledRoleGroups.map(group => { | 
|  | if (group.RemoteGroup === groupName) { | 
|  | return { | 
|  | RemoteGroup: groupName, | 
|  | LocalRole: groupPrivilege | 
|  | }; | 
|  | } else { | 
|  | return {}; | 
|  | } | 
|  | }); | 
|  | if (isActiveDirectoryEnabled) { | 
|  | data.ActiveDirectory = { RemoteRoleMapping }; | 
|  | } else { | 
|  | data.LDAP = { RemoteRoleMapping }; | 
|  | } | 
|  | return await api | 
|  | .patch('/redfish/v1/AccountService', data) | 
|  | .then(() => dispatch('getAccountSettings')) | 
|  | .then(() => | 
|  | i18n.t('pageLdap.toast.successSaveRoleGroup', { groupName }) | 
|  | ) | 
|  | .catch(error => { | 
|  | console.log(error); | 
|  | throw new Error(i18n.t('pageLdap.toast.errorSaveRoleGroup')); | 
|  | }); | 
|  | }, | 
|  | async deleteRoleGroup({ dispatch, getters }, { roleGroups = [] }) { | 
|  | const data = {}; | 
|  | const enabledRoleGroups = getters['enabledRoleGroups']; | 
|  | const isActiveDirectoryEnabled = getters['isActiveDirectoryEnabled']; | 
|  | const RemoteRoleMapping = enabledRoleGroups.map(group => { | 
|  | if (find(roleGroups, { groupName: group.RemoteGroup })) { | 
|  | return null; | 
|  | } else { | 
|  | return {}; | 
|  | } | 
|  | }); | 
|  | if (isActiveDirectoryEnabled) { | 
|  | data.ActiveDirectory = { RemoteRoleMapping }; | 
|  | } else { | 
|  | data.LDAP = { RemoteRoleMapping }; | 
|  | } | 
|  | return await api | 
|  | .patch('/redfish/v1/AccountService', data) | 
|  | .then(() => dispatch('getAccountSettings')) | 
|  | .then(() => | 
|  | i18n.tc('pageLdap.toast.successDeleteRoleGroup', roleGroups.length) | 
|  | ) | 
|  | .catch(error => { | 
|  | console.log(error); | 
|  | throw new Error( | 
|  | i18n.tc('pageLdap.toast.errorDeleteRoleGroup', roleGroups.length) | 
|  | ); | 
|  | }); | 
|  | } | 
|  | } | 
|  | }; | 
|  |  | 
|  | export default LdapStore; |