Skip to content

Commit

Permalink
Issue 261 - simplify hosts utils and slices
Browse files Browse the repository at this point in the history
fixes: freeipa#261

Signed-off-by: Mark Reynolds <[email protected]>
  • Loading branch information
mreynolds389 committed Jan 26, 2024
1 parent 1e3accd commit 83554c5
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 111 deletions.
39 changes: 3 additions & 36 deletions src/store/Identity/hosts-slice.ts
Original file line number Diff line number Diff line change
@@ -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[];
Expand All @@ -21,39 +21,7 @@ const hostsSlice = createSlice({
},
addHost: (state, action: PayloadAction<Host>) => {
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<string>) => {
const hostId = action.payload;
Expand All @@ -63,7 +31,6 @@ const hostsSlice = createSlice({
// If not empty, replace hostsList by new array
if (updatedHostList) {
state.hostsList = updatedHostList;
// Update json file
}
},
},
Expand Down
116 changes: 41 additions & 75 deletions src/utils/hostUtils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const simpleValues = new Set([
"ipakrbokasdelegate",
"ipakrboktoauthasdelegate",
"nshostlocation",
"userclass", // API says multivalued
"userclass",
"nsosversion",
"nshardwardplatform",
]);
Expand All @@ -46,83 +46,49 @@ export function apiToHost(apiRecord: Record<string, unknown>): Host {
simpleValues,
dateValues
) as Partial<Host>;
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<Host>) {
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<string, any> | Partial<Host>,
oldHostObject?: Partial<Host> // 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;
};
}

0 comments on commit 83554c5

Please sign in to comment.