From 7dd3383b53a4d9373653351c3b4e74625424cc8c Mon Sep 17 00:00:00 2001 From: Murphy Rickett Date: Thu, 12 Feb 2026 10:29:01 -0700 Subject: [PATCH] feat: Add config-manager push email-provider Task: TRIVIR-2169 --- .gitignore | 3 +- .../config-manager-push-email-provider.ts | 47 +++++++++++++++++++ .../config-manager-push.ts | 2 + .../FrConfigEmailProviderOps.ts | 39 ++++++++++++++- 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 src/cli/config-manager/config-manager-push/config-manager-push-email-provider.ts diff --git a/.gitignore b/.gitignore index 3a0ba02ea..d8899a0e9 100644 --- a/.gitignore +++ b/.gitignore @@ -142,4 +142,5 @@ test/fs_tmp/* !test/fs_tmp/.gitkeep temp -.vscode/settings.json \ No newline at end of file +.vscode/settings.json +*.jwk \ No newline at end of file diff --git a/src/cli/config-manager/config-manager-push/config-manager-push-email-provider.ts b/src/cli/config-manager/config-manager-push/config-manager-push-email-provider.ts new file mode 100644 index 000000000..de248adcf --- /dev/null +++ b/src/cli/config-manager/config-manager-push/config-manager-push-email-provider.ts @@ -0,0 +1,47 @@ +import { configManagerImportEmailProivder } from '../../../configManagerOps/FrConfigEmailProviderOps'; +import { getTokens } from '../../../ops/AuthenticateOps'; +import { printMessage, verboseMessage } from '../../../utils/Console'; +import { FrodoCommand } from '../../FrodoCommand'; +import { Option } from 'commander'; + + +const deploymentTypes = ['cloud', 'forgeops']; + +export default function setup() { + const program = new FrodoCommand( + 'frodo config-manager push email-provider', + [], + deploymentTypes + ); + + program + .description('Import email provider configuration.') + .addOption(new Option('-f, --file [file]', 'Email provider json to import.')) + .action(async (host, realm, user, password, options, command) => { + command.handleDefaultArgsAndOpts( + host, + realm, + user, + password, + options, + command + ); + + if (await getTokens(false, true, deploymentTypes)) { + verboseMessage('Importing email provider configuration.'); + const outcome = await configManagerImportEmailProivder(options.file); + if (!outcome) process.exitCode = 1; + } + // unrecognized combination of options or no options + else { + printMessage( + 'Unrecognized combination of options or no options...', + 'error' + ); + program.help(); + process.exitCode = 1; + } + }); + + return program; +} diff --git a/src/cli/config-manager/config-manager-push/config-manager-push.ts b/src/cli/config-manager/config-manager-push/config-manager-push.ts index 93bf3e557..c6dac0efb 100644 --- a/src/cli/config-manager/config-manager-push/config-manager-push.ts +++ b/src/cli/config-manager/config-manager-push/config-manager-push.ts @@ -1,4 +1,5 @@ import UiConfig from './config-manager-push-uiConfig'; +import EmailProvider from './config-manager-push-email-provider'; import { FrodoStubCommand } from '../../FrodoCommand'; export default function setup() { @@ -7,5 +8,6 @@ export default function setup() { ); program.addCommand(UiConfig().name('ui-config')); + program.addCommand(EmailProvider().name('email-provider')); return program; } \ No newline at end of file diff --git a/src/configManagerOps/FrConfigEmailProviderOps.ts b/src/configManagerOps/FrConfigEmailProviderOps.ts index dd97c592e..9e7f75958 100644 --- a/src/configManagerOps/FrConfigEmailProviderOps.ts +++ b/src/configManagerOps/FrConfigEmailProviderOps.ts @@ -1,7 +1,11 @@ import { frodo } from '@rockcarver/frodo-lib'; +import fs from 'fs'; +import path from 'path'; +import { getIdmImportExportOptions } from '../ops/IdmOps'; import { IdObjectSkeletonInterface } from '@rockcarver/frodo-lib/types/api/ApiTypes'; +import { errorHandler } from '../ops/utils/OpsUtils'; -import { printError } from '../utils/Console'; +import { printError, printMessage } from '../utils/Console'; const { config } = frodo.idm; const { getFilePath, saveJsonToFile } = frodo.utils; @@ -27,3 +31,36 @@ export async function configManagerExportEmailProviderConfiguration(): Promise { + try { + const fileData = fs.readFileSync( + path.resolve(process.cwd(), file), + 'utf8' + ); + let importData = JSON.parse(fileData); + importData = { idm: { [importData._id]: importData } }; + const options = getIdmImportExportOptions(undefined, envFile); + + await config.importConfigEntities( + importData, + "external.email", + { + envReplaceParams: options.envReplaceParams, + entitiesToImport: undefined, + validate, + }, + errorHandler + ); + return true + } + catch (error) { + printError(error); + } + return false +} +