Skip to content

Commit 33bff74

Browse files
ukumar-kssaldoukhov
authored andcommitted
Pam config commands with NSF support implementation
1 parent c4ca239 commit 33bff74

20 files changed

Lines changed: 2925 additions & 3 deletions

KeeperSdk/src/index.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,66 @@ export {
894894
fetchEnterprisePamControllers,
895895
groupOnlineGatewaysByControllerUid,
896896
isKeeperRouterConnectionError,
897+
ConfigManager,
898+
listPamConfigurations,
899+
formatPamConfigurationsTable,
900+
renderPamConfigurationsAsciiTable,
901+
formatPamConfigurationsJson,
902+
formatPamConfigurationsOutput,
903+
createPamConfiguration,
904+
editPamConfiguration,
905+
removePamConfiguration,
906+
PamConfigListFormat,
907+
SUPPORTED_PAM_CONFIGURATION_RECORD_VERSIONS,
908+
PAM_CONFIGURATION_RECORD_TYPES,
909+
PAM_CONFIG_ENVIRONMENT_TO_RECORD_TYPE,
910+
PAM_CONFIG_ENVIRONMENTS,
911+
PAM_CONFIGURATION_FALLBACK_SCHEMA_FIELDS,
912+
PAM_RESOURCES_FIELD_TYPE,
913+
FILE_REF_FIELD_TYPE,
914+
SCHEDULE_FIELD_TYPE,
915+
DEFAULT_PAM_CONFIG_SCHEDULE_VALUE,
916+
EMPTY_PAM_CONFIGURATIONS_MESSAGE,
917+
PAM_CONFIG_LIST_DEFAULT_HEADERS,
918+
PAM_CONFIG_LIST_VERBOSE_HEADERS,
919+
PAM_CONFIG_DETAIL_LABELS,
920+
PAM_CONFIG_PERMISSION_DAG_KEYS,
921+
PAM_CONFIG_PERMISSION_FLAGS,
922+
PAM_CONFIG_PERMISSION_VALUES,
923+
isPamConfigurationRecordType,
924+
isPamConfigEnvironment,
925+
resolvePamConfigurationRecordType,
926+
isPamConfigurationRecord,
927+
isSupportedPamConfigurationRecordVersion,
928+
getPamConfigurationFields,
929+
parsePamResources,
930+
resolveSharedFolderName,
931+
findSharedFolderUidForRecord,
932+
listPamConfigurationRecords,
933+
getPamConfigurationDisplayName,
934+
normalizeFields,
935+
ensureScheduleField,
936+
mergeRecordFields,
937+
adjustPamConfigurationFields,
938+
seedPamConfigurationFieldsFromRecordTypeSoft,
939+
readTypedRecordPayload,
940+
upsertPamResourcesField,
941+
resolveGatewayUidSoft,
942+
findPamConfigurationByUidOrTitle,
943+
resolveResourceRecordUidsToRemove,
944+
linkConfigurationController,
945+
hasPermissionsInput,
946+
convertPermissionValue,
947+
normalizePermissionValue,
948+
buildAllowedSettingsFromPermissions,
949+
applyPamConfigurationPermissions,
950+
isPamConfigurationInFolder,
951+
resolvePamConfigFolder,
952+
findPamConfigFolderForRecord,
953+
resolvePamConfigFolderTargetFromUid,
954+
resolvePamConfigFolderName,
955+
formatPamConfigFolderDisplay,
956+
placePamConfigurationInFolder,
897957
} from './pam'
898958
export type {
899959
ListGatewaysOptions,
@@ -923,6 +983,36 @@ export type {
923983
GatewayJsonEntry,
924984
GatewaysJsonPayload,
925985
KsmAppRecordVersion,
986+
PamConfigurationRecordType,
987+
PamConfigurationRecordVersion,
988+
PamConfigEnvironment,
989+
PamConfigPermissionFlag,
990+
PamConfigListFormatInput,
991+
ListPamConfigurationsOptions,
992+
PamResourcesInfo,
993+
PamConfigurationField,
994+
PamConfigurationListRow,
995+
PamConfigurationDetail,
996+
ListPamConfigurationsResult,
997+
FormattedPamConfigurationsTable,
998+
FormatPamConfigurationsTableOptions,
999+
RenderPamConfigurationsAsciiTableOptions,
1000+
PamConfigurationJsonField,
1001+
PamConfigurationJsonEntry,
1002+
PamConfigurationsJsonPayload,
1003+
PamConfigurationRecordFieldInput,
1004+
PamConfigurationPermissionValue,
1005+
PamConfigurationPermissionsInput,
1006+
PamNetworkAllowedSettings,
1007+
CreatePamConfigurationInput,
1008+
CreatePamConfigurationResult,
1009+
EditPamConfigurationInput,
1010+
EditPamConfigurationResult,
1011+
RemovePamConfigurationInput,
1012+
RemovedPamConfiguration,
1013+
RemovePamConfigurationResult,
1014+
PamConfigFolderKind,
1015+
PamConfigFolderTarget,
9261016
} from './pam'
9271017

9281018
export type {

KeeperSdk/src/nestedShareFolders/nsfRecordTypes.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,13 @@ export async function getNsfRecordTypeFields(auth: Auth, recordType: string): Pr
6060
const normalized = recordType.trim()
6161
if (!normalized || NSF_LEGACY_RECORD_TYPES.has(normalized)) return undefined
6262

63+
const lowered = normalized.toLowerCase()
6364
const types = await loadRecordTypes(auth)
6465
for (const entry of types) {
6566
if (!entry.content) continue
6667
const schema = parseRecordTypeSchema(entry.content)
67-
if (schema?.id === normalized && schema.fields?.length) {
68+
if (!schema?.id || !schema.fields?.length) continue
69+
if (schema.id === normalized || schema.id.toLowerCase() === lowered) {
6870
return schema.fields
6971
}
7072
}

KeeperSdk/src/pam/PamManager.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
import type { Auth } from '@keeper-security/keeperapi'
22
import type { InMemoryStorage } from '../storage/InMemoryStorage'
3+
import { ConfigManager } from './config/ConfigManager'
34
import { GatewayManager } from './gateway/GatewayManager'
5+
import type {
6+
FormatPamConfigurationsTableOptions,
7+
FormattedPamConfigurationsTable,
8+
ListPamConfigurationsOptions,
9+
ListPamConfigurationsResult,
10+
RenderPamConfigurationsAsciiTableOptions,
11+
CreatePamConfigurationInput,
12+
CreatePamConfigurationResult,
13+
EditPamConfigurationInput,
14+
EditPamConfigurationResult,
15+
RemovePamConfigurationInput,
16+
RemovePamConfigurationResult,
17+
} from './config/configTypes'
418
import type {
519
CreateGatewayInput,
620
CreateGatewayResult,
@@ -21,15 +35,21 @@ export type AuthProvider = () => Auth
2135

2236
export class PamManager {
2337
private readonly gatewayManager: GatewayManager
38+
private readonly configManager: ConfigManager
2439

2540
constructor(storage: InMemoryStorage, authProvider: AuthProvider) {
2641
this.gatewayManager = new GatewayManager(storage, authProvider)
42+
this.configManager = new ConfigManager(storage, authProvider)
2743
}
2844

2945
public getGatewayManager(): GatewayManager {
3046
return this.gatewayManager
3147
}
3248

49+
public getConfigManager(): ConfigManager {
50+
return this.configManager
51+
}
52+
3353
public async listGateways(options: ListGatewaysOptions = {}): Promise<ListGatewaysResult> {
3454
return this.gatewayManager.listGateways(options)
3555
}
@@ -71,4 +91,48 @@ export class PamManager {
7191
public formatGatewaysOutput(result: ListGatewaysResult, options: ListGatewaysOptions = {}): string {
7292
return this.gatewayManager.formatGatewaysOutput(result, options)
7393
}
94+
95+
public listPamConfigurations(options: ListPamConfigurationsOptions = {}): ListPamConfigurationsResult {
96+
return this.configManager.listPamConfigurations(options)
97+
}
98+
99+
public async createPamConfiguration(input: CreatePamConfigurationInput): Promise<CreatePamConfigurationResult> {
100+
return this.configManager.createPamConfiguration(input)
101+
}
102+
103+
public async editPamConfiguration(input: EditPamConfigurationInput): Promise<EditPamConfigurationResult> {
104+
return this.configManager.editPamConfiguration(input)
105+
}
106+
107+
public async removePamConfiguration(input: RemovePamConfigurationInput): Promise<RemovePamConfigurationResult> {
108+
return this.configManager.removePamConfiguration(input)
109+
}
110+
111+
public formatPamConfigurationsTable(
112+
result: ListPamConfigurationsResult,
113+
options: FormatPamConfigurationsTableOptions = {}
114+
): FormattedPamConfigurationsTable {
115+
return this.configManager.formatPamConfigurationsTable(result, options)
116+
}
117+
118+
public renderPamConfigurationsAsciiTable(
119+
table: FormattedPamConfigurationsTable,
120+
options: RenderPamConfigurationsAsciiTableOptions = {}
121+
): string {
122+
return this.configManager.renderPamConfigurationsAsciiTable(table, options)
123+
}
124+
125+
public formatPamConfigurationsJson(
126+
result: ListPamConfigurationsResult,
127+
options: ListPamConfigurationsOptions = {}
128+
): string {
129+
return this.configManager.formatPamConfigurationsJson(result, options)
130+
}
131+
132+
public formatPamConfigurationsOutput(
133+
result: ListPamConfigurationsResult,
134+
options: ListPamConfigurationsOptions = {}
135+
): string {
136+
return this.configManager.formatPamConfigurationsOutput(result, options)
137+
}
74138
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import type { Auth } from '@keeper-security/keeperapi'
2+
import type { InMemoryStorage } from '../../storage/InMemoryStorage'
3+
import { KeeperSdkError, ResultCodes } from '../../utils'
4+
import { createPamConfiguration } from './createConfig'
5+
import { editPamConfiguration } from './editConfig'
6+
import { removePamConfiguration } from './removeConfig'
7+
import {
8+
formatPamConfigurationsJson,
9+
formatPamConfigurationsOutput,
10+
formatPamConfigurationsTable,
11+
listPamConfigurations,
12+
renderPamConfigurationsAsciiTable,
13+
} from './listConfigs'
14+
import type {
15+
CreatePamConfigurationInput,
16+
CreatePamConfigurationResult,
17+
EditPamConfigurationInput,
18+
EditPamConfigurationResult,
19+
FormatPamConfigurationsTableOptions,
20+
FormattedPamConfigurationsTable,
21+
ListPamConfigurationsOptions,
22+
ListPamConfigurationsResult,
23+
RemovePamConfigurationInput,
24+
RemovePamConfigurationResult,
25+
RenderPamConfigurationsAsciiTableOptions,
26+
} from './configTypes'
27+
28+
export type AuthProvider = () => Auth
29+
30+
export class ConfigManager {
31+
private readonly storage: InMemoryStorage
32+
private readonly authProvider: AuthProvider
33+
34+
constructor(storage: InMemoryStorage, authProvider: AuthProvider) {
35+
this.storage = storage
36+
this.authProvider = authProvider
37+
}
38+
39+
private requireAuth(): Auth {
40+
const auth = this.authProvider()
41+
if (!auth?.sessionToken) {
42+
throw new KeeperSdkError('Not logged in. Call login() first.', ResultCodes.NOT_LOGGED_IN)
43+
}
44+
return auth
45+
}
46+
47+
public listPamConfigurations(options: ListPamConfigurationsOptions = {}): ListPamConfigurationsResult {
48+
return listPamConfigurations(this.storage, options)
49+
}
50+
51+
public async createPamConfiguration(input: CreatePamConfigurationInput): Promise<CreatePamConfigurationResult> {
52+
return createPamConfiguration(this.requireAuth(), this.storage, input)
53+
}
54+
55+
public async editPamConfiguration(input: EditPamConfigurationInput): Promise<EditPamConfigurationResult> {
56+
return editPamConfiguration(this.requireAuth(), this.storage, input)
57+
}
58+
59+
public async removePamConfiguration(input: RemovePamConfigurationInput): Promise<RemovePamConfigurationResult> {
60+
return removePamConfiguration(this.requireAuth(), this.storage, input)
61+
}
62+
63+
public formatPamConfigurationsTable(
64+
result: ListPamConfigurationsResult,
65+
options: FormatPamConfigurationsTableOptions = {}
66+
): FormattedPamConfigurationsTable {
67+
return formatPamConfigurationsTable(result, options)
68+
}
69+
70+
public renderPamConfigurationsAsciiTable(
71+
table: FormattedPamConfigurationsTable,
72+
options: RenderPamConfigurationsAsciiTableOptions = {}
73+
): string {
74+
return renderPamConfigurationsAsciiTable(table, options)
75+
}
76+
77+
public formatPamConfigurationsJson(
78+
result: ListPamConfigurationsResult,
79+
options: ListPamConfigurationsOptions = {}
80+
): string {
81+
return formatPamConfigurationsJson(result, options)
82+
}
83+
84+
public formatPamConfigurationsOutput(
85+
result: ListPamConfigurationsResult,
86+
options: ListPamConfigurationsOptions = {}
87+
): string {
88+
return formatPamConfigurationsOutput(result, options)
89+
}
90+
}

0 commit comments

Comments
 (0)