mirror of
https://github.com/ceratic/MediaCollectorLibary.git
synced 2026-05-13 23:56:46 +02:00
first commit
This commit is contained in:
76
app/Controllers/AuthController.php
Normal file
76
app/Controllers/AuthController.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Controllers;
|
||||
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use App\Services\AuthService;
|
||||
use Slim\Views\Twig;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
private AuthService $auth;
|
||||
|
||||
public function __construct(AuthService $auth, Twig $view)
|
||||
{
|
||||
parent::__construct($view);
|
||||
$this->auth = $auth;
|
||||
}
|
||||
|
||||
public function showLogin(Request $request, Response $response, $args)
|
||||
{
|
||||
// If already logged in, redirect to dashboard
|
||||
if ($this->auth->isLoggedIn()) {
|
||||
return $response->withStatus(302)->withHeader('Location', '/');
|
||||
}
|
||||
|
||||
return $this->view->render($response, 'auth/login.twig', [
|
||||
'title' => 'Login',
|
||||
'csrf_token' => $this->auth->generateCSRFToken()
|
||||
]);
|
||||
}
|
||||
|
||||
public function login(Request $request, Response $response, $args)
|
||||
{
|
||||
$data = $request->getParsedBody();
|
||||
$username = $data['username'] ?? '';
|
||||
$password = $data['password'] ?? '';
|
||||
$csrfToken = $data['csrf_token'] ?? '';
|
||||
|
||||
// Verify CSRF token
|
||||
if (!$this->auth->verifyCSRFToken($csrfToken)) {
|
||||
return $this->view->render($response->withStatus(400), 'auth/login.twig', [
|
||||
'title' => 'Login',
|
||||
'error' => 'Invalid CSRF token',
|
||||
'csrf_token' => $this->auth->generateCSRFToken()
|
||||
]);
|
||||
}
|
||||
|
||||
// Validate input
|
||||
if (empty($username) || empty($password)) {
|
||||
return $this->view->render($response->withStatus(400), 'auth/login.twig', [
|
||||
'title' => 'Login',
|
||||
'error' => 'Username and password are required',
|
||||
'csrf_token' => $this->auth->generateCSRFToken()
|
||||
]);
|
||||
}
|
||||
|
||||
// Attempt login
|
||||
if ($this->auth->login($username, $password, $_SERVER['REMOTE_ADDR'] ?? null)) {
|
||||
return $response->withStatus(302)->withHeader('Location', '/');
|
||||
}
|
||||
|
||||
// Login failed
|
||||
return $this->view->render($response->withStatus(401), 'auth/login.twig', [
|
||||
'title' => 'Login',
|
||||
'error' => 'Invalid username or password',
|
||||
'csrf_token' => $this->auth->generateCSRFToken()
|
||||
]);
|
||||
}
|
||||
|
||||
public function logout(Request $request, Response $response, $args)
|
||||
{
|
||||
$this->auth->logout();
|
||||
return $response->withStatus(302)->withHeader('Location', '/login');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user