From 87bd15640a1e6aeba2761fce49c5974ddfdcf9b5 Mon Sep 17 00:00:00 2001 From: mirzaev Date: Wed, 8 Mar 2023 21:43:33 +1000 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=B0=20=D0=B0=D1=83=D1=82=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B0=D0=BA=D0=BA=D0=B0=D1=83=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "mirzaev/site/account/system/\\" | 74 --- .../account/system/controllers/account.php | 123 +--- .../site/account/system/controllers/api.php | 2 +- .../site/account/system/controllers/core.php | 78 ++- .../account/system/controllers/hotline.php | 115 ++-- .../site/account/system/controllers/index.php | 4 +- .../account/system/controllers/session.php | 139 +++-- .../system/controllers/traits/errors.php | 2 +- .../site/account/system/models/account.php | 354 +++++++---- mirzaev/site/account/system/models/core.php | 30 +- .../system/models/generators/password.php | 8 +- mirzaev/site/account/system/models/invite.php | 23 +- .../site/account/system/models/session.php | 148 +++-- mirzaev/site/account/system/models/vk.php | 555 ------------------ .../account/system/public/css/account.css | 40 +- .../account/system/public/css/animations.css | 41 ++ .../site/account/system/public/css/main.css | 5 +- .../system/public/fonts/commissioner.ttf | Bin 741344 -> 0 bytes mirzaev/site/account/system/public/index.php | 6 +- .../site/account/system/public/js/password.js | 1 + .../site/account/system/public/js/session.js | 22 +- .../system/views/nodes/authentication.html | 247 -------- .../account/system/views/pages/entry.html | 410 +++++++++++++ .../site/account/system/views/templater.php | 8 +- 24 files changed, 1082 insertions(+), 1353 deletions(-) delete mode 100644 "mirzaev/site/account/system/\\" delete mode 100644 mirzaev/site/account/system/models/vk.php delete mode 100644 mirzaev/site/account/system/public/fonts/commissioner.ttf delete mode 100644 mirzaev/site/account/system/views/nodes/authentication.html create mode 100644 mirzaev/site/account/system/views/pages/entry.html diff --git "a/mirzaev/site/account/system/\\" "b/mirzaev/site/account/system/\\" deleted file mode 100644 index 369117c..0000000 --- "a/mirzaev/site/account/system/\\" +++ /dev/null @@ -1,74 +0,0 @@ - - */ -final class api extends core -{ - /** - * Проверить существование - * - * @param array $parameters Параметры запроса - * - * @return string JSON с параметром exist - */ - public function invite_verify(array $parameters = []): string - { - // Инициализация буфера ответа - $return = ['errors' => &$this->errors]; - - // Запрос проверки на существование приглашения - $invite = invite::read($parameters['key'], $this->errors['account']); - - $return['exist'] = isset($invite); - - if ($parameters['from'] == 1) $return['from'] = ['login' => 'mirzaev'] ?? $invite->from(); - - // Запись заголовка ответа - header('Content-Type: application/json'); - - return json_encode($return); - } - - /** - * Сгенерировать классический пароль - * - * @param array $parameters Параметры запроса - * - * @return string JSON с параметром password - */ - public function password_classic(array $parameters = []): string - { - // Запись заголовка ответа - header('Content-Type: application/json'); - - return json_encode(['password' => password::classic((int) $parameters['length'], $this->errors), 'errors' => $this->errors]); - } - - /** - * Сгенерировать мнемонический пароль - * - * @param array $parameters Параметры запроса - * - * @return string JSON с параметром password - */ - public function password_mnemonic(array $parameters = []): string - { - // Запись заголовка ответа - header('Content-Type: application/json'); - - return json_encode(['password' => password::mnemonic((int) $parameters['length'], $this->errors), 'errors' => $this->errors]); - } -} diff --git a/mirzaev/site/account/system/controllers/account.php b/mirzaev/site/account/system/controllers/account.php index e9385bb..b9acd9c 100644 --- a/mirzaev/site/account/system/controllers/account.php +++ b/mirzaev/site/account/system/controllers/account.php @@ -6,18 +6,7 @@ namespace mirzaev\site\account\controllers; // Файлы проекта use mirzaev\site\account\controllers\core, - mirzaev\site\account\models\account as model, - mirzaev\site\account\models\session, - mirzaev\site\account\models\vk; - -// Фреймворк для ВКонтакте -use mirzaev\vk\core as api; - -// Библиотека для ArangoDB -use ArangoDBClient\Document as _document; - -// Встроенные библиотеки -use stdClass; + mirzaev\site\account\models\account as model; /** * Контроллер аккаунта @@ -36,114 +25,4 @@ final class account extends core { return null; } - - /** - * Инициализация - * - * @param array $parameters Параметры запроса - */ - public function initialization(array $parameters = []): ?string - { - if ($this->variables['account'] instanceof _document) { - // Найден аккаунт - - if ($this->variables['vk'] instanceof _document) { - // Найден аккаунт ВКонтакте - - // Инициализация данных аккаунта ВКонтакте - vk::parse($this->variables['vk'], $this->variables['errors']['vk']); - } - - // Запись кода ответа - http_response_code(200); - - return null; - } else { - // Не найден аккаунт - - // Запись кода ответа - http_response_code(401); - - // Запись заголовка ответа с ключом аккаунта - header('session: ' . $this->variables['session']->hash); - - return null; - } - - // Запись кода ответа - http_response_code(500); - - return null; - } - - /** - * Связь аккаунта с аккаунтом ВКонтакте - * - * @param array $parameters Параметры запроса - */ - public function connect(array $parameters = []): ?string - { - if ($this->variables['session']->hash === $parameters['state']) { - // Совпадает хеш сессии с полученным хешем из ответа ВКонтакте - - if (!empty($response = vk::key($parameters['code'], $this->variables['errors']['vk']))) { - // Получены данные аккаунта ВКонтакте - - if (($this->variables['vk'] = vk::initialization($response, $this->variables['errors']['vk'])) instanceof _document) { - // Инициализирован аккаунт ВКонтакте - - if (($this->variables['account'] = vk::account($this->variables['vk'])) instanceof _document) { - // Найден аккаунт (существующий) - - if (session::connect($this->variables['session'], $this->variables['account'], $this->variables['errors']['session'])) { - // Связана сессия с аккаунтом - } - } else if (($this->variables['account'] = model::create($this->variables['errors']['account'])) instanceof _document) { - // Найден аккаунт (создан новый) - - if (session::connect($this->variables['session'], $this->variables['account'], $this->variables['errors']['session'])) { - // Связана сессия с аккаунтом - - if (account::connect($this->variables['account'], $this->variables['vk'], $this->variables['errors']['account'])) { - // Связан аккаунт с аккаунтом ВКонтакте - } - } - } - - // Инициализация робота для аккаунта ВКонтакте - $this->vk = api::init()->user(key: $this->variables['vk']->access['key']); - - if ($this->variables['vk'] instanceof _document) { - // Инициализирован робот для аккаунта ВКонтакте - - // Инициализация данных аккаунта ВКонтакте - $data = vk::parse($this->vk, $this->variables['errors']['vk']); - var_dump($data); - die; - - if ($data instanceof stdClass) { - // Получены данные ВКонтакте - - // Запись в базу данных - vk::update($this->variables['vk'], $data, $this->variables['errors']['vk']); - } - } - } - } - } - - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'account' . DIRECTORY_SEPARATOR . 'vk.html', $this->variables); - } - - /** - * Генерация панели аккаунта - * - * @param array $parameters Параметры запроса - */ - public function panel(array $parameters = []): ?string - { - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'account' . DIRECTORY_SEPARATOR . 'panel.html', $this->variables); - } } diff --git a/mirzaev/site/account/system/controllers/api.php b/mirzaev/site/account/system/controllers/api.php index 0760a33..15c8f45 100644 --- a/mirzaev/site/account/system/controllers/api.php +++ b/mirzaev/site/account/system/controllers/api.php @@ -53,7 +53,7 @@ final class api extends core default => throw new exception("Параметр не найден: $parameter") }; } catch (exception $e) { - // Запись в журнал ошибок + // Запись в реестр ошибок $this->errors[] = [ 'text' => $e->getMessage(), 'file' => $e->getFile(), diff --git a/mirzaev/site/account/system/controllers/core.php b/mirzaev/site/account/system/controllers/core.php index da52236..94990a8 100644 --- a/mirzaev/site/account/system/controllers/core.php +++ b/mirzaev/site/account/system/controllers/core.php @@ -5,20 +5,16 @@ declare(strict_types=1); namespace mirzaev\site\account\controllers; // Файлы проекта -use mirzaev\site\account\views\templater; -use mirzaev\site\account\models\core as models; -use mirzaev\site\account\models\account; -use mirzaev\site\account\models\session; - -// Библиотека для ArangoDB -use ArangoDBClient\Document as _document; +use mirzaev\site\account\views\templater, + mirzaev\site\account\models\core as models, + mirzaev\site\account\models\account, + mirzaev\site\account\models\session; // Фреймворк PHP use mirzaev\minimal\controller; -// Фреймворк ВКонтакте -use mirzaev\vk\core as vk; -use mirzaev\vk\robots\user as robot; +// Встроенные библиотеки +use exception; /** * Ядро контроллеров @@ -28,11 +24,6 @@ use mirzaev\vk\robots\user as robot; */ class core extends controller { - /** - * Переменные окружения - */ - protected robot $vk; - /** * Инстанция сессии */ @@ -59,45 +50,46 @@ class core extends controller /** * Конструктор * - * @return void + * @param bool $initialize Инициализировать контроллер? */ - public function __construct() + public function __construct(bool $initialize = true) { - parent::__construct(); + parent::__construct($initialize); - // Инициализация ядра моделей (соединение с базой данных...) - new models(); + if ($initialize) { + // Запрошена инициализация - // Инициализация шаблонизатора представлений - $this->view = new templater; + // Инициализация ядра моделей (соединение с базой данных...) + new models(); - // Инициализация даты до которой будет активна сессия - $expires = time() + 604800; + // Инициализация даты до которой будет активна сессия + $expires = time() + 604800; - // Инициализация сессии (без журналирования) - $this->session = new session($_COOKIE["session"] ?? null, $expires) ?? - header('Location: https://mirzaev.sexy/error?code=500&text=Не+удалось+инициализировать+сессию'); + // Инициализация значения по умолчанию + $_COOKIE["session"] ??= null; - if ($_COOKIE["session"] ?? null !== $this->session->hash) { - // Изменился хеш сессии (подразумевается, что сессия устарела) + // Инициализация сессии + $this->session = new session($_COOKIE["session"], $expires); - // Запись хеша новой сессии - setcookie('session', $this->session->hash, [ - 'expires' => $expires, - 'domain' => 'mirzaev.sexy', - 'path' => '/', - 'secure' => true, - 'httponly' => true, - 'samesite' => 'strict' - ]); - } + if ($_COOKIE["session"] !== $this->session->hash) { + // Изменился хеш сессии (подразумевается, что сессия устарела) - // Инициализация аккаунта (без журналирования) - $this->account = $this->session->account(); + // Запись хеша новой сессии + setcookie('session', $this->session->hash, [ + 'expires' => $expires, + 'domain' => 'mirzaev.sexy', + 'path' => '/', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'strict' + ]); + } - if ($this->account instanceof _document) { - // Инициализирован аккаунт + // Инициализация аккаунта + $this->account = new account($this->session); + // Инициализация шаблонизатора представлений + $this->view = new templater($this->session, $this->account); } } } diff --git a/mirzaev/site/account/system/controllers/hotline.php b/mirzaev/site/account/system/controllers/hotline.php index 1e52792..5efd8cc 100644 --- a/mirzaev/site/account/system/controllers/hotline.php +++ b/mirzaev/site/account/system/controllers/hotline.php @@ -15,68 +15,65 @@ use mirzaev\site\account\controllers\core; */ final class hotline extends core { - /** - * Страница с бегущей строкой - * - * Можно использовать совместно с элементом