Skip to content

Commit c9c38fe

Browse files
author
Chad Huff
committed
usnat backwards compatibility
1 parent 4ad2a1f commit c9c38fe

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

modules/cmpapi/src/encoder/segment/UsNatCoreSegment.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ export class UsNatCoreSegment extends AbstractLazilyEncodableSegment<EncodableBi
134134
}
135135
try {
136136
let bitString: string = this.base64UrlEncoder.decode(encodedString);
137+
138+
// Necessary to maintain backwards compatibility when sensitive data processing changed from a
139+
// length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the
140+
// DE, IA, NE, NH, NJ, TN release
141+
if (bitString.length == 66) {
142+
bitString =
143+
bitString.substring(0, 48) + "00000000" + bitString.substring(48, 52) + "00" + bitString.substring(52, 62);
144+
}
145+
137146
this.bitStringEncoder.decode(bitString, this.getFieldNames(), fields);
138147
} catch (e) {
139148
throw new DecodingError("Unable to decode UsNatCoreSegment '" + encodedString + "'");

modules/cmpapi/test/GppModel.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ import { GppModel } from "../src/encoder/GppModel";
22
import { expect } from "chai";
33
import { TcfCaV1Field } from "../src/encoder/field/TcfCaV1Field";
44
import { UspV1Field } from "../src/encoder/field/UspV1Field";
5+
import { UspV1 } from "../src/encoder/section/UspV1";
6+
import { UsNat } from "../src/encoder/section/UsNat";
7+
import { UsNatField } from "../src/encoder/field/UsNatField";
58

69
let utcDateTime = new Date("2022-01-01T00:00:00Z");
710

@@ -706,6 +709,58 @@ describe("manifest.GppModel", (): void => {
706709
expect(gppModel.getFieldValue("tcfeuv2", "VendorConsents")).to.eql([1, 173, 722]);
707710
});
708711

712+
it("should decode DBABTA~1YYN", (): void => {
713+
let gppString = "DBABTA~1YYN";
714+
let gppModel = new GppModel(gppString);
715+
gppModel.getFieldValue(UspV1.NAME, UspV1Field.VERSION);
716+
});
717+
718+
it("should decode DBABLA~BVQqAAAAAgA.QA", (): void => {
719+
let gppString = "DBABLA~BVQqAAAAAgA.QA";
720+
let gppModel = new GppModel(gppString);
721+
gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION);
722+
});
723+
724+
it("should decode DBABLA~BAAAAAAAAQA.QA", (): void => {
725+
let gppString = "DBABLA~BAAAAAAAAQA.QA";
726+
let gppModel = new GppModel(gppString);
727+
gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION);
728+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)).to.eql([
729+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
730+
]);
731+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)).to.eql([0, 0, 0]);
732+
});
733+
734+
it("should decode DBABLA~BAAAAAAAAABA.QA", (): void => {
735+
let gppString = "DBABLA~BAAAAAAAAABA.QA";
736+
let gppModel = new GppModel(gppString);
737+
gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION);
738+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)).to.eql([
739+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
740+
]);
741+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)).to.eql([0, 0, 0]);
742+
});
743+
744+
it("should decode DBABLA~BAAAAAABEQA.QA", (): void => {
745+
let gppString = "DBABLA~BAAAAAABEQA.QA";
746+
let gppModel = new GppModel(gppString);
747+
gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION);
748+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)).to.eql([
749+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
750+
]);
751+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)).to.eql([0, 1, 0]);
752+
});
753+
754+
it("should decode DBABLA~BAAAAAAAAQRA.QA", (): void => {
755+
let gppString = "DBABLA~BAAAAAAAAQRA.QA";
756+
let gppModel = new GppModel(gppString);
757+
gppModel.getFieldValue(UsNat.NAME, UspV1Field.VERSION);
758+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)).to.eql([
759+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
760+
]);
761+
expect(gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)).to.eql([0, 0, 1]);
762+
});
763+
709764
it("should decode and encode consistently", (): void => {
710765
let fromObjectModel = new GppModel();
711766
fromObjectModel.setFieldValue("tcfeuv2", "PurposeConsents", [

0 commit comments

Comments
 (0)