VCARDS don't hold binary data

* We need to base64 encode the avatar!
* Switched to vcard v4
* User proper data uri

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2016-11-22 21:26:49 +01:00
parent f692ea34f1
commit e9f98fd5a9
No known key found for this signature in database
GPG Key ID: F941078878347C0C
2 changed files with 41 additions and 7 deletions

View File

@ -71,7 +71,7 @@ class Converter {
break; break;
case AccountManager::PROPERTY_AVATAR: case AccountManager::PROPERTY_AVATAR:
if ($image !== null) { if ($image !== null) {
$vCard->add('PHOTO', $image->data(), ['ENCODING' => 'b', 'TYPE' => $image->mimeType()]); $vCard->add('PHOTO', 'data:'.$image->mimeType().';base64,' . base64_encode($image->data()));
} }
break; break;
case AccountManager::PROPERTY_EMAIL: case AccountManager::PROPERTY_EMAIL:

View File

@ -134,11 +134,45 @@ class ConverterTest extends TestCase {
public function providesNewUsers() { public function providesNewUsers() {
return [ return [
[null], [
[null, null, 'foo@bar.net'], null
[['cloud' => 'foo@cloud.net', 'email' => 'foo@bar.net'], null, 'foo@bar.net', 'foo@cloud.net'], ],
[['cloud' => 'foo@cloud.net', 'email' => 'foo@bar.net', 'fn' => 'Dr. Foo Bar'], "Dr. Foo Bar", "foo@bar.net", 'foo@cloud.net'], [
[['cloud' => 'foo@cloud.net', 'fn' => 'Dr. Foo Bar'], "Dr. Foo Bar", null, "foo@cloud.net"], null,
null,
'foo@bar.net'
],
[
[
'cloud' => 'foo@cloud.net',
'email' => 'foo@bar.net',
'photo' => 'data:image/jpeg;base64,MTIzNDU2Nzg5',
],
null,
'foo@bar.net',
'foo@cloud.net'
],
[
[
'cloud' => 'foo@cloud.net',
'email' => 'foo@bar.net',
'fn' => 'Dr. Foo Bar',
'photo' => 'data:image/jpeg;base64,MTIzNDU2Nzg5',
],
"Dr. Foo Bar",
"foo@bar.net",
'foo@cloud.net'
],
[
[
'cloud' => 'foo@cloud.net',
'fn' => 'Dr. Foo Bar',
'photo' => 'data:image/jpeg;base64,MTIzNDU2Nzg5',
],
"Dr. Foo Bar",
null,
"foo@cloud.net"
],
]; ];
} }
@ -171,7 +205,7 @@ class ConverterTest extends TestCase {
*/ */
protected function getUserMock($displayName, $eMailAddress, $cloudId) { protected function getUserMock($displayName, $eMailAddress, $cloudId) {
$image0 = $this->getMockBuilder(IImage::class)->disableOriginalConstructor()->getMock(); $image0 = $this->getMockBuilder(IImage::class)->disableOriginalConstructor()->getMock();
$image0->method('mimeType')->willReturn('JPEG'); $image0->method('mimeType')->willReturn('image/jpeg');
$image0->method('data')->willReturn('123456789'); $image0->method('data')->willReturn('123456789');
$user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock(); $user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$user->method('getUID')->willReturn('12345'); $user->method('getUID')->willReturn('12345');