diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 2e7986c29e..ff7afe7528 100755 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -97,7 +97,7 @@ class Handler extends ExceptionHandler // create job that will mail. $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; - $job = new MailError($userData, env('SITE_OWNER'), $ip, $data); + $job = new MailError($userData, env('SITE_OWNER', ''), $ip, $data); dispatch($job); } diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/AuthController.php index 8f0100711e..59f6d347fd 100644 --- a/app/Http/Controllers/Auth/AuthController.php +++ b/app/Http/Controllers/Auth/AuthController.php @@ -56,84 +56,7 @@ class AuthController extends Controller parent::__construct(); } - /** - * Handle a registration request for the application. - * - * @param \Illuminate\Http\Request $request - * - * @return \Illuminate\Http\Response - * @throws FireflyException - * @throws \Illuminate\Foundation\Validation\ValidationException - */ - public function register(Request $request) - { - // is allowed to? - $singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data; - $userCount = User::count(); - if ($singleUserMode === true && $userCount > 0) { - $message = 'Registration is currently not available.'; - return view('error', compact('message')); - } - - - $validator = $this->validator($request->all()); - - if ($validator->fails()) { - $this->throwValidationException( - $request, $validator - ); - } - - $data = $request->all(); - $data['password'] = bcrypt($data['password']); - - // is user email domain blocked? - if ($this->isBlockedDomain($data['email'])) { - $validator->getMessageBag()->add('email', (string)trans('validation.invalid_domain')); - - $this->reportBlockedDomainRegistrationAttempt($data['email'], $request->ip()); - - $this->throwValidationException( - $request, $validator - ); - } - - - $user = $this->create($request->all()); - - // trigger user registration event: - event(new UserRegistration($user, $request->ip())); - - Auth::login($user); - - Session::flash('success', strval(trans('firefly.registered'))); - Session::flash('gaEventCategory', 'user'); - Session::flash('gaEventAction', 'new-registration'); - - return redirect($this->redirectPath()); - } - - /** - * Show the application registration form. - * - * @return \Illuminate\Http\Response - */ - public function showRegistrationForm() - { - $showDemoWarning = env('SHOW_DEMO_WARNING', false); - - // is allowed to? - $singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data; - $userCount = User::count(); - if ($singleUserMode === true && $userCount > 0) { - $message = 'Registration is currently not available.'; - - return view('error', compact('message')); - } - - return view('auth.register', compact('showDemoWarning')); - } /** * Create a new user instance after a valid registration. @@ -152,30 +75,9 @@ class AuthController extends Controller ); } - /** - * @return array - */ - protected function getBlockedDomains() - { - return FireflyConfig::get('blocked-domains', [])->data; - } - /** - * @param string $email - * - * @return bool - */ - protected function isBlockedDomain(string $email) - { - $parts = explode('@', $email); - $blocked = $this->getBlockedDomains(); - if (isset($parts[1]) && in_array($parts[1], $blocked)) { - return true; - } - return false; - } @@ -196,31 +98,5 @@ class AuthController extends Controller ); } - /** - * Send a message home about a blocked domain and the address attempted to register. - * - * @param string $registrationMail - * @param string $ipAddress - */ - private function reportBlockedDomainRegistrationAttempt(string $registrationMail, string $ipAddress) - { - try { - $email = env('SITE_OWNER', false); - $parts = explode('@', $registrationMail); - $domain = $parts[1]; - $fields = [ - 'email_address' => $registrationMail, - 'blocked_domain' => $domain, - 'ip' => $ipAddress, - ]; - Mail::send( - ['emails.blocked-registration-html', 'emails.blocked-registration'], $fields, function (Message $message) use ($email, $domain) { - $message->to($email, $email)->subject('Blocked a registration attempt with domain ' . $domain . '.'); - } - ); - } catch (Swift_TransportException $e) { - Log::error($e->getMessage()); - } - } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 60e94067a6..fd82eb0588 100755 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -2,11 +2,26 @@ namespace FireflyIII\Http\Controllers\Auth; -use FireflyIII\User; -use Validator; +use Auth; +use Config; +use FireflyIII\Events\UserRegistration; use FireflyIII\Http\Controllers\Controller; +use FireflyIII\Support\Facades\FireflyConfig; +use FireflyIII\User; use Illuminate\Foundation\Auth\RegistersUsers; +use Illuminate\Http\Request; +use Illuminate\Mail\Message; +use Log; +use Mail; +use Session; +use Swift_TransportException; +use Validator; +/** + * Class RegisterController + * + * @package FireflyIII\Http\Controllers\Auth + */ class RegisterController extends Controller { /* @@ -31,41 +46,170 @@ class RegisterController extends Controller /** * Create a new controller instance. - * - * @return void */ public function __construct() { + parent::__construct(); $this->middleware('guest'); } /** - * Get a validator for an incoming registration request. + * @param Request $request * - * @param array $data - * @return \Illuminate\Contracts\Validation\Validator + * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View */ - protected function validator(array $data) + public function register(Request $request) { - return Validator::make($data, [ - 'name' => 'required|max:255', - 'email' => 'required|email|max:255|unique:users', - 'password' => 'required|min:6|confirmed', - ]); + // is allowed to? + $singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data; + $userCount = User::count(); + if ($singleUserMode === true && $userCount > 0) { + $message = 'Registration is currently not available.'; + + return view('error', compact('message')); + } + + + $validator = $this->validator($request->all()); + + if ($validator->fails()) { + $this->throwValidationException($request, $validator); + } + + $data = $request->all(); + $data['password'] = bcrypt($data['password']); + + // is user email domain blocked? + if ($this->isBlockedDomain($data['email'])) { + $validator->getMessageBag()->add('email', (string)trans('validation.invalid_domain')); + + $this->reportBlockedDomainRegistrationAttempt($data['email'], $request->ip()); + + $this->throwValidationException($request, $validator); + } + + + $user = $this->create($request->all()); + + // trigger user registration event: + event(new UserRegistration($user, $request->ip())); + + Auth::login($user); + + Session::flash('success', strval(trans('firefly.registered'))); + Session::flash('gaEventCategory', 'user'); + Session::flash('gaEventAction', 'new-registration'); + + return redirect($this->redirectPath()); + } + + /** + * OLD + * Show the application registration form. + * + * @return \Illuminate\Http\Response + */ + public function showRegistrationForm() + { + // TODO move to FireflyConfig + $showDemoWarning = env('SHOW_DEMO_WARNING', false); + + // is allowed to? + $singleUserMode = FireflyConfig::get('single_user_mode', Config::get('firefly.configuration.single_user_mode'))->data; + $userCount = User::count(); + if ($singleUserMode === true && $userCount > 0) { + $message = 'Registration is currently not available.'; + + return view('error', compact('message')); + } + + return view('auth.register', compact('showDemoWarning')); } /** * Create a new user instance after a valid registration. * - * @param array $data + * @param array $data + * * @return User */ protected function create(array $data) { - return User::create([ - 'name' => $data['name'], - 'email' => $data['email'], - 'password' => bcrypt($data['password']), - ]); + return User::create( + [ + 'email' => $data['email'], + 'password' => bcrypt($data['password']), + ] + ); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make( + $data, [ + 'email' => 'required|email|max:255|unique:users', + 'password' => 'required|min:6|confirmed', + ] + ); + } + + /** + * @return array + */ + private function getBlockedDomains() + { + return FireflyConfig::get('blocked-domains', [])->data; + } + + /** + * @param string $email + * + * @return bool + */ + private function isBlockedDomain(string $email) + { + $parts = explode('@', $email); + $blocked = $this->getBlockedDomains(); + + if (isset($parts[1]) && in_array($parts[1], $blocked)) { + return true; + } + + return false; + } + + /** + * Send a message home about a blocked domain and the address attempted to register. + * + * @param string $registrationMail + * @param string $ipAddress + */ + private function reportBlockedDomainRegistrationAttempt(string $registrationMail, string $ipAddress) + { + try { + $email = env('SITE_OWNER', false); + $parts = explode('@', $registrationMail); + $domain = $parts[1]; + $fields = [ + 'email_address' => $registrationMail, + 'blocked_domain' => $domain, + 'ip' => $ipAddress, + ]; + + Mail::send( + ['emails.blocked-registration-html', 'emails.blocked-registration'], $fields, function (Message $message) use ($email, $domain) { + $message->to($email, $email)->subject('Blocked a registration attempt with domain ' . $domain . '.'); + } + ); + } catch (Swift_TransportException $e) { + Log::error($e->getMessage()); + } } } diff --git a/routes/web.php b/routes/web.php index 3df871acdb..c7b01dbd91 100755 --- a/routes/web.php +++ b/routes/web.php @@ -21,8 +21,8 @@ Route::group( Route::post('login', 'Auth\LoginController@login'); # // Registration Routes... - Route::get('/register', ['uses' => 'Auth\RegisterController@showRegistrationForm', 'as' => 'register']); - Route::post('/register', 'Auth\RegisterController@register'); + Route::get('/register', ['uses' => 'Auth\RegisterController@showRegistrationForm', 'as' => 'register']); # + Route::post('/register', 'Auth\RegisterController@register'); # Route::get('/password/reset', 'Auth\PasswordController@getReset');