namespace BookStack\Http\Controllers\Auth;
use BookStack\Exceptions\ConfirmationEmailException;
+use BookStack\Exceptions\SocialSignInException;
use BookStack\Exceptions\UserRegistrationException;
use BookStack\Repos\UserRepo;
use BookStack\Services\EmailConfirmationService;
use BookStack\Services\SocialAuthService;
+use BookStack\SocialAccount;
use BookStack\User;
use Exception;
use Illuminate\Http\Request;
*/
public function __construct(SocialAuthService $socialAuthService, EmailConfirmationService $emailConfirmationService, UserRepo $userRepo)
{
- $this->middleware('guest')->except(['socialCallback', 'detachSocialAccount']);
+ $this->middleware('guest')->only(['getRegister', 'postRegister', 'socialRegister']);
$this->socialAuthService = $socialAuthService;
$this->emailConfirmationService = $emailConfirmationService;
$this->userRepo = $userRepo;
protected function checkRegistrationAllowed()
{
if (!setting('registration-enabled')) {
- throw new UserRegistrationException('Registrations are currently disabled.', '/login');
+ throw new UserRegistrationException(trans('auth.registrations_disabled'), '/login');
}
}
/**
* Show the application registration form.
* @return Response
+ * @throws UserRegistrationException
*/
public function getRegister()
{
/**
* Handle a registration request for the application.
* @param Request|\Illuminate\Http\Request $request
- * @return Response
+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws UserRegistrationException
- * @throws \Illuminate\Foundation\Validation\ValidationException
*/
public function postRegister(Request $request)
{
$this->checkRegistrationAllowed();
- $validator = $this->validator($request->all());
-
- if ($validator->fails()) {
- $this->throwValidationException(
- $request, $validator
- );
- }
+ $this->validator($request->all())->validate();
$userData = $request->all();
return $this->registerUser($userData);
* @param bool|false|SocialAccount $socialAccount
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws UserRegistrationException
- * @throws ConfirmationEmailException
*/
protected function registerUser(array $userData, $socialAccount = false)
{
$restrictedEmailDomains = explode(',', str_replace(' ', '', setting('registration-restrict')));
$userEmailDomain = $domain = substr(strrchr($userData['email'], "@"), 1);
if (!in_array($userEmailDomain, $restrictedEmailDomains)) {
- throw new UserRegistrationException('That email domain does not have access to this application', '/register');
+ throw new UserRegistrationException(trans('auth.registration_email_domain_invalid'), '/register');
}
}
}
auth()->login($newUser);
- session()->flash('success', 'Thanks for signing up! You are now registered and signed in.');
+ session()->flash('success', trans('auth.register_success'));
return redirect($this->redirectPath());
}
return redirect('/register/confirm');
}
- $this->emailConfirmationService->sendConfirmation($user);
session()->flash('success', trans('auth.email_confirm_resent'));
return redirect('/register/confirm');
}
* Redirect to the social site for authentication intended to register.
* @param $socialDriver
* @return mixed
+ * @throws UserRegistrationException
+ * @throws \BookStack\Exceptions\SocialDriverNotConfigured
*/
public function socialRegister($socialDriver)
{
/**
* The callback for social login services.
* @param $socialDriver
+ * @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws SocialSignInException
+ * @throws UserRegistrationException
+ * @throws \BookStack\Exceptions\SocialDriverNotConfigured
+ * @throws ConfirmationEmailException
*/
- public function socialCallback($socialDriver)
+ public function socialCallback($socialDriver, Request $request)
{
- if (session()->has('social-callback')) {
- $action = session()->pull('social-callback');
- if ($action == 'login') {
- return $this->socialAuthService->handleLoginCallback($socialDriver);
- } elseif ($action == 'register') {
- return $this->socialRegisterCallback($socialDriver);
- }
- } else {
- throw new SocialSignInException('No action defined', '/login');
+ if (!session()->has('social-callback')) {
+ throw new SocialSignInException(trans('errors.social_no_action_defined'), '/login');
+ }
+
+ // Check request for error information
+ if ($request->has('error') && $request->has('error_description')) {
+ throw new SocialSignInException(trans('errors.social_login_bad_response', [
+ 'socialAccount' => $socialDriver,
+ 'error' => $request->get('error_description'),
+ ]), '/login');
+ }
+
+ $action = session()->pull('social-callback');
+ if ($action == 'login') {
+ return $this->socialAuthService->handleLoginCallback($socialDriver);
+ }
+ if ($action == 'register') {
+ return $this->socialRegisterCallback($socialDriver);
}
return redirect()->back();
}
* @param $socialDriver
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws UserRegistrationException
+ * @throws \BookStack\Exceptions\SocialDriverNotConfigured
*/
protected function socialRegisterCallback($socialDriver)
{
];
return $this->registerUser($userData, $socialAccount);
}
-
-}
\ No newline at end of file
+}