*/ final class accounts_controller extends core { /** * Страница профиля * * @param array $vars */ public function index(array $vars = []): ?string { return null; } /** * Регистрация * * @param array $vars Параметры запроса * * @return string|null HTML-документ */ public function registration(array $vars = []): ?string { // Инициализация журнала ошибок $vars['errors'] = ['account' => []]; if ($vars['account'] = accounts::registration(email: $vars['email'] ?? null, password: $vars['password'] ?? null, errors: $vars['errors']['account'])) { // Удалось зарегистрироваться if ($vars['account'] = accounts::authentication($vars['email'] ?? null, $vars['password'] ?? null, (bool) ($vars['remember'] ?? false), $vars)) { // Удалось аутентифицироваться } else { // Не удалось аутентифицироваться // Запись кода ответа http_response_code(401); } } else { // Не удалось зарегистрироваться // Запись кода ответа http_response_code(401); } // Инициализаци пути для перенаправления $redirect = isset($vars['redirect']) ? $vars['redirect'] : $_SERVER['HTTP_REFERER'] ?? '/'; // Перенаправление header("Location: $redirect", response_code: 303); return null; } /** * Аутентификация * * @param array $vars Параметры запроса * * @return string|null HTML-документ */ public function authentication(array $vars = []): ?string { // Инициализация журнала ошибок $vars['errors'] = ['account' => []]; if ($vars['account'] = accounts::authentication($vars['email'] ?? null, $vars['password'] ?? null, (bool) ($vars['remember'] ?? false), errors: $vars['errors']['account'])) { // Удалось аутентифицироваться } else { // Не удалось аутентифицироваться // Запись кода ответа http_response_code(401); } // Инициализаци пути для перенаправления $redirect = isset($vars['redirect']) ? $vars['redirect'] : $_SERVER['HTTP_REFERER'] ?? '/'; // Перенаправление header("Location: $redirect", response_code: 303); return null; } /** * Деаутентификация * * @param array $vars Параметры запроса * * @return string|null HTML-документ */ public function deauthentication(array $vars = []): ?string { // Инициализация журнала ошибок $vars['errors'] = ['account' => []]; if (accounts::deauthentication(errors: $vars['errors']['account'])) { // Удалось деаутентифицироваться // Деинициализация аккаунта $vars['account'] = null; } else { // Не удалось деаутентифицироваться // Запись кода ответа http_response_code(500); } // Перенаправление header('Location: /', response_code: 303); return null; } /** * Данные аккаунта * * Если информацию запрашивает администратор, то вернётся вся, иначе только разрешённая публично * * @param array $vars Параметры запроса * * @return string JSON-документ */ public function data(array $vars = []): ?string { // Инициализация журнала ошибок $vars['errors'] = ['account' => []]; if ($account = accounts::read(['id' => $vars['id']], $vars['errors'])) { // Найдены данные запрашиваемого аккаунта // Инициализация аккаунта $vars['account'] = accounts::account($vars['errors']); if ($vars['account'] && $vars['account']['permissions']['accounts'] ?? 0 === 1) { // Удалось аутентифицироваться и пройдена проверка авторизации } else { // Не удалось аутентифицироваться // Удаление запрещённых к публикации полей $account['password'] = $account['hash'] = $account['time'] = null; } // Генерация ответа return json_encode($account ?? ''); } else { // Не найдены данные запрашиваемого аккаунта // Запись кода ответа http_response_code(404); } return null; } }