+ /**
+ * Handle a registration request for the application.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @return \Illuminate\Http\Response
+ * @throws UserRegistrationException
+ */
+ public function postRegister(Request $request)
+ {
+ $this->checkRegistrationAllowed();
+ $validator = $this->validator($request->all());
+
+ if ($validator->fails()) {
+ $this->throwValidationException(
+ $request, $validator
+ );
+ }
+
+ if(\Setting::get('registration-restrict')) {
+ $restrictedEmailDomains = explode(',', str_replace(' ', '', \Setting::get('registration-restrict')));
+ $userEmailDomain = $domain = substr(strrchr($request->get('email'), "@"), 1);
+ if(!in_array($userEmailDomain, $restrictedEmailDomains)) {
+ throw new UserRegistrationException('That email domain does not have access to this application', '/register');
+ }
+ }
+
+ $newUser = $this->create($request->all());
+ $newUser->attachRoleId(\Setting::get('registration-role'), 1);
+
+ if(\Setting::get('registration-confirmation') || \Setting::get('registration-restrict')) {
+ $newUser->email_confirmed = false;
+ $newUser->save();
+ $this->emailConfirmationService->sendConfirmation($newUser);
+ return redirect('/register/confirm');
+ }
+
+ auth()->login($newUser);
+ return redirect($this->redirectPath());
+ }
+
+ /**
+ * Show the page to tell the user to check thier email
+ * and confirm their address.
+ */
+ public function getRegisterConfirmation()
+ {
+ return view('auth/register-confirm');
+ }
+
+ /**
+ * Confirms an email via a token and logs the user into the system.
+ * @param $token
+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
+ * @throws UserRegistrationException
+ */
+ public function confirmEmail($token)
+ {
+ $confirmation = $this->emailConfirmationService->getEmailConfirmationFromToken($token);
+ $user = $confirmation->user;
+ $user->email_confirmed = true;
+ $user->save();
+ auth()->login($confirmation->user);
+ session()->flash('success', 'Your email has been confirmed!');
+ $this->emailConfirmationService->deleteConfirmationsByUser($user);
+ return redirect($this->redirectPath);
+ }
+
+ /**
+ * Shows a notice that a user's email address has not been confirmed,
+ * Also has the option to re-send the confirmation email.
+ * @return \Illuminate\View\View
+ */
+ public function showAwaitingConfirmation()
+ {
+ return view('auth/user-unconfirmed');
+ }
+
+ /**
+ * Resend the confirmation email
+ * @param Request $request
+ * @return \Illuminate\View\View
+ */
+ public function resendConfirmation(Request $request)
+ {
+ $this->validate($request, [
+ 'email' => 'required|email|exists:users,email'
+ ]);
+ $user = $this->userRepo->getByEmail($request->get('email'));
+ $this->emailConfirmationService->sendConfirmation($user);
+ \Session::flash('success', 'Confirmation email resent, Please check your inbox.');
+ return redirect('/register/confirm');
+ }
+