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; } }