102 lines
3.2 KiB
PHP
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.');
|
|
}
|
|
}
|