X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/58fa7679bccafd00f9a50bcd4a87e96876331b03..refs/pull/3918/head:/app/Uploads/UserAvatars.php diff --git a/app/Uploads/UserAvatars.php b/app/Uploads/UserAvatars.php index e98c1cfca..49a54bbbb 100644 --- a/app/Uploads/UserAvatars.php +++ b/app/Uploads/UserAvatars.php @@ -1,9 +1,12 @@ -email)); $replacements = [ - '${hash}' => md5($email), - '${size}' => $size, + '${hash}' => md5($email), + '${size}' => $size, '${email}' => urlencode($email), ]; $userAvatarUrl = strtr($avatarUrl, $replacements); $imageData = $this->getAvatarImageData($userAvatarUrl); + return $this->createAvatarImageFromData($user, $imageData, 'png'); } @@ -89,7 +94,7 @@ class UserAvatars */ protected function createAvatarImageFromData(User $user, string $imageData, string $extension): Image { - $imageName = str_replace(' ', '-', $user->id . '-avatar.' . $extension); + $imageName = Str::random(10) . '-avatar.' . $extension; $image = $this->imageService->saveNew($imageName, $imageData, 'user', $user->id); $image->created_by = $user->id; @@ -101,6 +106,7 @@ class UserAvatars /** * Gets an image from url and returns it as a string of image data. + * * @throws Exception */ protected function getAvatarImageData(string $url): string @@ -110,6 +116,7 @@ class UserAvatars } catch (HttpFetchException $exception) { throw new Exception(trans('errors.cannot_get_image_from_url', ['url' => $url])); } + return $imageData; } @@ -119,6 +126,7 @@ class UserAvatars protected function avatarFetchEnabled(): bool { $fetchUrl = $this->getAvatarUrl(); + return is_string($fetchUrl) && strpos($fetchUrl, 'http') === 0; } @@ -127,7 +135,12 @@ class UserAvatars */ protected function getAvatarUrl(): string { - $url = trim(config('services.avatar_url')); + $configOption = config('services.avatar_url'); + if ($configOption === false) { + return ''; + } + + $url = trim($configOption); if (empty($url) && !config('services.disable_services')) { $url = 'https://www.gravatar.com/avatar/${hash}?s=${size}&d=identicon';