Skip to content

Commit ed2d61c

Browse files
committed
Backport ContactPerson emailaddress fix
1 parent 221fe97 commit ed2d61c

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
@@ -259,6 +259,7 @@ public function getEmailAddress()
259259
*/
260260
public function setEmailAddress(array $emailAddress)
261261
{
262+
$emailAddress = preg_replace('/^mailto:/i', '', $emailAddress);
262263
$this->EmailAddress = $emailAddress;
263264
}
264265

@@ -270,6 +271,7 @@ public function setEmailAddress(array $emailAddress)
270271
*/
271272
public function addEmailAddress($emailAddress)
272273
{
274+
$emailAddress = preg_replace('/^mailto:/i', '', $emailAddress);
273275
$this->EmailAddress[] = $emailAddress;
274276
}
275277

@@ -414,7 +416,10 @@ public function toXML(\DOMElement $parent)
414416
Utils::addString($e, Constants::NS_MD, 'md:SurName', $this->getSurName());
415417
}
416418
if ($this->getEmailAddress() !== null) {
417-
Utils::addStrings($e, Constants::NS_MD, 'md:EmailAddress', false, $this->getEmailAddress());
419+
/** @var array $addresses */
420+
$addresses = preg_filter('/^/', 'mailto:', $this->EmailAddress);
421+
422+
Utils::addStrings($e, Constants::NS_MD, 'md:EmailAddress', false, $addresses);
418423
}
419424
if ($this->getTelephoneNumber() !== null) {
420425
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
@@ -17,7 +17,7 @@ public function testContactPerson()
1717
$Company = "Test Company";
1818
$GivenName = "John";
1919
$SurName = "Doe";
20-
$EmailAddress = ['jdoe@test.company', 'john.doe@test.company'];
20+
$EmailAddress = ['jdoe@test.company', 'mailto:john.doe@test.company'];
2121
$TelephoneNumber = ['1-234-567-8901'];
2222
$ContactPersonAttributes = ['testattr' => 'testval', 'testattr2' => 'testval2'];
2323

@@ -48,7 +48,10 @@ public function testContactPerson()
4848

4949
$this->assertEquals(count($EmailAddress), $contactPersonElement->getElementsByTagName('EmailAddress')->length);
5050
foreach ($contactPersonElement->getElementsByTagName('EmailAddress') as $element) {
51-
$this->assertTrue(in_array($element->nodeValue, $EmailAddress));
51+
$this->assertTrue(
52+
in_array($element->nodeValue, $EmailAddress) ||
53+
in_array(preg_replace('/^mailto:/', '', $element->nodeValue), $EmailAddress)
54+
);
5255
}
5356

5457
$this->assertEquals(count($TelephoneNumber), $contactPersonElement->getElementsByTagName('TelephoneNumber')->length);
@@ -62,6 +65,72 @@ public function testContactPerson()
6265
}
6366

6467

