Инициализация
This commit is contained in:
168
mirzaev/surikovlib/system/controllers/accounts_controller.php
Normal file
168
mirzaev/surikovlib/system/controllers/accounts_controller.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user