. */ /** @noinspection PhpDynamicAsStaticMethodCallInspection */ 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\Support\Http\Controllers\RequestInformation; use FireflyIII\User; use Illuminate\Contracts\View\Factory; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; use Illuminate\View\View; use Log; /** * 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, RequestInformation, 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 Factory|RedirectResponse|Redirector|View */ public function register(Request $request) { // is allowed to? $allowRegistration = true; $loginProvider = config('firefly.login_provider'); $singleUserMode = app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; $userCount = User::count(); if (true === $singleUserMode && $userCount > 0 && 'eloquent' === $loginProvider) { $allowRegistration = false; } if ('eloquent' !== $loginProvider) { $allowRegistration = false; } if (false === $allowRegistration) { $message = 'Registration is currently not available.'; return view('error', compact('message')); } $this->validator($request->all())->validate(); $user = $this->createUser($request->all()); Log::info(sprintf('Registered new user %s', $user->email)); event(new RegisteredUser($user, $request->ip())); $this->guard()->login($user); session()->flash('success', (string) trans('firefly.registered')); $this->registered($request, $user); // telemetry app('telemetry')->feature('system.users.count', (string)User::count()); return redirect($this->redirectPath()); } /** * Show the application registration form. * * @param Request $request * * @return Factory|View */ public function showRegistrationForm(Request $request) { $allowRegistration = true; $loginProvider = config('firefly.login_provider'); $isDemoSite = app('fireflyconfig')->get('is_demo_site', config('firefly.configuration.is_demo_site'))->data; $singleUserMode = app('fireflyconfig')->get('single_user_mode', config('firefly.configuration.single_user_mode'))->data; $userCount = User::count(); $pageTitle = (string) trans('firefly.register_page_title'); if (true === $isDemoSite) { $allowRegistration = false; } if (true === $singleUserMode && $userCount > 0 && 'eloquent' === $loginProvider) { $allowRegistration = false; } if ('eloquent' !== $loginProvider) { $allowRegistration = false; } 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')); } }