From 46d277114fec28d8fb2762f8d0d4b1f101a7101c Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Fri, 26 Jan 2024 09:19:07 -0500 Subject: [PATCH] Issue 261 - simplify hosts utils and slices fixes: https://github.com/freeipa/freeipa-webui/issues/261 Signed-off-by: Mark Reynolds --- src/store/Identity/hosts-slice.ts | 39 +--------- src/utils/hostUtils.tsx | 116 +++++++++++------------------- 2 files changed, 44 insertions(+), 111 deletions(-) diff --git a/src/store/Identity/hosts-slice.ts b/src/store/Identity/hosts-slice.ts index 1747663d..045fba11 100644 --- a/src/store/Identity/hosts-slice.ts +++ b/src/store/Identity/hosts-slice.ts @@ -1,7 +1,7 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit"; -import type { RootState } from "src/store/store"; +import type { RootState } from "../../store/store"; // Data types -import { Host } from "src/utils/datatypes/globalDataTypes"; +import { Host } from "../../utils/datatypes/globalDataTypes"; interface HostsState { hostsList: Host[]; @@ -21,39 +21,7 @@ const hostsSlice = createSlice({ }, addHost: (state, action: PayloadAction) => { const newHost = action.payload; - state.hostsList.push({ - dn: newHost.dn, - fqdn: newHost.fqdn, - dnsZone: newHost.dnsZone, - userclass: newHost.userclass, - ip_address: newHost.ip_address, - description: newHost.description, - enrolledby: newHost.enrolledby, - force: newHost.force, - has_keytab: newHost.has_keytab, - has_password: newHost.has_password, - krbcanonicalname: newHost.krbcanonicalname, - krbprincipalname: newHost.krbprincipalname, - managedby_host: newHost.managedby_host, - memberof_hostgroup: newHost.memberof_hostgroup, - sshpublickey: newHost.sshpublickey, - macaddress: newHost.macaddress, - sshpubkeyfp: newHost.sshpubkeyfp, - nshostlocation: newHost.nshostlocation, - l: newHost.l, - attributelevelrights: newHost.attributelevelrights, - krbpwdpolicyreference: newHost.krbpwdpolicyreference, - managing_host: newHost.managing_host, - serverhostname: newHost.serverhostname, - ipakrbrequirespreauth: newHost.ipakrbrequirespreauth, - ipakrbokasdelegate: newHost.ipakrbokasdelegate, - ipakrboktoauthasdelegate: newHost.ipakrboktoauthasdelegate, - nsosversion: newHost.nsosversion, - nshardwareplatform: newHost.nshardwareplatform, - krbprincipalauthind: newHost.krbprincipalauthind, - usercertificate: newHost.usercertificate, - }); - // Update json file + state.hostsList.push({ ...newHost }); }, removeHost: (state, action: PayloadAction) => { const hostId = action.payload; @@ -63,7 +31,6 @@ const hostsSlice = createSlice({ // If not empty, replace hostsList by new array if (updatedHostList) { state.hostsList = updatedHostList; - // Update json file } }, }, diff --git a/src/utils/hostUtils.tsx b/src/utils/hostUtils.tsx index 58ca1c03..396bb260 100644 --- a/src/utils/hostUtils.tsx +++ b/src/utils/hostUtils.tsx @@ -34,7 +34,7 @@ const simpleValues = new Set([ "ipakrbokasdelegate", "ipakrboktoauthasdelegate", "nshostlocation", - "userclass", // API says multivalued + "userclass", "nsosversion", "nshardwardplatform", ]); @@ -46,83 +46,49 @@ export function apiToHost(apiRecord: Record): Host { simpleValues, dateValues ) as Partial; - return objectToHost(converted) as Host; + return partialHostToHost(converted) as Host; } -// Determines whether a given property name is a simple value or is it multivalue (Array) -// - Returns: boolean -export const isSimpleValue = (propertyName) => { - return simpleValues.has(propertyName); -}; +export function partialHostToHost(partialHost: Partial) { + return { + ...createEmptyHost(), + ...partialHost, + }; +} // Covert an partial User object into a full User object -// (initializing the undefined params with default empty values) -export const objectToHost = ( - // eslint-disable-next-line @typescript-eslint/no-explicit-any - partialHost: Record | Partial, - oldHostObject?: Partial // Optional: To override the current object values -): Host => { - const host: Host = { - dn: partialHost.dn || oldHostObject?.dn || "", - attributelevelrights: - partialHost.attributelevelrights || - oldHostObject?.attributelevelrights || - {}, - description: partialHost.description || oldHostObject?.description || "", - dnsZone: partialHost.dnsZone || oldHostObject?.dnsZone || "", - enrolledby: partialHost.enrolledby || oldHostObject?.enrolledby || "", - fqdn: partialHost.fqdn || oldHostObject?.fqdn || "", - ip_address: partialHost.ip_address || oldHostObject?.ip_address || "", - krbcanonicalname: - partialHost.krbcanonicalname || oldHostObject?.krbcanonicalname || "", - krbprincipalname: - partialHost.krbprincipalname || oldHostObject?.krbprincipalname || [], - krbpwdpolicyreference: - partialHost.krbpwdpolicyreference || - oldHostObject?.krbpwdpolicyreference || - [], - l: partialHost.l || oldHostObject?.l || "", - managedby_host: - partialHost.managedby_host || oldHostObject?.managedby_host || [], - memberof_hostgroup: - partialHost.memberof_hostgroup || oldHostObject?.memberof_hostgroup || [], - managing_host: - partialHost.managing_host || oldHostObject?.managing_host || [], - nshostlocation: - partialHost.nshostlocation || oldHostObject?.nshostlocation || "", - userclass: partialHost.userclass || oldHostObject?.userclass || "", - serverhostname: - partialHost.serverhostname || oldHostObject?.serverhostname || "", - sshpublickey: partialHost.sshpublickey || oldHostObject?.sshpublickey || [], - sshpubkeyfp: partialHost.sshpubkeyfp || oldHostObject?.sshpubkeyfp || [], - nshardwareplatform: - partialHost.nshardwareplatform || oldHostObject?.nshardwareplatform || "", - nsosversion: partialHost.nsosversion || oldHostObject?.nsosversion || "", - macaddress: partialHost.macaddress || oldHostObject?.macaddress || [], - krbprincipalauthind: - partialHost.krbprincipalauthind || - oldHostObject?.krbprincipalauthind || - [], - usercertificate: - partialHost.usercertificate || oldHostObject?.usercertificate || [], +export function createEmptyHost(): Host { + return { + dn: "", + attributelevelrights: {}, + description: "", + dnsZone: "", + enrolledby: "", + fqdn: "", + ip_address: "", + krbcanonicalname: "", + krbprincipalname: [], + krbpwdpolicyreference: [], + l: "", + managedby_host: [], + memberof_hostgroup: [], + managing_host: [], + nshostlocation: "", + userclass: "", + serverhostname: "", + sshpublickey: [], + sshpubkeyfp: [], + nshardwareplatform: "", + nsosversion: "", + macaddress: [], + krbprincipalauthind: [], + usercertificate: [], // booleans - force: partialHost.force || oldHostObject?.force || false, - has_keytab: partialHost.has_keytab || oldHostObject?.has_keytab || false, - has_password: - partialHost.has_password || oldHostObject?.has_password || false, - ipakrbrequirespreauth: - partialHost.ipakrbrequirespreauth || - oldHostObject?.ipakrbrequirespreauth || - false, - ipakrbokasdelegate: - partialHost.ipakrbokasdelegate || - oldHostObject?.ipakrbokasdelegate || - false, - ipakrboktoauthasdelegate: - partialHost.ipakrboktoauthasdelegate || - oldHostObject?.ipakrboktoauthasdelegate || - false, + force: false, + has_keytab: false, + has_password: false, + ipakrbrequirespreauth: false, + ipakrbokasdelegate: false, + ipakrboktoauthasdelegate: false, }; - - return host; -}; +}