]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'custom-avatar-provider' of git://github.com/Vinrobot/BookStack into...
authorDan Brown <redacted>
Sat, 22 Dec 2018 18:18:14 +0000 (18:18 +0000)
committerDan Brown <redacted>
Sat, 22 Dec 2018 18:18:14 +0000 (18:18 +0000)
.env.example
app/Auth/UserRepo.php
app/Uploads/ImageService.php
config/services.php

index 11dafa2ab26b75870f660324ed3ac45d2338036e..c839d254bc99364e26fee484590d7e75ae0040c3 100644 (file)
@@ -62,6 +62,11 @@ DISCORD_APP_SECRET=false
 
 # External services such as Gravatar and Draw.IO
 DISABLE_EXTERNAL_SERVICES=false
+# Default GRAVATAR_URL set to Gravatar service
+GRAVATAR_URL=false
+# To use a different service to get user's avatar like libravatar
+# Possible placeholders: %{hash} %{size} %{email}
+#GRAVATAR_URL=https://seccdn.libravatar.org/avatar/%{hash}?s=%{size}&d=identicon
 
 # LDAP Settings
 LDAP_SERVER=false
index 7c88badb843297a37901a70883179c9a20757447..abff7c6416c5a43177a7e2ddc51a71a10365551b 100644 (file)
@@ -251,7 +251,7 @@ class UserRepo
         }
 
         try {
-            $avatar = Images::saveUserGravatar($user);
+            $avatar = Images::saveUserGravatar($user, config('services.gravatar_url'));
             $user->avatar()->associate($avatar);
             $user->save();
             return true;
index f109db60068f5b919509a450df371bc8bd50eeee..b65a476f44beed5ac7290410656030d4c150b076 100644 (file)
@@ -281,16 +281,22 @@ class ImageService extends UploadService
     /**
      * Save a gravatar image and set a the profile image for a user.
      * @param \BookStack\Auth\User $user
+     * @param null|string $gravatarUrl
      * @param int $size
      * @return mixed
      * @throws Exception
      */
-    public function saveUserGravatar(User $user, $size = 500)
+    public function saveUserGravatar(User $user, $gravatarUrl, $size = 500)
     {
-        $emailHash = md5(strtolower(trim($user->email)));
-        $url = 'https://www.gravatar.com/avatar/' . $emailHash . '?s=' . $size . '&d=identicon';
+        if (!is_string($gravatarUrl) || empty($gravatarUrl)) {
+            $gravatarUrl = 'https://www.gravatar.com/avatar/%{hash}?s=%{size}&d=identicon';
+        }
+        $email = strtolower(trim($user->email));
+        $gravatarUrl = str_replace('%{hash}', md5($email), $gravatarUrl);
+        $gravatarUrl = str_replace('%{size}', $size, $gravatarUrl);
+        $gravatarUrl = str_replace('%{email}', urlencode($email), $gravatarUrl);
         $imageName = str_replace(' ', '-', $user->name . '-gravatar.png');
-        $image = $this->saveNewFromUrl($url, 'user', $imageName);
+        $image = $this->saveNewFromUrl($gravatarUrl, 'user', $imageName);
         $image->created_by = $user->id;
         $image->updated_by = $user->id;
         $image->save();
index ba16488918ab085cdc35e00fd5b29e9c0a958e59..310ea295fd61531df398d4093302c6e4210a2f79 100644 (file)
@@ -19,6 +19,7 @@ return [
     'gravatar' => env('GRAVATAR', !env('DISABLE_EXTERNAL_SERVICES', false)),
     'drawio' => env('DRAWIO', !env('DISABLE_EXTERNAL_SERVICES', false)),
 
+    'gravatar_url' => env('GRAVATAR_URL', false),
 
     'callback_url' => env('APP_URL', false),