Skip to content

Commit 1038c33

Browse files
committed
Backport ContactPerson emailaddress fix
1 parent 4ef98dc commit 1038c33

File tree

2 files changed

+82
-8
lines changed

2 files changed

+82
-8
lines changed

src/SAML2/XML/md/ContactPerson.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ public function getEmailAddress() : array
264264
*/
265265
public function setEmailAddress(array $emailAddress) : void
266266
{
267+
$emailAddress = preg_replace('/^mailto:/i', '', $emailAddress);
267268
$this->EmailAddress = $emailAddress;
268269
}
269270

@@ -276,6 +277,7 @@ public function setEmailAddress(array $emailAddress) : void
276277
*/
277278
public function addEmailAddress($emailAddress) : void
278279
{
280+
$emailAddress = preg_replace('/^mailto:/i', '', $emailAddress);
279281
$this->EmailAddress[] = $emailAddress;
280282
}
281283

@@ -417,7 +419,10 @@ public function toXML(DOMElement $parent) : DOMElement
417419
Utils::addString($e, Constants::NS_MD, 'md:SurName', $this->SurName);
418420
}
419421
if (!empty($this->getEmailAddress())) {
420-
Utils::addStrings($e, Constants::NS_MD, 'md:EmailAddress', false, $this->getEmailAddress());
422+
/** @var array $addresses */
423+
$addresses = preg_filter('/^/', 'mailto:', $this->EmailAddress);
424+
425+
Utils::addStrings($e, Constants::NS_MD, 'md:EmailAddress', false, $addresses);
421426
}
422427
if (!empty($this->getTelephoneNumber())) {
423428
Utils::addStrings($e, Constants::NS_MD, 'md:TelephoneNumber', false, $this->getTelephoneNumber());

tests/SAML2/XML/md/ContactPersonTest.php

Lines changed: 76 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public function testContactPerson() : void
2323
$Company = "Test Company";
2424
$GivenName = "John";
2525
$SurName = "Doe";
26-
$EmailAddress = ['jdoe@test.company', 'john.doe@test.company'];
26+
$EmailAddress = ['jdoe@test.company', 'mailto:john.doe@test.company'];
2727
$TelephoneNumber = ['1-234-567-8901'];
2828
$ContactPersonAttributes = ['testattr' => 'testval', 'testattr2' => 'testval2'];
2929

@@ -54,7 +54,10 @@ public function testContactPerson() : void
5454

5555
$this->assertEquals(count($EmailAddress), $contactPersonElement->getElementsByTagName('EmailAddress')->length);
5656
foreach ($contactPersonElement->getElementsByTagName('EmailAddress') as $element) {
57-
$this->assertTrue(in_array($element->nodeValue, $EmailAddress));
57+
$this->assertTrue(
58+
in_array($element->nodeValue, $EmailAddress) ||
59+
in_array(preg_replace('/^mailto:/', '', $element->nodeValue), $EmailAddress)
60+
);
5861
}
5962

6063
$this->assertEquals(count($TelephoneNumber), $contactPersonElement->getElementsByTagName('TelephoneNumber')->length);
@@ -68,6 +71,72 @@ public function testContactPerson() : void
6871
}
6972

7073

