48 lines
1.5 KiB
PHP
48 lines
1.5 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\AuthorizationRequest;
|
|
use App\Services\AuthService;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Response;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\View\View;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
final class AuthController extends Controller
|
|
{
|
|
public function __construct(
|
|
private readonly AuthService $authService
|
|
) { }
|
|
|
|
public function login(): View
|
|
{
|
|
return view('public/login');
|
|
}
|
|
|
|
public function authorization(AuthorizationRequest $request)
|
|
{
|
|
$authorization = $request->getDto();
|
|
$result = $this->authService->authorization($authorization);
|
|
if (!$result->isSuccess()) {
|
|
if ($result->getCode() === Response::HTTP_UNAUTHORIZED) {
|
|
Log::warning('Unauthorized ' . $authorization->getEmail() . ' [' . $request->getClientIp() . ']');
|
|
}
|
|
return redirect()->route('login')->withInput()->withErrors($result->getMessage());
|
|
}
|
|
$request->session()->regenerate();
|
|
Log::notice('Logged in ' . $authorization->getEmail() . ' [' . $request->getClientIp() . ']');
|
|
return redirect()->route('home');
|
|
}
|
|
|
|
public function logout(Request $request): RedirectResponse
|
|
{
|
|
Auth::logout();
|
|
$request->session()->invalidate();
|
|
$request->session()->regenerateToken();
|
|
return redirect(route('login'));
|
|
}
|
|
}
|