]> BookStack Code Mirror - bookstack/commitdiff
Made registration gravatar/email requests fail gracefully
authorDan Brown <redacted>
Sat, 17 Sep 2016 20:33:55 +0000 (21:33 +0100)
committerDan Brown <redacted>
Sat, 17 Sep 2016 20:33:55 +0000 (21:33 +0100)
* Extracted any email confirmation text into langs.
* Added new notification on confirmation email send fail.

Closes #187

app/Http/Controllers/Auth/RegisterController.php
app/Http/Controllers/UserController.php
app/Notifications/ConfirmEmail.php
app/Repos/UserRepo.php
app/Services/ImageService.php
resources/lang/en/auth.php

index 5b3719bc08ae50f6352959efbd22f0e936fcf691..6bba6de045f8d371e3f5b5d92d59b093ddd90df5 100644 (file)
@@ -8,6 +8,7 @@ use BookStack\Repos\UserRepo;
 use BookStack\Services\EmailConfirmationService;
 use BookStack\Services\SocialAuthService;
 use BookStack\User;
+use Exception;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Validator;
@@ -56,7 +57,6 @@ class RegisterController extends Controller
         $this->userRepo = $userRepo;
         $this->redirectTo = baseUrl('/');
         $this->redirectPath = baseUrl('/');
-        $this->username = config('auth.method') === 'standard' ? 'email' : 'username';
         parent::__construct();
     }
 
@@ -158,7 +158,13 @@ class RegisterController extends Controller
 
         if (setting('registration-confirmation') || setting('registration-restrict')) {
             $newUser->save();
-            $this->emailConfirmationService->sendConfirmation($newUser);
+
+            try {
+                $this->emailConfirmationService->sendConfirmation($newUser);
+            } catch (Exception $e) {
+                session()->flash('error', trans('auth.email_confirm_send_error'));
+            }
+
             return redirect('/register/confirm');
         }
 
@@ -189,7 +195,7 @@ class RegisterController extends Controller
         $user->email_confirmed = true;
         $user->save();
         auth()->login($user);
-        session()->flash('success', 'Your email has been confirmed!');
+        session()->flash('success', trans('auth.email_confirm_success'));
         $this->emailConfirmationService->deleteConfirmationsByUser($user);
         return redirect($this->redirectPath);
     }
@@ -215,8 +221,16 @@ class RegisterController extends Controller
             'email' => 'required|email|exists:users,email'
         ]);
         $user = $this->userRepo->getByEmail($request->get('email'));
+
+        try {
+            $this->emailConfirmationService->sendConfirmation($user);
+        } catch (Exception $e) {
+            session()->flash('error', trans('auth.email_confirm_send_error'));
+            return redirect('/register/confirm');
+        }
+
         $this->emailConfirmationService->sendConfirmation($user);
-        session()->flash('success', 'Confirmation email resent, Please check your inbox.');
+        session()->flash('success', trans('auth.email_confirm_resent'));
         return redirect('/register/confirm');
     }
 
index 053d9ebd57345017cb9f8faf22986de52335cf63..4c56516dc670f098933ae73de2796cdb8a6b673c 100644 (file)
@@ -3,6 +3,7 @@
 namespace BookStack\Http\Controllers;
 
 use BookStack\Activity;
+use Exception;
 use Illuminate\Http\Request;
 
 use Illuminate\Http\Response;
@@ -100,9 +101,14 @@ class UserController extends Controller
 
         // Get avatar from gravatar and save
         if (!config('services.disable_services')) {
-            $avatar = \Images::saveUserGravatar($user);
-            $user->avatar()->associate($avatar);
-            $user->save();
+            try {
+                $avatar = \Images::saveUserGravatar($user);
+                $user->avatar()->associate($avatar);
+                $user->save();
+            } catch (Exception $e) {
+                \Log::error('Failed to save user gravatar image');
+            }
+
         }
 
         return redirect('/settings/users');
index bd310d73de62211744e93bd501150b012dabc66b..64d9bb9acb6494ebf3c0db1b6e884e34b9d86d99 100644 (file)
@@ -38,11 +38,12 @@ class ConfirmEmail extends Notification
      */
     public function toMail($notifiable)
     {
+        $appName = ['appName' => setting('app-name')];
         return (new MailMessage)
-                    ->subject('Confirm your email on ' . session('app-name'))
-                    ->greeting('Thanks for joining ' . setting('app-name') . '!')
-                    ->line('Please confirm your email address by clicking the button below:')
-                    ->action('Confirm Email', baseUrl('/register/confirm/' . $this->token));
+                    ->subject(trans('auth.email_confirm_subject', $appName))
+                    ->greeting(trans('auth.email_confirm_greeting', $appName))
+                    ->line(trans('auth.email_confirm_text'))
+                    ->action(trans('auth.email_confirm_action'), baseUrl('/register/confirm/' . $this->token));
     }
 
 }
index 0926f630471c24e1583b937e91ce74f2414d5da9..127db9fb59c482aab05198277558bf7b6abdcac6 100644 (file)
@@ -2,6 +2,7 @@
 
 use BookStack\Role;
 use BookStack\User;
+use Exception;
 use Setting;
 
 class UserRepo
@@ -84,9 +85,14 @@ class UserRepo
 
         // Get avatar from gravatar and save
         if (!config('services.disable_services')) {
-            $avatar = \Images::saveUserGravatar($user);
-            $user->avatar()->associate($avatar);
-            $user->save();
+            try {
+                $avatar = \Images::saveUserGravatar($user);
+                $user->avatar()->associate($avatar);
+                $user->save();
+            } catch (Exception $e) {
+                $user->save();
+                \Log::error('Failed to save user gravatar image');
+            }
         }
 
         return $user;
index 4401cb230a8b4105ba5458be1e4e88f596803ccb..aa1375487cd943f26afee06a8500c90cc4cb52d1 100644 (file)
@@ -213,7 +213,7 @@ class ImageService
     public function saveUserGravatar(User $user, $size = 500)
     {
         $emailHash = md5(strtolower(trim($user->email)));
-        $url = 'http://www.gravatar.com/avatar/' . $emailHash . '?s=' . $size . '&d=identicon';
+        $url = 'https://www.gravatar.com/avatar/' . $emailHash . '?s=' . $size . '&d=identicon';
         $imageName = str_replace(' ', '-', $user->name . '-gravatar.png');
         $image = $this->saveNewFromUrl($url, 'user', $imageName);
         $image->created_by = $user->id;
index cbf4ec7f5aa9e2b0abef663f399ae24a2b5fce21..ffdb1cf45cfc6ef8359f4d23ef3076449db01690 100644 (file)
@@ -12,4 +12,15 @@ return [
     */
     'failed' => 'These credentials do not match our records.',
     'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+
+    /**
+     * Email Confirmation Text
+     */
+    'email_confirm_subject' => 'Confirm your email on :appName',
+    'email_confirm_greeting' => 'Thanks for joining :appName!',
+    'email_confirm_text' => 'Please confirm your email address by clicking the button below:',
+    'email_confirm_action' => 'Confirm Email',
+    'email_confirm_send_error' => 'Email confirmation required but the system could not send the email. Contact the admin to ensure email is set up correctly.',
+    'email_confirm_success' => 'Your email has been confirmed!',
+    'email_confirm_resent' => 'Confirmation email resent, Please check your inbox.',
 ];
\ No newline at end of file