error_message = []; if (!$this->name) { $this->addError('name', 'Имя не может быть пустым'); } if (!$this->username) { $this->addError('username', 'Логин не может быть пустым'); } if ($this->username && Database::get($this->db_name, ['id'], ['username' => $this->username])) { $this->addError('username', 'Пользователь с таким логином уже существует'); } if (!$this->password) { $this->addError('password', 'Пароль не может быть пустым'); } return $this->getErrors(); } // Создание нового аккаунта public function create() { // Валидация данных if ($errors = $this->validate()) { return $errors; } // Вставляем в БД Database::insert($this->db_name, [ 'id_department' => $this->id_department, 'name' => $this->name, 'username' => $this->username, 'password' => $this->password, 'avatar_url' => $this->avatar_url, 'telegram' => $this->telegram ]); return ['success' => true]; } // Получение всех пользователей public function getAll() { return Database::select($this->db_name, [ 'id', 'id_department', 'name', 'username', 'avatar_url', 'telegram' ]); } // Создание сессии для пользователя public function create_session($name_account, $password) { // Получаем полные данные аккаунта по переданному имени аккаунта $account = Database::get($this->db_name, '*', ['username' => $name_account]); if (!$account) { $this->addError('username', 'Пользователь не найден'); return $this->getErrors(); } if ($account['password'] !== $password) { $this->addError('password', 'Неверный пароль'); return $this->getErrors(); } $keycookies = $name_account . "_" . bin2hex(random_bytes(32)); $week_seconds = 604800; // 1 неделя в секундах $data_closed = date('Y-m-d H:i:s', time() + $week_seconds); Database::insert($this->db_name_session, [ 'id_accounts' => $account['id'], 'keycookies' => $keycookies, 'data_create' => date('Y-m-d H:i:s'), 'data_closed' => $data_closed, 'ip_address' => $_SERVER['REMOTE_ADDR'], 'user_agent' => $_SERVER['HTTP_USER_AGENT'] ]); // Устанавливаем cookie setcookie('session', $keycookies, [ 'expires' => time() + $week_seconds, 'path' => '/', 'httponly' => true, 'samesite' => 'Lax' ]); return [ 'success' => true, 'keycookies' => $keycookies ]; } // Проверка сессии и получение данных пользователя public function check_session($keycookies) { // Проверяем, что сессия не пустая if (!$keycookies) { $this->addError('session', 'Сессия не указана'); return $this->getErrors(); } // Ищем сессию $session = Database::get($this->db_name_session, '*', [ 'keycookies' => $keycookies, 'data_closed[>]' => date('Y-m-d H:i:s') ]); // Проверяем, что сессия не пустая if (!$session) { $this->addError('session', 'Сессия не найдена или истекла'); return $this->getErrors(); } // Получаем данные пользователя $user = Database::get($this->db_name, [ 'id_department', 'name', 'username', 'avatar_url', 'telegram' ], [ 'id' => $session['id_accounts'] ]); if (!$user) { $this->addError('user', 'Пользователь не найден'); return $this->getErrors(); } return [ 'success' => true, 'user' => $user ]; } // Удаление всех сессий пользователя (logout) public function logout($keycookies) { // Проверяем, что сессия не пустая if (!$keycookies) { $this->addError('session', 'Сессия не указана'); return $this->getErrors(); } // Получаем сессию чтобы узнать id пользователя $session = Database::get($this->db_name_session, ['id_accounts'], [ 'keycookies' => $keycookies ]); if (!$session) { $this->addError('session', 'Сессия не найдена'); return $this->getErrors(); } // Удаляем все сессии этого пользователя Database::delete($this->db_name_session, [ 'id_accounts' => $session['id_accounts'] ]); // Удаляем cookie setcookie('session', '', [ 'expires' => time() - 3600, 'path' => '/' ]); return ['success' => true]; } } ?>