diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 44bcf8de..1164f84c 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -227,6 +227,15 @@ class AuthController extends Controller return json(trans('auth.reset.success'), 0); } + public function fillEmail(Request $request) + { + $email = $this->validate($request, ['email' => 'required|email|unique:users'])['email']; + $user = $request->user(); + $user->email = $email; + $user->save(); + return redirect('/user'); + } + public function verify($uid) { if (! option('require_verification')) { diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 158ee64a..203848d9 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -17,6 +17,7 @@ class Kernel extends HttpKernel \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\TrimStrings::class, \App\Http\Middleware\ConvertEmptyStringsToNull::class, + \App\Http\Middleware\DetectLanguagePrefer::class, ]; /** @@ -26,12 +27,12 @@ class Kernel extends HttpKernel */ protected $middlewareGroups = [ 'web' => [ - \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \App\Http\Middleware\DetectLanguagePrefer::class, \App\Http\Middleware\ForbiddenIE::class, + \Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class ], 'api' => [ @@ -39,7 +40,12 @@ class Kernel extends HttpKernel 'bindings', ], - 'static' => [], + 'authorize' => [ + 'auth:web', + \App\Http\Middleware\RejectBannedUser::class, + \App\Http\Middleware\EnsureEmailFilled::class, + \App\Http\Middleware\FireUserAuthenticated::class, + ], ]; /** @@ -50,9 +56,7 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ - 'csrf' => \App\Http\Middleware\VerifyCsrfToken::class, - 'auth' => \App\Http\Middleware\CheckAuthenticated::class, - 'auth.jwt' => \Tymon\JWTAuth\Http\Middleware\Authenticate::class, + 'auth' => \App\Http\Middleware\Authenticate::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'verified' => \App\Http\Middleware\CheckUserVerified::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 00000000..4a2ca9e9 --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,19 @@ +expectsJson()) { + session([ + 'last_requested_path' => $request->path(), + 'msg' => trans('auth.check.anonymous'), + ]); + return '/auth/login'; + } + } +} diff --git a/app/Http/Middleware/CheckAuthenticated.php b/app/Http/Middleware/CheckAuthenticated.php deleted file mode 100644 index cb596158..00000000 --- a/app/Http/Middleware/CheckAuthenticated.php +++ /dev/null @@ -1,68 +0,0 @@ -permission == User::BANNED) { - Auth::logout(); - - abort(403, trans('auth.check.banned')); - } - - // Ask for filling email - if ($user->email == '') { - return $this->askForFillingEmail($request, $next); - } - - event(new UserAuthenticated($user)); - - return $next($request); - } else { - $this->flashLastRequestedPath(); - - return redirect('auth/login')->with('msg', trans('auth.check.anonymous')); - } - } - - public function askForFillingEmail($request, Closure $next) - { - $user = Auth::user(); - - if (isset($request->email)) { - if (filter_var($request->email, FILTER_VALIDATE_EMAIL)) { - if (User::where('email', $request->email)->get()->isEmpty()) { - $user->email = $request->input('email'); - $user->save(); - - return $next($request); - } else { - return response()->view('auth.bind', ['msg' => trans('auth.bind.registered')]); - } - } else { - return response()->view('auth.bind', ['msg' => trans('auth.validation.email')]); - } - } - - return response()->view('auth.bind'); - } - - protected function flashLastRequestedPath($path = null) - { - $path = $path ?: app('request')->path(); - - return session(['last_requested_path' => $path]); - } -} diff --git a/app/Http/Middleware/DetectLanguagePrefer.php b/app/Http/Middleware/DetectLanguagePrefer.php index 866e14c6..1a325b74 100644 --- a/app/Http/Middleware/DetectLanguagePrefer.php +++ b/app/Http/Middleware/DetectLanguagePrefer.php @@ -10,25 +10,13 @@ class DetectLanguagePrefer { public function handle($request, \Closure $next) { - $response = $next($request); - - if ($response instanceof Response) { - $response->cookie('locale', config('app.locale')); - } - - return $response; - } - - public function detect(Request $request) - { - $locale = $request->input('lang') ?: ($request->cookie('locale') ?: $request->getPreferredLanguage()); - - // If current locale is an alias of other locale + $locale = $request->input('lang') ?? session('locale') ?? $request->getPreferredLanguage(); if (($info = Arr::get(config('locales'), $locale)) && ($alias = Arr::get($info, 'alias'))) { $locale = $alias; } - app()->setLocale($locale); - session(['locale' => config('app.locale')]); + session(['locale' => $locale]); + + return $next($request); } } diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index 2f46ffe1..00000000 --- a/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,17 +0,0 @@ -user()->email != '' && $request->is('auth/bind')) { + return redirect('/user'); + } elseif ($request->user()->email == '' && ! $request->is('auth/bind')) { + return redirect('/auth/bind'); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/FireUserAuthenticated.php b/app/Http/Middleware/FireUserAuthenticated.php new file mode 100644 index 00000000..0e8291b2 --- /dev/null +++ b/app/Http/Middleware/FireUserAuthenticated.php @@ -0,0 +1,16 @@ +check()) { + event(new \App\Events\UserAuthenticated($request->user())); + } + return $next($request); + } +} diff --git a/app/Http/Middleware/RejectBannedUser.php b/app/Http/Middleware/RejectBannedUser.php new file mode 100644 index 00000000..91043d01 --- /dev/null +++ b/app/Http/Middleware/RejectBannedUser.php @@ -0,0 +1,23 @@ +user()->permission == User::BANNED) { + if ($request->expectsJson()) { + $response = json(trans('auth.check.banned'), -1); + $response->setStatusCode(403); + return $response; + } else { + abort(403, trans('auth.check.banned')); + } + } + return $next($request); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php deleted file mode 100644 index 0c13b854..00000000 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ /dev/null @@ -1,17 +0,0 @@ -group([ - 'middleware' => ['web', 'csrf'], + 'middleware' => ['web'], 'namespace' => $this->namespace, ], function ($router) { require base_path('routes/web.php'); @@ -93,10 +93,7 @@ class RouteServiceProvider extends ServiceProvider */ protected function mapStaticRoutes(Router $router) { - $router->group([ - 'middleware' => 'static', - 'namespace' => $this->namespace, - ], function ($router) { + $router->group(['namespace' => $this->namespace], function ($router) { require base_path('routes/static.php'); }); } diff --git a/app/Providers/RuntimeCheckServiceProvider.php b/app/Providers/RuntimeCheckServiceProvider.php index 9a3794f5..9fec9efe 100644 --- a/app/Providers/RuntimeCheckServiceProvider.php +++ b/app/Providers/RuntimeCheckServiceProvider.php @@ -16,9 +16,6 @@ class RuntimeCheckServiceProvider extends ServiceProvider */ public function boot(Request $request) { - // Detect current locale - $this->app->call('App\Http\Middleware\DetectLanguagePrefer@detect'); - // Skip the installation check when in setup or under CLI if ($request->is('setup*') || $this->app->runningInConsole()) { return; diff --git a/resources/views/auth/bind.blade.php b/resources/views/auth/bind.blade.php index 65cbb789..b2febf8a 100644 --- a/resources/views/auth/bind.blade.php +++ b/resources/views/auth/bind.blade.php @@ -12,7 +12,7 @@
@lang('auth.bind.message')
-