site-tordv-calculator/mirzaev/calculator/system/controllers/accounts_controller.php

159 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\calculator\controllers;
use mirzaev\calculator\controllers\core;
use mirzaev\calculator\models\accounts_model as accounts;
/**
* Контроллер пользователей
*
* @package mirzaev\calculator\controllers
* @author Arsen Mirzaev Tatyano-Muradovich <arsen@mirzaev.sexy>
*/
final class accounts_controller extends core
{
/**
* Страница профиля
*
* @param array $params
*
* @todo 1. При истечению срока хранения куки аутентификации почему- то калькулятор ещё думает, что я аутентифицирован (вероятно одна из кук остаётся жива)
*/
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);
}
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'main' . DIRECTORY_SEPARATOR . 'index.html', $vars);
}
/**
* Аутентификация
*
* @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);
}
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'main' . DIRECTORY_SEPARATOR . 'index.html', $vars);
}
/**
* Деаутентификация
*
* @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);
}
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'main' . DIRECTORY_SEPARATOR . 'index.html', $vars);
}
/**
* Данные аккаунта
*
* Если информацию запрашивает администратор, то вернётся вся, иначе только разрешённая публично
*
* @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;
}
}