Skip to content

Commit eb13482

Browse files
Add core publisher restrictions
1 parent 0638053 commit eb13482

File tree

2 files changed

+66
-14
lines changed

2 files changed

+66
-14
lines changed

tc-string-parse.js

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,12 @@
182182
}, {
183183
key: "vendorLegitimateInterests",
184184
queue: queueVendors
185+
}, {
186+
key: "publisherRestrictions",
187+
queue: [{
188+
key: "numPubRestrictions",
189+
size: 12
190+
}]
185191
});
186192

187193
var queueSegment = [{
@@ -241,7 +247,28 @@
241247

242248
return function (string) {
243249
var reduceQueue = function (queue, schema, value, result) {
244-
var reduceEntries = function () {
250+
var reduceNumPubEntries = function () {
251+
if (result.pubRestrictionEntry && result.rangeEntry) {
252+
result.pubRestrictionEntry = Object.assign(result.pubRestrictionEntry, result.rangeEntry);
253+
}
254+
255+
if (result.numPubRestrictions) {
256+
result.numPubRestrictions -= 1;
257+
258+
queue.push({
259+
key: "purposeId",
260+
size: 6
261+
}, {
262+
key: "restrictionType",
263+
size: 2
264+
}, {
265+
key: "numEntries",
266+
size: 12
267+
});
268+
}
269+
};
270+
271+
var reduceNumEntries = function () {
245272
if (result.numEntries) {
246273
result.numEntries -= 1;
247274

@@ -253,7 +280,22 @@
253280
key: "startVendorId",
254281
size: 16
255282
});
283+
} else {
284+
reduceNumPubEntries();
285+
}
286+
};
287+
288+
var getRangeResult = function () {
289+
if (result.purposeId) {
290+
return [{
291+
purpose: result.purposeId,
292+
isAllowed: result.restrictionType !== 0,
293+
isConsentRequired: result.restrictionType === 1,
294+
isLegitimateInterestRequired: result.restrictionType === 2
295+
}];
256296
}
297+
298+
return true;
257299
};
258300

259301
if (schema.key === "isRangeEncoding") {
@@ -269,7 +311,7 @@
269311

270312
if (schema.key === "numEntries") {
271313
result.rangeEntry = {};
272-
reduceEntries();
314+
reduceNumEntries();
273315
} else
274316

275317
if (schema.key === "isRange") {
@@ -283,16 +325,16 @@
283325

284326
if (schema.key === "startVendorId") {
285327
if (!result.isRange) {
286-
result.rangeEntry[value] = true;
287-
reduceEntries();
328+
result.rangeEntry[value] = getRangeResult();
329+
reduceNumEntries();
288330
}
289331
} else
290332

291333
if (schema.key === "endVendorId") {
292334
for (var vendorId = result.startVendorId; vendorId <= result.endVendorId; vendorId += 1) {
293-
result.rangeEntry[vendorId] = true;
335+
result.rangeEntry[vendorId] = getRangeResult();
294336
}
295-
reduceEntries();
337+
reduceNumEntries();
296338
} else
297339

298340
if (schema.key === "numCustomPurposes") {
@@ -305,10 +347,20 @@
305347
size: result.numCustomPurposes,
306348
decoder: decodeFlags
307349
});
350+
} else
351+
352+
if (schema.key === "numPubRestrictions") {
353+
result.pubRestrictionEntry = {};
354+
reduceNumPubEntries();
308355
}
309356
};
310357

358+
var reduceResult = function (result) {
359+
return result.pubRestrictionEntry || result.rangeEntry || result.bitField || result;
360+
};
361+
311362
var offset = 0;
363+
312364
var getSchemaResult = function (schema, bits) {
313365
var value = bits.slice(offset, offset + schema.size);
314366
offset += schema.size;
@@ -331,7 +383,7 @@
331383
reduceQueue(sectionSchema.queue, schema, value, result);
332384
}
333385

334-
return result.bitField || result.rangeEntry || result;
386+
return reduceResult(result);
335387
};
336388

337389
var getBlockResult = function (blockSchema, bits) {
@@ -346,7 +398,7 @@
346398
reduceQueue(blockSchema.queue, schema, value, result);
347399
}
348400

349-
return result.bitField || result.rangeEntry || result;
401+
return reduceResult(result);
350402
};
351403

