Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"request": "launch",
"name": "Run Frodo CLI",
"program": "${workspaceFolder}/src/app.ts",
"args": ["config-manager", "push", "themes", "demo1"],
"args": ["config-manager", "push", "terms-and-conditions", "dev"],
"outFiles": [
"${workspaceFolder}/dist/**/*.(m|c|)js",
"${workspaceFolder}/node_modules/@rockcarver/frodo-lib/dist/**/*.(m|c|)js"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { Option } from 'commander';

import { configManagerImportTermsAndConditions } from '../../../configManagerOps/FrConfigTermsAndConditionsOps';
import { getTokens } from '../../../ops/AuthenticateOps';
import { printMessage, verboseMessage } from '../../../utils/Console';
import { FrodoCommand } from '../../FrodoCommand';

const deploymentTypes = ['cloud', 'forgeops'];

export default function setup() {
const program = new FrodoCommand(
'frodo config-manager push terms-and-conditions',
[],
deploymentTypes
);

program
.description('Import ui-configuration objects.')
.addOption(
new Option(
'-f, --file [file]',
'Fr-config-manager format file 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('Exporting config entity ui-configuration');
const outcome = await configManagerImportTermsAndConditions();
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;
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import { configManagerImportThemes } from '../../../configManagerOps/FrConfigThemeOps';
import { getTokens } from '../../../ops/AuthenticateOps';
import { printMessage, verboseMessage } from '../../../utils/Console';
Expand Down Expand Up @@ -28,7 +27,7 @@ export default function setup() {
if (await getTokens(false, true, deploymentTypes)) {
verboseMessage('Importing themes');
const outcome = await configManagerImportThemes();

if (!outcome) process.exitCode = 1;
}
// unrecognized combination of options or no options
else {
Expand All @@ -42,4 +41,3 @@ export default function setup() {
});
return program;
}

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Option } from 'commander';

import { configManagerImportUiConfig } from '../../../configManagerOps/FrConfigUiConfigOps';
import { getTokens } from '../../../ops/AuthenticateOps';
import { printMessage, verboseMessage } from '../../../utils/Console';
import { FrodoCommand } from '../../FrodoCommand';
import { Option } from 'commander';


const deploymentTypes = ['cloud', 'forgeops'];

Expand All @@ -16,7 +16,12 @@ export default function setup() {

program
.description('Import ui-configuration objects.')
.addOption(new Option('-f, --file [file]', 'Fr-config-manager format file to import.'))
.addOption(
new Option(
'-f, --file [file]',
'Fr-config-manager format file to import.'
)
)
.action(async (host, realm, user, password, options, command) => {
command.handleDefaultArgsAndOpts(
host,
Expand Down Expand Up @@ -44,4 +49,4 @@ export default function setup() {
});

return program;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import { FrodoStubCommand } from '../../FrodoCommand';
import TermsAndConditions from './config-manager-push-terms-and-conditions';
import Themes from './config-manager-push-themes';
import UiConfig from './config-manager-push-uiConfig';

export default function setup() {
const program = new FrodoStubCommand('frodo config-manager pull').description(
const program = new FrodoStubCommand('push').description(
'Export cloud configuration using fr-config-manager.'
);


program.addCommand(Themes().name('themes'));
program.addCommand(UiConfig().name('ui-config'));
program.addCommand(TermsAndConditions().name('terms-and-conditions'));

return program;
}


3 changes: 0 additions & 3 deletions src/cli/config-manager/config-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@ import { FrodoStubCommand } from '../FrodoCommand';
import PullCmd from './config-manager-pull/config-manager-pull';
import PushCmd from './config-manager-push/config-manager-push';


export default function setup() {
const program = new FrodoStubCommand('config-manager').description(
'Manage cloud configuration using fr-config-manager.'
);
program.addOption;

program.addCommand(PullCmd().name('pull'));
program.addCommand(PushCmd().name('push'));


return program;
}
27 changes: 26 additions & 1 deletion src/configManagerOps/FrConfigTermsAndConditionsOps.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { frodo } from '@rockcarver/frodo-lib';
import fs from 'fs';

import { extractFrConfigDataToFile } from '../utils/Config';
import { printError } from '../utils/Console';

const { saveJsonToFile, getFilePath } = frodo.utils;
const { readConfigEntity } = frodo.idm.config;
const { readConfigEntity, importConfigEntities } = frodo.idm.config;

/**
* Export terms and conditions to file
Expand Down Expand Up @@ -37,3 +38,27 @@ export async function configManagerExportTermsAndConditions(): Promise<boolean>
return false;
}
}

export async function configManagerImportTermsAndConditions(): Promise<boolean> {
try {
const mainFile = getFilePath('terms-conditions/terms-conditions.json');
const readMain = fs.readFileSync(mainFile, 'utf8') as any;
let importData = JSON.parse(readMain) as any;
const id = importData._id;
importData = { idm: { [id]: importData } };
for (const version of importData.idm[id].versions) {
for (const [language] of Object.entries(version.termsTranslations)) {
const languageFileName = `${version.version}/${language}.html`;
const directoryName = `terms-conditions`;
const fileDir = getFilePath(`${directoryName}/${languageFileName}`);
version.termsTranslations[language] = fs.readFileSync(fileDir, 'utf8');
}
}
await importConfigEntities(importData);

return true;
} catch (error) {
printError(error);
return false;
}
}
51 changes: 28 additions & 23 deletions src/configManagerOps/FrConfigThemeOps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@ import { ThemeSkeleton } from '@rockcarver/frodo-lib/types/ops/ThemeOps';
import fs from 'fs';

import { printError, printMessage } from '../utils/Console';
import { decodeOrNot } from '../utils/FrConfig';
import { encodeOrNot } from '../utils/FrConfig'
import { decodeOrNot, encodeOrNot } from '../utils/FrConfig';

const { saveJsonToFile, getFilePath, getRealmPath } = frodo.utils;
const { saveJsonToFile, getFilePath } = frodo.utils;
const { readRealms } = frodo.realm;
const { readThemes, importThemes } = frodo.theme;

Expand Down Expand Up @@ -67,6 +66,8 @@ export async function configManagerExportThemes(): Promise<boolean> {
try {
const realms = await readRealms();
for (const realm of realms) {
// fr-config-manager doesn't support root themes
if (realm.name === '/') continue;
state.setRealm(realm.name);
const themes = await readThemes();
const exportDir = getFilePath(`realms/${realm.name}/themes`, true);
Expand All @@ -86,45 +87,49 @@ export async function configManagerExportThemes(): Promise<boolean> {
}

export async function processTheme(theme: ThemeSkeleton, themePath: string) {
// create the for loop that will read and iterate through each realm to find the themes
for (const field of THEME_HTML_FIELDS) {
if (!theme[field.name]) continue;

if (typeof theme[field.name] === 'object' && typeof (theme[field.name]as any).file === 'string' ) {
const fileName = (theme[field.name] as any).file

if (
typeof theme[field.name] === 'object' &&
typeof (theme[field.name] as any).file === 'string'
) {
const fileName = (theme[field.name] as any).file;
const filePath = `${themePath}/${fileName}`;
const fileContent = fs.readFileSync(filePath, 'utf8');
const encodedContent = encodeOrNot(fileContent, field.encoded);
theme[field.name] = encodedContent;
}
}
}
}
}

export async function configManagerImportThemes(): Promise<boolean> {
try {
const realms = await readRealms();
for (const realm of realms) {
// fr-config-manager doesn't support root themes
if (realm.name === '/') continue;
state.setRealm(realm.name);
const importDir = getFilePath(`realms${realm.name === '/' ? '' : realm.parentPath + realm.name}/themes`, true);
const themesDir = fs.readdirSync(importDir, { withFileTypes: true})
.filter(dirent => dirent.isDirectory())
.map(dirent => dirent.name);
const importDir = getFilePath(
`realms${realm.parentPath + realm.name}/themes`
);
const themesDir = fs
.readdirSync(importDir, { withFileTypes: true })
.filter((dirent) => dirent.isDirectory())
.map((dirent) => dirent.name);
const themeMap: Record<string, ThemeSkeleton> = {};

for (const themeName of themesDir) {
const themeDir = `${importDir}/${themeName}`;
const themeJsonPath = `${themeDir}/${themeName}.json`;
const theme: ThemeSkeleton = JSON.parse(fs.readFileSync(themeJsonPath, 'utf8'));
const theme: ThemeSkeleton = JSON.parse(
fs.readFileSync(themeJsonPath, 'utf8')
);
processTheme(theme, themeDir);
themeMap[theme._id] = theme;
}

// Import all themes for this realm
// await importThemes(
// { theme: themeMap }
// );
}

saveJsonToFile( { theme: themeMap }, 'export.json');
await importThemes({ theme: themeMap });
}
return true;
} catch (error) {
Expand Down
21 changes: 9 additions & 12 deletions src/configManagerOps/FrConfigUiConfigOps.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { frodo } from '@rockcarver/frodo-lib';
import fs from 'fs';
import path from 'path';

import { getIdmImportExportOptions } from '../ops/IdmOps';
import { printError } from '../utils/Console';
import { errorHandler } from '../ops/utils/OpsUtils';
import { printError } from '../utils/Console';

const { exportConfigEntity, importConfigEntities} = frodo.idm.config;
const { exportConfigEntity, importConfigEntities } = frodo.idm.config;
const { getFilePath, saveJsonToFile } = frodo.utils;

/**
Expand Down Expand Up @@ -43,29 +44,25 @@ export async function configManagerImportUiConfig(
validate: boolean = false
): Promise<boolean> {
try {
const fileData = fs.readFileSync(
path.resolve(process.cwd(), file),
'utf8'
);
const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
let importData = JSON.parse(fileData);
importData = { idm: { [importData._id]: importData } };
//saveJsonToFile (importData, './frconfigtestfile.json');
const options = getIdmImportExportOptions(undefined, envFile);

await importConfigEntities(
importData,
"ui/configuration",
'ui/configuration',
{
envReplaceParams: options.envReplaceParams,
entitiesToImport: undefined,
validate,
},
errorHandler
);
return true
}
catch (error) {
return true;
} catch (error) {
printError(error);
}
return false
}
return false;
}
Loading