54 lines
1.8 KiB
JavaScript
54 lines
1.8 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
*/
|
|
|
|
import { EmbeddedRecordsMixin } from '@ember-data/serializer/rest';
|
|
import ApplicationSerializer from './application';
|
|
|
|
export default ApplicationSerializer.extend(EmbeddedRecordsMixin, {
|
|
attrs: {
|
|
versions: { embedded: 'always' },
|
|
},
|
|
secretDataPath: 'data',
|
|
normalizeItems(payload, requestType) {
|
|
if (payload.data.keys && Array.isArray(payload.data.keys)) {
|
|
// if we have data.keys, it's a list of ids, so we map over that
|
|
// and create objects with id's
|
|
return payload.data.keys.map((secret) => {
|
|
// secrets don't have an id in the response, so we need to concat the full
|
|
// path of the secret here - the id in the payload is added
|
|
// in the adapter after making the request
|
|
let fullSecretPath = payload.id ? payload.id + secret : secret;
|
|
|
|
// if there is no path, it's a "top level" secret, so add
|
|
// a unicode space for the id
|
|
// https://github.com/hashicorp/vault/issues/3348
|
|
if (!fullSecretPath) {
|
|
fullSecretPath = '\u0020';
|
|
}
|
|
return {
|
|
id: fullSecretPath,
|
|
engine_id: payload.backend,
|
|
};
|
|
});
|
|
}
|
|
// transform versions to an array with composite IDs
|
|
if (payload.data.versions) {
|
|
payload.data.versions = Object.keys(payload.data.versions).map((version) => {
|
|
const body = payload.data.versions[version];
|
|
body.version = version;
|
|
body.path = payload.id;
|
|
body.id = JSON.stringify([payload.backend, payload.id, version]);
|
|
return body;
|
|
});
|
|
}
|
|
payload.data.engine_id = payload.backend;
|
|
payload.data.id = payload.id;
|
|
return requestType === 'queryRecord' ? payload.data : [payload.data];
|
|
},
|
|
serializeHasMany() {
|
|
return;
|
|
},
|
|
});
|