68+
/**
69+
* Test more methods inside ContactPerson
70+
*
71+
* @return void
72+
*/
73+
public function testContactPersonExtraMethods()
74+
{
75+
$contactType = "administrative";
76+
$Company = "Test Company";
77+
$GivenName = "John";
78+
$SurName = "Doe";
79+
$EmailAddress = ['jdoe@test.company', 'mailto:john.doe@test.company'];
80+
$AnotherEmail = 'john@doe.xyz';
81+
$TelephoneNumber = ['1-234-567-8901'];
82+
$MoreTelephoneNumber = '+31-887874000';
83+
$ContactPersonAttributes = ['testattr' => 'testval', 'testattr2' => 'testval2'];
84+
$ExtraAttribute = ['another' => 'this'];
85+
86+
$mdNamespace = Constants::NS_MD;
87+
$document = DOMDocumentFactory::fromString(<<<XML
88+
<md:Test xmlns:md="{$mdNamespace}" Binding="urn:something" Location="https://whatever/" xmlns:test="urn:test" test:attr="value">
89+
</md:Test>
90+
XML
91+
);
92+
$contactPerson = new ContactPerson();
93+
$contactPerson->setContactType($contactType);
94+
$contactPerson->setCompany($Company);
95+
$contactPerson->setGivenName($GivenName);
96+
$contactPerson->setSurName($SurName);
97+
$contactPerson->setEmailAddress($EmailAddress);
98+
$contactPerson->setTelephoneNumber($TelephoneNumber);
99+
$contactPerson->setContactPersonAttributes($ContactPersonAttributes);
100+
101+
$contactPerson->addEmailAddress($AnotherEmail);
102+
$contactPerson->addTelephoneNumber($MoreTelephoneNumber);
103+
$contactPerson->addContactPersonAttributes(key($ExtraAttribute), array_pop($ExtraAttribute));
104+
105+
$contactPerson->toXML($document->firstChild);
106+
107+
$contactPersonElement = $document->getElementsByTagName('ContactPerson')->item(0);
108+
109+
$this->assertEquals(count($EmailAddress) + 1, $contactPersonElement->getElementsByTagName('EmailAddress')->length);
110+
foreach ($contactPersonElement->getElementsByTagName('EmailAddress') as $element) {
111+
$this->assertTrue(
112+
in_array($element->nodeValue, $EmailAddress) ||
113+
in_array(preg_replace('/^mailto:/', '', $element->nodeValue), $EmailAddress) ||
114+
preg_replace('/^mailto:/', '', $element->nodeValue) === $AnotherEmail
115+
);
116+
}
117+
118+
$this->assertEquals(
119+
count($TelephoneNumber) + 1,
120+
$contactPersonElement->getElementsByTagName('TelephoneNumber')->length
121+
);
122+
foreach ($contactPersonElement->getElementsByTagName('TelephoneNumber') as $element) {
123+
$this->assertTrue(in_array($element->nodeValue, $TelephoneNumber) ||
124+
$element->nodeValue === $MoreTelephoneNumber
125+
);
126+
}
127+
128+
foreach ($ContactPersonAttributes + $ExtraAttribute as $attr => $val) {
129+
$this->assertEquals($val, $contactPersonElement->getAttribute($attr));
130+
}
131+
}
132+
133+
65134
public function testContactPersonFromXML()
66135
{
67136
$mdNamespace = Constants::NS_MD;
@@ -73,7 +142,7 @@ public function testContactPersonFromXML()
73142
<md:Company>Test Company</md:Company>
74143
<md:GivenName>John</md:GivenName>
75144
<md:SurName>Doe</md:SurName>
76-
<md:EmailAddress>jdoe@test.company</md:EmailAddress>
145+
<md:EmailAddress>mailto:jdoe@test.company</md:EmailAddress>
77146
<md:EmailAddress>john.doe@test.company</md:EmailAddress>
78147
<md:TelephoneNumber>1-234-567-8901</md:TelephoneNumber>
79148
</md:ContactPerson>
@@ -106,8 +175,8 @@ public function testMultipleNamesXML()
106175
<md:GivenName>John</md:GivenName>
107176
<md:GivenName>Jonathon</md:GivenName>
108177
<md:SurName>Doe</md:SurName>
109-
<md:EmailAddress>jdoe@test.company</md:EmailAddress>
110-
<md:EmailAddress>john.doe@test.company</md:EmailAddress>
178+
<md:EmailAddress>mailto:jdoe@test.company</md:EmailAddress>
179+
<md:EmailAddress>mailto:john.doe@test.company</md:EmailAddress>
111180
<md:TelephoneNumber>1-234-567-8901</md:TelephoneNumber>
112181
</md:ContactPerson>
113182
</md:Test>
@@ -130,8 +199,8 @@ public function testEmptySurNameXML()
130199
<md:ContactPerson contactType="other">
131200
<md:Company>Test Company</md:Company>
132201
<md:GivenName>John</md:GivenName>
133-
<md:EmailAddress>jdoe@test.company</md:EmailAddress>
134-
<md:EmailAddress>john.doe@test.company</md:EmailAddress>
202+
<md:EmailAddress>mailto:jdoe@test.company</md:EmailAddress>
203+
<md:EmailAddress>mailto:john.doe@test.company</md:EmailAddress>
135204
<md:TelephoneNumber>1-234-567-8901</md:TelephoneNumber>
136205
</md:ContactPerson>
137206
</md:Test>

0 commit comments

Comments
 (0)