74+
/**
75+
* Test more methods inside ContactPerson
76+
*
77+
* @return void
78+
*/
79+
public function testContactPersonExtraMethods(): void
80+
{
81+
$contactType = "administrative";
82+
$Company = "Test Company";
83+
$GivenName = "John";
84+
$SurName = "Doe";
85+
$EmailAddress = ['jdoe@test.company', 'mailto:john.doe@test.company'];
86+
$AnotherEmail = 'john@doe.xyz';
87+
$TelephoneNumber = ['1-234-567-8901'];
88+
$MoreTelephoneNumber = '+31-887874000';
89+
$ContactPersonAttributes = ['testattr' => 'testval', 'testattr2' => 'testval2'];
90+
$ExtraAttribute = ['another' => 'this'];
91+
92+
$mdNamespace = Constants::NS_MD;
93+
$document = DOMDocumentFactory::fromString(<<<XML
94+
<md:Test xmlns:md="{$mdNamespace}" Binding="urn:something" Location="https://whatever/" xmlns:test="urn:test" test:attr="value">
95+
</md:Test>
96+
XML
97+
);
98+
$contactPerson = new ContactPerson();
99+
$contactPerson->setContactType($contactType);
100+
$contactPerson->setCompany($Company);
101+
$contactPerson->setGivenName($GivenName);
102+
$contactPerson->setSurName($SurName);
103+
$contactPerson->setEmailAddress($EmailAddress);
104+
$contactPerson->setTelephoneNumber($TelephoneNumber);
105+
$contactPerson->setContactPersonAttributes($ContactPersonAttributes);
106+
107+
$contactPerson->addEmailAddress($AnotherEmail);
108+
$contactPerson->addTelephoneNumber($MoreTelephoneNumber);
109+
$contactPerson->addContactPersonAttributes(key($ExtraAttribute), array_pop($ExtraAttribute));
110+
111+
$contactPerson->toXML($document->firstChild);
112+
113+
$contactPersonElement = $document->getElementsByTagName('ContactPerson')->item(0);
114+
115+
$this->assertEquals(count($EmailAddress) + 1, $contactPersonElement->getElementsByTagName('EmailAddress')->length);
116+
foreach ($contactPersonElement->getElementsByTagName('EmailAddress') as $element) {
117+
$this->assertTrue(
118+
in_array($element->nodeValue, $EmailAddress) ||
119+
in_array(preg_replace('/^mailto:/', '', $element->nodeValue), $EmailAddress) ||
120+
preg_replace('/^mailto:/', '', $element->nodeValue) === $AnotherEmail
121+
);
122+
}
123+
124+
$this->assertEquals(
125+
count($TelephoneNumber) + 1,
126+
$contactPersonElement->getElementsByTagName('TelephoneNumber')->length
127+
);
128+
foreach ($contactPersonElement->getElementsByTagName('TelephoneNumber') as $element) {
129+
$this->assertTrue(in_array($element->nodeValue, $TelephoneNumber) ||
130+
$element->nodeValue === $MoreTelephoneNumber
131+
);
132+
}
133+
134+
foreach ($ContactPersonAttributes + $ExtraAttribute as $attr => $val) {
135+
$this->assertEquals($val, $contactPersonElement->getAttribute($attr));
136+
}
137+
}
138+
139+
71140
/**
72141
* @return void
73142
*/
@@ -83,7 +152,7 @@ public function testContactPersonFromXML() : void
83152
<md:GivenName>John</md:GivenName>
84153
<md:SurName>Doe</md:SurName>
85154
<md:EmailAddress>jdoe@test.company</md:EmailAddress>
86-
<md:EmailAddress>john.doe@test.company</md:EmailAddress>
155+
<md:EmailAddress>mailto:john.doe@test.company</md:EmailAddress>
87156
<md:TelephoneNumber>1-234-567-8901</md:TelephoneNumber>
88157
</md:ContactPerson>
89158
</md:Test>
@@ -118,8 +187,8 @@ public function testMultipleNamesXML() : void
118187
<md:GivenName>John</md:GivenName>
119188
<md:GivenName>Jonathon</md:GivenName>
120189
<md:SurName>Doe</md:SurName>
121-
<md:EmailAddress>jdoe@test.company</md:EmailAddress>
122-
<md:EmailAddress>john.doe@test.company</md:EmailAddress>
190+
<md:EmailAddress>mailto:jdoe@test.company</md:EmailAddress>
191+
<md:EmailAddress>mailto:john.doe@test.company</md:EmailAddress>
123192
<md:TelephoneNumber>1-234-567-8901</md:TelephoneNumber>
124193
</md:ContactPerson>
125194
</md:Test>
@@ -145,8 +214,8 @@ public function testEmptySurNameXML() : void
145214
<md:ContactPerson contactType="other">
146215
<md:Company>Test Company</md:Company>
147216
<md:GivenName>John</md:GivenName>
148-
<md:EmailAddress>jdoe@test.company</md:EmailAddress>
149-
<md:EmailAddress>john.doe@test.company</md:EmailAddress>
217+
<md:EmailAddress>mailto:jdoe@test.company</md:EmailAddress>
218+
<md:EmailAddress>mailto:john.doe@test.company</md:EmailAddress>
150219
<md:TelephoneNumber>1-234-567-8901</md:TelephoneNumber>
151220
</md:ContactPerson>
152221
</md:Test>

0 commit comments

Comments
 (0)