diff --git a/Changelog b/Changelog index 3218272db..998f8f126 100755 --- a/Changelog +++ b/Changelog @@ -1,4 +1,5 @@ 2018-11-03 DariusIII + * Chg: Update Registration and Login controllers * Chg: Update symfony components 2018-11-02 DariusIII * Chg: Update removeCrapReleases message in TmuxRun class diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 836041cb1..459b3dbe2 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -8,6 +8,7 @@ use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use Illuminate\Foundation\Auth\AuthenticatesUsers; +use Illuminate\Support\Facades\Validator; class LoginController extends Controller { @@ -43,50 +44,55 @@ class LoginController extends Controller /** * @param \Illuminate\Http\Request $request - * @return $this|\Illuminate\Http\RedirectResponse + * @return \Illuminate\Http\RedirectResponse + * @throws \Illuminate\Validation\ValidationException */ public function login(Request $request) { - $this->validate($request, [ - 'username' => 'required', - 'password' => 'required', + $validator = Validator::make($request->all(), [ + 'username' => ['required'], + 'password' => ['required'], ]); - $error = ''; $login_type = filter_var($request->input('username'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username'; $request->merge([ $login_type => $request->input('username'), ]); - $user = User::getByUsername($request->input('username')); - if ($user === null) { - $user = User::getByEmail($request->input('username')); - } - - if ($user !== null && ((env('FIREWALL_ENABLED') === true && \Firewall::isBlacklisted($user->host) === false) || env('FIREWALL_ENABLED') === false)) { - if (env('NOCAPTCHA_ENABLED') === true && (! empty(env('NOCAPTCHA_SECRET')) && ! empty(env('NOCAPTCHA_SITEKEY')))) { - $this->validate($request, [ - 'g-recaptcha-response' => 'required|captcha', - ]); - } - - $rememberMe = $request->has('rememberme') && $request->input('rememberme') === 'on'; - - if ($user->isVerified() === false || $user->isPendingVerification()) { - return $this->showLoginForm('You have not verified your email address!'); - } - - if (Auth::attempt($request->only($login_type, 'password'), $rememberMe)) { - User::updateSiteAccessed($user->id, (int) Settings::settingValue('..storeuserips') === 1 ? $request->getClientIp() : ''); - - return redirect()->intended($this->redirectPath()); - } - - $error = 'Username/email and password combination used does not match our records!'; - } else { - $error = 'Username or email used do not match our records!'; + if ($validator->passes()) { + $user = User::getByUsername($request->input('username')); + if ($user === null) { + $user = User::getByEmail($request->input('username')); + } + + if ($user !== null && ((env('FIREWALL_ENABLED') === true && \Firewall::isBlacklisted($user->host) === false) || env('FIREWALL_ENABLED') === false)) { + if (env('NOCAPTCHA_ENABLED') === true && (! empty(env('NOCAPTCHA_SECRET')) && ! empty(env('NOCAPTCHA_SITEKEY')))) { + $this->validate($request, [ + 'g-recaptcha-response' => ['required', 'captcha'], + ]); + } + + $rememberMe = $request->has('rememberme') && $request->input('rememberme') === 'on'; + + if ($user->isVerified() === false || $user->isPendingVerification()) { + return $this->showLoginForm('You have not verified your email address!'); + } + + if (Auth::attempt($request->only($login_type, 'password'), $rememberMe)) { + User::updateSiteAccessed($user->id, (int) Settings::settingValue('..storeuserips') === 1 ? $request->getClientIp() : ''); + + return redirect()->intended($this->redirectPath()); + } + + $error = 'Username/email and password combination used does not match our records!'; + } else { + $error = 'Username or email used do not match our records!'; + } + + return $this->showLoginForm($error); } + $error = implode('', array_collapse($validator->errors()->toArray())); return $this->showLoginForm($error); } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 6e44707a5..aba1e4529 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -89,19 +89,20 @@ class RegisterController extends Controller $showRegister = 1; $validator = Validator::make($request->all(), [ - 'username' => 'required|string|min:5|max:255|unique:users', - 'email' => 'required|string|email|max:255|unique:users|indisposable', - 'password' => 'required|string|min:8|confirmed|regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/', + 'username' => ['required', 'string', 'min:5', 'max:255', 'unique:users'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users', 'indisposable'], + 'password' => ['required', 'string', 'min:8', 'confirmed', 'regex:/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/'], ]); if (env('NOCAPTCHA_ENABLED') === true && (! empty(env('NOCAPTCHA_SECRET')) && ! empty(env('NOCAPTCHA_SITEKEY')))) { $this->validate($request, [ - 'g-recaptcha-response' => 'required|captcha', + 'g-recaptcha-response' => ['required', 'captcha'], ]); } if ($validator->fails()) { - return $this->showRegistrationForm($validator->errors()->first()); + $error = implode('', array_collapse($validator->errors()->toArray())); + return $this->showRegistrationForm($error); } if (Settings::settingValue('..registerstatus') === Settings::REGISTER_STATUS_INVITE && (! $request->has('invitecode') || empty($request->input('invitecode')))) {