diff --git a/README.md b/README.md index db592e3..a0323c3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,2 @@ -# site-account - -Site for intersite authentication \ No newline at end of file +# accounts +Accounts system site of the Svoboda organization diff --git a/composer.json b/composer.json index cb5f10a..53b7944 100644 --- a/composer.json +++ b/composer.json @@ -1,15 +1,16 @@ { - "name": "mirzaev/site-account", - "description": "API for intersite authentication", - "readme": "README.md", - "keywords": [ - "site", - "api", - "authentication" - ], + "name": "svoboda/accounts", "type": "site", - "homepage": "https://git.mirzaev.sexy/mirzaev/site-account", + "description": "Accounts system site of the Svoboda organization", + "keywords": [ + "accounts", + "svoboda", + "anarchism", + "minimal" + ], + "readme": "README.md", "license": "WTFPL", + "homepage": "https://git.svoboda.works/svoboda/accounts", "authors": [ { "name": "Arsen Mirzaev Tatyano-Muradovich", @@ -20,23 +21,19 @@ ], "support": { "email": "arsen@mirzaev.sexy", - "wiki": "https://git.mirzaev.sexy/mirzaev/site-account/wiki", - "issues": "https://git.mirzaev.sexy/mirzaev/site-account/issues" + "wiki": "https://git.svoboda.works/svoboda/accounts/wiki", + "issues": "https://git.svoboda.works/svoboda/accounts/issues" }, "funding": [ { "type": "funding", - "url": "https://fund.mirzaev.sexy" + "url": "https://fund.svoboda.works" } ], "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", + "php": "~8.4", + "ext-sodium": "~8.4", + "mirzaev/minimal": "^3.4.0", "twig/twig": "^3.4", "guzzlehttp/guzzle": "^7.5", "scripturadesign/markov": "^2.0" @@ -46,12 +43,15 @@ }, "autoload": { "psr-4": { - "mirzaev\\site\\account\\": "mirzaev/site/account/system" + "svoboda\\accounts\\": "svoboda/accounts/system" } }, "autoload-dev": { "psr-4": { - "mirzaev\\site\\account\\tests\\": "mirzaev/site/account/tests" + "svoboda\\accounts\\tests\\": "svoboda/accounts/tests" } - } + }, + "scripts": { + "pre-update-cmd": "./install.sh" + } } diff --git a/composer.lock b/composer.lock index b2c1f6f..c8da52c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,26 +4,26 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c0621deb07173185d918fd02e7551ca4", + "content-hash": "257bd9cd7db3ef3f53cfee6c4fe3f723", "packages": [ { "name": "guzzlehttp/guzzle", - "version": "7.5.0", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", - "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9 || ^2.4", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -32,10 +32,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -48,9 +49,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -116,7 +114,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.0" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -132,38 +130,37 @@ "type": "tidelift" } ], - "time": "2022-08-28T15:39:27+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -200,7 +197,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -216,26 +213,26 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2024-10-17T10:06:22+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.3", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "67c26b443f348a51926030c83481b85718457d3d" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", - "reference": "67c26b443f348a51926030c83481b85718457d3d", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", + "psr/http-message": "^1.1 || ^2.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -243,9 +240,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -255,9 +252,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" } }, "autoload": { @@ -319,7 +313,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.3" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -335,179 +329,18 @@ "type": "tidelift" } ], - "time": "2022-10-26T14:07:24+00:00" - }, - { - "name": "jasny/error-handler", - "version": "v0.2.0", - "source": { - "type": "git", - "url": "https://github.com/jasny/error-handler.git", - "reference": "38e076fc36d86689010081bc2eab96f12d97b0d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jasny/error-handler/zipball/38e076fc36d86689010081bc2eab96f12d97b0d8", - "reference": "38e076fc36d86689010081bc2eab96f12d97b0d8", - "shasum": "" - }, - "require": { - "php": ">=5.6.0", - "psr/http-message": "^1.0", - "psr/log": "^1.0" - }, - "require-dev": { - "jasny/http-message": "^1.3", - "jasny/php-code-quality": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jasny\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Arnold Daniels", - "email": "arnold@jasny.net", - "homepage": "http://www.jasny.net" - } - ], - "description": "Error handler with PSR-7 support", - "keywords": [ - "error handler", - "exception handler", - "middleware" - ], - "support": { - "issues": "https://github.com/jasny/error-handler/issues", - "source": "https://github.com/jasny/error-handler" - }, - "abandoned": true, - "time": "2017-01-25T01:27:18+00:00" - }, - { - "name": "mirzaev/accounts", - "version": "1.2.x-dev", - "source": { - "type": "git", - "url": "https://git.mirzaev.sexy/mirzaev/accounts", - "reference": "aa93c4d26395025fa16bb65e8a40332ac352a742" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "guzzlehttp/guzzle": "^7.5", - "php": "~8.2" - }, - "require-dev": { - "phpdocumentor/phpdocumentor": ">=2.9", - "phpunit/phpunit": "^9" - }, - "type": "library", - "autoload": { - "psr-4": { - "mirzaev\\accounts\\": "mirzaev/accounts/system" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "WTFPL" - ], - "authors": [ - { - "name": "Arsen Mirzaev Tatyano-Muradovich", - "email": "arsen@mirzaev.sexy", - "homepage": "https://mirzaev.sexy", - "role": "Programmer" - } - ], - "description": "Simple accounts manager", - "homepage": "https://git.mirzaev.sexy/mirzaev/accounts", - "keywords": [ - "accounts" - ], - "support": { - "email": "arsen@mirzaev.sexy", - "issues": "https://git.mirzaev.sexy/mirzaev/accounts/issues", - "wiki": "https://git.mirzaev.sexy/mirzaev/accounts/wiki" - }, - "funding": [ - { - "url": "https://fund.mirzaev.sexy", - "type": "funding" - } - ], - "time": "2023-02-17T08:36:36+00:00" - }, - { - "name": "mirzaev/arangodb", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://git.mirzaev.sexy/mirzaev/arangodb", - "reference": "e7da9978d01d3f8bdef6c74809dfb4eb8989f92c" - }, - "require": { - "php": "^8.1", - "triagens/arangodb": "~3.8" - }, - "require-dev": { - "phpunit/phpunit": "^9.3.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "mirzaev\\arangodb\\": "mirzaev/arangodb/system" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "WTFPL" - ], - "authors": [ - { - "name": "Arsen Mirzaev Tatyano-Muradovich", - "email": "arsen@mirzaev.sexy", - "homepage": "https://mirzaev.sexy", - "role": "Developer" - } - ], - "description": "Simple PHP-framework for ArangoDB", - "homepage": "https://git.hood.su/mirzaev/arangodb", - "keywords": [ - "ArangoDb" - ], - "support": { - "email": "arsen@mirzaev.sexy", - "issues": "https://git.mirzaev.sexy/mirzaev/arangodb/issues", - "wiki": "https://git.mirzaev.sexy/mirzaev/arangodb/manual" - }, - "funding": [ - { - "url": "https://fund.mirzaev.sexy", - "type": "funding" - } - ], - "time": "2022-11-06T00:03:56+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "mirzaev/minimal", - "version": "2.0.x-dev", + "version": "3.4.0", "source": { "type": "git", - "url": "https://git.mirzaev.sexy/mirzaev/minimal", - "reference": "1f5685a20d41c1c11742f33138764b835ddd0198" + "url": "https://git.svoboda.works/mirzaev/minimal", + "reference": "e9f7cd39b6d6ed6a021ae7b10167a0107c0ec0c3" }, "require": { - "php": "~8.1" - }, - "suggest": { - "ext-PDO": "To work with SQL-based databases (MySQL, PostreSQL...)" + "php": "~8.4" }, "type": "framework", "autoload": { @@ -524,176 +357,39 @@ "name": "Arsen Mirzaev Tatyano-Muradovich", "email": "arsen@mirzaev.sexy", "homepage": "https://mirzaev.sexy", - "role": "Developer" + "role": "Programmer" } ], - "description": "Lightweight MVC framework that manages only the basic mechanisms, leaving the development of the programmer and not overloading the project", + "description": "My vision of a good framework", "homepage": "https://git.mirzaev.sexy/mirzaev/minimal", "keywords": [ "framework", + "lightweight", "mvc" ], "support": { "docs": "https://git.mirzaev.sexy/mirzaev/minimal/wiki", "issues": "https://git.mirzaev.sexy/mirzaev/minimal/issues" }, - "time": "2022-11-03T06:09:32+00:00" - }, - { - "name": "mirzaev/vk", - "version": "5.0.0", - "source": { - "type": "git", - "url": "https://git.mirzaev.sexy/mirzaev/vk", - "reference": "c61e7a0de5e9fad194725bae26cc30872cc97977" - }, - "require": { - "guzzlehttp/guzzle": "^7.5", - "jasny/error-handler": "^0.2", - "mirzaev/accounts": "^1.2.0", - "monolog/monolog": "^1.6", - "php": "^8.1", - "psr/log": "^1.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "suggest": { - "ext-sodium": "Can be selected in some conditions to increase security" - }, - "type": "framework", - "autoload": { - "psr-4": { - "mirzaev\\vk\\": "mirzaev/vk/system" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "WTFPL" - ], - "authors": [ - { - "name": "Arsen Mirzaev Tatyano-Muradovich", - "email": "arsen@mirzaev.sexy", - "homepage": "https://mirzaev.sexy/mirzaev", - "role": "Programmer" - } - ], - "description": "Framework for vk.com API", - "homepage": "https://git.mirzaev.sexy/mirzaev/vk", - "keywords": [ - "api", - "vk" - ], - "support": { - "docs": "https://git.mirzaev.sexy/mirzaev/vk/wiki", - "issues": "https://git.mirzaev.sexy/mirzaev/vk/issues" - }, - "time": "2022-11-13T17:06:52+00:00" - }, - { - "name": "monolog/monolog", - "version": "1.27.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "904713c5929655dc9b97288b69cfeedad610c9a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1", - "reference": "904713c5929655dc9b97288b69cfeedad610c9a1", - "shasum": "" - }, - "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpstan/phpstan": "^0.12.59", - "phpunit/phpunit": "~4.5", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" - }, - "type": "library", - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/1.27.1" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2022-06-09T08:53:42+00:00" + "time": "2024-12-16T16:10:27+00:00" }, { "name": "psr/http-client", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", - "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -713,7 +409,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -725,27 +421,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/master" + "source": "https://github.com/php-fig/http-client" }, - "time": "2020-06-29T06:28:15+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" }, "type": "library", "extra": { @@ -765,10 +461,10 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -780,31 +476,31 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.0.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -819,7 +515,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -833,59 +529,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/master" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "ralouphie/getallheaders", @@ -984,16 +630,16 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.1", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0121954c80fd17c18cf050fe73360e63bb43d4fb" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0121954c80fd17c18cf050fe73360e63bb43d4fb", - "reference": "0121954c80fd17c18cf050fe73360e63bb43d4fb", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -1001,12 +647,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.5-dev" } }, "autoload": { @@ -1031,7 +677,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -1047,24 +693,24 @@ "type": "tidelift" } ], - "time": "2023-02-02T07:48:03+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1074,12 +720,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1113,7 +756,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1129,24 +772,24 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1156,12 +799,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -1196,7 +836,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -1212,99 +852,118 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { - "name": "triagens/arangodb", - "version": "3.9.x-dev", + "name": "symfony/polyfill-php81", + "version": "v1.31.0", "source": { "type": "git", - "url": "https://github.com/arangodb/arangodb-php.git", - "reference": "21c460dbbd75eb5c066f9abcc3a9adf4487d6e48" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/arangodb/arangodb-php/zipball/21c460dbbd75eb5c066f9abcc3a9adf4487d6e48", - "reference": "21c460dbbd75eb5c066f9abcc3a9adf4487d6e48", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=5.6.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "ArangoDBClient": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Jan Steemann", - "homepage": "https://github.com/arangodb/arangodb-php", - "role": "Developer" - }, - { - "name": "Frank Mayer", - "homepage": "https://github.com/arangodb/arangodb-php", - "role": "Developer" - }, - { - "name": "Contributors", - "homepage": "https://github.com/arangodb/arangodb-php/graphs/contributors" - } - ], - "description": "ArangoDB PHP client", - "homepage": "https://github.com/arangodb/arangodb-php", - "keywords": [ - "Arango", - "ArangoDb", - "database", - "distributed", - "document store", - "graph database", - "multi-model", - "nosql" - ], - "support": { - "issues": "https://github.com/arangodb/arangodb-php/issues", - "source": "https://github.com/arangodb/arangodb-php/tree/3.9" - }, - "time": "2022-10-21T15:30:53+00:00" - }, - { - "name": "twig/twig", - "version": "v3.5.1", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "a6e0510cc793912b451fd40ab983a1d28f611c15" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/a6e0510cc793912b451fd40ab983a1d28f611c15", - "reference": "a6e0510cc793912b451fd40ab983a1d28f611c15", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "psr/container": "^1.0", - "symfony/phpunit-bridge": "^4.4.9|^5.0.9|^6.0" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.5-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "twig/twig", + "version": "v3.18.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50", + "reference": "acffa88cc2b40dbe42eaf3a5025d6c0d4600cc50", + "shasum": "" + }, + "require": { + "php": ">=8.0.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php81": "^1.29" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Resources/core.php", + "src/Resources/debug.php", + "src/Resources/escaper.php", + "src/Resources/string_loader.php" + ], "psr-4": { "Twig\\": "src/" } @@ -1337,7 +996,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.5.1" + "source": "https://github.com/twigphp/Twig/tree/v3.18.0" }, "funding": [ { @@ -1349,7 +1008,7 @@ "type": "tidelift" } ], - "time": "2023-02-08T07:49:20+00:00" + "time": "2024-12-29T10:51:50+00:00" } ], "packages-dev": [ @@ -1425,16 +1084,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -1442,11 +1101,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -1472,7 +1132,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -1480,29 +1140,31 @@ "type": "tidelift" } ], - "time": "2022-03-03T13:19:32+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.3", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -1510,7 +1172,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1534,26 +1196,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2023-01-16T22:05:37+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -1594,9 +1257,15 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -1651,44 +1320,44 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.25", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", - "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -1716,7 +1385,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -1724,7 +1394,7 @@ "type": "github" } ], - "time": "2023-02-25T05:32:00+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -1969,50 +1639,50 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.4", + "version": "9.6.22", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", - "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c", + "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", + "doctrine/instantiator": "^1.5.0 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", + "myclabs/deep-copy": "^1.12.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", + "sebastian/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -2051,7 +1721,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22" }, "funding": [ { @@ -2067,20 +1738,20 @@ "type": "tidelift" } ], - "time": "2023-02-27T13:06:37+00:00" + "time": "2024-12-05T13:48:26+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -2115,7 +1786,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -2123,7 +1794,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -2312,20 +1983,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2357,7 +2028,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -2365,20 +2036,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -2423,7 +2094,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -2431,7 +2102,7 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", @@ -2498,16 +2169,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -2563,7 +2234,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -2571,20 +2242,20 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -2627,7 +2298,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -2635,24 +2306,24 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -2684,7 +2355,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -2692,7 +2363,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -2871,16 +2542,16 @@ }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -2892,7 +2563,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -2913,8 +2584,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -2922,7 +2592,7 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", @@ -3035,16 +2705,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -3073,7 +2743,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -3081,22 +2751,18 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2024-03-03T12:36:25+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "mirzaev/minimal": 20, - "mirzaev/accounts": 20, - "triagens/arangodb": 20 - }, + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.2", - "ext-sodium": "~8.2" + "php": "~8.4", + "ext-sodium": "~8.4" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } diff --git a/damper.mjs b/damper.mjs new file mode 160000 index 0000000..68589e9 --- /dev/null +++ b/damper.mjs @@ -0,0 +1 @@ +Subproject commit 68589e968cbc043f35c2948a9c90293b6f5f9cb9 diff --git a/examples/nginx/account.svoboda.conf b/examples/nginx/account.svoboda.conf new file mode 100644 index 0000000..858d86f --- /dev/null +++ b/examples/nginx/account.svoboda.conf @@ -0,0 +1,53 @@ +server { + listen 80; + listen [::]:80; + + server_name account.svoboda.works; + + # 301 302 + return 301 https://$server_name$request_uri; +} + +server { + listen 443 ssl; + listen 443 quic; + listen [::]:443 ssl; + listen [::]:443 quic; + + server_name account.svoboda.works; + + http2 on; + http3 on; + quic_gso on; + quic_retry on; + + add_header Alt-Svc 'h3=":$server_port"; ma=86400'; + add_header x-quic 'h3'; + + root /var/www/account.svoboda.works/svoboda/account/system/public; + + index index.php; + + keepalive_timeout 60; + + include snippets/ssl-params.conf; + include snippets/ssl-svoboda.conf; + include snippets/php8_4.conf; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|mp3|ogg|ogv|webm|htc|woff2|woff)$ { + expires 1M; + access_log off; + add_header Cache-Control "max-age=2629746, public"; + } + + location ~* \.(?:css|js|mjs|min)$ { + expires 1y; + access_log off; + add_header Cache-Control "max-age=31556952, public"; + } +} + diff --git a/graph.mjs b/graph.mjs new file mode 160000 index 0000000..0300f33 --- /dev/null +++ b/graph.mjs @@ -0,0 +1 @@ +Subproject commit 0300f3376550b9d0a07d1c41db88452af67e366b diff --git a/hotline.mjs b/hotline.mjs new file mode 160000 index 0000000..81aca40 --- /dev/null +++ b/hotline.mjs @@ -0,0 +1 @@ +Subproject commit 81aca4001629e8f3cab8a849c1e892dbac74c88a diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..af65f41 --- /dev/null +++ b/install.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Renaming project folder +if [ -d author/project ]; then + mv author/project author/accounts +fi + +# Renaming project author folder +if [ -d author ]; then + mv author svoboda +fi + +# Initializing the javascript modules folder +if [ ! -d svoboda/accounts/system/public/js/modules ]; then + mkdir -p ./svoboda/accounts/system/public/js/modules +fi + +# Updating repositories +cd damper.mjs && git pull +cd ../hotline.mjs && git pull +cd ../graph.mjs && git pull +cd ../ + +# Installing "damper.min.mjs" +if [ ! -h svoboda/accounts/system/public/js/modules/damper.min.mjs ]; then + ln -s ../../../../../../damper.mjs/damper.min.mjs svoboda/accounts/system/public/js/modules/damper.min.mjs +fi + +# installing "hotline.min.mjs" +if [ ! -h svoboda/accounts/system/public/js/modules/hotline.min.mjs ]; then + ln -s ../../../../../../hotline.mjs/hotline.min.mjs svoboda/accounts/system/public/js/modules/hotline.min.mjs +fi + +# Installing "graph.min.mjs" +if [ ! -h svoboda/accounts/system/public/js/modules/graph.min.mjs ]; then + ln -s ../../../../../../graph.mjs/graph.min.mjs svoboda/accounts/system/public/js/modules/graph.min.mjs +fi diff --git a/mirzaev/site/account/system/models/core.php b/mirzaev/site/account/system/models/core.php deleted file mode 100644 index 79c4878..0000000 --- a/mirzaev/site/account/system/models/core.php +++ /dev/null @@ -1,160 +0,0 @@ - - */ -class core extends model -{ - /** - * Коллекция в которой хранятся аккаунты - */ - public const SETTINGS = '../settings/arangodb.php'; - - /** - * Постфикс - */ - public string $postfix = ''; - - /** - * Соединение с базой данных - */ - protected static connection $db; - - /** - * Конструктор - * - * @param bool $initialize Инициализировать контроллер? - * @param connection $db Инстанция соединения с базой данных - */ - public function __construct(bool $initialize = true, connection $db = null) - { - parent::__construct($initialize); - - if ($initialize) { - // Запрошена инициализация - - if (isset($db)) { - // Получена инстанция соединения с базой данных - - // Запись и инициализация соединения с базой данных - $this->__set('db', $db); - } else { - // Не получена инстанция соединения с базой данных - - // Инициализация соединения с базой данных по умолчанию - $this->__get('db'); - } - } - } - - /** - * Записать свойство - * - * @param string $name Название - * @param mixed $value Значение - */ - public function __set(string $name, mixed $value = null): void - { - match ($name) { - 'db' => (function () use ($value) { - if ($this->__isset('db')) { - // Свойство уже было инициализировано - - // Выброс исключения (неудача) - throw new exception('Запрещено реинициализировать соединение с базой данных ($this->db)', 500); - } else { - // Свойство ещё не было инициализировано - - if ($value instanceof connection) { - // Передано подходящее значение - - // Запись свойства (успех) - self::$db = $value; - } else { - // Передано неподходящее значение - - // Выброс исключения (неудача) - throw new exception('Соединение с базой данных ($this->db) должен быть инстанцией mirzaev\arangodb\connection', 500); - } - } - })(), - default => parent::__set($name, $value) - }; - } - - /** - * Прочитать свойство - * - * @param string $name Название - * - * @return mixed Содержимое - */ - public function __get(string $name): mixed - { - return match ($name) { - 'db' => (function () { - if (!$this->__isset('db')) { - // Свойство не инициализировано - - // Инициализация значения по умолчанию исходя из настроек - $this->__set('db', new connection(require static::SETTINGS)); - } - - return self::$db; - })(), - default => parent::__get($name) - }; - } - - /** - * Проверить свойство на инициализированность - * - * @param string $name Название - */ - public function __isset(string $name): bool - { - return match ($name) { - default => parent::__isset($name) - }; - } - - /** - * Удалить свойство - * - * @param string $name Название - */ - public function __unset(string $name): void - { - match ($name) { - default => parent::__isset($name) - }; - } - - - /** - * Статический вызов - * - * @param string $name Название - * @param array $arguments Параметры - */ - public static function __callStatic(string $name, array $arguments): mixed - { - match ($name) { - 'db' => (new static)->__get('db'), - default => throw new exception("Не найдено свойство или функция: $name", 500) - }; - } -} diff --git a/mirzaev/site/account/system/models/session.php b/mirzaev/site/account/system/models/session.php deleted file mode 100644 index 9bc2740..0000000 --- a/mirzaev/site/account/system/models/session.php +++ /dev/null @@ -1,352 +0,0 @@ - - */ -final class session extends core -{ - /** - * Коллекция - */ - public const COLLECTION = 'session'; - - /** - * Инстанция документа сессии в базе данных - */ - public _document $document; - - /** - * Конструктор - * - * Инициализация сессии и запись в свойство $this->document - * - * @param ?string $hash Хеш сессии в базе данных - * @param ?int $expires Дата окончания работы сессии (используется при создании новой сессии) - * @param array &$errors Реестр ошибок - * - * @return static Инстанция сессии - */ - public function __construct(?string $hash = null, ?int $expires = null, array &$errors = []) - { - try { - if (collection::init(static::$db->session, self::COLLECTION)) { - // Инициализирована коллекция - - if (isset($hash) && $session = collection::search(static::$db->session, sprintf( - << %d && d.status == 'active' - RETURN d - AQL, - self::COLLECTION, - time() - ))) { - // Найдена сессия по хешу - - // Запись в свойство - $this->document = $session; - } else if ($session = collection::search(static::$db->session, sprintf( - << %d && d.status == 'active' - RETURN d - AQL, - self::COLLECTION, - $_SERVER['REMOTE_ADDR'], - time() - ))) { - // Найдена сессия по данным пользователя - - // Запись в свойство - $this->document = $session; - } else { - // Не найдена сессия - - // Запись сессии в базу данных - $_id = document::write(static::$db->session, self::COLLECTION, [ - 'status' => 'active', - 'expires' => $expires ?? time() + 604800, - 'ip' => $_SERVER['REMOTE_ADDR'] - ]); - - if ($session = collection::search(static::$db->session, sprintf( - << %d && d.status == 'active' - RETURN d - AQL, - self::COLLECTION, - time() - ))) { - // Найдена только что созданная сессия - - // Запись хеша - $session->hash = sodium_bin2hex(sodium_crypto_generichash($_id)); - - if (document::update(static::$db->session, $session)) { - // Записано обновление - - // Запись в свойство - $this->document = $session; - } else throw new exception('Не удалось записать данные сессии'); - } else throw new exception('Не удалось создать или найти созданную сессию'); - } - } else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - } - - public function __destruct() - { - // Закрыть сессию - } - - /** - * Инициализировать связб сессии с аккаунтом - * - * Ищет связь сессии с аккаунтом, если не находит, то создаёт её - * - * @param account $account Инстанция аккаунта - * @param array &$errors Реестр ошибок - * - * @return bool Связан аккаунт? - */ - public function connect(account $account, array &$errors = []): bool - { - try { - if ( - collection::init(static::$db->session, self::COLLECTION) - && collection::init(static::$db->session, account::COLLECTION) - && collection::init(static::$db->session, self::COLLECTION . '_edge_' . account::COLLECTION, true) - ) { - // Инициализирована коллекция - - if ( - collection::search(static::$db->session, sprintf( - <<document->getId(), - $account->getId() - )) instanceof _document - || document::write(static::$db->session, self::COLLECTION . '_edge_' . account::COLLECTION, [ - '_from' => $this->document->getId(), - '_to' => $account->getId() - ]) - ) { - // Найдено, либо создано ребро: session -> account - - return true; - } else throw new exception('Не удалось создать ребро: session -> account'); - } else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return false; - } - - /** - * Найти связанный аккаунт - * - * @param array &$errors Реестр ошибок - * - * @return ?account Инстанция аккаунта, если удалось найти - */ - public function account(array &$errors = []): ?account - { - try { - if ( - collection::init(static::$db->session, self::COLLECTION) - && collection::init(static::$db->session, account::COLLECTION) - && collection::init(static::$db->session, self::COLLECTION . '_edge_' . account::COLLECTION, true) - ) { - // Инициализированы коллекции - - // Инициализация инстанции аккаунта - $account = new account; - - // Поиск инстанции аккаунта в базе данных - $account->document = collection::search(static::$db->session, sprintf( - <<getId() - )); - - if ($account->document instanceof _document) return $account; - else throw new exception('Не удалось найти инстанцию аккаунта в базе данных'); - } else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return null; - } - - /** - * Записать в буфер сессии - * - * @param array $data Данные для записи - * @param array &$errors Реестр ошибок - * - * @return bool Записаны данные в буфер сессии? - */ - public function write(array $data, array &$errors = []): bool - { - try { - if (collection::init(static::$db->session, self::COLLECTION)) { - // Инициализирована коллекция - - // Проверка инициализированности инстанции документа из базы данных - if (!isset($this->document)) throw new exception('Не инициализирована инстанция документа из базы данных'); - - // Запись параметров в инстанцию документа из базы данных - $this->document->buffer = array_replace_recursive($this->document->buffer ?? [], $data); - - if (document::update(static::$db->session, $this->document)) { - // Записано обновление - - return true; - } - - throw new exception('Не удалось записать данные в буфер сессии'); - } else throw new exception('Не удалось инициализировать коллекцию'); - } catch (exception $e) { - // Запись в реестр ошибок - $errors[] = [ - 'text' => $e->getMessage(), - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'stack' => $e->getTrace() - ]; - } - - return false; - } - - /** - * Записать - * - * Записывает свойство в инстанцию документа сессии из базы данных - * - * @param string $name Название - * @param mixed $value Содержимое - * - * @return void - */ - public function __set(string $name, mixed $value = null): void - { - $this->document->{$name} = $value; - } - - /** - * Прочитать - * - * Читает свойство из инстанции документа сессии из базы данных - * - * @param string $name Название - * - * @return mixed Данные свойства инстанции сессии или инстанции документа сессии из базы данных - */ - public function __get(string $name): mixed - { - return $this->document->{$name}; - } - - /** - * Проверить инициализированность - * - * Проверяет инициализированность свойства в инстанции документа сессии из базы данных - * - * @param string $name Название - * - * @return bool Свойство инициализировано? - */ - public function __isset(string $name): bool - { - return isset($this->document->{$name}); - } - - /** - * Удалить - * - * Деинициализировать свойство в инстанции документа сессии из базы данных - * - * @param string $name Название - * - * @return void - */ - public function __unset(string $name): void - { - unset($this->document->{$name}); - } - - /** - * Выполнить метод - * - * Выполнить метод в инстанции документа сессии из базы данных - * - * @param string $name Название - * @param array $arguments Аргументы - */ - public function __call(string $name, array $arguments = []) - { - if (method_exists($this->document, $name)) return $this->document->{$name}($arguments); - } -} diff --git a/mirzaev/site/account/system/public/css/account.css b/mirzaev/site/account/system/public/css/account.css deleted file mode 100644 index e670cf1..0000000 --- a/mirzaev/site/account/system/public/css/account.css +++ /dev/null @@ -1,268 +0,0 @@ -@keyframes glare { - 2%, - 100% { - left : 130%; - bottom : -200%; - width : 120px; - opacity: 0.7; - } -} - -main { - z-index: 1000; - top: 20%; - position: relative; - height: unset; - display: flex; - flex-direction: unset; - justify-content: center; - align-items: unset; -} - -div.column { - display: flex; - flex-direction: column; - gap: 20px; -} - -section.panel { - --display : flex; - z-index : 1000; - width : 400px; - position : absolute; - display : flex; - flex-direction: column; -} - -div.column>section.panel { - position : unset; -} - -section.panel.medium { - width: 300px; -} - -section.panel.small { - width: 220px; -} - -section.panel#mnemonic { - margin-left: -570px; -} - -section.panel#classic { - margin-left: 570px; -} - -section.panel>section.body>ul { - margin: 0 5%; - padding: 0; - display: flex; - flex-direction: column; - gap: 4px; - list-style: square; -} - -section.panel>section.body>ul>li { - font-size: 0.8rem; - word-break: break-word; - animation-duration : .35s; - animation-name : uprise; - animation-fill-mode : forwards; - animation-timing-function: cubic-bezier(.47,0,.74,.71); -} - -section.panel>section.body>dl { - margin: 0; - display: flex; - flex-direction: column; - gap: 4px; -} - -section.panel>section.body>dl>* { - word-break: break-word; - animation-duration : .35s; - animation-name : uprise; - animation-fill-mode : forwards; - animation-timing-function: cubic-bezier(.47,0,.74,.71); -} - -section.panel>section.body>dl>dt { - margin-left: 20px; - display: none; - font-size: 0.9rem; - font-weight: bold; -} - -section.panel>section.body>dl>dd { - margin-left: unset; - font-size: 0.8rem; -} - -section.panel>section.header { - z-index : 1000; - height : 50px; - display : flex; - justify-content: center; - align-items: end; - animation-duration: 120s; - border-radius : 3px 3px 0 0; - background-color : var(--background-above); -} - -section#profile>section.header { - margin-left : -50px; - height : 100px; - padding : 30px 0; - clip-path : url(#profile-header-mask); -} - -section#profile>section.header>img.avatar { - z-index : 1500; - left : 6px; - top : 36px; - width : 88px; - height : 88px; - position : absolute; - margin : auto; - object-fit : cover; - border-radius : 100%; - cursor : pointer; - image-rendering : smooth; - box-shadow : 0px 0px 12px 0px rgba(0, 0, 0, 0.5); - -webkit-box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5); - -moz-box-shadow : 0px 0px 12px 0px rgba(0, 0, 0, 0.5); -} - -section#profile>section.header>img.avatar:hover { - left : 0; - top : 30px; - width : 100px; - height : 100px; - box-shadow : 0px 0px 8px 0px rgba(0, 0, 0, 0.3); - -webkit-box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.3); - -moz-box-shadow : 0px 0px 8px 0px rgba(0, 0, 0, 0.3); -} - -section#profile>section.header>img.cover { - z-index : -5000; - left : -50px; - top : 0; - position : absolute; - width : calc(100% + 100px); - height : 100%; - object-position: 0px 30%; - object-fit : cover; - clip-path : polygon(50px 0, calc(100% - 50px) 0, calc(100% - 50px) 100%, 50px 100%); - border-radius : 0 0 3px 3px; - background : var(--background-above); -} - -section#profile>section.header>div.glare { - z-index : 3000; - left : -30px; - top : -300px; - width : 30px; - height : 400%; - position : absolute; - rotate : 25deg; - opacity : 0.2; - filter : unset; - pointer-events : none; - animation-name : glare; - animation-duration : 32s; - animation-delay : 2s; - animation-fill-mode : forwards; - animation-timing-function: linear; - background-color : #fff; -} - -section#profile>section.header>div { - animation-duration: 80s; -} - -section#profile>section.header>a { - margin : auto; - width : 100%; - margin-left : 110px; - padding-bottom: 0.5ex; - white-space : nowrap; - overflow-x : hidden; - text-overflow : ellipsis; - font-size : 1.3em; - font-weight : bold; - color : var(--text-inverse); - text-shadow : 0 0 8px #00000080; -} - -section.panel>section.header>:is(h1, h2, h3) { - margin-bottom: unset; -} - -section.panel>section.body { - padding : 20px 30px; - gap : 10px; - display : flex; - flex-direction : column; - border-radius : 0 0 3px 3px; - background-color : var(--background-above); -} - -section#profile>section.body>ul { - margin : unset; - margin-left : 10%; -} - -section#profile>section.body ul ul { - padding-top: 1ex; -} - -section#profile>section.body ul li:not(:last-child) { - margin-bottom: 1ex; -} - -section#profile>section.body div.buttons { - margin-top: 10px; - display: flex; -} - -section#profile>section.body div.buttons>button { - padding : 1ex 2ex; - cursor : pointer; - border-radius : 3px; - font-size : 0.9em; - background-color: unset; -} - -section#profile>section.body div.buttons>button:hover { - color: var(--text-hover); -} - -section#profile>section.body div.buttons>button:active { - color : var(--text-active); - transition: unset; -} - -section#profile>section.body div.buttons>button:first-of-type { - margin-left : auto; - margin-right: 5%; -} - -section#profile>section.body div.buttons>button:last-of-type { - margin-right: auto; -} - -section#profile>section.body div.buttons>button.accept { - padding : 1ex 5ex; - color : var(--text-inverse); - background-color: #63954d; -} - -section#profile>section.body div.buttons>button.accept:hover { - color : var(--text-inverse-above); - background-color: #6fa259; -} - -section#profile>section.body div.buttons>button.accept:active { - background-color: #63954d; -} diff --git a/mirzaev/site/account/system/public/css/main.css b/mirzaev/site/account/system/public/css/main.css deleted file mode 100644 index f5cc621..0000000 --- a/mirzaev/site/account/system/public/css/main.css +++ /dev/null @@ -1,288 +0,0 @@ -@media (prefers-color-scheme: light) { - :root { - --background-above-1 : #fff; - --background-above : #fff6f6; - --background : #e8dada; - --background-below : #d7c5c5; - --background-inverse : #221e1e; - --background-inverse-dark : #120f0f; - --node-background-important: #c3eac3; - --node-background-completed: #b0c0b0; - --node-background : #bdb; - --connection : #b2b7b2; - --connection-completed : #d1d1d1; - --text : #151313; - --text-hover : #463e3e; - --text-active : #0e0e0e; - --text-inverse-above : #fff; - --text-inverse : #efefef; - --text-inverse-below : #d0d0d0; - --text-red : #f8a2a2; - --text-red-hover : #ffbcbc; - --text-red-active : #e69191; - } -} - -@media (prefers-color-scheme: dark) { - :root { - --background-above-1: #322d2d; - --background-above : #2b2525; - --background : #221e1e; - --background-below : #121010; - --node-background : #221e1e; - --text : #e6e6e6; - --text-hover : #fff; - --text-active : #d0d0d0; - --text-inverse : #020202; - --red-light-1 : #dc4343; - --red-light : #bf3737; - --red : #a43333; - --red-dark : #8d2a2a; - --input-error : #6c2424; - } -} - -@keyframes page-background-gradient { - 25% { - left: -350%; - top : 0%; - } - - 50% { - left: 0%; - top : 0%; - } - - 75% { - left: 0%; - top : -350%; - } - - to { - left: -350%; - top : -350%; - } -} - -:root { - --link : #3c76ff; - --link-hover : #6594ff; - --link-active: #3064dd; -} - -.unselectable { - -webkit-touch-callout: none; - -webkit-user-select : none; - -khtml-user-select : none; - -moz-user-select : none; - -ms-user-select : none; - user-select : none; -} - -.hidden:not(.animation) { - display: none !important; -} - -* { - text-decoration: none; - outline : none; - border : none; - color : var(--text); - font-family : Fira, sans-serif; - transition : 0.1s ease-out; -} - -pre, code { - font-family: Hack, monospace; -} - -button { - cursor: pointer; -} - -a { - color: var(--link); -} - -a:hover { - color: var(--link-hover); -} - -a:active { - color : var(--link-active); - transition: unset; -} - -label { - position: relative; - height: 26px; - display: flex; - overflow: hidden; - border-radius: 2px; -} - -label>i:first-child { - left: 8px; - top: calc((26px - var(--height)) / 2); - position: absolute !important; - margin: auto; - color: #8c7d7d; -} - -label * { - /* color: var(--text-inverse); */ -} - -label>input { - width: 100%; - padding: 0 8px; - background-color: var(--background-above-1); -} - -label>input+button { - background-color: var(--red); -} - -i+input { - padding-left: 30px; -} - -input.error { - animation-duration : 1s; - animation-name : input-error; - animation-fill-mode : forwards; - animation-timing-function: ease-in; -} - -section.header>h1 { - font-size: 1.3rem; - line-height: 1.3rem; -} - -section.header>:is(h2, h3) { - font-size: 1.1rem; - line-height: 1.1rem; -} - -body { - height : 100vh; - margin : 0; - background-color: var(--background); -} - -body>div.background { - z-index : -50000; - left : -350%; - top : -350%; - width : 500%; - height : 500%; - position : absolute; - filter : blur(200px); - animation-duration : 15s; - animation-name : page-background-gradient; - animation-iteration-count: infinite; - background-repeat : no-repeat; - animation-timing-function: linear; - background-image : radial-gradient(circle, var(--background-above) 0%, rgba(0, 0, 0, 0) 100%); -} - -aside { - z-index : 500; - grid-column: 1/ 4; - grid-row : 2; - overflow : hidden; -} - -header { - z-index : 5000; - position : absolute; - display : flex; - flex-direction: column; - box-shadow : 2px 0 5px rgba(0, 0, 0, 0.3); -} - -header>menu { - margin : unset; - padding : 20px; - display : flex; - flex-direction : column; - flex-grow : 1; - background-color: var(--background-light-1); -} - -header>#account>button#login { - z-index: 1500; -} - -header>menu a { - margin-bottom: 8px; - display : flex; - align-items : center; -} - -header>menu a:last-child { - margin-bottom: unset; -} - -header>menu a svg { - margin-right: 8px; - height : 1.2rem; - position : relative; -} - -header>menu a:hover svg { - margin-left : -5px; - margin-right: 13px; -} - -header>menu a svg path { - fill: var(--text); -} - -header>section { - background-color: var(--background-light-1); -} - -header :is(button, a[type="button"]) { - width : 100%; - height : 40px; - display : flex; - justify-content : center; - align-items : center; - cursor : pointer; - background-color: var(--red); - transition : unset; -} - -header button { - font-weight : bold; - text-transform: uppercase; -} - -header :is(button, a[type="button"]):hover { - background-color: var(--red-light); -} - -header :is(button, a[type="button"]):active { - background-color: var(--red-dark); -} - -header>nav { - margin-top : auto; - display : flex; - flex-direction: column; -} - -main { - z-index : 1000; - height : 100%; - display : flex; - flex-direction: column; - justify-content : center; - align-items : center; -} - -footer { - z-index : 3000; - position: absolute; -} diff --git a/mirzaev/site/account/system/public/index.php b/mirzaev/site/account/system/public/index.php deleted file mode 100644 index aa9fdc1..0000000 --- a/mirzaev/site/account/system/public/index.php +++ /dev/null @@ -1,45 +0,0 @@ -write('/', 'index', 'index'); -$router->write('/system/hotline', 'hotline', 'index'); -$router->write('/system/graph', 'graph', 'index'); -$router->write('/account/initialization', 'account', 'initialization', 'POST'); -$router->write('/account/vk/connect', 'account', 'connect'); -$router->write('/account/panel', 'account', 'panel'); -$router->write('/api/generate/password', 'api', 'password', 'POST'); -$router->write('/session/login', 'session', 'login', 'POST'); -$router->write('/session/password', 'session', 'password', 'POST'); -$router->write('/session/invite', 'session', 'invite', 'POST'); - -// Инициализация ядра -$core = new core(namespace: __NAMESPACE__, router: $router, controller: new controller(false), model: new model(false)); - -// Обработка запроса -echo $core->start(); diff --git a/mirzaev/site/account/system/settings/.gitignore b/mirzaev/site/account/system/settings/.gitignore deleted file mode 100644 index 5bb97ae..0000000 --- a/mirzaev/site/account/system/settings/.gitignore +++ /dev/null @@ -1 +0,0 @@ -arangodb.php diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 0000000..d617f5c --- /dev/null +++ b/psalm.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/mirzaev/site/account/system/controllers/account.php b/svoboda/accounts/system/controllers/account.php similarity index 100% rename from mirzaev/site/account/system/controllers/account.php rename to svoboda/accounts/system/controllers/account.php diff --git a/mirzaev/site/account/system/controllers/api.php b/svoboda/accounts/system/controllers/api.php similarity index 100% rename from mirzaev/site/account/system/controllers/api.php rename to svoboda/accounts/system/controllers/api.php diff --git a/mirzaev/site/account/system/controllers/core.php b/svoboda/accounts/system/controllers/core.php similarity index 91% rename from mirzaev/site/account/system/controllers/core.php rename to svoboda/accounts/system/controllers/core.php index 94990a8..049be5c 100644 --- a/mirzaev/site/account/system/controllers/core.php +++ b/svoboda/accounts/system/controllers/core.php @@ -13,9 +13,6 @@ use mirzaev\site\account\views\templater, // Фреймворк PHP use mirzaev\minimal\controller; -// Встроенные библиотеки -use exception; - /** * Ядро контроллеров * @@ -24,25 +21,25 @@ use exception; */ class core extends controller { + /** + * Постфикс + */ + final public const POSTFIX = ''; + /** * Инстанция сессии */ - public session $session; + protected readonly session $session; /** * Инстанция аккаунта */ - public ?account $account; - - /** - * Постфикс - */ - public string $postfix = ''; + protected readonly ?account $account; /** * Реестр ошибок */ - public array $errors = [ + protected array $errors = [ 'session' => [], 'account' => [] ]; @@ -63,7 +60,7 @@ class core extends controller new models(); // Инициализация даты до которой будет активна сессия - $expires = time() + 604800; + $expires = strtotime( '+1 week' ); // Инициализация значения по умолчанию $_COOKIE["session"] ??= null; diff --git a/mirzaev/site/account/system/controllers/error.php b/svoboda/accounts/system/controllers/error.php similarity index 100% rename from mirzaev/site/account/system/controllers/error.php rename to svoboda/accounts/system/controllers/error.php diff --git a/mirzaev/site/account/system/controllers/graph.php b/svoboda/accounts/system/controllers/graph.php similarity index 100% rename from mirzaev/site/account/system/controllers/graph.php rename to svoboda/accounts/system/controllers/graph.php diff --git a/mirzaev/site/account/system/controllers/hotline.php b/svoboda/accounts/system/controllers/hotline.php similarity index 100% rename from mirzaev/site/account/system/controllers/hotline.php rename to svoboda/accounts/system/controllers/hotline.php diff --git a/mirzaev/site/account/system/controllers/index.php b/svoboda/accounts/system/controllers/index.php similarity index 100% rename from mirzaev/site/account/system/controllers/index.php rename to svoboda/accounts/system/controllers/index.php diff --git a/mirzaev/site/account/system/controllers/session.php b/svoboda/accounts/system/controllers/session.php similarity index 86% rename from mirzaev/site/account/system/controllers/session.php rename to svoboda/accounts/system/controllers/session.php index c1898bf..8c79a7c 100644 --- a/mirzaev/site/account/system/controllers/session.php +++ b/svoboda/accounts/system/controllers/session.php @@ -10,6 +10,9 @@ use mirzaev\site\account\controllers\core, mirzaev\site\account\models\invite, mirzaev\site\account\models\account; +// Библиотека для ArangoDB +use ArangoDBClient\Document as _document; + // Встроенные библиотеки use exception; @@ -53,19 +56,31 @@ final class session extends core if ($length > 100) throw new exception('Входной псевдоним не может быть длиннее 100 символов'); if (preg_match_all('/[^\w\s\r\n\t\0]+/u', $parameters['login'], $matches) > 0) throw new exception('Нельзя использовать символы: ' . implode(', ', ...$matches)); + if ($remember = isset($parameters['remember']) && $parameters['remember'] === '1') { + // Запрошено запоминание + + // Запись в cookie + setcookie('entry_login', $parameters['login'], [ + 'expires' => strtotime('+30 minutes'), + 'path' => '/', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'strict' + ]); + } + // Поиск аккаунта $account = account::login($parameters['login']); // Генерация ответа по запрашиваемым параметрам foreach ($return as $parameter) match ($parameter) { - 'exist' => $buffer['exist'] = isset($account->document), - 'account' => (function () use ($parameters, &$buffer) { + 'exist' => $buffer['exist'] = isset($account) && $account->instance() instanceof _document, + 'account' => (function () use ($parameters, $remember, &$buffer) { // Запись в буфер сессии - if (isset($parameters['remember']) && $parameters['remember'] === '1') - $this->session->write(['entry' => ['login' => $parameters['login']]], $this->errors); + if ($remember) $this->session->write(['entry' => ['login' => $parameters['login']]], $this->errors); // Поиск аккаунта и запись в буфер вывода - $buffer['account'] = isset((new account($this->session, authenticate: true, errors: $this->errors))->document); + $buffer['account'] = (new account($this->session, authenticate: true, errors: $this->errors))?->instance() instanceof _document; })(), 'errors' => null, default => throw new exception("Параметр не найден: $parameter") @@ -102,7 +117,7 @@ final class session extends core flush(); // Запись в буфер сессии - if (!in_array('account', $return, true) && isset($parameters['remember']) && $parameters['remember'] === '1') + if (!in_array('account', $return, true) && ($remember ?? false)) $this->session->write(['entry' => ['login' => $parameters['login']]]); } @@ -135,13 +150,13 @@ final class session extends core // Генерация ответа по запрашиваемым параметрам foreach ($return as $parameter) match ($parameter) { 'verify' => $buffer['verify'] = true, - 'account' => (function() use ($parameters, &$buffer) { + 'account' => (function () use ($parameters, &$buffer) { // Запись в буфер сессии if (isset($parameters['remember']) && $parameters['remember'] === '1') $this->session->write(['entry' => ['password' => $parameters['password']]], $this->errors); // Поиск аккаунта и запись в буфер вывода - $buffer['account'] = isset((new account($this->session, authenticate: true, register: true, errors: $this->errors))->document); + $buffer['account'] = (new account($this->session, authenticate: true, register: true, errors: $this->errors))?->instance() instanceof _document; })(), 'errors' => null, default => throw new exception("Параметр не найден: $parameter") @@ -216,7 +231,7 @@ final class session extends core // Генерация ответа по запрашиваемым параметрам foreach ($return as $parameter) match ($parameter) { - 'exist' => $buffer['exist'] = isset($invite->document), + 'exist' => $buffer['exist'] = isset($invite) && $invite->instance() instanceof _document, // from временное решение пока не будет разработана система сессий 'from' => $buffer['from'] = ['login' => 'mirzaev'] ?? $invite->from(), 'account' => (function () use ($parameters, &$buffer) { @@ -225,7 +240,7 @@ final class session extends core $this->session->write(['entry' => ['invite' => $parameters['invite']]], $this->errors); // Поиск аккаунта и запись в буфер вывода - $buffer['account'] = isset((new account($this->session, authenticate: true, errors: $this->errors))->document); + $buffer['account'] = (new account($this->session, authenticate: true, errors: $this->errors))?->instance() instanceof _document; })(), 'errors' => null, default => throw new exception("Параметр не найден: $parameter") diff --git a/mirzaev/site/account/system/controllers/traits/errors.php b/svoboda/accounts/system/controllers/traits/errors.php similarity index 100% rename from mirzaev/site/account/system/controllers/traits/errors.php rename to svoboda/accounts/system/controllers/traits/errors.php diff --git a/mirzaev/site/account/system/models/account.php b/svoboda/accounts/system/models/account.php similarity index 91% rename from mirzaev/site/account/system/models/account.php rename to svoboda/accounts/system/models/account.php index d69c83c..2f6fabb 100644 --- a/mirzaev/site/account/system/models/account.php +++ b/svoboda/accounts/system/models/account.php @@ -4,6 +4,9 @@ declare(strict_types=1); namespace mirzaev\site\account\models; +// Project files +use mirzaev\site\account\models\traits\instance; + // Фреймворк ArangoDB use mirzaev\arangodb\collection, mirzaev\arangodb\document; @@ -22,15 +25,17 @@ use exception; */ final class account extends core { + use instance; + /** * Коллекция */ - public const COLLECTION = 'account'; + final public const COLLECTION = 'account'; /** * Инстанция документа аккаунта в базе данных */ - public ?_document $document; + protected readonly _document $document; /** * Конструктор @@ -112,7 +117,8 @@ final class account extends core return $this; } else throw new exception('Неправильный пароль'); - } throw new exception('Неправильный пароль'); + } + throw new exception('Неправильный пароль'); } else { // Не найден аккаунт @@ -174,7 +180,6 @@ final class account extends core } } - /** * Найти по входному псевдониму * @@ -186,15 +191,15 @@ final class account extends core public static function login(string $login, array &$errors = []): ?self { try { - if (collection::init(static::$db->session, self::COLLECTION)) { + if (collection::init(static::$arangodb->session, self::COLLECTION)) { // Инициализирована коллекция // Инициализация инстанции аккаунта - $instance = new self; + $account = new self; // Поиск инстанции аккаунта в базе данных - $instance->document = collection::search( - static::$db->session, + $instance = $account->instance(collection::search( + static::$arangodb->session, sprintf( <<<'AQL' FOR d IN %s @@ -204,10 +209,10 @@ final class account extends core self::COLLECTION, $login ) - ); + )); - if ($instance->document instanceof _document) return $instance; - else throw new exception('Не удалось найти инстанцию аккаунта в базе данных'); + // Возврат (успех) + return $instance instanceof _document ? $account : throw new exception('Не удалось найти инстанцию аккаунта в базе данных'); } else throw new exception('Не удалось инициализировать коллекцию'); } catch (exception $e) { // Запись в реестр ошибок @@ -233,8 +238,8 @@ final class account extends core public static function create(array $data = [], array &$errors = []): bool { try { - if (collection::init(static::$db->session, self::COLLECTION)) - if (document::write(static::$db->session, self::COLLECTION, $data)) return true; + if (collection::init(static::$arangodb->session, self::COLLECTION)) + if (document::write(static::$arangodb->session, self::COLLECTION, $data)) return true; else throw new exception('Не удалось создать аккаунт'); else throw new exception('Не удалось инициализировать коллекцию'); } catch (exception $e) { diff --git a/svoboda/accounts/system/models/core.php b/svoboda/accounts/system/models/core.php new file mode 100644 index 0000000..2420531 --- /dev/null +++ b/svoboda/accounts/system/models/core.php @@ -0,0 +1,245 @@ + + */ +class core extends model +{ + /** + * Постфикс + */ + final public const POSTFIX = ''; + + /** + * Путь до файла с настройками подключения к базе данных ArangoDB + */ + final public const ARANGODB = '../settings/arangodb.php'; + + /** + * Путь до файла с настройками подключения к базе данных Redis + */ + final public const REDIS = '../settings/redis.php'; + + /** + * Соединение с базой данных ArangoDB + */ + protected static arangodb $arangodb; + + /** + * Соединение с базой данных Redis + */ + protected static redis $redis; + + /** + * Конструктор + * + * @param bool $initialize Инициализировать контроллер? + * @param ?arangodb $arangodb Инстанция соединения с базой данных ArangoDB + * @param ?redis $redis Инстанция соединения с базой данных Redis + */ + public function __construct(bool $initialize = true, ?arangodb $arangodb = null, ?redis $redis = null) + { + parent::__construct($initialize); + + if ($initialize) { + // Запрошена инициализация + + if (isset($arangodb)) { + // Получена инстанция соединения с базой данных + + // Запись и инициализация соединения с базой данных + $this->__set('arangodb', $arangodb); + } else { + // Не получена инстанция соединения с базой данных + + // Инициализация соединения с базой данных по умолчанию + $this->__get('arangodb'); + } + + if (isset($redis)) { + // Получена инстанция соединения с базой данных + + // Запись и инициализация соединения с базой данных + $this->__set('redis', $redis); + } else { + // Не получена инстанция соединения с базой данных + + // Инициализация соединения с базой данных по умолчанию + $this->__get('redis'); + } + } + } + + /** + * Записать свойство + * + * @param string $name Название + * @param mixed $value Значение + */ + public function __set(string $name, mixed $value = null): void + { + match ($name) { + 'arangodb' => (function () use ($value) { + if ($this->__isset('arangodb')) { + // Свойство уже было инициализировано + + // Выброс исключения (неудача) + throw new exception('Запрещено реинициализировать соединение с базой данных ArangoDB ($this::$arangodb)', 500); + } else { + // Свойство ещё не было инициализировано + + if ($value instanceof arangodb) { + // Передано подходящее значение + + // Запись свойства (успех) + self::$arangodb = $value; + } else { + // Передано неподходящее значение + + // Выброс исключения (неудача) + throw new exception('Соединение с базой данных ArangoDB ($this::$arangodb) должно быть инстанцией mirzaev\arangodb\connection', 500); + } + } + })(), + 'redis' => (function () use ($value) { + if ($this->__isset('redis')) { + // Свойство уже было инициализировано + + // Выброс исключения (неудача) + throw new exception('Запрещено реинициализировать соединение с базой данных Redis ($this::$redis)', 500); + } else { + // Свойство ещё не было инициализировано + + if ($value instanceof redis) { + // Передано подходящее значение + + // Запись свойства (успех) + self::$redis = $value; + } else { + // Передано неподходящее значение + + // Выброс исключения (неудача) + throw new exception('Соединение с базой данных Redis ($this::$arangodb) должно быть инстанцией redis', 500); + } + } + })(), + + default => parent::__set($name, $value) + }; + } + + /** + * Прочитать свойство + * + * @param string $name Название + * + * @return mixed Содержимое + */ + public function __get(string $name): mixed + { + return match ($name) { + 'arangodb' => (function () { + try { + if (!$this->__isset('arangodb')) { + // Свойство не инициализировано + + // Инициализация значения по умолчанию исходя из настроек + $this->__set('arangodb', new arangodb(require static::ARANGODB)); + } + + return self::$arangodb; + } catch (exception) { + return null; + } + })(), + 'redis' => (function () { + try { + if (!$this->__isset('redis')) { + // Свойство не инициализировано + + // Инициализация настроек + [$connect, $authentication] = require static::REDIS; + + // Инициализация инстанции redis + $redis = new redis; + + // Подключение к базе данных redis + $redis->pconnect(...$connect); + + // Аутентификация + $redis->auth($authentication); + + // Выбор базы данных + $redis->select(1); + + // Инициализация значения по умолчанию исходя из настроек + $this->__set('redis', $redis); + } + + return self::$redis; + } catch (redisexception) { + return null; + } + })(), + default => parent::__get($name) + }; + } + + /** + * Проверить свойство на инициализированность + * + * @param string $name Название + */ + public function __isset(string $name): bool + { + return match ($name) { + default => parent::__isset($name) + }; + } + + /** + * Удалить свойство + * + * @param string $name Название + */ + public function __unset(string $name): void + { + match ($name) { + default => parent::__isset($name) + }; + } + + + /** + * Статический вызов + * + * @param string $name Название + * @param array $arguments Параметры + */ + public static function __callStatic(string $name, array $arguments): mixed + { + match ($name) { + 'arangodb' => (new static)->__get('arangodb'), + 'redis' => (new static)->__get('redis'), + default => throw new exception("Не найдено свойство или функция: $name", 500) + }; + } +} diff --git a/mirzaev/site/account/system/models/generators/password.php b/svoboda/accounts/system/models/generators/password.php similarity index 100% rename from mirzaev/site/account/system/models/generators/password.php rename to svoboda/accounts/system/models/generators/password.php diff --git a/mirzaev/site/account/system/models/invite.php b/svoboda/accounts/system/models/invite.php similarity index 60% rename from mirzaev/site/account/system/models/invite.php rename to svoboda/accounts/system/models/invite.php index eda85c7..8866099 100644 --- a/mirzaev/site/account/system/models/invite.php +++ b/svoboda/accounts/system/models/invite.php @@ -4,12 +4,12 @@ declare(strict_types=1); namespace mirzaev\site\account\models; -// Файлы проекта -use mirzaev\site\account\models\account; +// Project files +use mirzaev\site\account\models\account, + mirzaev\site\account\models\traits\instance; // Фреймворк ArangoDB -use mirzaev\arangodb\collection, - mirzaev\arangodb\document; +use mirzaev\arangodb\collection; // Библиотека для ArangoDB use ArangoDBClient\Document as _document; @@ -25,36 +25,38 @@ use exception; */ final class invite extends core { + use instance; + /** * Коллекция */ - public const COLLECTION = 'invite'; + final public const COLLECTION = 'invite'; /** * Инстанция документа приглашения в базе данных */ - public ?_document $document; + protected readonly _document $document; /** * Прочитать * - * @param string $invite Ключ приглашения + * @param string $key Ключ приглашения * @param array &$errors Реестр ошибок * * @return ?self Инстанция приглашения, если оно найдено */ - public static function read(string $invite, array &$errors = []): ?self + public static function read(string $key, array &$errors = []): ?self { try { - if (collection::init(static::$db->session, self::COLLECTION)) { + if (collection::init(static::$arangodb->session, self::COLLECTION)) { // Инициализирована коллекция // Инициализация инстанции приглашения - $instance = new self; + $invite = new self; // Поиск приглашения - $instance->document = collection::search( - static::$db->session, + $instance = $invite->instance(collection::search( + static::$arangodb->session, sprintf( <<document instanceof _document) return $instance; - else throw new exception('Не удалось найти инстанцию приглашения в базе данных'); - } throw new exception('Не удалось инициализировать коллекцию'); + // Exit (success) + return $instance instanceof _document ? $invite : throw new exception('Не удалось найти инстанцию приглашения в базе данных'); + } else throw new exception('Не удалось инициализировать коллекцию'); } catch (exception $e) { // Запись в реестр ошибок $errors[] = [ diff --git a/svoboda/accounts/system/models/session.php b/svoboda/accounts/system/models/session.php new file mode 100644 index 0000000..b5f9862 --- /dev/null +++ b/svoboda/accounts/system/models/session.php @@ -0,0 +1,411 @@ + + */ +final class session extends core +{ + /** + * Collection name in ArangoDB + */ + final public const COLLECTION = 'session'; + + /** + * Session data in JSON format + * + * Used as a cache in Redis + */ + protected readonly string $json; + + /** + * Инстанция документа сессии в базе данных + * + * Used as a permanent storage in ArangoDB + */ + protected readonly _document $document; + + /** + * Конструктор + * + * Инициализация сессии и запись в свойство $this->document + * + * @param ?string $hash Хеш сессии в базе данных + * @param ?int $expires Дата окончания работы сессии (используется при создании новой сессии) + * @param array &$errors Реестр ошибок + * + * @return static Инстанция сессии + */ + public function __construct(?string $hash = null, ?int $expires = null, array &$errors = []) + { + try { + if (collection::init(static::$arangodb->session, self::COLLECTION)) { + // Инициализирована коллекция + + if (isset($hash)) { + // Received session hash + + + if ($session = collection::search($this::$arangodb->session, sprintf( + << %d && d.status == 'active' + RETURN d + AQL, + self::COLLECTION, + $_SERVER['REMOTE_ADDR'], + time() + ))) { + // Найдена сессия по данным пользователя + + // Запись в свойство + $this->document = $session; + } + } else { + // Не найдена сессия + + // Запись сессии в базу данных + $_id = document::write($this::$arangodb->session, self::COLLECTION, [ + 'status' => 'active', + 'expires' => $expires ?? time() + 604800, + 'ip' => $_SERVER['REMOTE_ADDR'] + ]); + + if ($session = collection::search($this::$arangodb->session, sprintf( + << %d && d.status == 'active' + RETURN d + AQL, + self::COLLECTION, + time() + ))) { + // Найдена только что созданная сессия + + // Запись хеша + $session->hash = sodium_bin2hex(sodium_crypto_generichash($_id)); + + if (document::update($this::$arangodb->session, $session)) { + // Записано обновление + + // Запись в свойство + $this->document = $session; + } else throw new exception('Не удалось записать данные сессии'); + } else throw new exception('Не удалось создать или найти созданную сессию'); + } + } else throw new exception('Не удалось инициализировать коллекцию'); + } catch (exception $e) { + // Запись в реестр ошибок + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + } + } + + public function search(string $hash, array &$errors = []): bool + { + try { + if (static::$redis->exist($hash) === 1) { + // Confirmed the existence of session data in Redis (cache) + + // Search the session data in Redis + $json = static::$redis->get($hash); + + // Session data not found? Then search in ArangoDB + if ($json === false) goto search_arangodb; + + if ($json['expires'] > time() && $json['status'] === 'active') { + // The session is active + + // Write the session data to the property + $this->json = $json; + + // Exit (success) + return true; + } + } else { + // Not confirmed the existence of session data in Redis (cache) + + search_arangodb: + + // Search the session data in ArangoDB + $_document = collection::search(static::$arangodb->session, sprintf( + << %d && d.status == 'active' + RETURN d + AQL, + self::COLLECTION, + time() + )); + + if ($_document instanceof _document) { + // The session found and active + + // Write the session data to the property + $this->document = $_document; + + // Exit (success) + return true; + } + } + } catch (exception $e) { + // Write to the errors registry + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + } + + // Exit (fail) + return false; + } + + + public function __destruct() + { + // Закрыть сессию + } + + /** + * Инициализировать связь сессии с аккаунтом + * + * Ищет связь сессии с аккаунтом, если не находит, то создаёт её + * + * @param account $account Инстанция аккаунта + * @param array &$errors Реестр ошибок + * + * @return bool Связан аккаунт? + */ + public function connect(account $account, array &$errors = []): bool + { + try { + if ( + collection::init($this::$arangodb->session, self::COLLECTION) + && collection::init($this::$arangodb->session, account::COLLECTION) + && collection::init($this::$arangodb->session, self::COLLECTION . '_edge_' . account::COLLECTION, true) + ) { + // Инициализирована коллекция + + if ( + collection::search($this::$arangodb->session, sprintf( + <<document->getId(), + $account->getId() + )) instanceof _document + || document::write($this::$arangodb->session, self::COLLECTION . '_edge_' . account::COLLECTION, [ + '_from' => $this->document->getId(), + '_to' => $account->getId() + ]) + ) { + // Найдено, либо создано ребро: session -> account + + return true; + } else throw new exception('Не удалось создать ребро: session -> account'); + } else throw new exception('Не удалось инициализировать коллекцию'); + } catch (exception $e) { + // Запись в реестр ошибок + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + } + + return false; + } + + /** + * Найти связанный аккаунт + * + * @param array &$errors Реестр ошибок + * + * @return ?account Инстанция аккаунта, если удалось найти + */ + public function account(array &$errors = []): ?account + { + try { + if ( + collection::init($this::$arangodb->session, self::COLLECTION) + && collection::init($this::$arangodb->session, account::COLLECTION) + && collection::init($this::$arangodb->session, self::COLLECTION . '_edge_' . account::COLLECTION, true) + ) { + // Инициализированы коллекции + + // Инициализация инстанции аккаунта + $account = new account; + + // Поиск инстанции аккаунта в базе данных + $instance = $account->instance(collection::search($this::$arangodb->session, sprintf( + <<getId() + ))); + + // Возврат (успех) + return $instance instanceof _document ? $account : throw new exception('Не удалось найти инстанцию аккаунта в базе данных'); + } else throw new exception('Не удалось инициализировать коллекцию'); + } catch (exception $e) { + // Запись в реестр ошибок + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + } + + return null; + } + + /** + * Записать в буфер сессии + * + * @param array $data Данные для записи + * @param array &$errors Реестр ошибок + * + * @return bool Записаны данные в буфер сессии? + */ + public function write(array $data, array &$errors = []): bool + { + try { + if (collection::init($this::$arangodb->session, self::COLLECTION)) { + // Инициализирована коллекция + + // Проверка инициализированности инстанции документа из базы данных + if (!isset($this->document)) throw new exception('Не инициализирована инстанция документа из базы данных'); + + // Запись параметров в инстанцию документа из базы данных + $this->document->buffer = array_replace_recursive($this->document->buffer ?? [], $data); + + // Запись в базу данных и возврат (успех) + return document::update($this::$arangodb->session, $this->document) ? true : throw new exception('Не удалось записать данные в буфер сессии'); + } else throw new exception('Не удалось инициализировать коллекцию'); + } catch (exception $e) { + // Запись в реестр ошибок + $errors[] = [ + 'text' => $e->getMessage(), + 'file' => $e->getFile(), + 'line' => $e->getLine(), + 'stack' => $e->getTrace() + ]; + } + + return false; + } + + /** + * Записать + * + * Записывает свойство в инстанцию документа сессии из базы данных + * + * @param string $name Название + * @param mixed $value Содержимое + * + * @return void + */ + public function __set(string $name, mixed $value = null): void + { + $this->document->{$name} = $value; + } + + /** + * Прочитать + * + * Читает свойство из инстанции документа сессии из базы данных + * + * @param string $name Название + * + * @return mixed Данные свойства инстанции сессии или инстанции документа сессии из базы данных + */ + public function __get(string $name): mixed + { + return $this->document->{$name}; + } + + /** + * Проверить инициализированность + * + * Проверяет инициализированность свойства в инстанции документа сессии из базы данных + * + * @param string $name Название + * + * @return bool Свойство инициализировано? + */ + public function __isset(string $name): bool + { + return isset($this->document->{$name}); + } + + /** + * Удалить + * + * Деинициализировать свойство в инстанции документа сессии из базы данных + * + * @param string $name Название + * + * @return void + */ + public function __unset(string $name): void + { + unset($this->document->{$name}); + } + + /** + * Выполнить метод + * + * Выполнить метод в инстанции документа сессии из базы данных + * + * @param string $name Название + * @param array $arguments Аргументы + */ + public function __call(string $name, array $arguments = []) + { + if (method_exists($this->document, $name)) return $this->document->{$name}($arguments); + } +} diff --git a/svoboda/accounts/system/models/traits/instance.php b/svoboda/accounts/system/models/traits/instance.php new file mode 100644 index 0000000..6cc6686 --- /dev/null +++ b/svoboda/accounts/system/models/traits/instance.php @@ -0,0 +1,36 @@ + + */ +trait instance +{ + /** + * Инициализация инстанции документа в базе данных + * + * @param ?_document $document Инстанция документа в базе данных для записи + * + * @return ?_document Инстанция документа в базе данных, если инициализирована + */ + public function instance(?_document $document = null): ?_document + { + // Проверка инициализированности и возврат (успех) + if (isset($this->document)) return $this->document; + + // Проверка инстанции документа в базе данных для записи и возврат (провал) + if ($document === null) return null; + + // Запись в свойство и возврат (успех) + return $this->document = $document; + } +} diff --git a/svoboda/accounts/system/public/css/account.css b/svoboda/accounts/system/public/css/account.css new file mode 100644 index 0000000..60c4071 --- /dev/null +++ b/svoboda/accounts/system/public/css/account.css @@ -0,0 +1,277 @@ +@keyframes glare { + 2%, + 100% { + left: 130%; + bottom: -200%; + width: 120px; + opacity: 0.7; + } +} + +main { + z-index: 1000; + top: 20%; + position: relative; + height: unset; + display: flex; + flex-direction: unset; + justify-content: center; + align-items: unset; +} + +div.column { + display: flex; + flex-direction: column; + gap: 20px; +} + +section.panel { + --display: flex; + z-index: 1000; + width: 400px; + position: absolute; + display: flex; + flex-direction: column; +} + +div.column > section.panel { + position: unset; +} + +section.panel.medium { + width: 300px; +} + +section.panel.small { + width: 220px; +} + +section.panel#mnemonic { + margin-left: -570px; +} + +section.panel#classic { + margin-left: 570px; +} + +section.panel > section.body > ul { + margin: 0 5%; + padding: 0; + display: flex; + flex-direction: column; + gap: 4px; + list-style: square; +} + +section.panel > section.body > ul > li { + font-size: 0.8rem; + word-break: break-word; + animation-duration: 0.35s; + animation-name: uprise; + animation-fill-mode: forwards; + animation-timing-function: cubic-bezier(0.47, 0, 0.74, 0.71); +} + +section.panel > section.body > dl { + margin: 0; + display: flex; + flex-direction: column; + gap: 4px; +} + +section.panel > section.body > dl > * { + word-break: break-word; + animation-duration: 0.35s; + animation-name: uprise; + animation-fill-mode: forwards; + animation-timing-function: cubic-bezier(0.47, 0, 0.74, 0.71); +} + +section.panel > section.body > dl > dt { + margin-left: 20px; + display: none; + font-size: 0.9rem; + font-weight: bold; +} + +section.panel > section.body > dl > dd { + margin-left: unset; + font-size: 0.8rem; +} + +section.panel > section.header { + z-index: 1000; + height: 50px; + display: flex; + justify-content: center; + align-items: end; + animation-duration: 120s; + border-radius: 3px 3px 0 0; + background-color: var(--background-above); +} + +section#profile > section.header { + margin-left: -50px; + height: 100px; + padding: 30px 0; + clip-path: url(#profile-header-mask); +} + +section#profile > section.header > img.avatar { + z-index: 1500; + left: 6px; + top: 36px; + width: 88px; + height: 88px; + position: absolute; + margin: auto; + object-fit: cover; + border-radius: 100%; + cursor: pointer; + image-rendering: smooth; + box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.5); +} + +section#profile > section.header > img.avatar:hover { + left: 0; + top: 30px; + width: 100px; + height: 100px; + box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.3); +} + +section#profile > section.header > img.cover { + z-index: -5000; + left: -50px; + top: 0; + position: absolute; + width: calc(100% + 100px); + height: 100%; + object-position: 0px 30%; + object-fit: cover; + clip-path: polygon( + 50px 0, + calc(100% - 50px) 0, + calc(100% - 50px) 100%, + 50px 100% + ); + border-radius: 0 0 3px 3px; + background: var(--background-above); +} + +section#profile > section.header > div.glare { + z-index: 3000; + left: -30px; + top: -300px; + width: 30px; + height: 400%; + position: absolute; + rotate: 25deg; + opacity: 0.2; + filter: unset; + pointer-events: none; + animation-name: glare; + animation-duration: 32s; + animation-delay: 2s; + animation-fill-mode: forwards; + animation-timing-function: linear; + background-color: #fff; +} + +section#profile > section.header > div { + animation-duration: 80s; +} + +section#profile > section.header > a { + margin: auto; + width: 100%; + margin-left: 110px; + padding-bottom: 0.5ex; + white-space: nowrap; + overflow-x: hidden; + text-overflow: ellipsis; + font-size: 1.3em; + font-weight: bold; + color: var(--text-inverse); + text-shadow: 0 0 8px #00000080; +} + +section.panel > section.header > :is(h1, h2, h3) { + margin-bottom: unset; +} + +section.panel > section.body { + padding: 20px 30px; + gap: 10px; + display: flex; + flex-direction: column; + border-radius: 0 0 3px 3px; + background-color: var(--background-above); +} + +section.panel > section.postscript { + padding: 10px 12px; +} + +section#profile > section.body > ul { + margin: unset; + margin-left: 10%; +} + +section#profile > section.body ul ul { + padding-top: 1ex; +} + +section#profile > section.body ul li:not(:last-child) { + margin-bottom: 1ex; +} + +section#profile > section.body div.buttons { + margin-top: 10px; + display: flex; +} + +section#profile > section.body div.buttons > button { + padding: 1ex 2ex; + cursor: pointer; + border-radius: 3px; + font-size: 0.9em; + background-color: unset; +} + +section#profile > section.body div.buttons > button:hover { + color: var(--text-hover); +} + +section#profile > section.body div.buttons > button:active { + color: var(--text-active); + transition: unset; +} + +section#profile > section.body div.buttons > button:first-of-type { + margin-left: auto; + margin-right: 5%; +} + +section#profile > section.body div.buttons > button:last-of-type { + margin-right: auto; +} + +section#profile > section.body div.buttons > button.accept { + padding: 1ex 5ex; + color: var(--text-inverse); + background-color: #63954d; +} + +section#profile > section.body div.buttons > button.accept:hover { + color: var(--text-inverse-above); + background-color: #6fa259; +} + +section#profile > section.body div.buttons > button.accept:active { + background-color: #63954d; +} diff --git a/mirzaev/site/account/system/public/css/animations.css b/svoboda/accounts/system/public/css/animations.css similarity index 100% rename from mirzaev/site/account/system/public/css/animations.css rename to svoboda/accounts/system/public/css/animations.css diff --git a/mirzaev/site/account/system/public/css/fonts/fira.css b/svoboda/accounts/system/public/css/fonts/fira.css similarity index 100% rename from mirzaev/site/account/system/public/css/fonts/fira.css rename to svoboda/accounts/system/public/css/fonts/fira.css diff --git a/mirzaev/site/account/system/public/css/fonts/hack.css b/svoboda/accounts/system/public/css/fonts/hack.css similarity index 100% rename from mirzaev/site/account/system/public/css/fonts/hack.css rename to svoboda/accounts/system/public/css/fonts/hack.css diff --git a/mirzaev/site/account/system/public/css/gradient.css b/svoboda/accounts/system/public/css/gradient.css similarity index 100% rename from mirzaev/site/account/system/public/css/gradient.css rename to svoboda/accounts/system/public/css/gradient.css diff --git a/mirzaev/site/account/system/public/css/graph.css b/svoboda/accounts/system/public/css/graph.css similarity index 100% rename from mirzaev/site/account/system/public/css/graph.css rename to svoboda/accounts/system/public/css/graph.css diff --git a/mirzaev/site/account/system/public/css/hotline.css b/svoboda/accounts/system/public/css/hotline.css similarity index 100% rename from mirzaev/site/account/system/public/css/hotline.css rename to svoboda/accounts/system/public/css/hotline.css diff --git a/mirzaev/site/account/system/public/css/icon_close.css b/svoboda/accounts/system/public/css/icon_close.css similarity index 100% rename from mirzaev/site/account/system/public/css/icon_close.css rename to svoboda/accounts/system/public/css/icon_close.css diff --git a/mirzaev/site/account/system/public/css/icons/arrow_right.css b/svoboda/accounts/system/public/css/icons/arrow_right.css similarity index 100% rename from mirzaev/site/account/system/public/css/icons/arrow_right.css rename to svoboda/accounts/system/public/css/icons/arrow_right.css diff --git a/mirzaev/site/account/system/public/css/icons/keyhole.css b/svoboda/accounts/system/public/css/icons/keyhole.css similarity index 100% rename from mirzaev/site/account/system/public/css/icons/keyhole.css rename to svoboda/accounts/system/public/css/icons/keyhole.css diff --git a/mirzaev/site/account/system/public/css/icons/lock.css b/svoboda/accounts/system/public/css/icons/lock.css similarity index 100% rename from mirzaev/site/account/system/public/css/icons/lock.css rename to svoboda/accounts/system/public/css/icons/lock.css diff --git a/mirzaev/site/account/system/public/css/icons/mail.css b/svoboda/accounts/system/public/css/icons/mail.css similarity index 100% rename from mirzaev/site/account/system/public/css/icons/mail.css rename to svoboda/accounts/system/public/css/icons/mail.css diff --git a/mirzaev/site/account/system/public/css/icons/nametag.css b/svoboda/accounts/system/public/css/icons/nametag.css similarity index 100% rename from mirzaev/site/account/system/public/css/icons/nametag.css rename to svoboda/accounts/system/public/css/icons/nametag.css diff --git a/mirzaev/site/account/system/public/css/icons/user_add.css b/svoboda/accounts/system/public/css/icons/user_add.css similarity index 100% rename from mirzaev/site/account/system/public/css/icons/user_add.css rename to svoboda/accounts/system/public/css/icons/user_add.css diff --git a/svoboda/accounts/system/public/css/main.css b/svoboda/accounts/system/public/css/main.css new file mode 100644 index 0000000..6706aec --- /dev/null +++ b/svoboda/accounts/system/public/css/main.css @@ -0,0 +1,290 @@ +@media (prefers-color-scheme: light) { + :root { + --background-above-1: #fff; + --background-above: #fff6f6; + --background: #e8dada; + --background-below: #d7c5c5; + --background-inverse: #221e1e; + --background-inverse-dark: #120f0f; + --node-background-important: #c3eac3; + --node-background-completed: #b0c0b0; + --node-background: #bdb; + --connection: #b2b7b2; + --connection-completed: #d1d1d1; + --text: #151313; + --text-hover: #463e3e; + --text-active: #0e0e0e; + --text-inverse-above: #fff; + --text-inverse: #efefef; + --text-inverse-below: #d0d0d0; + --text-red: #f8a2a2; + --text-red-hover: #ffbcbc; + --text-red-active: #e69191; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --background-above-1: #322d2d; + --background-above: #2b2525; + --background: #221e1e; + --background-below: #121010; + --node-background: #221e1e; + --text: #e6e6e6; + --text-hover: #fff; + --text-active: #d0d0d0; + --text-inverse: #020202; + --red-light-1: #dc4343; + --red-light: #bf3737; + --red: #a43333; + --red-dark: #8d2a2a; + --input-error: #6c2424; + } +} + +@keyframes page-background-gradient { + 25% { + left: -350%; + top: 0%; + } + + 50% { + left: 0%; + top: 0%; + } + + 75% { + left: 0%; + top: -350%; + } + + to { + left: -350%; + top: -350%; + } +} + +:root { + --link: #3c76ff; + --link-hover: #6594ff; + --link-active: #3064dd; +} + +.unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.hidden:not(.animation) { + display: none !important; +} + +* { + text-decoration: none; + outline: none; + border: none; + color: var(--text); + font-family: Fira, sans-serif; + transition: 0.1s ease-out; +} + +pre, +code { + font-family: Hack, monospace; +} + +button, +input[type="submit"] { + cursor: pointer; +} + +a { + color: var(--link); +} + +a:hover { + color: var(--link-hover); +} + +a:active { + color: var(--link-active); + transition: unset; +} + +label { + position: relative; + height: 26px; + display: flex; + overflow: hidden; + border-radius: 2px; +} + +label > i:first-child { + left: 8px; + top: calc((26px - var(--height)) / 2); + position: absolute !important; + margin: auto; + color: #8c7d7d; +} + +label * { + /* color: var(--text-inverse); */ +} + +label > input { + width: 100%; + padding: 0 8px; + background-color: var(--background-above-1); +} + +label > input + button { + background-color: var(--red); +} + +i + input { + padding-left: 30px; +} + +input.error { + animation-duration: 1s; + animation-name: input-error; + animation-fill-mode: forwards; + animation-timing-function: ease-in; +} + +section.header > h1 { + font-size: 1.3rem; + line-height: 1.3rem; +} + +section.header > :is(h2, h3) { + font-size: 1.1rem; + line-height: 1.1rem; +} + +body { + height: 100vh; + margin: 0; + background-color: var(--background); +} + +body > div.background { + z-index: -50000; + left: -350%; + top: -350%; + width: 500%; + height: 500%; + position: absolute; + filter: blur(200px); + animation-duration: 15s; + animation-name: page-background-gradient; + animation-iteration-count: infinite; + background-repeat: no-repeat; + animation-timing-function: linear; + background-image: radial-gradient( + circle, + var(--background-above) 0%, + rgba(0, 0, 0, 0) 100% + ); +} + +aside { + z-index: 500; + grid-column: 1/ 4; + grid-row: 2; + overflow: hidden; +} + +header { + z-index: 5000; + position: absolute; + display: flex; + flex-direction: column; + box-shadow: 2px 0 5px rgba(0, 0, 0, 0.3); +} + +header > menu { + margin: unset; + padding: 20px; + display: flex; + flex-direction: column; + flex-grow: 1; + background-color: var(--background-light-1); +} + +header > menu a { + margin-bottom: 8px; + display: flex; + align-items: center; +} + +header > menu a:last-child { + margin-bottom: unset; +} + +header > menu a svg { + margin-right: 8px; + height: 1.2rem; + position: relative; +} + +header > menu a:hover svg { + margin-left: -5px; + margin-right: 13px; +} + +header > menu a svg path { + fill: var(--text); +} + +header > section { + background-color: var(--background-light-1); +} + +header :is(button, a[type="button"], input[type="submit"]) { + width: 100%; + height: 40px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + background-color: var(--red); + transition: unset; +} + +header :is(button, a[type="button"], input[type="submit"]) { + font-weight: bold; + text-transform: uppercase; +} + +header :is(button, a[type="button"], input[type="submit"]):hover { + background-color: var(--red-light); +} + +header :is(button, a[type="button"], input[type="submit"]):active { + background-color: var(--red-dark); +} + +header > nav { + margin-top: auto; + display: flex; + flex-direction: column; +} + +main { + z-index: 1000; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +footer { + z-index: 3000; + position: absolute; +} diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraMono-Bold.woff b/svoboda/accounts/system/public/fonts/fira/FiraMono-Bold.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraMono-Bold.woff rename to svoboda/accounts/system/public/fonts/fira/FiraMono-Bold.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraMono-Bold.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraMono-Bold.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraMono-Bold.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraMono-Bold.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraMono-Medium.woff b/svoboda/accounts/system/public/fonts/fira/FiraMono-Medium.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraMono-Medium.woff rename to svoboda/accounts/system/public/fonts/fira/FiraMono-Medium.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraMono-Medium.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraMono-Medium.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraMono-Medium.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraMono-Medium.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraMono-Regular.woff b/svoboda/accounts/system/public/fonts/fira/FiraMono-Regular.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraMono-Regular.woff rename to svoboda/accounts/system/public/fonts/fira/FiraMono-Regular.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraMono-Regular.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraMono-Regular.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraMono-Regular.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraMono-Regular.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Bold.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Bold.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Bold.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Bold.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Bold.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Bold.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Bold.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Bold.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-BoldItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-BoldItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-BoldItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-BoldItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-BoldItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-BoldItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-BoldItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-BoldItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Book.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Book.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Book.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Book.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Book.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Book.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Book.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Book.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-BookItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-BookItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-BookItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-BookItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-BookItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-BookItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-BookItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-BookItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Eight.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Eight.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Eight.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Eight.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Eight.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Eight.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Eight.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Eight.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-EightItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-EightItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-EightItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-EightItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-EightItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-EightItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-EightItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-EightItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBold.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBold.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBold.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBold.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBold.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBold.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBold.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBold.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraBoldItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLight.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLight.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLight.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLight.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLight.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLight.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLight.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLight.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ExtraLightItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Four.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Four.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Four.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Four.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Four.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Four.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Four.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Four.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-FourItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-FourItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-FourItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-FourItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-FourItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-FourItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-FourItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-FourItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Hair.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Hair.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Hair.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Hair.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Hair.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Hair.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Hair.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Hair.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-HairItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-HairItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-HairItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-HairItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-HairItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-HairItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-HairItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-HairItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Heavy.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Heavy.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Heavy.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Heavy.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Heavy.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Heavy.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Heavy.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Heavy.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-HeavyItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-HeavyItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-HeavyItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-HeavyItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-HeavyItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-HeavyItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-HeavyItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-HeavyItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Italic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Italic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Italic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Italic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Italic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Italic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Italic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Italic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Light.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Light.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Light.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Light.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Light.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Light.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Light.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Light.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-LightItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-LightItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-LightItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-LightItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-LightItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-LightItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-LightItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-LightItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Medium.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Medium.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Medium.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Medium.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Medium.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Medium.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Medium.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Medium.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-MediumItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-MediumItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-MediumItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-MediumItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-MediumItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-MediumItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-MediumItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-MediumItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Regular.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Regular.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Regular.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Regular.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Regular.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Regular.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Regular.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Regular.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBold.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBold.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBold.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBold.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBold.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBold.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBold.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBold.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-SemiBoldItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Thin.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Thin.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Thin.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Thin.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Thin.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Thin.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Thin.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Thin.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ThinItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-ThinItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ThinItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ThinItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-ThinItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-ThinItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-ThinItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-ThinItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Two.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Two.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Two.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Two.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Two.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Two.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Two.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Two.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-TwoItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-TwoItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-TwoItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-TwoItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-TwoItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-TwoItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-TwoItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-TwoItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Ultra.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-Ultra.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Ultra.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Ultra.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-Ultra.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-Ultra.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-Ultra.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-Ultra.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-UltraItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-UltraItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-UltraItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-UltraItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLight.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLight.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLight.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLight.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLight.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLight.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLight.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLight.woff2 diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLightItalic.woff b/svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLightItalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLightItalic.woff rename to svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLightItalic.woff diff --git a/mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLightItalic.woff2 b/svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLightItalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/fira/FiraSans-UltraLightItalic.woff2 rename to svoboda/accounts/system/public/fonts/fira/FiraSans-UltraLightItalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bold-subset.woff b/svoboda/accounts/system/public/fonts/hack/hack-bold-subset.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bold-subset.woff rename to svoboda/accounts/system/public/fonts/hack/hack-bold-subset.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bold-subset.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-bold-subset.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bold-subset.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-bold-subset.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bold.woff b/svoboda/accounts/system/public/fonts/hack/hack-bold.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bold.woff rename to svoboda/accounts/system/public/fonts/hack/hack-bold.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bold.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-bold.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bold.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-bold.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bolditalic-subset.woff b/svoboda/accounts/system/public/fonts/hack/hack-bolditalic-subset.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bolditalic-subset.woff rename to svoboda/accounts/system/public/fonts/hack/hack-bolditalic-subset.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bolditalic-subset.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-bolditalic-subset.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bolditalic-subset.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-bolditalic-subset.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bolditalic.woff b/svoboda/accounts/system/public/fonts/hack/hack-bolditalic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bolditalic.woff rename to svoboda/accounts/system/public/fonts/hack/hack-bolditalic.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-bolditalic.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-bolditalic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-bolditalic.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-bolditalic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-italic-subset.woff b/svoboda/accounts/system/public/fonts/hack/hack-italic-subset.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-italic-subset.woff rename to svoboda/accounts/system/public/fonts/hack/hack-italic-subset.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-italic-subset.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-italic-subset.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-italic-subset.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-italic-subset.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-italic.woff b/svoboda/accounts/system/public/fonts/hack/hack-italic.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-italic.woff rename to svoboda/accounts/system/public/fonts/hack/hack-italic.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-italic.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-italic.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-italic.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-italic.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-regular-subset.woff b/svoboda/accounts/system/public/fonts/hack/hack-regular-subset.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-regular-subset.woff rename to svoboda/accounts/system/public/fonts/hack/hack-regular-subset.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-regular-subset.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-regular-subset.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-regular-subset.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-regular-subset.woff2 diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-regular.woff b/svoboda/accounts/system/public/fonts/hack/hack-regular.woff similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-regular.woff rename to svoboda/accounts/system/public/fonts/hack/hack-regular.woff diff --git a/mirzaev/site/account/system/public/fonts/hack/hack-regular.woff2 b/svoboda/accounts/system/public/fonts/hack/hack-regular.woff2 similarity index 100% rename from mirzaev/site/account/system/public/fonts/hack/hack-regular.woff2 rename to svoboda/accounts/system/public/fonts/hack/hack-regular.woff2 diff --git a/mirzaev/site/account/system/public/images/botnet.svg b/svoboda/accounts/system/public/images/botnet.svg similarity index 100% rename from mirzaev/site/account/system/public/images/botnet.svg rename to svoboda/accounts/system/public/images/botnet.svg diff --git a/mirzaev/site/account/system/public/images/heh.gif b/svoboda/accounts/system/public/images/heh.gif similarity index 100% rename from mirzaev/site/account/system/public/images/heh.gif rename to svoboda/accounts/system/public/images/heh.gif diff --git a/mirzaev/site/account/system/public/images/keylogger.svg b/svoboda/accounts/system/public/images/keylogger.svg similarity index 100% rename from mirzaev/site/account/system/public/images/keylogger.svg rename to svoboda/accounts/system/public/images/keylogger.svg diff --git a/mirzaev/site/account/system/public/images/logo.png b/svoboda/accounts/system/public/images/logo.png similarity index 100% rename from mirzaev/site/account/system/public/images/logo.png rename to svoboda/accounts/system/public/images/logo.png diff --git a/mirzaev/site/account/system/public/images/logo_compressed.png b/svoboda/accounts/system/public/images/logo_compressed.png similarity index 100% rename from mirzaev/site/account/system/public/images/logo_compressed.png rename to svoboda/accounts/system/public/images/logo_compressed.png diff --git a/mirzaev/site/account/system/public/images/logo_red.png b/svoboda/accounts/system/public/images/logo_red.png similarity index 100% rename from mirzaev/site/account/system/public/images/logo_red.png rename to svoboda/accounts/system/public/images/logo_red.png diff --git a/mirzaev/site/account/system/public/images/logo_red_compressed.png b/svoboda/accounts/system/public/images/logo_red_compressed.png similarity index 100% rename from mirzaev/site/account/system/public/images/logo_red_compressed.png rename to svoboda/accounts/system/public/images/logo_red_compressed.png diff --git a/mirzaev/site/account/system/public/images/logo_red_white.png b/svoboda/accounts/system/public/images/logo_red_white.png similarity index 100% rename from mirzaev/site/account/system/public/images/logo_red_white.png rename to svoboda/accounts/system/public/images/logo_red_white.png diff --git a/mirzaev/site/account/system/public/images/logo_red_white_compressed.png b/svoboda/accounts/system/public/images/logo_red_white_compressed.png similarity index 100% rename from mirzaev/site/account/system/public/images/logo_red_white_compressed.png rename to svoboda/accounts/system/public/images/logo_red_white_compressed.png diff --git a/mirzaev/site/account/system/public/images/minecraft.svg b/svoboda/accounts/system/public/images/minecraft.svg similarity index 100% rename from mirzaev/site/account/system/public/images/minecraft.svg rename to svoboda/accounts/system/public/images/minecraft.svg diff --git a/mirzaev/site/account/system/public/images/miner.svg b/svoboda/accounts/system/public/images/miner.svg similarity index 100% rename from mirzaev/site/account/system/public/images/miner.svg rename to svoboda/accounts/system/public/images/miner.svg diff --git a/mirzaev/site/account/system/public/images/stealer.svg b/svoboda/accounts/system/public/images/stealer.svg similarity index 100% rename from mirzaev/site/account/system/public/images/stealer.svg rename to svoboda/accounts/system/public/images/stealer.svg diff --git a/mirzaev/site/account/system/public/images/truth.jpg b/svoboda/accounts/system/public/images/truth.jpg similarity index 100% rename from mirzaev/site/account/system/public/images/truth.jpg rename to svoboda/accounts/system/public/images/truth.jpg diff --git a/mirzaev/site/account/system/public/images/what.png b/svoboda/accounts/system/public/images/what.png similarity index 100% rename from mirzaev/site/account/system/public/images/what.png rename to svoboda/accounts/system/public/images/what.png diff --git a/svoboda/accounts/system/public/index.php b/svoboda/accounts/system/public/index.php new file mode 100644 index 0000000..cea8435 --- /dev/null +++ b/svoboda/accounts/system/public/index.php @@ -0,0 +1,55 @@ +router + ->write('/', new route('index', 'index'), 'GET') + ->write('/initialization', new route('account', 'initialization'), 'POST') + ->write('/connect/vk', new route('account', 'connect'), 'GET') + ->write('/settings', new route('account', 'settings'), 'GET') + ->write('/api/password/generate', new route('api', 'password'), 'POST') + ->write('/session/authentication', new route('session', 'authentication'), 'POST') + ->write('/session/password', new route('session', 'password'), 'POST') + ->write('/session/invite', new route('session', 'invite'), 'POST') + ->write('/system/hotline', new route('hotline', 'index'), 'GET') + ->write('/system/graph', new route('graph', 'index'), 'GET') +; + +// Handling request +$core->start(); diff --git a/mirzaev/site/account/system/public/js/account.js b/svoboda/accounts/system/public/js/account.js similarity index 100% rename from mirzaev/site/account/system/public/js/account.js rename to svoboda/accounts/system/public/js/account.js diff --git a/mirzaev/site/account/system/public/js/cookies.min.js b/svoboda/accounts/system/public/js/cookies.min.js similarity index 100% rename from mirzaev/site/account/system/public/js/cookies.min.js rename to svoboda/accounts/system/public/js/cookies.min.js diff --git a/mirzaev/site/account/system/public/js/damper.js b/svoboda/accounts/system/public/js/damper.js similarity index 100% rename from mirzaev/site/account/system/public/js/damper.js rename to svoboda/accounts/system/public/js/damper.js diff --git a/mirzaev/site/account/system/public/js/graph.js b/svoboda/accounts/system/public/js/graph.js similarity index 100% rename from mirzaev/site/account/system/public/js/graph.js rename to svoboda/accounts/system/public/js/graph.js diff --git a/mirzaev/site/account/system/public/js/hotline.js b/svoboda/accounts/system/public/js/hotline.js similarity index 100% rename from mirzaev/site/account/system/public/js/hotline.js rename to svoboda/accounts/system/public/js/hotline.js diff --git a/svoboda/accounts/system/public/js/modules/damper.min.mjs b/svoboda/accounts/system/public/js/modules/damper.min.mjs new file mode 120000 index 0000000..881957a --- /dev/null +++ b/svoboda/accounts/system/public/js/modules/damper.min.mjs @@ -0,0 +1 @@ +../../../../../../damper.mjs/damper.min.mjs \ No newline at end of file diff --git a/svoboda/accounts/system/public/js/modules/graph.min.mjs b/svoboda/accounts/system/public/js/modules/graph.min.mjs new file mode 120000 index 0000000..5dcc804 --- /dev/null +++ b/svoboda/accounts/system/public/js/modules/graph.min.mjs @@ -0,0 +1 @@ +../../../../../../graph.mjs/graph.min.mjs \ No newline at end of file diff --git a/svoboda/accounts/system/public/js/modules/hotline.min.mjs b/svoboda/accounts/system/public/js/modules/hotline.min.mjs new file mode 120000 index 0000000..c443ff0 --- /dev/null +++ b/svoboda/accounts/system/public/js/modules/hotline.min.mjs @@ -0,0 +1 @@ +../../../../../../hotline.mjs/hotline.min.mjs \ No newline at end of file diff --git a/mirzaev/site/account/system/public/js/password.js b/svoboda/accounts/system/public/js/password.js similarity index 100% rename from mirzaev/site/account/system/public/js/password.js rename to svoboda/accounts/system/public/js/password.js diff --git a/mirzaev/site/account/system/public/js/session.js b/svoboda/accounts/system/public/js/session.js similarity index 100% rename from mirzaev/site/account/system/public/js/session.js rename to svoboda/accounts/system/public/js/session.js diff --git a/mirzaev/site/account/system/public/js/trolling.js b/svoboda/accounts/system/public/js/trolling.js similarity index 100% rename from mirzaev/site/account/system/public/js/trolling.js rename to svoboda/accounts/system/public/js/trolling.js diff --git a/mirzaev/site/account/system/public/js/victor.js b/svoboda/accounts/system/public/js/victor.js similarity index 100% rename from mirzaev/site/account/system/public/js/victor.js rename to svoboda/accounts/system/public/js/victor.js diff --git a/mirzaev/site/account/system/public/sounds/iphone.mp3 b/svoboda/accounts/system/public/sounds/iphone.mp3 similarity index 100% rename from mirzaev/site/account/system/public/sounds/iphone.mp3 rename to svoboda/accounts/system/public/sounds/iphone.mp3 diff --git a/mirzaev/site/account/system/public/sounds/vk.mp3 b/svoboda/accounts/system/public/sounds/vk.mp3 similarity index 100% rename from mirzaev/site/account/system/public/sounds/vk.mp3 rename to svoboda/accounts/system/public/sounds/vk.mp3 diff --git a/mirzaev/site/account/system/public/sounds/what.mp3 b/svoboda/accounts/system/public/sounds/what.mp3 similarity index 100% rename from mirzaev/site/account/system/public/sounds/what.mp3 rename to svoboda/accounts/system/public/sounds/what.mp3 diff --git a/mirzaev/site/account/system/public/sounds/whatsup.mp3 b/svoboda/accounts/system/public/sounds/whatsup.mp3 similarity index 100% rename from mirzaev/site/account/system/public/sounds/whatsup.mp3 rename to svoboda/accounts/system/public/sounds/whatsup.mp3 diff --git a/mirzaev/site/account/system/public/storage/214547089/avatar/200x200.jpg b/svoboda/accounts/system/public/storage/214547089/avatar/200x200.jpg similarity index 100% rename from mirzaev/site/account/system/public/storage/214547089/avatar/200x200.jpg rename to svoboda/accounts/system/public/storage/214547089/avatar/200x200.jpg diff --git a/svoboda/accounts/system/settings/.gitignore b/svoboda/accounts/system/settings/.gitignore new file mode 100644 index 0000000..21201d0 --- /dev/null +++ b/svoboda/accounts/system/settings/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore +!*.sample diff --git a/mirzaev/site/account/system/settings/arangodb.php.sample b/svoboda/accounts/system/settings/arangodb.php.sample similarity index 100% rename from mirzaev/site/account/system/settings/arangodb.php.sample rename to svoboda/accounts/system/settings/arangodb.php.sample diff --git a/svoboda/accounts/system/settings/redis.php.sample b/svoboda/accounts/system/settings/redis.php.sample new file mode 100644 index 0000000..fd3d94d --- /dev/null +++ b/svoboda/accounts/system/settings/redis.php.sample @@ -0,0 +1,14 @@ + '/var/run/redis/redis_account-mirzaev.sock', + /* 'port' => 6379, + 'timeout' => 1, + 'retry_interval' => '50' */ + ], + [ + 'login', + 'password' + ] +]; diff --git a/mirzaev/site/account/system/views/aside.html b/svoboda/accounts/system/views/aside.html similarity index 90% rename from mirzaev/site/account/system/views/aside.html rename to svoboda/accounts/system/views/aside.html index f39d751..99a70b2 100644 --- a/mirzaev/site/account/system/views/aside.html +++ b/svoboda/accounts/system/views/aside.html @@ -1,4 +1,3 @@ - {% block css %} {% endblock %} diff --git a/mirzaev/site/account/system/views/core.html b/svoboda/accounts/system/views/core.html similarity index 100% rename from mirzaev/site/account/system/views/core.html rename to svoboda/accounts/system/views/core.html diff --git a/mirzaev/site/account/system/views/footer.html b/svoboda/accounts/system/views/footer.html similarity index 100% rename from mirzaev/site/account/system/views/footer.html rename to svoboda/accounts/system/views/footer.html diff --git a/mirzaev/site/account/system/views/graph/index.html b/svoboda/accounts/system/views/graph/index.html similarity index 100% rename from mirzaev/site/account/system/views/graph/index.html rename to svoboda/accounts/system/views/graph/index.html diff --git a/mirzaev/site/account/system/views/head.html b/svoboda/accounts/system/views/head.html similarity index 100% rename from mirzaev/site/account/system/views/head.html rename to svoboda/accounts/system/views/head.html diff --git a/mirzaev/site/account/system/views/header.html b/svoboda/accounts/system/views/header.html similarity index 100% rename from mirzaev/site/account/system/views/header.html rename to svoboda/accounts/system/views/header.html diff --git a/mirzaev/site/account/system/views/hotline/index.html b/svoboda/accounts/system/views/hotline/index.html similarity index 100% rename from mirzaev/site/account/system/views/hotline/index.html rename to svoboda/accounts/system/views/hotline/index.html diff --git a/mirzaev/site/account/system/views/index.html b/svoboda/accounts/system/views/index.html similarity index 76% rename from mirzaev/site/account/system/views/index.html rename to svoboda/accounts/system/views/index.html index 44fd7fc..ae15e88 100644 --- a/mirzaev/site/account/system/views/index.html +++ b/svoboda/accounts/system/views/index.html @@ -12,10 +12,10 @@ {% block body %}
- - {% block main %} - {{ nodes.account|raw }} - {% endblock %} + + {% block main %} + {{ nodes.account|raw }} + {% endblock %}
{% endblock %} diff --git a/mirzaev/site/account/system/views/js.html b/svoboda/accounts/system/views/js.html similarity index 100% rename from mirzaev/site/account/system/views/js.html rename to svoboda/accounts/system/views/js.html diff --git a/mirzaev/site/account/system/views/menu.html b/svoboda/accounts/system/views/menu.html similarity index 100% rename from mirzaev/site/account/system/views/menu.html rename to svoboda/accounts/system/views/menu.html diff --git a/mirzaev/site/account/system/views/nodes/connect.html b/svoboda/accounts/system/views/nodes/connect.html similarity index 100% rename from mirzaev/site/account/system/views/nodes/connect.html rename to svoboda/accounts/system/views/nodes/connect.html diff --git a/mirzaev/site/account/system/views/nodes/profile.html b/svoboda/accounts/system/views/nodes/profile.html similarity index 100% rename from mirzaev/site/account/system/views/nodes/profile.html rename to svoboda/accounts/system/views/nodes/profile.html diff --git a/mirzaev/site/account/system/views/pages/entry.html b/svoboda/accounts/system/views/pages/entry.html similarity index 50% rename from mirzaev/site/account/system/views/pages/entry.html rename to svoboda/accounts/system/views/pages/entry.html index 96fa3dc..4571059 100644 --- a/mirzaev/site/account/system/views/pages/entry.html +++ b/svoboda/accounts/system/views/pages/entry.html @@ -13,25 +13,28 @@

Идентификация

- - - + +
+ + + +