Fixed not working check of unique keys for fields in the pass

This commit is contained in:
alexandercerutti
2018-10-17 20:25:28 +02:00
parent 1525e0e0ce
commit af3c2b2159
2 changed files with 20 additions and 7 deletions

View File

@@ -1,13 +1,15 @@
const schema = require("./schema"); const schema = require("./schema");
const debug = require("debug")("passkit:fields");
/** /**
* Class to represent lower-level keys pass fields * Class to represent lower-level keys pass fields
* @see https://apple.co/2wkUBdh * @see https://apple.co/2wkUBdh
*/ */
let uniqueKeys = [];
class FieldsContainer { class FieldsContainer {
constructor() { constructor() {
this._uniqueKeys = [];
this.fields = []; this.fields = [];
} }
@@ -26,16 +28,21 @@ class FieldsContainer {
fieldsData = fieldsData[0]; fieldsData = fieldsData[0];
} }
let validFields = fieldsData.filter(f => { let validFields = fieldsData.reduce((acc, current) => {
if (this._uniqueKeys.includes(f.key)) { if (!(typeof current === "object") || !schema.isValid(current, "field")) {
return false; return acc;
} }
this._uniqueKeys.push(f.key); if (acc.some(e => e.key === current.key) || uniqueKeys.includes(current.key)) {
debug(`UNIQUE field key CONSTRAINT VIOLATED. Fields keys must be unique in pass scope. Field key: "${current.key}"`);
return acc;
}
return typeof f === "object" && schema.isValid(f, "field"); acc.push(current);
}); return acc;
}, []);
uniqueKeys.push(...validFields.map(v => v.key));
this.fields.push(...validFields); this.fields.push(...validFields);
return validFields.length; return validFields.length;
@@ -66,6 +73,10 @@ class FieldsContainer {
this._uniqueKeys.pop(); this._uniqueKeys.pop();
return this.fields.pop(); return this.fields.pop();
} }
static emptyUnique() {
uniqueKeys = [];
}
} }
module.exports = FieldsContainer; module.exports = FieldsContainer;

View File

@@ -149,6 +149,8 @@ class Pass {
archive.pipe(passStream); archive.pipe(passStream);
FieldsContainer.emptyUnique();
return archive.finalize().then(() => passStream); return archive.finalize().then(() => passStream);
}); });
} }