import { parseCertificate } from 'vault/utils/parse-pki-cert'; import ApplicationSerializer from '../application'; export default class PkiIssuerSerializer extends ApplicationSerializer { primaryKey = 'issuer_id'; constructor() { super(...arguments); // remove following attrs from serialization const attrs = [ 'caChain', 'certificate', 'commonName', 'issuerId', 'keyId', 'notValidAfter', 'notValidBefore', 'serialNumber', 'signatureBits', ]; this.attrs = attrs.reduce((attrObj, attr) => { attrObj[attr] = { serialize: false }; return attrObj; }, {}); } normalizeResponse(store, primaryModelClass, payload, id, requestType) { if (payload.data.certificate) { // Parse certificate back from the API and add to payload const parsedCert = parseCertificate(payload.data.certificate); const data = { issuer_ref: payload.issuer_id, ...payload.data, ...parsedCert }; const json = super.normalizeResponse(store, primaryModelClass, { ...payload, data }, id, requestType); return json; } return super.normalizeResponse(...arguments); } // rehydrate each issuers model so all model attributes are accessible from the LIST response normalizeItems(payload) { if (payload.data) { if (payload.data?.keys && Array.isArray(payload.data.keys)) { return payload.data.keys.map((issuer_id) => ({ issuer_id, ...payload.data.key_info[issuer_id], })); } Object.assign(payload, payload.data); delete payload.data; } return payload; } }