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'); } }