352404
var getResult = function () {

tc-string-parse.test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ ava.before((test) => {
2424
const emptyConsent = "COwxIfeOwxIfeALAWhDAAcCAAAAAAAAAAAAAAAAAAAAA.IF0EWSQgAYWwho0QUBzBAIYAfJgSCAMgSAAQIoCkFQICERBAEKiAQHAEQJAAAGBAAkACAAQAoHCBMCQABgAARiRCEQECIDRNABIBAggAKYQFAAARmikHC3ZCY702yOmQ.YAAAAAAAAAAAAAAAAAA";
2525
test.context.empty = parse(emptyConsent);
2626

27-
const givenConsent = "COuDmHAOuG5DAALAWhDAAcCIAEAAACAAACgADFQAoAEAASAYoABAgAA.IF0EWSQgAYWwho0QUBzBAIYAfJgSCAMgSAAQIoCkFQICERBAEKiAQHAEQJAAAGBAAkACAAQAoHCBMCQABgAARiRCEQECIDRNABIBAggAKYQFAAARmikHC3ZCY702yOmQ.YAAAAAAAAAAAAAAAAAA";
27+
const givenConsent = "COuDmHAOuG5DAALAWhENAfCIAEAAACAAACgAAFgGgAIEAMEABAAQEgAgAJDgAQAFgA.IF1kXyQoGY2lho0QUBzBAIYQfJwSCgMgSAAQIsSkNQIWEBBAGPiAQHAGYJAQAGBAEkACBAQAoHGBMCQABgAgRiRCMQEGIDzNIBIBAggkaI0FACCVmmkHC3ZCY70-6u_-";
2828
test.context.given = parse(givenConsent);
2929

3030
const exampleConsent = "COw4XqLOw4XqLAAAAAENAXCAAAAAAAAAAAAAAAAAAAAA.IFukWSQgAIQwgI0QEByFAAAAeIAACAIgSAAQAIAgEQACEABAAAgAQFAEAIAAAGBAAgAAAAQAIFAAMCQAAgAAQiRAEQAAAAANAAIAAggAIYQFAAARmggBC3ZCYzU2yIA.QFukWSQgAIQwgI0QEByFAAAAeIAACAIgSAAQAIAgEQACEABAAAgAQFAEAIAAAGBAAgAAAAQAIFAAMCQAAgAAQiRAEQAAAAANAAIAAggAIYQFAAARmggBC3ZCYzU2yIA.YAAAAAAAAAAAAAAAAAA";
@@ -56,11 +56,11 @@ ava("core consent screen", (test) => {
5656
});
5757

5858
ava("core consent language", (test) => {
59-
test.is(test.context.given.core.consentLanguage, "DA");
59+
test.is(test.context.given.core.consentLanguage, "EN");
6060
});
6161

6262
ava("core vendor list version", (test) => {
63-
test.is(test.context.given.core.vendorListVersion, 28);
63+
test.is(test.context.given.core.vendorListVersion, 31);
6464
});
6565

6666
ava("core policy version", (test) => {
@@ -76,8 +76,8 @@ ava("core use non standard stacks", (test) => {
7676
});
7777

7878
ava("core special feature opt ins", (test) => {
79-
test.deepEqual(test.context.empty.core.specialFeatureOptIns, {});
80-
test.deepEqual(test.context.given.core.specialFeatureOptIns, {
79+
test.deepEqual(test.context.empty.core.specialFeatureOptins, {});
80+
test.deepEqual(test.context.given.core.specialFeatureOptins, {
8181
1: true
8282
});
8383
});
@@ -109,7 +109,7 @@ ava("core vendor consents", (test) => {
109109
test.deepEqual(test.context.given.core.vendorConsents, {
110110
8: true,
111111
9: true,
112-
394: true
112+
11: true
113113
});
114114
});
115115

0 commit comments

Comments
 (0)