show vault id

This commit is contained in:
Jake McDermott
2017-12-18 16:15:24 -05:00
parent 5939116b0a
commit 79bd8b2c72
5 changed files with 70 additions and 33 deletions

View File

@@ -552,8 +552,9 @@ export default ['$compile', 'Attr', 'Icon',
if(list.fields.info) { if(list.fields.info) {
customClass = list.fields.name.modalColumnClass || ''; customClass = list.fields.name.modalColumnClass || '';
const infoHeaderClass = _.get(list.fields.info, 'infoHeaderClass', 'List-tableHeader--info');
html += `<th html += `<th
class="List-tableHeader--info" class="${infoHeaderClass}"
base-path="${list.basePath || list.name}" base-path="${list.basePath || list.name}"
collection="${list.name}" collection="${list.name}"
dataset="${list.iterator}_dataset" dataset="${list.iterator}_dataset"

View File

@@ -36,9 +36,10 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
$('#multi-credential-modal').modal('hide'); $('#multi-credential-modal').modal('hide');
}; };
scope.generateCredentialList = function(inputType = 'radio') { scope.generateCredentialList = function(inputType = 'radio', list = scope.list) {
console.log(inputType);
let html = GenerateList.build({ let html = GenerateList.build({
list: scope.list, list,
input_type: inputType, input_type: inputType,
mode: 'lookup' mode: 'lookup'
}); });
@@ -69,9 +70,9 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
scope.credentialTypeOptions = credentialTypeOptions; scope.credentialTypeOptions = credentialTypeOptions;
scope.allCredentialTypeOptions = _.cloneDeep(credentialTypeOptions); scope.allCredentialTypeOptions = _.cloneDeep(credentialTypeOptions);
// We want to hide machine and vault dropdown options if a credential // We want to hide the machine dropdown option if a machine credential
// has already been selected for those types and the user interacting // has already been selected and the user interacting with the form doesn't
// with the form doesn't have the ability to change them // have the ability to change it.
for(let i=scope.credentialTypeOptions.length - 1; i >=0; i--) { for(let i=scope.credentialTypeOptions.length - 1; i >=0; i--) {
if((scope.selectedCredentials.machine && if((scope.selectedCredentials.machine &&
scope.selectedCredentials.machine.credential_type_id === scope.credentialTypeOptions[i].value && scope.selectedCredentials.machine.credential_type_id === scope.credentialTypeOptions[i].value &&
@@ -126,13 +127,13 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
$scope.credential_queryset.credential_type = parseInt($scope.credentialKind); $scope.credential_queryset.credential_type = parseInt($scope.credentialKind);
qs.search(GetBasePath('credentials'), $scope.credential_default_params) qs.search(GetBasePath('credentials'), $scope.credential_default_params)
.then(res => { .then(({ data }) => {
$scope.credential_dataset = res.data; $scope.credential_dataset = data;
$scope.credentials = $scope.credential_dataset.results; $scope.credentials = $scope.credential_dataset.results;
if(!$scope.listRendered) { if(!$scope.listRendered) {
if (newValueIsVault) { if (newValueIsVault) {
$scope.generateCredentialList('checkbox'); $scope.generateCredentialList('checkbox', $scope.vaultList);
} else { } else {
$scope.generateCredentialList(); $scope.generateCredentialList();
} }
@@ -148,9 +149,26 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
$scope.credentials = $scope.credentials || []; $scope.credentials = $scope.credentials || [];
$scope.listRendered = false; $scope.listRendered = false;
let credList = _.cloneDeep(CredentialList); const credList = _.cloneDeep(CredentialList);
credList.emptyListText = i18n._('No Credentials Matching This Type Have Been Created'); credList.emptyListText = i18n._('No Credentials Matching This Type Have Been Created');
const vaultCredList = _.cloneDeep(credList);
vaultCredList.fields.name.modalColumnClass = 'col-md-6';
vaultCredList.fields.info = {
label: i18n._('Vault ID'),
ngBind: 'credential.inputs.vault_id',
key: false,
nosort: true,
modalColumnClass: 'col-md-6',
infoHeaderClass: '',
dataPlacement: 'top'
};
$scope.list = credList; $scope.list = credList;
$scope.vaultList = vaultCredList;
$scope.credential_default_params = { $scope.credential_default_params = {
order_by: 'name', order_by: 'name',
@@ -191,21 +209,25 @@ export default ['templateUrl', 'Rest', 'GetBasePath', 'generateList', '$compile'
return $scope.toggle_row(credential); return $scope.toggle_row(credential);
}; };
$scope.toggle_row = function(selectedRow) { $scope.toggle_row = function(credential) {
let rowDeselected = false; let rowDeselected = false;
for (let i = $scope.selectedCredentials.extra.length - 1; i >= 0; i--) { for (let i = $scope.selectedCredentials.extra.length - 1; i >= 0; i--) {
if($scope.selectedCredentials.extra[i].id === selectedRow.id) { if($scope.selectedCredentials.extra[i].id === credential.id) {
$scope.selectedCredentials.extra.splice(i, 1); $scope.selectedCredentials.extra.splice(i, 1);
rowDeselected = true; rowDeselected = true;
} else if(selectedRow.credential_type === $scope.selectedCredentials.extra[i].credential_type) { } else if(credential.credential_type === $scope.selectedCredentials.extra[i].credential_type) {
if (selectedRow.credential_type !== $scope.credentialKinds.Vault) { if (credential.credential_type !== $scope.credentialKinds.Vault) {
$scope.selectedCredentials.extra.splice(i, 1);
} else if($scope.selectedCredentials.extra[i].inputs.vault_id === credential.inputs.vault_id) {
// remove existing vault credentials if they have the same vault_id as a recently
// toggled vault credential
$scope.selectedCredentials.extra.splice(i, 1); $scope.selectedCredentials.extra.splice(i, 1);
} }
} }
} }
if(!rowDeselected) { if(!rowDeselected) {
$scope.selectedCredentials.extra $scope.selectedCredentials.extra
.push(_.cloneDeep(selectedRow)); .push(_.cloneDeep(credential));
} }
}; };

View File

@@ -34,10 +34,13 @@
</i> </i>
</div> </div>
<div class="MultiCredential-tag" ng-class="tag.readOnly ? 'MultiCredential-tag--disabled' : 'MultiCredential-tag--deletable'"> <div class="MultiCredential-tag" ng-class="tag.readOnly ? 'MultiCredential-tag--disabled' : 'MultiCredential-tag--deletable'">
<span class="MultiCredential-name--label ng-binding"> <span ng-if="tag.kind !== 'Vault'" class="MultiCredential-name--label ng-binding">
{{ tag.kind }} {{ tag.kind }}:
</span> </span>
<span class="MultiCredential-name u-wordwrapng-binding"> <span ng-if="tag.kind === 'Vault'" class="MultiCredential-name--label ng-binding">
{{ tag.kind }} ({{ tag.vault_id }}):
</span>
<span class="MultiCredential-name u-wordwrap ng-binding">
{{ tag.name }} {{ tag.name }}
</span> </span>
</div> </div>

View File

@@ -24,8 +24,11 @@
</div> </div>
<div class="MultiCredential-tag" <div class="MultiCredential-tag"
ng-class="{'MultiCredential-tag--deletable': !fieldIsDisabled && !tag.readOnly, 'MultiCredential-tag--disabled': tag.readOnly}"> ng-class="{'MultiCredential-tag--deletable': !fieldIsDisabled && !tag.readOnly, 'MultiCredential-tag--disabled': tag.readOnly}">
<span class="MultiCredential-name--label ng-binding"> <span ng-if="tag.kind !== 'Vault'" class="MultiCredential-name--label ng-binding">
{{ tag.kind }} {{ tag.kind }}:
</span>
<span ng-if="tag.kind === 'Vault'" class="MultiCredential-name--label ng-binding">
{{ tag.kind }} ({{ tag.vault_id }}):
</span> </span>
<span class="MultiCredential-name u-wordwrap ng-binding"> <span class="MultiCredential-name u-wordwrap ng-binding">
{{ tag.name }} {{ tag.name }}

View File

@@ -134,16 +134,24 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
}); });
} }
return machineCred.concat(extraCreds).concat(vaultCred).map(cred => ({ return machineCred.concat(extraCreds).concat(vaultCred).map(cred => {
name: cred.name, const { name, id, postType, readOnly } = cred;
id: cred.id, const [type] = typeOpts.filter(type => parseInt(cred.credential_type) === type.value)
postType: cred.postType,
readOnly: cred.readOnly ? true : false, const tagData = {
kind: typeOpts name: cred.name,
.filter(type => { id: cred.id,
return parseInt(cred.credential_type) === type.value; postType: cred.postType,
})[0].name + ":" readOnly: cred.readOnly ? true : false,
})); kind: `${type.name}`
};
if (type.name === 'Vault') {
tagData.vault_id = _.get(cred, 'inputs.vault_id');
}
return tagData;
})
}; };
// remove credential from structured selected credential data and tag-view // remove credential from structured selected credential data and tag-view
@@ -234,7 +242,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
// })); // }));
// } // }
// get extra credentials // get credentials
if (data.related.credentials) { if (data.related.credentials) {
Rest.setUrl(data.related.credentials); Rest.setUrl(data.related.credentials);
credDefers.push(Rest.get() credDefers.push(Rest.get()
@@ -243,7 +251,7 @@ export default ['Rest', 'ProcessErrors', '$q', 'GetBasePath', function(Rest, Pro
}) })
.catch(({data, status}) => { .catch(({data, status}) => {
if (status === 403) { if (status === 403) {
/* User doesn't have read access to the extra credentials, so use summary_fields */ /* User doesn't have read access to the credentials, so use summary_fields */
credentialGetPermissionDenied = true; credentialGetPermissionDenied = true;
selectedCredentials.extra = job_template_obj.summary_fields.credentials; selectedCredentials.extra = job_template_obj.summary_fields.credentials;
_.map(selectedCredentials.extra, (cred) => { _.map(selectedCredentials.extra, (cred) => {