Files

102 lines
3.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Controllers;
use App\Core\Controller;
use App\Core\Http\Request;
use App\Core\Http\Response;
use App\Core\Auth;
use App\Models\User;
class AuthController extends Controller
{
public function loginForm(Request $request, Response $response): string|Response
{
if (Auth::check()) {
return $this->redirect('/');
}
$users = User::all();
return $this->render('auth/login', [
'title' => 'Login - CanteenHub',
'users' => $users,
], 'layouts/main');
}
public function login(Request $request, Response $response): Response
{
$identifier = trim((string)$request->post('identifier', ''));
$password = (string)$request->post('password', '');
if (empty($identifier) || empty($password)) {
return $this->redirect('/login', null, 'Please provide your username/email and password.');
}
if (Auth::attempt($identifier, $password)) {
$user = Auth::user();
return $this->redirect('/', "Welcome back, {$user['name']}!");
}
return $this->redirect('/login', null, 'Invalid username or password.');
}
public function quickLogin(Request $request, Response $response): Response
{
$userId = (int)$request->post('user_id');
$user = User::find($userId);
if ($user) {
Auth::login($user);
return $this->redirect('/', "Logged in as {$user['name']}!");
}
return $this->redirect('/login', null, 'User not found.');
}
public function registerForm(Request $request, Response $response): string|Response
{
if (Auth::check()) {
return $this->redirect('/');
}
return $this->render('auth/register', [
'title' => 'Register Account - CanteenHub',
], 'layouts/main');
}
public function register(Request $request, Response $response): Response
{
$name = trim((string)$request->post('name', ''));
$username = trim((string)$request->post('username', ''));
$email = trim((string)$request->post('email', ''));
$password = (string)$request->post('password', '');
if (empty($name) || empty($username) || empty($email) || strlen($password) < 4) {
return $this->redirect('/register', null, 'Please fill in all fields (password must be at least 4 characters).');
}
if (User::findByIdentifier($username) || User::findByIdentifier($email)) {
return $this->redirect('/register', null, 'Username or Email is already registered.');
}
try {
$userId = User::create($name, $username, $email, $password);
$user = User::find($userId);
Auth::login($user);
return $this->redirect('/', "Account registered! Welcome to CanteenHub, {$name}!");
} catch (\Throwable $e) {
return $this->redirect('/register', null, 'Registration error: ' . $e->getMessage());
}
}
public function logout(Request $request, Response $response): Response
{
Auth::logout();
return $this->redirect('/login', 'You have been logged out.');
}
}