From b2a78519e432c18daf72a69e84379dff16fd2b6d Mon Sep 17 00:00:00 2001 From: mirzaev Date: Sat, 25 Feb 2023 15:06:59 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BD=D0=B0=D0=B4=20=D1=81?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D0=B8=D1=8F=D0=BC=D0=B8=20=D0=B8=20=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=20=D0=B4=D0=BE=D1=85=D1=83=D1=8F=20=D1=87=D0=B5?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=B5=D1=89=D1=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +- LICENSE | 22 +- README.md | 4 +- composer.json | 113 +- .../system/controllers/account_controller.php | 292 ++-- .../site/account/system/controllers/core.php | 4 +- .../system/controllers/error_controller.php | 88 +- .../system/controllers/graph_controller.php | 118 +- .../system/controllers/hotline_controller.php | 164 +- .../system/controllers/index_controller.php | 165 +- .../account/system/models/account_model.php | 338 ++--- mirzaev/site/account/system/models/core.php | 286 ++-- .../account/system/models/session_model.php | 462 +++--- .../site/account/system/models/vk_model.php | 1110 +++++++------- .../account/system/public/css/account.css | 364 ++--- .../account/system/public/css/gradient.css | 268 ++-- .../site/account/system/public/css/graph.css | 490 +++--- .../account/system/public/css/hotline.css | 62 +- .../account/system/public/css/icon_close.css | 58 +- .../site/account/system/public/css/main.css | 450 +++--- .../site/account/system/public/js/account.js | 52 +- .../site/account/system/public/js/hotline.js | 1336 ++++++++--------- .../site/account/system/public/js/trolling.js | 254 ++-- .../site/account/system/settings/.gitignore | 2 +- .../system/settings/arangodb.php.sample | 16 +- .../account/system/views/account/element.html | 53 - mirzaev/site/account/system/views/aside.html | 28 +- mirzaev/site/account/system/views/core.html | 66 +- mirzaev/site/account/system/views/footer.html | 8 +- .../account/system/views/graph/index.html | 172 +-- mirzaev/site/account/system/views/head.html | 30 +- mirzaev/site/account/system/views/header.html | 26 +- .../account/system/views/hotline/index.html | 56 +- mirzaev/site/account/system/views/index.html | 94 +- mirzaev/site/account/system/views/js.html | 6 +- mirzaev/site/account/system/views/manager.php | 50 +- mirzaev/site/account/system/views/menu.html | 82 +- .../account/system/views/nodes/account.html | 53 + .../account/system/views/nodes/connect.html | 53 + 39 files changed, 3692 insertions(+), 3609 deletions(-) delete mode 100644 mirzaev/site/account/system/views/account/element.html create mode 100644 mirzaev/site/account/system/views/nodes/account.html create mode 100644 mirzaev/site/account/system/views/nodes/connect.html diff --git a/.gitignore b/.gitignore index 1dda020..0ad61ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -!.gitignore -composer.phar -vendor +!.gitignore +composer.phar +vendor diff --git a/LICENSE b/LICENSE index 7a3094a..e007a57 100644 --- a/LICENSE +++ b/LICENSE @@ -1,11 +1,11 @@ -DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE -Version 2, December 2004 - -Copyright (C) 2004 Sam Hocevar - -Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. - -DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. +DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar + +Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. + +DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md index 847127f..db592e3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# site-account - +# site-account + Site for intersite authentication \ No newline at end of file diff --git a/composer.json b/composer.json index d3920f4..5afa5a4 100644 --- a/composer.json +++ b/composer.json @@ -1,57 +1,56 @@ -{ - "name": "mirzaev/site-account", - "description": "API for intersite authentication", - "readme": "README.md", - "keywords": [ - "site", - "api", - "authentication", - "auth" - ], - "type": "site", - "homepage": "https://git.mirzaev.sexy/mirzaev/site-account", - "license": "WTFPL", - "authors": [ - { - "name": "Arsen Mirzaev Tatyano-Muradovich", - "email": "arsen@mirzaev.sexy", - "homepage": "https://mirzaev.sexy", - "role": "Programmer" - } - ], - "support": { - "email": "arsen@mirzaev.sexy", - "wiki": "https://git.mirzaev.sexy/mirzaev/site-account/wiki", - "issues": "https://git.mirzaev.sexy/mirzaev/site-account/issues" - }, - "funding": [ - { - "type": "funding", - "url": "https://fund.mirzaev.sexy" - } - ], - "require": { - "php": "~8.1", - "ext-sodium": "~8.1", - "mirzaev/minimal": "^2.0.x-dev", - "mirzaev/accounts": "~1.2.x-dev", - "mirzaev/arangodb": "^1.0.0", - "mirzaev/vk": "^5.0", - "triagens/arangodb": "~3.9.x-dev", - "twig/twig": "^3.4", - "guzzlehttp/guzzle": "^7.5" - }, - "require-dev": { - "phpunit/phpunit": "~9.5" - }, - "autoload": { - "psr-4": { - "mirzaev\\site\\account\\": "mirzaev/site/account/system" - } - }, - "autoload-dev": { - "psr-4": { - "mirzaev\\site\\account\\tests\\": "mirzaev/site/account/tests" - } - } -} +{ + "name": "mirzaev/site-account", + "description": "API for intersite authentication", + "readme": "README.md", + "keywords": [ + "site", + "api", + "authentication" + ], + "type": "site", + "homepage": "https://git.mirzaev.sexy/mirzaev/site-account", + "license": "WTFPL", + "authors": [ + { + "name": "Arsen Mirzaev Tatyano-Muradovich", + "email": "arsen@mirzaev.sexy", + "homepage": "https://mirzaev.sexy", + "role": "Programmer" + } + ], + "support": { + "email": "arsen@mirzaev.sexy", + "wiki": "https://git.mirzaev.sexy/mirzaev/site-account/wiki", + "issues": "https://git.mirzaev.sexy/mirzaev/site-account/issues" + }, + "funding": [ + { + "type": "funding", + "url": "https://fund.mirzaev.sexy" + } + ], + "require": { + "php": "~8.2", + "ext-sodium": "~8.2", + "mirzaev/minimal": "^2.0.x-dev", + "mirzaev/accounts": "~1.2.x-dev", + "mirzaev/arangodb": "^1.0.0", + "mirzaev/vk": "^5.0", + "triagens/arangodb": "~3.9.x-dev", + "twig/twig": "^3.4", + "guzzlehttp/guzzle": "^7.5" + }, + "require-dev": { + "phpunit/phpunit": "~9.5" + }, + "autoload": { + "psr-4": { + "mirzaev\\site\\account\\": "mirzaev/site/account/system" + } + }, + "autoload-dev": { + "psr-4": { + "mirzaev\\site\\account\\tests\\": "mirzaev/site/account/tests" + } + } +} diff --git a/mirzaev/site/account/system/controllers/account_controller.php b/mirzaev/site/account/system/controllers/account_controller.php index bdf93f3..d4e0ff9 100644 --- a/mirzaev/site/account/system/controllers/account_controller.php +++ b/mirzaev/site/account/system/controllers/account_controller.php @@ -1,146 +1,146 @@ - - */ -final class account_controller extends core -{ - /** - * Страница профиля - * - * @param array $parameters Параметры запроса - */ - public function index(array $parameters = []): ?string - { - 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'] = account::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); - } -} + + */ +final class account_controller extends core +{ + /** + * Страница профиля + * + * @param array $parameters Параметры запроса + */ + public function index(array $parameters = []): ?string + { + 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'] = account::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/core.php b/mirzaev/site/account/system/controllers/core.php index 09c9a22..7aec396 100644 --- a/mirzaev/site/account/system/controllers/core.php +++ b/mirzaev/site/account/system/controllers/core.php @@ -61,7 +61,7 @@ class core extends controller $expires = time() + 604800; // Инициализация сессии (без журналирования) - $this->variables['session'] = session::initialization($_COOKIE["session"] ?? null, $expires) ?? header('Location: https://mirzaev.sexy/error?code=500&text=Не+удалось+инициализировать+сессию'); + $this->variables['session'] = new session($_COOKIE["session"] ?? null, $expires) ?? header('Location: https://mirzaev.sexy/error?code=500&text=Не+удалось+инициализировать+сессию'); if ($_COOKIE["session"] ?? null !== $this->variables['session']->hash) { // Изменился хеш сессии (подразумевается, что сессия устарела) @@ -78,7 +78,7 @@ class core extends controller } // Инициализация аккаунта (без журналирования) - $this->variables['account'] = session::account($this->variables['session']); + $this->variables['account'] = $this->variables['session']->account(); if ($this->variables['account'] instanceof _document) { // Инициализирован аккаунт diff --git a/mirzaev/site/account/system/controllers/error_controller.php b/mirzaev/site/account/system/controllers/error_controller.php index d30b8fd..188279a 100644 --- a/mirzaev/site/account/system/controllers/error_controller.php +++ b/mirzaev/site/account/system/controllers/error_controller.php @@ -1,44 +1,44 @@ - - */ -final class error_controller extends core -{ - /** - * Страница с ошибкой - * - * @param array $parameters - */ - public function index(array $parameters = []): ?string - { - // Запись текста ошибки в переменную окружения - $this->variables['text'] = $parameters['text'] ?? null; - - if (isset($parameters['code'])) { - // Получен код ошибки - - // Запись кода ошибки в переменную окружения - $this->variables['code'] = $parameters['code']; - - // Запись кода ответа - http_response_code($parameters['code']); - - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'errors' . DIRECTORY_SEPARATOR . 'index.html', $this->variables); - } - - // Генерация представления - return $this->view->render(DIRECTORY_SEPARATOR . 'errors' . DIRECTORY_SEPARATOR . ($parameters['code'] ?? 'index') . '.html', $this->variables); - } -} + + */ +final class error_controller extends core +{ + /** + * Страница с ошибкой + * + * @param array $parameters + */ + public function index(array $parameters = []): ?string + { + // Запись текста ошибки в переменную окружения + $this->variables['text'] = $parameters['text'] ?? null; + + if (isset($parameters['code'])) { + // Получен код ошибки + + // Запись кода ошибки в переменную окружения + $this->variables['code'] = $parameters['code']; + + // Запись кода ответа + http_response_code($parameters['code']); + + // Генерация представления + return $this->view->render(DIRECTORY_SEPARATOR . 'errors' . DIRECTORY_SEPARATOR . 'index.html', $this->variables); + } + + // Генерация представления + return $this->view->render(DIRECTORY_SEPARATOR . 'errors' . DIRECTORY_SEPARATOR . ($parameters['code'] ?? 'index') . '.html', $this->variables); + } +} diff --git a/mirzaev/site/account/system/controllers/graph_controller.php b/mirzaev/site/account/system/controllers/graph_controller.php index 8ccff1f..02e5d73 100644 --- a/mirzaev/site/account/system/controllers/graph_controller.php +++ b/mirzaev/site/account/system/controllers/graph_controller.php @@ -1,59 +1,59 @@ - - */ -final class graph_controller extends core -{ - /** - * Страница с графиком - * - * Можно использовать совместно с элементом