Made registration gravatar/email requests fail gracefully

* Extracted any email confirmation text into langs.
* Added new notification on confirmation email send fail.

Closes #187
This commit is contained in:
Dan Brown 2016-09-17 21:33:55 +01:00
parent 9dc9724e15
commit e0235fda8b
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
6 changed files with 53 additions and 15 deletions

View File

@ -8,6 +8,7 @@ use BookStack\Repos\UserRepo;
use BookStack\Services\EmailConfirmationService; use BookStack\Services\EmailConfirmationService;
use BookStack\Services\SocialAuthService; use BookStack\Services\SocialAuthService;
use BookStack\User; use BookStack\User;
use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Validator; use Validator;
@ -56,7 +57,6 @@ class RegisterController extends Controller
$this->userRepo = $userRepo; $this->userRepo = $userRepo;
$this->redirectTo = baseUrl('/'); $this->redirectTo = baseUrl('/');
$this->redirectPath = baseUrl('/'); $this->redirectPath = baseUrl('/');
$this->username = config('auth.method') === 'standard' ? 'email' : 'username';
parent::__construct(); parent::__construct();
} }
@ -158,7 +158,13 @@ class RegisterController extends Controller
if (setting('registration-confirmation') || setting('registration-restrict')) { if (setting('registration-confirmation') || setting('registration-restrict')) {
$newUser->save(); $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'); return redirect('/register/confirm');
} }
@ -189,7 +195,7 @@ class RegisterController extends Controller
$user->email_confirmed = true; $user->email_confirmed = true;
$user->save(); $user->save();
auth()->login($user); auth()->login($user);
session()->flash('success', 'Your email has been confirmed!'); session()->flash('success', trans('auth.email_confirm_success'));
$this->emailConfirmationService->deleteConfirmationsByUser($user); $this->emailConfirmationService->deleteConfirmationsByUser($user);
return redirect($this->redirectPath); return redirect($this->redirectPath);
} }
@ -215,8 +221,16 @@ class RegisterController extends Controller
'email' => 'required|email|exists:users,email' 'email' => 'required|email|exists:users,email'
]); ]);
$user = $this->userRepo->getByEmail($request->get('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); $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'); return redirect('/register/confirm');
} }

View File

@ -3,6 +3,7 @@
namespace BookStack\Http\Controllers; namespace BookStack\Http\Controllers;
use BookStack\Activity; use BookStack\Activity;
use Exception;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
@ -100,9 +101,14 @@ class UserController extends Controller
// Get avatar from gravatar and save // Get avatar from gravatar and save
if (!config('services.disable_services')) { if (!config('services.disable_services')) {
$avatar = \Images::saveUserGravatar($user); try {
$user->avatar()->associate($avatar); $avatar = \Images::saveUserGravatar($user);
$user->save(); $user->avatar()->associate($avatar);
$user->save();
} catch (Exception $e) {
\Log::error('Failed to save user gravatar image');
}
} }
return redirect('/settings/users'); return redirect('/settings/users');

View File

@ -38,11 +38,12 @@ class ConfirmEmail extends Notification
*/ */
public function toMail($notifiable) public function toMail($notifiable)
{ {
$appName = ['appName' => setting('app-name')];
return (new MailMessage) return (new MailMessage)
->subject('Confirm your email on ' . session('app-name')) ->subject(trans('auth.email_confirm_subject', $appName))
->greeting('Thanks for joining ' . setting('app-name') . '!') ->greeting(trans('auth.email_confirm_greeting', $appName))
->line('Please confirm your email address by clicking the button below:') ->line(trans('auth.email_confirm_text'))
->action('Confirm Email', baseUrl('/register/confirm/' . $this->token)); ->action(trans('auth.email_confirm_action'), baseUrl('/register/confirm/' . $this->token));
} }
} }

View File

@ -2,6 +2,7 @@
use BookStack\Role; use BookStack\Role;
use BookStack\User; use BookStack\User;
use Exception;
use Setting; use Setting;
class UserRepo class UserRepo
@ -84,9 +85,14 @@ class UserRepo
// Get avatar from gravatar and save // Get avatar from gravatar and save
if (!config('services.disable_services')) { if (!config('services.disable_services')) {
$avatar = \Images::saveUserGravatar($user); try {
$user->avatar()->associate($avatar); $avatar = \Images::saveUserGravatar($user);
$user->save(); $user->avatar()->associate($avatar);
$user->save();
} catch (Exception $e) {
$user->save();
\Log::error('Failed to save user gravatar image');
}
} }
return $user; return $user;

View File

@ -213,7 +213,7 @@ class ImageService
public function saveUserGravatar(User $user, $size = 500) public function saveUserGravatar(User $user, $size = 500)
{ {
$emailHash = md5(strtolower(trim($user->email))); $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'); $imageName = str_replace(' ', '-', $user->name . '-gravatar.png');
$image = $this->saveNewFromUrl($url, 'user', $imageName); $image = $this->saveNewFromUrl($url, 'user', $imageName);
$image->created_by = $user->id; $image->created_by = $user->id;

View File

@ -12,4 +12,15 @@ return [
*/ */
'failed' => 'These credentials do not match our records.', 'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', '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.',
]; ];