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: 2 additions & 0 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
} from './cli/FrodoCommand';
import idm from './cli/idm/idm';
import idp from './cli/idp/idp';
import iga from './cli/iga/iga';
import info from './cli/info/info';
import journey from './cli/journey/journey';
import log from './cli/log/log';
Expand Down Expand Up @@ -90,6 +91,7 @@ process.argv = normalizeExpandedHelpArgv(process.argv);
program.addCommand(esv());
program.addCommand(idm());
program.addCommand(idp());
program.addCommand(iga());
program.addCommand(info());
program.addCommand(journey());
program.addCommand(log());
Expand Down
8 changes: 8 additions & 0 deletions src/cli/config/config-export.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ export default function setup() {
'Export managed.idm.json objects separately in their own directory. Ignored with -a.'
)
)
.addOption(
new Option(
'-c, --only-custom',
'Only export custom request types (IGA cloud deployments only).'
)
)
.addOption(
new Option(
'--include-active-values',
Expand Down Expand Up @@ -170,6 +176,7 @@ export default function setup() {
includeReadOnly: options.readOnly,
onlyRealm: options.realmOnly,
onlyGlobal: options.globalOnly,
onlyCustom: options.onlyCustom
}
);
if (!outcome) process.exitCode = 1;
Expand Down Expand Up @@ -202,6 +209,7 @@ export default function setup() {
includeReadOnly: options.readOnly,
onlyRealm: options.realmOnly,
onlyGlobal: options.globalOnly,
onlyCustom: options.onlyCustom
}
);
if (!outcome) process.exitCode = 1;
Expand Down
9 changes: 9 additions & 0 deletions src/cli/config/config-import.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ export default function setup() {
'Import all scripts including the default scripts.'
)
)
.addOption(
new Option(
'-c, --only-custom',
'Only import custom request types (IGA cloud deployments only).'
)
)
.addOption(
new Option(
'--include-active-values',
Expand Down Expand Up @@ -129,6 +135,7 @@ export default function setup() {
includeDefault: options.default,
includeActiveValues: options.includeActiveValues,
source: options.source,
onlyCustom: options.onlyCustom
});
if (!outcome) process.exitCode = 1;
}
Expand All @@ -152,6 +159,7 @@ export default function setup() {
includeDefault: options.default,
includeActiveValues: options.includeActiveValues,
source: options.source,
onlyCustom: options.onlyCustom
});
if (!outcome) process.exitCode = 1;
}
Expand All @@ -169,6 +177,7 @@ export default function setup() {
includeDefault: options.default,
includeActiveValues: options.includeActiveValues,
source: options.source,
onlyCustom: options.onlyCustom
}
);
if (!outcome) process.exitCode = 1;
Expand Down
13 changes: 13 additions & 0 deletions src/cli/iga/iga.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { FrodoStubCommand } from '../FrodoCommand';
import WorkflowCmd from './workflow/iga-workflow';

export default function setup() {
const program = new FrodoStubCommand('iga').description(
'Manage IGA configuration.'
);

program.addCommand(WorkflowCmd().name('workflow').showHelpAfterError());

program.showHelpAfterError();
return program;
}
104 changes: 104 additions & 0 deletions src/cli/iga/workflow/iga-workflow-delete.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { frodo, state } from '@rockcarver/frodo-lib';
import { Option } from 'commander';

import { getTokens } from '../../../ops/AuthenticateOps';
import {
deleteWorkflow,
deleteWorkflows,
} from '../../../ops/cloud/iga/IgaWorkflowOps';
import { printMessage, verboseMessage } from '../../../utils/Console.js';
import { FrodoCommand } from '../../FrodoCommand';

const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants;

const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY];

export default function setup() {
const program = new FrodoCommand('frodo iga workflow delete');

program
.description('Delete workflows.')
.addOption(
new Option(
'-i, --workflow-id <workflow-id>',
'Workflow id. If specified, -a is ignored. By default, deletes both draft and published unless -d or -p are used exclusively.'
)
)
.addOption(
new Option('-d, --draft-only', 'Delete only the draft workflow(s).')
)
.addOption(
new Option(
'-p, --published-only',
'Delete only the published workflow(s).'
)
)
.addOption(
new Option(
'-a, --all',
'Delete all workflows. By default, deletes both draft and published unless -d or -p are used exclusively. Ignored with -i.'
)
)
.action(
// implement command logic inside action handler
async (host, realm, user, password, options, command) => {
command.handleDefaultArgsAndOpts(
host,
realm,
user,
password,
options,
command
);
if (!options.workflowId && !options.all) {
printMessage(
'Unrecognized combination of options or no options...',
'error'
);
program.help();
process.exitCode = 1;
return;
}
const getTokensIsSuccessful = await getTokens(
false,
true,
deploymentTypes
);
if (!getTokensIsSuccessful) {
printMessage('Error getting tokens', 'error');
process.exitCode = 1;
return;
}
if (!state.getIsIGA()) {
printMessage(
'Command not supported for non-IGA cloud tenants',
'error'
);
process.exitCode = 1;
return;
}
// delete by id
if (options.workflowId) {
verboseMessage('Deleting workflow...');
const outcome = await deleteWorkflow(
options.workflowId,
options.draftOnly,
options.publishedOnly
);
if (!outcome) process.exitCode = 1;
}
// --all -a
else if (options.all) {
verboseMessage('Deleting all workflows...');
const outcome = await deleteWorkflows(
options.draftOnly,
options.publishedOnly
);
if (!outcome) process.exitCode = 1;
}
}
// end command logic inside action handler
);

return program;
}
72 changes: 72 additions & 0 deletions src/cli/iga/workflow/iga-workflow-describe.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import { frodo, state } from '@rockcarver/frodo-lib';
import { Option } from 'commander';

import { getTokens } from '../../../ops/AuthenticateOps';
import { describeWorkflow } from '../../../ops/cloud/iga/IgaWorkflowOps';
import { printMessage, verboseMessage } from '../../../utils/Console';
import { FrodoCommand } from '../../FrodoCommand';

const { CLOUD_DEPLOYMENT_TYPE_KEY } = frodo.utils.constants;

const deploymentTypes = [CLOUD_DEPLOYMENT_TYPE_KEY];

export default function setup() {
const program = new FrodoCommand('frodo iga workflow describe');

program
.description('Describe workflows.')
.addOption(
new Option(
'-i, --workflow-id <workflow-id>',
'Workflow id. If not specified, will describe first workflow in the provided export file.'
)
)
.addOption(
new Option(
'-f, --file <file>',
'Name of the workflow export file to describe. If not specified, will automatically pull the workflow export data of the provided id from the tenant.'
)
)
.action(async (host, realm, user, password, options, command) => {
command.handleDefaultArgsAndOpts(
host,
realm,
user,
password,
options,
command
);
if (!options.workflowId && !options.file) {
printMessage(
'Unrecognized combination of options or no options...',
'error'
);
program.help();
process.exitCode = 1;
return;
}
const getTokensIsSuccessful = await getTokens(
false,
true,
deploymentTypes
);
if (!getTokensIsSuccessful) {
printMessage('Error getting tokens', 'error');
process.exitCode = 1;
return;
}
if (!state.getIsIGA()) {
printMessage(
'Command not supported for non-IGA cloud tenants',
'error'
);
process.exitCode = 1;
return;
}
verboseMessage(`Describing workflow ${options.workflowId}...`);
const outcome = await describeWorkflow(options.workflowId, options.file);
if (!outcome) process.exitCode = 1;
});

return program;
}
Loading