mirror of
https://github.com/ansible/awx.git
synced 2026-01-19 13:41:28 -03:30
Prevent users from attempting to create a template schedule or workflow node with credentials that require passwords
This commit is contained in:
parent
d5c2af0492
commit
895ad70a12
@ -5,5 +5,5 @@
|
||||
data-placement="top">
|
||||
<i class="icon-launch"></i>
|
||||
</button>
|
||||
<prompt prompt-data="vm.promptData" on-finish="vm.launchTemplateWithPrompts()"></launch>
|
||||
<prompt prompt-data="vm.promptData" on-finish="vm.launchTemplateWithPrompts()"></prompt>
|
||||
</div>
|
||||
|
||||
@ -30,5 +30,5 @@
|
||||
ng-if="!vm.showDropdown">
|
||||
<i class="{{ vm.icon }}"></i>
|
||||
</button>
|
||||
<prompt prompt-data="vm.promptData" on-finish="vm.relaunchJobWithPassword()"></launch>
|
||||
<prompt prompt-data="vm.promptData" on-finish="vm.relaunchJobWithPassword()"></prompt>
|
||||
</div>
|
||||
|
||||
@ -56,4 +56,4 @@
|
||||
<translate>You can create a job template <a href="#/templates/add_job_template">here</a>.</translate></p>
|
||||
</div>
|
||||
</div>
|
||||
<prompt prompt-data="promptData" on-finish="launchJob()"></launch>
|
||||
<prompt prompt-data="promptData" on-finish="launchJob()"></prompt>
|
||||
|
||||
@ -50,7 +50,7 @@ export default {
|
||||
list: PortalJobTemplateList,
|
||||
mode: 'edit'
|
||||
});
|
||||
return html + '<prompt prompt-data="promptData" on-finish="launchJob()"></launch>';
|
||||
return html + '<prompt prompt-data="promptData" on-finish="launchJob()"></prompt>';
|
||||
},
|
||||
controller: PortalModeJobTemplatesController
|
||||
}
|
||||
|
||||
@ -32,6 +32,8 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
|
||||
$scope.$parent.schedulerEndDt = month + '/' + day + '/' + dt.getFullYear();
|
||||
};
|
||||
|
||||
$scope.preventCredsWithPasswords = true;
|
||||
|
||||
/*
|
||||
* This is a workaround for the angular-scheduler library inserting `ll` into fields after an
|
||||
* invalid entry and never unsetting them. Presumably null is being truncated down to 2 chars
|
||||
|
||||
@ -10,6 +10,8 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
|
||||
|
||||
let schedule, scheduler, scheduleCredentials = [];
|
||||
|
||||
$scope.preventCredsWithPasswords = true;
|
||||
|
||||
// initial end @ midnight values
|
||||
$scope.schedulerEndHour = "00";
|
||||
$scope.schedulerEndMinute = "00";
|
||||
|
||||
@ -686,5 +686,5 @@
|
||||
ng-disabled="!schedulerIsValid || promptModalMissingReqFields"> Save</button>
|
||||
</div>
|
||||
</div>
|
||||
<prompt prompt-data="promptData" action-text="CONFIRM"></launch>
|
||||
<prompt prompt-data="promptData" action-text="CONFIRM" prevent-creds-with-passwords="preventCredsWithPasswords"></prompt>
|
||||
</div>
|
||||
|
||||
@ -16,6 +16,7 @@ export default [ 'Rest', 'GetBasePath', 'ProcessErrors', 'CredentialTypeModel',
|
||||
({ modal } = scope[scope.ns]);
|
||||
|
||||
scope.$watch('vm.promptData.triggerModalOpen', () => {
|
||||
|
||||
vm.actionButtonClicked = false;
|
||||
if(vm.promptData && vm.promptData.triggerModalOpen) {
|
||||
|
||||
|
||||
@ -5,7 +5,8 @@ export default [ 'templateUrl',
|
||||
scope: {
|
||||
promptData: '=',
|
||||
onFinish: '&',
|
||||
actionText: '@actionText'
|
||||
actionText: '@actionText',
|
||||
preventCredsWithPasswords: '<'
|
||||
},
|
||||
templateUrl: templateUrl('templates/prompt/prompt'),
|
||||
replace: true,
|
||||
|
||||
@ -12,7 +12,11 @@
|
||||
<prompt-inventory prompt-data="vm.promptDataClone"></prompt-inventory>
|
||||
</div>
|
||||
<div ng-if="vm.steps.credential.includeStep" ng-show="vm.steps.credential.tab._active">
|
||||
<prompt-credential prompt-data="vm.promptDataClone" credential-passwords-form="vm.forms.credentialPasswords"></prompt-credential>
|
||||
<prompt-credential
|
||||
prompt-data="vm.promptDataClone"
|
||||
credential-passwords-form="vm.forms.credentialPasswords"
|
||||
prevent-creds-with-passwords="vm.preventCredsWithPasswords">
|
||||
</prompt-credential>
|
||||
</div>
|
||||
<div ng-if="vm.steps.other_prompts.includeStep" ng-show="vm.steps.other_prompts.tab._active">
|
||||
<prompt-other-prompts prompt-data="vm.promptDataClone" other-prompts-form="vm.forms.otherPrompts" is-active-step="vm.steps.other_prompts.tab._active"></prompt-other-prompts>
|
||||
@ -26,8 +30,13 @@
|
||||
</div>
|
||||
<div class="Prompt-footer">
|
||||
<button class="Prompt-defaultButton" ng-click="vm.cancel()">{{:: vm.strings.get('CANCEL') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.inventory.tab._active" ng-click="vm.next(vm.steps.inventory.tab)" ng-disabled="!vm.promptDataClone.prompts.inventory.value.id">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.credential.tab._active" ng-click="vm.next(vm.steps.credential.tab)" ng-disabled="!vm.forms.credentialPasswords.$valid || (vm.promptDataClone.credentialTypeMissing && vm.promptDataClone.credentialTypeMissing.length > 0)">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.inventory.tab._active" ng-click="vm.next(vm.steps.inventory.tab)" ng-disabled="!vm.vm.promptDataClone.prompts.inventory.value.id">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton"
|
||||
ng-show="vm.steps.credential.tab._active"
|
||||
ng-click="vm.next(vm.steps.credential.tab)"
|
||||
ng-disabled="(preventCredsWithPasswords && (vm.promptDataClone.prompts.credentials.passwords.ssh || vm.promptDataClone.prompts.credentials.passwords.become || vm.promptDataClone.prompts.credentials.passwords.ssh_key_unlock || (vm.promptDataClone.prompts.credentials.passwords.vault && vm.promptDataClone.prompts.credentials.passwords.vault.length > 0))) ||
|
||||
!vm.forms.credentialPasswords.$valid ||
|
||||
(vm.promptData.credentialTypeMissing && vm.promptData.credentialTypeMissing.length > 0)">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.other_prompts.tab._active" ng-click="vm.next(vm.steps.other_prompts.tab)" ng-disabled="!vm.forms.otherPrompts.$valid">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.survey.tab._active" ng-click="vm.next(vm.steps.survey.tab)" ng-disabled="!vm.forms.survey.$valid">{{:: vm.strings.get('NEXT') }}</button>
|
||||
<button class="Prompt-actionButton" ng-show="vm.steps.preview.tab._active" ng-click="vm.finish()" ng-bind="vm.actionText" ng-disabled="vm.actionButtonClicked"></button>
|
||||
|
||||
@ -11,7 +11,8 @@ export default [ 'templateUrl', '$compile', 'generateList',
|
||||
return {
|
||||
scope: {
|
||||
promptData: '=',
|
||||
credentialPasswordsForm: '='
|
||||
credentialPasswordsForm: '=',
|
||||
preventCredsWithPasswords: '<'
|
||||
},
|
||||
templateUrl: templateUrl('templates/prompt/steps/credential/prompt-credential'),
|
||||
controller: promptCredentialController,
|
||||
|
||||
@ -44,6 +44,18 @@
|
||||
<span class="fa fa-warning"></span> {{:: vm.strings.get('prompt.CREDENTIAL_TYPE_MISSING', missingCred.label) }}
|
||||
</div>
|
||||
</div>
|
||||
<span>
|
||||
<div ng-if="preventCredsWithPasswords && (promptData.prompts.credentials.passwords.ssh || promptData.prompts.credentials.passwords.become || promptData.prompts.credentials.passwords.ssh_key_unlock || (promptData.prompts.credentials.passwords.vault && promptData.prompts.credentials.passwords.vault.length > 0))">
|
||||
<div style="margin-bottom: 5px;color:#D9534F;">
|
||||
<span class="fa fa-warning"></span>
|
||||
<span>Credentials that require passwords on launch are not permitted for template schedules and workflow nodes. The following credentials must be removed or replaced to proceed:</span>
|
||||
</div>
|
||||
<div style="margin-bottom: 20px;">
|
||||
<div ng-if="promptData.prompts.credentials.passwords.ssh || promptData.prompts.credentials.passwords.become || promptData.prompts.credentials.passwords.ssh_key_unlock">{{promptData.prompts.credentials.passwords.ssh.name || promptData.prompts.credentials.passwords.become.name || promptData.prompts.credentials.passwords.ssh_key_unlock.name}}</div>
|
||||
<div ng-if="promptData.prompts.credentials.passwords.vault && promptData.prompts.credentials.passwords.vault.length > 0" ng-repeat="vaultCred in promptData.prompts.credentials.passwords.vault">{{vaultCred.name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</span>
|
||||
<span ng-show="promptData.launchConf.ask_credential_on_launch">
|
||||
<div class="Prompt-credentialSubSection">
|
||||
<span class="Prompt-label">{{:: vm.strings.get('prompt.CREDENTIAL_TYPE') }}:</span>
|
||||
@ -53,7 +65,7 @@
|
||||
</div>
|
||||
<div id="prompt-credential"></div>
|
||||
</span>
|
||||
<div ng-show="promptData.prompts.credentials.passwords.ssh || promptData.prompts.credentials.passwords.become || promptData.prompts.credentials.passwords.ssh_key_unlock || (promptData.prompts.credentials.passwords.vault && promptData.prompts.credentials.passwords.vault.length > 0)">
|
||||
<div ng-show="!preventCredsWithPasswords && (promptData.prompts.credentials.passwords.ssh || promptData.prompts.credentials.passwords.become || promptData.prompts.credentials.passwords.ssh_key_unlock || (promptData.prompts.credentials.passwords.vault && promptData.prompts.credentials.passwords.vault.length > 0))">
|
||||
<div class="Prompt-instructions">{{:: vm.strings.get('prompt.PASSWORDS_REQUIRED_HELP') }}</div>
|
||||
<form name="credentialPasswordsForm" autocomplete="off" novalidate>
|
||||
<div class="form-group Form-formGroup Form-formGroup--singleColumn" ng-if="promptData.prompts.credentials.passwords.ssh">
|
||||
|
||||
@ -14,6 +14,7 @@ export default ['$scope', 'WorkflowService', 'GetBasePath', 'TemplatesService',
|
||||
let promptWatcher, surveyQuestionWatcher;
|
||||
|
||||
$scope.strings = TemplatesStrings;
|
||||
$scope.preventCredsWithPasswords = true;
|
||||
|
||||
$scope.workflowMakerFormConfig = {
|
||||
nodeMode: "idle",
|
||||
|
||||
@ -129,5 +129,5 @@
|
||||
<button type="button" class="btn btn-sm WorkflowMaker-cancelButton" ng-click="closeWorkflowMaker()"> Close</button>
|
||||
<button type="button" class="btn btn-sm WorkflowMaker-saveButton" ng-click="saveWorkflowMaker()" ng-show="workflowJobTemplateObj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate" ng-disabled="edgeFlags.conflict || workflowMakerFormConfig.nodeMode === 'add'"> Save</button>
|
||||
</div>
|
||||
<prompt prompt-data="promptData" action-text="CONFIRM"></launch>
|
||||
<prompt prompt-data="promptData" action-text="CONFIRM" prevent-creds-with-passwords="preventCredsWithPasswords"></prompt>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user