@pega/custom-dx-components
Version:
Utility for building custom UI components
220 lines (213 loc) • 6.47 kB
JavaScript
/* eslint-disable import/prefer-default-export */
import { AUTHENTICATE_SCHEMA, AUTHENTICATE_DEFAULTS } from '../../constants.js';
export const getAuthQuestions = async dxcbConfig => {
const defaultPegaConfig = dxcbConfig;
const aAlwaysAsk = dxcbConfig.questions_askAlways
? dxcbConfig.questions_askAlways.split(',')
: [];
const aNeverAsk = dxcbConfig.questions_askNever ? dxcbConfig.questions_askNever.split(',') : [];
const aAskOnce = dxcbConfig.questions_askOnce ? dxcbConfig.questions_askOnce.split(',') : [];
const aAskedOnce = dxcbConfig.questions_askedOnce
? dxcbConfig.questions_askedOnce.split(',')
: [];
// Ask if various must, never, once criteria are met
const askThisTime = prop => {
return (
aAlwaysAsk.includes(prop) ||
(!aNeverAsk.includes(prop) && aAskOnce.includes(prop) && !aAskedOnce.includes(prop))
);
};
const initAnswer = (prop, defValue) => {
if (askThisTime(prop)) {
return undefined;
}
return defaultPegaConfig[prop] ? defaultPegaConfig[prop] : defValue;
};
const initAnswers = answers => {
// Setup default answers (if they are present and non-empty)
answers.serverType = initAnswer('serverType', AUTHENTICATE_DEFAULTS.serverType);
answers.server = initAnswer('server', AUTHENTICATE_DEFAULTS.server);
answers.clientId = initAnswer('clientId', AUTHENTICATE_DEFAULTS.clientId);
answers.grantType = initAnswer('grantType', AUTHENTICATE_DEFAULTS.grantType);
answers.authService = initAnswer('authService', AUTHENTICATE_DEFAULTS.authService);
answers.redirectUri = initAnswer('redirectUri', AUTHENTICATE_DEFAULTS.redirectUri);
answers.clientSecret = initAnswer('clientSecret');
answers.user = initAnswer('user');
answers.password = initAnswer('password');
answers.aAsked = [];
};
const fnStandardWhen = (prop, answers) => {
const ask = askThisTime(prop) || !answers[prop];
if (ask) {
answers.aAsked.push(prop);
}
return ask;
};
return [
{
name: 'serverType',
type: 'rawlist',
message: 'Enter Pega server type',
default: answers => {
return defaultPegaConfig.serverType;
},
choices: AUTHENTICATE_SCHEMA.serverType,
validate: value => {
if (value.trim()) {
return true;
}
return 'Pega server type cannot be empty';
},
when: answers => {
initAnswers(answers);
return fnStandardWhen('serverType', answers);
}
},
{
name: 'server',
type: 'input',
message: 'Enter pega server url',
default: defaultPegaConfig.server,
validate: value => {
if (value.trim()) {
return true;
}
return 'Pega server cannot be empty';
},
when: answers => {
return fnStandardWhen('server', answers);
}
},
{
name: 'grantType',
type: 'rawlist',
message: 'Enter OAuth 2.0 grant type',
default: defaultPegaConfig.grantType,
choices: answers => {
return AUTHENTICATE_SCHEMA.grantType.filter(
gt => !(answers.serverType === 'launchpad' && gt.value === 'passwordCreds')
);
},
validate: value => {
if (value.trim()) {
return true;
}
return 'Grant type cannot be empty';
},
when: answers => {
return fnStandardWhen('grantType', answers);
}
},
{
name: 'authService',
type: 'input',
message: 'Enter authentication service alias',
default: defaultPegaConfig.authService,
validate: value => {
if (value.trim()) {
return true;
}
return 'Authentication service alias cannot be empty';
},
when: answers => {
return (
answers.serverType === 'infinity' &&
answers.grantType === 'authCode' &&
fnStandardWhen('authService', answers)
);
}
},
{
name: 'redirectUri',
type: 'input',
message: 'Enter valid redirect Uri within OAuth 2.0 client reg reccord',
default: defaultPegaConfig.redirectUri,
validate: value => {
if (value.trim()) {
return true;
}
return 'Redirect URI cannot be empty';
},
when: answers => {
return (
answers.serverType === 'infinity' &&
answers.grantType === 'authCode' &&
fnStandardWhen('redirectUri', answers)
);
}
},
{
name: 'user',
type: 'input',
message: 'Enter user id',
default: defaultPegaConfig.user,
validate: (value, answers) => {
if (value.trim() || answers.grantType === 'authCode') {
return true;
}
return 'Username cannot be empty';
},
when: answers => {
return (
answers.serverType === 'infinity' &&
answers.grantType === 'passwordCreds' &&
fnStandardWhen('user', answers)
);
}
},
{
name: 'password',
type: 'password',
message: 'Enter password',
default: defaultPegaConfig.password,
validate: (value, answers) => {
if (value.trim() || answers.grantType === 'authCode') {
return true;
}
return 'Password cannot be empty';
},
when: answers => {
return (
answers.user &&
answers.serverType === 'infinity' &&
answers.grantType === 'passwordCreds' &&
fnStandardWhen('password', answers)
);
}
},
{
name: 'clientId',
type: 'input',
message: 'Enter clientId',
default: defaultPegaConfig.clientId,
validate: value => {
if (value.trim()) {
return true;
}
return 'clientId cannot be empty';
},
when: answers => {
return fnStandardWhen('clientId', answers);
}
},
{
name: 'clientSecret',
type: 'password',
message: 'Enter clientSecret',
default: defaultPegaConfig.clientSecret,
validate: value => {
if (value.trim()) {
return true;
}
return 'clientSecret cannot be empty';
},
when: answers => {
return (
((answers.serverType === 'infinity' && answers.grantType !== 'authCode') ||
answers.serverType === 'launchpad') &&
fnStandardWhen('clientSecret', answers)
);
}
}
];
};