. */ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Auth; use FireflyIII\Events\RegisteredUser; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Support\Http\Controllers\CreateStuff; use FireflyIII\User; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\View\Factory; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\Validation\ValidationException; use Illuminate\View\View; use Log; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; /** * Class RegisterController * * This controller handles the registration of new users as well as their * validation and creation. By default this controller uses a trait to * provide this functionality without requiring any additional code. * * @codeCoverageIgnore */ class RegisterController extends Controller { use RegistersUsers, CreateStuff; /** * Where to redirect users after registration. * * @var string */ protected $redirectTo = '/home'; /** * Create a new controller instance. */ public function __construct() { parent::__construct(); $this->middleware('guest'); $loginProvider = config('firefly.login_provider'); $authGuard = config('firefly.authentication_guard'); if ('eloquent' !== $loginProvider || 'web' !== $authGuard) { throw new FireflyException('Using external identity provider. Cannot continue.'); } } /** * Handle a registration request for the application. * * @param Request $request * * @return Application|Redirector|RedirectResponse * @throws FireflyException * @throws ValidationException */ public function register(Request $request) { $allowRegistration = $this->allowedToRegister(); if (false === $allowRegistration) { throw new FireflyException('Registration is currently not available :('); } $this->validator($request->all())->validate(); $user = $this->createUser($request->all()); Log::info(sprintf('Registered new user %s', $user->email)); event(new RegisteredUser($user)); $this->guard()->login($user); session()->flash('success', (string) trans('firefly.registered')); $this->registered($request, $user); return redirect($this->redirectPath()); } /** * @return bool */ protected function allowedToRegister(): bool { // is allowed to register? $allowRegistration = true; try { $singleUserMode = app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; } catch (ContainerExceptionInterface|NotFoundExceptionInterface $e) { $singleUserMode = true; } $userCount = User::count(); $guard = config('auth.defaults.guard'); if (true === $singleUserMode && $userCount > 0 && 'web' === $guard) { $allowRegistration = false; } if ('web' !== $guard) { $allowRegistration = false; } return $allowRegistration; } /** * Show the application registration form. * * @param Request $request * * @return Factory|View * @throws FireflyException */ public function showRegistrationForm(Request $request) { $isDemoSite = app('fireflyconfig')->get('is_demo_site', config('firefly.configuration.is_demo_site'))->data; $pageTitle = (string) trans('firefly.register_page_title'); $allowRegistration = $this->allowedToRegister(); if (false === $allowRegistration) { $message = 'Registration is currently not available.'; return view('error', compact('message')); } $email = $request->old('email'); return view('auth.register', compact('isDemoSite', 'email', 'pageTitle')); } }