Files
surikov/mirzaev/surikovlib/system/controllers/accounts_controller.php
Arsen Mirzaev Tatyano-Muradovich ab752bf34f Инициализация
2022-03-06 05:21:24 +10:00

169 lines
5.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
declare(strict_types=1);
namespace mirzaev\surikovlib\controllers;
use mirzaev\surikovlib\controllers\core;
use mirzaev\surikovlib\models\accounts_model as accounts;
/**
* Контроллер пользователей
*
* @package mirzaev\surikovlib\controllers
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
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;
}
}