Skip to content

Commit 73c848d

Browse files
committed
SDK-1019: Only process one extension per anchor
1 parent 086857e commit 73c848d

File tree

7 files changed

+31
-127
lines changed

7 files changed

+31
-127
lines changed

src/Yoti/Util/Profile/AnchorConverter.php

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,59 +15,38 @@ class AnchorConverter
1515
*
1616
* @param Anchor $anchor
1717
*
18-
* @return array map of oid => YotiAnchor[]
18+
* @return array map of oid => YotiAnchor
1919
*/
20-
public static function convertAnchor(Anchor $protobufAnchor)
20+
public static function convert(Anchor $protobufAnchor)
2121
{
22-
$anchorMap = [];
2322
$anchorSubType = $protobufAnchor->getSubType();
2423
$yotiSignedTimeStamp = self::convertToYotiSignedTimestamp($protobufAnchor);
2524
$X509CertsList = self::convertCertsListToX509($protobufAnchor->getOriginServerCerts());
2625

27-
foreach ($X509CertsList as $certX509Obj) {
28-
$certExtsArr = $certX509Obj->tbsCertificate->extensions;
26+
$anchorValue = '';
27+
$oid = YotiAnchor::TYPE_UNKNOWN_NAME;
2928

30-
foreach ($certExtsArr as $extObj) {
29+
foreach ($X509CertsList as $certX509Obj) {
30+
foreach ($certX509Obj->tbsCertificate->extensions as $extObj) {
3131
$anchorType = self::getAnchorTypeByOid($extObj->extnId);
32-
if ($anchorType === YotiAnchor::TYPE_UNKNOWN_NAME) {
33-
$anchorValue = '';
34-
} else {
32+
if ($anchorType !== YotiAnchor::TYPE_UNKNOWN_NAME) {
3533
$anchorValue = self::decodeAnchorValue($extObj->extnValue);
34+
$oid = $extObj->extnId;
35+
break;
3636
}
37-
$yotiAnchor = self::createYotiAnchor(
38-
$anchorValue,
39-
$anchorType,
40-
$anchorSubType,
41-
$yotiSignedTimeStamp,
42-
$X509CertsList
43-
);
44-
$mapKey = self::getAnchorTypeKey($anchorType);
45-
$anchorMap[$mapKey][] = $yotiAnchor;
4637
}
4738
}
48-
return $anchorMap;
49-
}
5039

51-
/**
52-
* Convert Protobuf Anchor to a map of oid -> Yoti Anchor
53-
*
54-
* @deprecated no longer in use.
55-
*
56-
* @param Anchor $anchor
57-
*
58-
* @return array|null
59-
*/
60-
public static function convert(Anchor $protobufAnchor)
61-
{
62-
$extensions = self::convertAnchor($protobufAnchor);
63-
foreach (array_keys(self::getAnchorTypesMap()) as $oid) {
64-
if (isset($extensions[$oid][0])) {
65-
return [
66-
'oid' => $oid,
67-
'yoti_anchor' => $extensions[$oid][0],
68-
];
69-
}
70-
}
40+
return [
41+
'oid' => $oid,
42+
'yoti_anchor' => self::createYotiAnchor(
43+
$anchorValue,
44+
$anchorType,
45+
$anchorSubType,
46+
$yotiSignedTimeStamp,
47+
$X509CertsList
48+
),
49+
];
7150
}
7251

7352
/**

src/Yoti/Util/Profile/AnchorListConverter.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ public static function convert(Traversable $anchorList)
1111
$yotiAnchorsMap = [];
1212

1313
foreach ($anchorList as $protobufAnchor) {
14-
if ($parsedAnchors = AnchorConverter::convertAnchor($protobufAnchor)) {
15-
$yotiAnchorsMap = array_merge_recursive($yotiAnchorsMap, $parsedAnchors);
14+
if ($parsedAnchor = AnchorConverter::convert($protobufAnchor)) {
15+
$yotiAnchorsMap[$parsedAnchor['oid']][] = $parsedAnchor['yoti_anchor'];
1616
}
1717
}
1818

tests/Entity/AttributeTest.php

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -93,19 +93,12 @@ public function testVerifiers()
9393
public function testGetAnchors()
9494
{
9595
$anchors = $this->dummyAttribute->getAnchors();
96-
$this->assertEquals(6, count($anchors));
97-
$this->assertEquals(YotiAnchor::TYPE_UNKNOWN_NAME, $anchors[0]->getType());
98-
$this->assertEquals('', $anchors[0]->getValue());
99-
$this->assertEquals(YotiAnchor::TYPE_UNKNOWN_NAME, $anchors[1]->getType());
100-
$this->assertEquals('', $anchors[1]->getValue());
101-
$this->assertEquals(YotiAnchor::TYPE_UNKNOWN_NAME, $anchors[2]->getType());
102-
$this->assertEquals('', $anchors[2]->getValue());
103-
$this->assertEquals(YotiAnchor::TYPE_SOURCE_NAME, $anchors[3]->getType());
104-
$this->assertEquals('DRIVING_LICENCE', $anchors[3]->getValue());
105-
$this->assertEquals(YotiAnchor::TYPE_SOURCE_NAME, $anchors[4]->getType());
106-
$this->assertEquals('PASSPORT', $anchors[4]->getValue());
107-
$this->assertEquals(YotiAnchor::TYPE_VERIFIER_NAME, $anchors[5]->getType());
108-
$this->assertEquals('YOTI_ADMIN', $anchors[5]->getValue());
96+
$this->assertEquals(YotiAnchor::TYPE_SOURCE_NAME, $anchors[0]->getType());
97+
$this->assertEquals('DRIVING_LICENCE', $anchors[0]->getValue());
98+
$this->assertEquals(YotiAnchor::TYPE_SOURCE_NAME, $anchors[1]->getType());
99+
$this->assertEquals('PASSPORT', $anchors[1]->getValue());
100+
$this->assertEquals(YotiAnchor::TYPE_VERIFIER_NAME, $anchors[2]->getType());
101+
$this->assertEquals('YOTI_ADMIN', $anchors[2]->getValue());
109102
}
110103

111104
/**

tests/Entity/ProfileTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ public function testShouldReturnFormattedAddressAsPostalAddressWhenNull()
9898
{
9999
$anchorsMap = AnchorListConverter::convert(new \ArrayObject([
100100
$this->parseAnchor(TestAnchors::VERIFIER_YOTI_ADMIN_ANCHOR),
101-
$this->parseAnchor(TestAnchors::UNKNOWN_ANCHOR),
102101
$this->parseAnchor(TestAnchors::SOURCE_DL_ANCHOR),
103102
]));
104103

tests/Util/Profile/AnchorConverterTest.php

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ class AnchorConverterTest extends TestCase
1616
*/
1717
public function testConvertingSourceAnchor()
1818
{
19-
$anchorsData = $this->parseFromBase64String(TestAnchors::SOURCE_PP_ANCHOR);
20-
$anchor = $anchorsData[Anchor::TYPE_SOURCE_OID][0];
19+
$anchor = $this->parseFromBase64String(TestAnchors::SOURCE_PP_ANCHOR);
2120

2221
$this->assertEquals('Source', $anchor->getType());
2322
$this->assertEquals('OCR', $anchor->getSubtype());
@@ -36,8 +35,7 @@ public function testConvertingSourceAnchor()
3635
*/
3736
public function testConvertingVerifierAnchor()
3837
{
39-
$anchorsData = $this->parseFromBase64String(TestAnchors::VERIFIER_YOTI_ADMIN_ANCHOR);
40-
$anchor = $anchorsData[Anchor::TYPE_VERIFIER_OID][0];
38+
$anchor = $this->parseFromBase64String(TestAnchors::VERIFIER_YOTI_ADMIN_ANCHOR);
4139

4240
$this->assertEquals('Verifier', $anchor->getType());
4341
$this->assertEquals('', $anchor->getSubtype());
@@ -51,26 +49,6 @@ public function testConvertingVerifierAnchor()
5149
$this->assertIssuer($anchor, 'id-at-commonName', 'driving-licence-registration-server');
5250
}
5351

54-
/**
55-
* @covers ::convertAnchor
56-
*/
57-
public function testConvertingUnknownAnchor()
58-
{
59-
$anchorsData = $this->parseFromBase64String(TestAnchors::UNKNOWN_ANCHOR);
60-
$anchor = $anchorsData[Anchor::TYPE_UNKNOWN_NAME][0];
61-
62-
$this->assertEquals('UNKNOWN', $anchor->getType());
63-
$this->assertEquals('', $anchor->getSubtype());
64-
$this->assertEquals(
65-
'2018-04-11 12:13:03.923537',
66-
$anchor->getSignedTimestamp()->getTimestamp()->format('Y-m-d H:i:s.u')
67-
);
68-
$this->assertEquals('', $anchor->getValue());
69-
70-
$this->assertSerialNumber($anchor, '46131813624213904216516051554755262812');
71-
$this->assertIssuer($anchor, 'id-at-commonName', 'driving-licence-registration-server');
72-
}
73-
7452
/**
7553
* @covers ::convert
7654
*/
@@ -86,13 +64,13 @@ public function testConvert()
8664
/**
8765
* @param string $anchorString
8866
*
89-
* @return array $anchors
67+
* @return Anchor
9068
*/
9169
private function parseFromBase64String($anchorString)
9270
{
9371
$anchor = new \Attrpubapi\Anchor();
9472
$anchor->mergeFromString(base64_decode($anchorString));
95-
return AnchorConverter::convertAnchor($anchor);
73+
return AnchorConverter::convert($anchor)['yoti_anchor'];
9674
}
9775

9876
/**

tests/Util/Profile/AnchorListConverterTest.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ public function testConvertingAnyAnchor()
3737
$anchorsData = AnchorListConverter::convert(new ArrayObject([
3838
$this->parseFromBase64String(TestAnchors::SOURCE_DL_ANCHOR),
3939
$this->parseFromBase64String(TestAnchors::VERIFIER_YOTI_ADMIN_ANCHOR),
40-
$this->parseFromBase64String(TestAnchors::UNKNOWN_ANCHOR),
4140
]));
4241

4342
$anchorSource = $anchorsData[Anchor::TYPE_SOURCE_OID][0];
@@ -47,10 +46,6 @@ public function testConvertingAnyAnchor()
4746
$anchorVerifier = $anchorsData[Anchor::TYPE_VERIFIER_OID][0];
4847
$this->assertEquals('Verifier', $anchorVerifier->getType());
4948
$this->assertEquals('YOTI_ADMIN', $anchorVerifier->getValue());
50-
51-
$anchorUnknown = $anchorsData[Anchor::TYPE_UNKNOWN_NAME][0];
52-
$this->assertEquals('UNKNOWN', $anchorUnknown->getType());
53-
$this->assertEquals('', $anchorUnknown->getValue());
5449
}
5550

5651
/**

tests/Util/Profile/TestAnchors.php

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -123,44 +123,4 @@ class TestAnchors
123123
. "b185Qe6PWL4Jl+DvbzN2C0wsUFKRQyRwgBEIaQ8PyYstoCGhyG6joGfHdvA8tGS+Ol98"
124124
. "igUHdLW56nhnGLovTMIhz+RsUWrtszSjWSim2/4vJAE8QjXJ98ou4AVzKUOg9EUklWSU"
125125
. "5HX0xJQ0VOQ0U=";
126-
127-
const UNKNOWN_ANCHOR = "CjdBTkMtRE9Dz8qdV2DSwFJicqASUbdSRfmYOsJzswHQ4hDnfOUXtYeRlVOeQnVr3an"
128-
. "ESmMH7e2HEqAIMIIEHDCCAoSgAwIBAgIQIrSqBBTTXWxgGf6OvVm5XDANBgkqhkiG9w0"
129-
. "BAQsFADAuMSwwKgYDVQQDEyNkcml2aW5nLWxpY2VuY2UtcmVnaXN0cmF0aW9uLXNlcnZ"
130-
. "lcjAeFw0xODA0MDUxNDI3MzZaFw0xODA0MTIxNDI3MzZaMC4xLDAqBgNVBAMTI2RyaXZ"
131-
. "pbmctbGljZW5jZS1yZWdpc3RyYXRpb24tc2VydmVyMIIBojANBgkqhkiG9w0BAQEFAAO"
132-
. "CAY8AMIIBigKCAYEA3u2JsiXZftQXRG255RiFHuknxzgGdQ1Qys6O+/Dn/nwEOPbzGBn"
133-
. "4VTMfT1tCl7lD96Eq/qf0v3M6jLWQNJYqt7FbqlH0qtfQLT8fHX04vKwWkJdAvcpOSVd"
134-
. "1i2iyO5wVsvoXCt2ODyMGhd7/6qHeNZei50ARV8zF8diqneNq87Fgg1seuF+YEVAj14y"
135-
. "bjNmTk+MQvKkONSh2OPYNYeF/2H+0pXNe+MXhyY+vJlcRrqXLS52s4VjdeksVc05o/oe"
136-
. "NVckeqgmNhmEnLUNRGQFNOptrB0+g+hcdDQBFOkgeS/dS8iiMp5VQUShKOyQ5/twWOEQ"
137-
. "oJ3ZYRZGIyN8cErUfOUCQBwJOfdspMgbwom3//b5z9+alNOeZDOQRkI5vgvV8s+CvtSn"
138-
. "nMVt9WZMXmY+4uUP9/wZXmw2oBwlJmS9kUKslIHiMNzU07t1y6xMUMhYugxR5GatSN5k"
139-
. "H+36ylJATWVyuuj3Ub/q88cnaiT0jYtsAS4cpJUcEi60+j8qyuc5dAgMBAAGjNjA0MA4"
140-
. "GA1UdDwEB/wQEAwIDmDAiBgsrBgEEAYLwFwEBAQQTMBGAD0RSSVZJTkdfTElDRU5DRTA"
141-
. "NBgkqhkiG9w0BAQsFAAOCAYEANly4rGh8NaE3OwX54kOB8WBO2z/FBDDSi5VByHmMl4V"
142-
. "Pd8Pz26F1kS8qhcKjG6DuaX5UnX33GM6DuLv3nP3uiWEnv/lcitma2LC+qgJp4ItCw2E"
143-
. "MBLiof+dKzms4HqTHyKcPBpxBO6RPkvY5YQDEF0YiW17O31O2ltZTsc9ZsX5M1IiVwbO"
144-
. "ieTDtHy2M/K6Bol/JU/H/L1lAfpZ7khADZmEymjh/6Aw2v18Re37SWl86HxU4t862VNf"
145-
. "ogWO1nlgmgEwoCDgQ6OzR6dhGHJQfXymCJCB3wpA2x3i9rd2L8qrzxX9p5uInCK4+WKS"
146-
. "mhggB31s6dJwS5vAp5D6/i19aMgJqVFfxq/FUA1wkx/flgoC/Xb8MMTDTLo4/ekINdXX"
147-
. "jbQboVii2PGZKAK6FQNZ0FYC7WlA65gBBCZzvQ8imLwBQuy/kLvWbWXVDF5lzMdohijB"
148-
. "nuo4O4fenbAcy51CUvxAjgK7G9FQCyZ39gCPrpy3VVAcjbr9Njk15plcs1yAbGoUDCAE"
149-
. "SgAO1NMBkegQwBTWooNohw8CgIQhfq6dqolvIYDlBIFWThZo34qmRIQe2KKS4SCrxHT5"
150-
. "syjX0X1jtmHPIjZNifbiEAy7Jzzn1xlNWIwetnVoJBcnNumx4r0nmqRrCkRZLlgP4wwM"
151-
. "hwBV56X4TQOUMF8H1ESfmrWIMM9O+vhEJB5QuoAFRPaMcNkYTvbeAvAkhwxfbb8Ac3IW"
152-
. "JPakxORI8jeSop73yc9blxfV1D2ki4yjB2fI7uEXkRBOP/IQ301e7m+fQFLTZ1m1nZiz"
153-
. "Hh+s5GBcApwn92AsfRvgRnSXrc24qoqqvthm4fp9RbnO0d89RqO4Pxu6f1y9BqJ5RMhV"
154-
. "A6Vl+5vsU0nNhiH4Jki9N8dGmX3CTnwf51VUK5aeQwLIgCWaPjE4xC7YX9Fd8WUnsp1/"
155-
. "JllMhAQF7fym40usrHuVt9htd5E2p8zxRidA8NqWNV2rXTGWO5hUSwCAMdfgz431BZSO"
156-
. "fLPZHHg+g4qu+dcLerBqvMggVQLsGB10omwv4oJwiACqFAwgBEoADohVhusZuxzj2ldV"
157-
. "MOKIw+v59l/vWwSgHEIYbIcHNg03EHNLWA7EzrEny+jXyaKERPK8pxASewVJTQo3qYm3"
158-
. "Ezr9QuEy5XG2WfATe1OZuchJxK+IpHRN7o1ZxHf9cCXa22KA4bAKUgb/gSKC6hr9bjMu"
159-
. "06qyb/P+TzWNLTv4OX51dE6iI4WwltsQnPg4BRcrWjvoqkgPi1AKVd+no4J3H2tc0b7a"
160-
. "s/KJCPgR7HMTtuxp/eooR0zPRB/bZFkywrdGbCECshb11G+j1iBYaFHc1ewcmcNjufZV"
161-
. "bZ60pR4JfZUcpiRZJO13ZNnfX7ugc2vK/tL1hM963Y4BfvKXnmQeiLojlpilPxOFET+n"
162-
. "1yodR8J/i1GWzV41Nwx2PFEQv0VofkOZp28mHgQsAM8omReGZqyKEf+oAWjFWY0l1M88"
163-
. "3URQSr0CV04U6iSbS6qeSzL5YkP4CNny0n4Pt79UJWyVA+nHAThnsz4relhfk82At5IL"
164-
. "ASx2zgOkeIJVm5UnTC2ywMkcIARDR0uX8mLLaAhocZv/4kdenjmzEE1nkHW7ks7qh+II"
165-
. "J0YbSPwVkGiIc7BbgXGE8cSGwKuul83Yy/z1InbhBl2B1drEuOjoA";
166126
}

0 commit comments

Comments
 (0)