mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-05-22 22:59:58 +08:00
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:
@ -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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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');
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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.',
|
||||||
];
|
];
|
Reference in New Issue
Block a user