Skip to content

Commit 3bda6c3

Browse files
committed
[backend] Improve Cyberark secret mapping (#14588)
1 parent 0f1ee38 commit 3bda6c3

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

opencti-platform/opencti-graphql/src/modules/authenticationProvider/authenticationProvider-domain.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { getPlatformCrypto } from '../../utils/platformCrypto';
3535
import { memoize } from '../../utils/memoize';
3636
import { logAuthInfo } from './providers-logger';
3737
import { isNotEmptyField } from '../../database/utils';
38-
import { enrichWithRemoteCredentials, getRemoteCredentialsProviderSelector } from '../../config/credentials';
38+
import { enrichWithRemoteCredentials, getRemoteCredentialsFields, getRemoteCredentialsProviderSelector } from '../../config/credentials';
3939

4040
// Type for data that are encrypted
4141
const getKeyPair = memoize(async () => {
@@ -79,15 +79,22 @@ export const buildSecretInfos = (
7979
return result;
8080
};
8181

82+
const secretFieldNameSeparator = ':';
83+
8284
export const getAvailableSecrets = (): AvailableSecretInfo[] => {
8385
const secrets = conf.get('secrets');
8486
if (!secrets || typeof secrets !== 'object') {
8587
return [];
8688
}
8789
return Object.keys(secrets).flatMap((name) => {
88-
const provider = getRemoteCredentialsProviderSelector(`secrets:${name}`);
90+
const prefix = `secrets:${name}`;
91+
const provider = getRemoteCredentialsProviderSelector(prefix);
8992
if (provider) {
90-
return { provider_name: provider, secret_name: name };
93+
const secretFields = getRemoteCredentialsFields(prefix);
94+
return secretFields.map((field) => ({
95+
provider_name: provider,
96+
secret_name: `${name}${secretFieldNameSeparator}${field}`,
97+
}));
9198
}
9299
if (conf.get(`secrets:${name}:value`)) {
93100
return { provider_name: 'env', secret_name: name };
@@ -96,8 +103,9 @@ export const getAvailableSecrets = (): AvailableSecretInfo[] => {
96103
});
97104
};
98105

99-
const getSecretValueByName = async (secretName: string, fieldName: string): Promise<string | undefined> => {
100-
const prefix = `secrets:${secretName}`;
106+
const getSecretValueByName = async (secretName: string): Promise<string | undefined> => {
107+
const [name, fieldName] = secretName.split(secretFieldNameSeparator);
108+
const prefix = `secrets:${name}`;
101109
if (getRemoteCredentialsProviderSelector(prefix)) {
102110
const enriched = await enrichWithRemoteCredentials(prefix, {});
103111
return enriched[fieldName];
@@ -109,7 +117,7 @@ export const retrieveSecrets = async (config: any): Promise<SecretProvider> => {
109117
const resolve = async (field: string): Promise<string | undefined> => {
110118
const secretName = config[`${field}_ref`];
111119
if (isNotEmptyField(secretName)) {
112-
return getSecretValueByName(secretName, field);
120+
return getSecretValueByName(secretName);
113121
}
114122
const encryptedValue = config[`${field}_encrypted`];
115123
if (isNotEmptyField(encryptedValue)) {

0 commit comments

Comments
 (0)