*/
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;
/**
* 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\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)
{
* 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')) {
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);
+ 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
+}