blob: 722384c129eceea5bb59a1527849fb5f4a93bb1d [file] [log] [blame]
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: {
async getAccountSettings({ commit }) {
return await 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;