f7cloud_client/apps/mail/lib/Service/Avatar/GravatarSource.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

67 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2017 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OCA\Mail\Service\Avatar;
use Exception;
use OCA\Mail\Vendor\Gravatar\Gravatar;
use OCP\Http\Client\IClientService;
use function is_resource;
use function stream_get_contents;
class GravatarSource implements IAvatarSource {
/** @var IClientService */
private $clientService;
public function __construct(IClientService $clientService) {
$this->clientService = $clientService;
}
/**
* Does this source query external services?
*
* @return bool
*/
#[\Override]
public function isExternal(): bool {
return true;
}
/**
* @param string $email sender email address
* @param AvatarFactory $factory
* @return Avatar|null avatar URL if one can be found
*/
#[\Override]
public function fetch(string $email, AvatarFactory $factory) {
$gravatar = new Gravatar(['size' => 128], true);
$avatarUrl = $gravatar->avatar($email, ['d' => 404], true);
$client = $this->clientService->newClient();
try {
$response = $client->get($avatarUrl);
} catch (Exception $exception) {
return null;
}
// Don't save 0 byte images
$body = $response->getBody();
if (is_resource($body)) {
$body = stream_get_contents($body);
}
if ($body === null || strlen($body) === 0) {
return null;
}
// TODO: check whether it's really always a jpeg
return $factory->createExternal($avatarUrl, 'image/jpeg');
}
}