Files
CRM-IKZ/app/Controllers/AuthController.php
T
2026-07-14 08:19:56 +04:00

88 lines
2.5 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Controllers;
use App\Core\Auth;
use App\Core\DB;
use App\Core\View;
use App\Services\Auth\LdapService;
class AuthController
{
public function showLogin(): void
{
View::render('auth/login', [], 'guest');
}
public function login(): void
{
$login = trim($_POST['login'] ?? '');
$password = trim($_POST['password'] ?? '');
if ($login === '' || $password === '') {
$_SESSION['error'] = 'Введите логин и пароль';
header('Location: /login');
exit;
}
$ldapService = new LdapService();
$ldapUser = $ldapService->authenticate($login, $password);
if ($ldapUser === false) {
$_SESSION['error'] = 'Неверный логин или пароль';
header('Location: /login');
exit;
}
$pdo = DB::connection();
$stmt = $pdo->prepare("SELECT * FROM users WHERE login = ? LIMIT 1");
$stmt->execute([$ldapUser['login']]);
$user = $stmt->fetch();
if (!$user) {
$stmt = $pdo->prepare("
INSERT INTO users (login, display_name, email, is_admin, ad_groups, last_login_at, created_at, updated_at)
VALUES (?, ?, ?, ?, ?, NOW(), NOW(), NOW())
");
$stmt->execute([
$ldapUser['login'],
$ldapUser['display_name'],
$ldapUser['email'],
$ldapUser['is_admin'] ? 1 : 0,
json_encode($ldapUser['groups'], JSON_UNESCAPED_UNICODE),
]);
} else {
$stmt = $pdo->prepare("
UPDATE users
SET display_name = ?, email = ?, is_admin = ?, ad_groups = ?, last_login_at = NOW(), updated_at = NOW()
WHERE id = ?
");
$stmt->execute([
$ldapUser['display_name'],
$ldapUser['email'],
$ldapUser['is_admin'] ? 1 : 0,
json_encode($ldapUser['groups'], JSON_UNESCAPED_UNICODE),
$user['id'],
]);
}
$stmt = $pdo->prepare("SELECT * FROM users WHERE login = ? LIMIT 1");
$stmt->execute([$ldapUser['login']]);
$user = $stmt->fetch();
Auth::login($user);
header('Location: /');
exit;
}
public function logout(): void
{
Auth::logout();
header('Location: /login');
exit;
}
}