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 -{ - /** - * Страница с графиком - * - * Можно использовать совместно с элементом