diff --git a/.gitignore b/.gitignore
index 85bf818..12036b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
/vendor/
*.cache
*.log
+runtime/
# IDE support
.idea/
diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php
index b9a08df..8c4e6a2 100644
--- a/.php-cs-fixer.php
+++ b/.php-cs-fixer.php
@@ -1,89 +1,16 @@
in([
+ __DIR__ . '/publish',
+ __DIR__ . '/src',
+ __DIR__ . '/tests',
+]);
-@link https://www.hyperf.io
-@document https://hyperf.wiki
-@contact group@hyperf.io
-@license https://github.com/hyperf/hyperf/blob/master/LICENSE
-EOF;
-
-return (new PhpCsFixer\Config())
- ->setRiskyAllowed(true)
- ->setRules([
- '@PSR2' => true,
- '@Symfony' => true,
- '@DoctrineAnnotation' => true,
- '@PhpCsFixer' => true,
- 'header_comment' => [
- 'comment_type' => 'PHPDoc',
- 'header' => $header,
- 'separate' => 'none',
- 'location' => 'after_declare_strict',
- ],
- 'array_syntax' => [
- 'syntax' => 'short'
- ],
- 'list_syntax' => [
- 'syntax' => 'short'
- ],
- 'concat_space' => [
- 'spacing' => 'one'
- ],
- 'blank_line_before_statement' => [
- 'statements' => [
- 'declare',
- ],
- ],
- 'general_phpdoc_annotation_remove' => [
- 'annotations' => [
- 'author'
- ],
- ],
- 'ordered_imports' => [
- 'imports_order' => [
- 'class', 'function', 'const',
- ],
- 'sort_algorithm' => 'alpha',
- ],
- 'single_line_comment_style' => [
- 'comment_types' => [
- ],
- ],
- 'yoda_style' => [
- 'always_move_variable' => false,
- 'equal' => false,
- 'identical' => false,
- ],
- 'phpdoc_align' => [
- 'align' => 'left',
- ],
- 'multiline_whitespace_before_semicolons' => [
- 'strategy' => 'no_multi_line',
- ],
- 'constant_case' => [
- 'case' => 'lower',
- ],
- 'class_attributes_separation' => true,
- 'combine_consecutive_unsets' => true,
- 'declare_strict_types' => true,
- 'linebreak_after_opening_tag' => true,
- 'lowercase_static_reference' => true,
- 'no_useless_else' => true,
- 'no_unused_imports' => true,
- 'not_operator_with_successor_space' => true,
- 'not_operator_with_space' => false,
- 'ordered_class_elements' => true,
- 'php_unit_strict' => false,
- 'phpdoc_separation' => false,
- 'single_quote' => true,
- 'standardize_not_equals' => true,
- 'multiline_comment_opening_closing' => true,
- ])
- ->setFinder(
- PhpCsFixer\Finder::create()
- ->exclude('vendor')
- ->in(__DIR__)
- )
- ->setUsingCache(false);
+$config = new PhpCsFixer\Config();
+return $config->setRules([
+ '@PSR12' => true,
+ 'strict_param' => true,
+ 'array_syntax' => ['syntax' => 'short'],
+])
+ ->setUsingCache(false)
+ ->setFinder($finder);
diff --git a/composer.json b/composer.json
index 39b95df..ce98bf4 100644
--- a/composer.json
+++ b/composer.json
@@ -19,6 +19,7 @@
},
"require": {
"php": ">=8.1",
+ "ext-redis": "*",
"hyperf/config": "3.1.*",
"hyperf/constants": "3.1.*",
"hyperf/di": "3.1.*",
@@ -28,8 +29,7 @@
"litesaml/lightsaml": "~3.0.0",
"singularity/hdk-core": "^1.0.0",
"singularity/hdk-auth": "^1.0.0",
- "teapot/status-code": "^1.1",
- "ext-redis": "*"
+ "teapot/status-code": "^1.1"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.0",
@@ -51,9 +51,19 @@
}
},
"scripts": {
- "test": "phpunit -c phpunit.xml --colors=always",
- "analyse": "phpstan analyse --memory-limit 1024M -l 0 ./src",
- "cs-fix": "php-cs-fixer fix $1"
+ "test": [
+ "rm -rf runtime",
+ "Composer\\Config::disableProcessTimeout",
+ "pest --coroutine --prepend tests/bootstrap.php --colors=always"
+ ],
+ "cs-fix": "php-cs-fixer fix $1 --rules=@PSR12 --allow-risky=yes",
+ "analyse": "phpstan analyse $1",
+ "ci": [
+ "@analyse publish/ src/ tests/",
+ "@cs-fix",
+ "@test",
+ "echo CI Success"
+ ]
},
"extra": {
"hyperf": {
diff --git a/composer.lock b/composer.lock
index 8f531c4..77357aa 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,20 +4,20 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "5fa18cb9227d594f8ab593b0337f9f93",
+ "content-hash": "380a03dafc587dd040e174d3d11f2ff9",
"packages": [
{
- "name": "casbin/casbin",
- "version": "v3.21.4",
+ "name": "carbonphp/carbon-doctrine-types",
+ "version": "3.1.0",
"source": {
"type": "git",
- "url": "https://github.com/php-casbin/php-casbin.git",
- "reference": "c187bd0ee110f2aedf4be4bfd53553aa193571cf"
+ "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
+ "reference": "a31d3358a2a5d6ae947df1691d1f321418a5f3d5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-casbin/php-casbin/zipball/c187bd0ee110f2aedf4be4bfd53553aa193571cf",
- "reference": "c187bd0ee110f2aedf4be4bfd53553aa193571cf",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/a31d3358a2a5d6ae947df1691d1f321418a5f3d5",
+ "reference": "a31d3358a2a5d6ae947df1691d1f321418a5f3d5",
"shasum": "",
"mirrors": [
{
@@ -27,126 +27,72 @@
]
},
"require": {
- "php": ">=7.1.0",
- "s1lentium/iptools": "^1.1",
- "symfony/expression-language": "^3.4|^4.0|^5.0|^6.0"
+ "php": "^8.1"
+ },
+ "conflict": {
+ "doctrine/dbal": "<4.0.0 || >=5.0.0"
},
"require-dev": {
- "mockery/mockery": "^1.2",
- "php-coveralls/php-coveralls": "^2.1",
- "phpstan/phpstan": "^1.2",
- "phpunit/phpunit": "~7.0|~8.0|~9.0"
+ "doctrine/dbal": "^4.0.0",
+ "nesbot/carbon": "^2.71.0 || ^3.0.0",
+ "phpunit/phpunit": "^10.3"
},
"type": "library",
"autoload": {
"psr-4": {
- "Casbin\\": "src/"
+ "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "Apache-2.0"
+ "MIT"
],
"authors": [
{
- "name": "TechLee",
- "email": "techlee@qq.com"
+ "name": "KyleKatarn",
+ "email": "kylekatarnls@gmail.com"
}
],
- "description": "a powerful and efficient open-source access control library for php projects.",
+ "description": "Types to use Carbon in Doctrine",
"keywords": [
- "abac",
- "access control",
- "acl",
- "authorization",
- "casbin",
- "permission",
- "rbac"
+ "carbon",
+ "date",
+ "datetime",
+ "doctrine",
+ "time"
],
"support": {
- "issues": "https://github.com/php-casbin/php-casbin/issues",
- "source": "https://github.com/php-casbin/php-casbin/tree/v3.21.4"
+ "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
+ "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.1.0"
},
"funding": [
{
- "url": "https://opencollective.com/casbin",
- "type": "open_collective"
- }
- ],
- "time": "2023-11-30T15:58:24+00:00"
- },
- {
- "name": "casbin/psr3-bridge",
- "version": "v1.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-casbin/psr3-bridge.git",
- "reference": "4b8133c77f2dc1093b3adeb5fc3af1e8de3d0eb1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-casbin/psr3-bridge/zipball/4b8133c77f2dc1093b3adeb5fc3af1e8de3d0eb1",
- "reference": "4b8133c77f2dc1093b3adeb5fc3af1e8de3d0eb1",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "casbin/casbin": "^2.0|^3.0",
- "psr/log": "^1.1|^2.0|^3.0"
- },
- "require-dev": {
- "mockery/mockery": "^1.2",
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "~7.0|~8.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Casbin\\Bridge\\Logger\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
+ "url": "https://github.com/kylekatarnls",
+ "type": "github"
+ },
{
- "name": "TechLee",
- "email": "techlee@qq.com"
+ "url": "https://opencollective.com/Carbon",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon",
+ "type": "tidelift"
}
],
- "description": "This library provides a PSR-3 compliant bridge for Casbin Logger.",
- "keywords": [
- "acl",
- "casbin",
- "logger",
- "permission",
- "psr-3",
- "rbac"
- ],
- "support": {
- "issues": "https://github.com/php-casbin/psr3-bridge/issues",
- "source": "https://github.com/php-casbin/psr3-bridge/tree/v1.3.1"
- },
- "time": "2022-02-05T12:08:12+00:00"
+ "time": "2023-12-10T15:33:53+00:00"
},
{
"name": "composer/ca-bundle",
- "version": "1.3.7",
+ "version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "76e46335014860eec1aa5a724799a00a2e47cc85"
+ "reference": "b66d11b7479109ab547f9405b97205640b17d385"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/76e46335014860eec1aa5a724799a00a2e47cc85",
- "reference": "76e46335014860eec1aa5a724799a00a2e47cc85",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/b66d11b7479109ab547f9405b97205640b17d385",
+ "reference": "b66d11b7479109ab547f9405b97205640b17d385",
"shasum": "",
"mirrors": [
{
@@ -164,7 +110,7 @@
"phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
"symfony/phpunit-bridge": "^4.2 || ^5",
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+ "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
"extra": {
@@ -199,7 +145,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.3.7"
+ "source": "https://github.com/composer/ca-bundle/tree/1.4.0"
},
"funding": [
{
@@ -215,7 +161,7 @@
"type": "tidelift"
}
],
- "time": "2023-08-30T09:31:38+00:00"
+ "time": "2023-12-18T12:05:55+00:00"
},
{
"name": "composer/class-map-generator",
@@ -1123,88 +1069,6 @@
],
"time": "2022-12-14T08:49:07+00:00"
},
- {
- "name": "donjan-deng/hyperf-casbin",
- "version": "3.22.2",
- "source": {
- "type": "git",
- "url": "https://github.com/donjan-deng/hyperf-casbin.git",
- "reference": "662377f3b5136083fe509a31cedaa24f47796d4d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/donjan-deng/hyperf-casbin/zipball/662377f3b5136083fe509a31cedaa24f47796d4d",
- "reference": "662377f3b5136083fe509a31cedaa24f47796d4d",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "casbin/casbin": "~3.20",
- "casbin/psr3-bridge": "~1.3",
- "ext-bcmath": "*",
- "ext-json": "*",
- "ext-pdo": "*",
- "ext-redis": "*",
- "ext-swoole": ">=4.5",
- "hyperf/cache": "~3.0",
- "hyperf/command": "~3.0",
- "hyperf/config": "~3.0",
- "hyperf/database": "~3.0",
- "hyperf/db-connection": "~3.0",
- "hyperf/logger": "~3.0",
- "hyperf/process": "~3.0",
- "hyperf/redis": "~3.0",
- "hyperf/utils": "~3.0",
- "php": ">=8.0"
- },
- "require-dev": {
- "hyperf/testing": "~3.0",
- "mockery/mockery": "^1.0"
- },
- "type": "library",
- "extra": {
- "hyperf": {
- "config": "Donjan\\Casbin\\ConfigProvider"
- }
- },
- "autoload": {
- "psr-4": {
- "Donjan\\Casbin\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Donjan",
- "homepage": "https://github.com/donjan-deng",
- "role": "Developer"
- }
- ],
- "description": "An authorization library that supports access control models like ACL, RBAC, ABAC in hyperf. ",
- "keywords": [
- "abac",
- "access-control",
- "acl",
- "authorization",
- "casbin",
- "hyperf",
- "permission",
- "rbac"
- ],
- "support": {
- "issues": "https://github.com/donjan-deng/hyperf-casbin/issues",
- "source": "https://github.com/donjan-deng/hyperf-casbin/tree/3.22.2"
- },
- "time": "2023-02-16T01:57:41+00:00"
- },
{
"name": "egulias/email-validator",
"version": "3.2.6",
@@ -1410,6 +1274,61 @@
},
"time": "2020-11-24T22:02:12+00:00"
},
+ {
+ "name": "friendsofhyperf/rector",
+ "version": "v0.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/friendsofhyperf/rector.git",
+ "reference": "896ec187d0b85ac2b2db5e7201a21fbfdf4f3e54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/friendsofhyperf/rector/zipball/896ec187d0b85ac2b2db5e7201a21fbfdf4f3e54",
+ "reference": "896ec187d0b85ac2b2db5e7201a21fbfdf4f3e54",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": ">=8.0",
+ "rector/rector": "^0.15.12"
+ },
+ "require-dev": {
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8.2",
+ "phpstan/phpstan-strict-rules": "^1.2",
+ "phpstan/phpstan-webmozart-assert": "^1.1",
+ "phpunit/phpunit": "^10.0",
+ "rector/phpstan-rules": "^0.6",
+ "rector/rector-debugging": "dev-main",
+ "symplify/easy-coding-standard": "^11.0",
+ "symplify/phpstan-extensions": "^11.0",
+ "symplify/phpstan-rules": "^11.0",
+ "symplify/rule-doc-generator": "^11.0",
+ "symplify/vendor-patches": "^11.0"
+ },
+ "type": "rector-extension",
+ "autoload": {
+ "psr-4": {
+ "Rector\\Hyperf\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Rector upgrades rules for Hyperf.",
+ "support": {
+ "issues": "https://github.com/friendsofhyperf/rector/issues",
+ "source": "https://github.com/friendsofhyperf/rector/tree/v0.1.5"
+ },
+ "time": "2023-06-26T23:32:12+00:00"
+ },
{
"name": "graham-campbell/result-type",
"version": "v1.1.2",
@@ -1478,83 +1397,6 @@
],
"time": "2023-11-12T22:16:48+00:00"
},
- {
- "name": "hyperf/cache",
- "version": "v3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/hyperf/cache.git",
- "reference": "ee3baef629a943b793b712b6254c86827127b9d9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hyperf/cache/zipball/ee3baef629a943b793b712b6254c86827127b9d9",
- "reference": "ee3baef629a943b793b712b6254c86827127b9d9",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "hyperf/codec": "~3.1.0",
- "hyperf/collection": "~3.1.0",
- "hyperf/contract": "~3.1.0",
- "hyperf/support": "~3.1.0",
- "hyperf/utils": "~3.1.0",
- "php": ">=8.1",
- "psr/container": "^1.0|^2.0",
- "psr/simple-cache": "^1.0|^2.0|^3.0"
- },
- "suggest": {
- "hyperf/di": "Use cache annotations.",
- "hyperf/event": "Use listener to delete annotation cache."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- },
- "hyperf": {
- "config": "Hyperf\\Cache\\ConfigProvider"
- }
- },
- "autoload": {
- "psr-4": {
- "Hyperf\\Cache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A cache component for hyperf.",
- "homepage": "https://hyperf.io",
- "keywords": [
- "cache",
- "hyperf",
- "php"
- ],
- "support": {
- "docs": "https://hyperf.wiki",
- "issues": "https://github.com/hyperf/hyperf/issues",
- "pull-request": "https://github.com/hyperf/hyperf/pulls",
- "source": "https://github.com/hyperf/hyperf"
- },
- "funding": [
- {
- "url": "https://hyperf.wiki/#/zh-cn/donate",
- "type": "custom"
- },
- {
- "url": "https://opencollective.com/hyperf",
- "type": "open_collective"
- }
- ],
- "time": "2023-11-24T03:10:53+00:00"
- },
{
"name": "hyperf/code-parser",
"version": "v3.1.0",
@@ -1755,73 +1597,6 @@
},
"time": "2023-11-17T14:22:59+00:00"
},
- {
- "name": "hyperf/command",
- "version": "v3.1.0-rc.9",
- "source": {
- "type": "git",
- "url": "https://github.com/hyperf/command.git",
- "reference": "acb3f6c2860730950abf49f7871dc92676915d33"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hyperf/command/zipball/acb3f6c2860730950abf49f7871dc92676915d33",
- "reference": "acb3f6c2860730950abf49f7871dc92676915d33",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "hyperf/collection": "~3.1.0",
- "hyperf/context": "~3.1.0",
- "hyperf/contract": "~3.1.0",
- "hyperf/coroutine": "~3.1.0",
- "hyperf/di": "~3.1.0",
- "hyperf/stringable": "~3.1.0",
- "hyperf/support": "~3.1.0",
- "hyperf/tappable": "~3.1.0",
- "php": ">=8.1",
- "psr/event-dispatcher": "^1.0",
- "symfony/console": "^5.0|^6.0"
- },
- "suggest": {
- "hyperf/di": "Required to use annotations.",
- "hyperf/event": "Required to use listeners."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- },
- "hyperf": {
- "config": "Hyperf\\Command\\ConfigProvider"
- }
- },
- "autoload": {
- "psr-4": {
- "Hyperf\\Command\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Command for hyperf",
- "keywords": [
- "command",
- "php",
- "swoole"
- ],
- "support": {
- "issues": "https://github.com/hyperf/command/issues",
- "source": "https://github.com/hyperf/command/tree/v3.1.0-rc.9"
- },
- "time": "2023-10-27T01:55:18+00:00"
- },
{
"name": "hyperf/conditionable",
"version": "v3.1.0",
@@ -1888,16 +1663,16 @@
},
{
"name": "hyperf/config",
- "version": "v3.1.0",
+ "version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/hyperf/config.git",
- "reference": "f619a0e6118704707932de56fa8e86ffeec042f1"
+ "reference": "1364385aeb0c64fa018d2655119a5ab176aadebc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/config/zipball/f619a0e6118704707932de56fa8e86ffeec042f1",
- "reference": "f619a0e6118704707932de56fa8e86ffeec042f1",
+ "url": "https://api.github.com/repos/hyperf/config/zipball/1364385aeb0c64fa018d2655119a5ab176aadebc",
+ "reference": "1364385aeb0c64fa018d2655119a5ab176aadebc",
"shasum": "",
"mirrors": [
{
@@ -1912,7 +1687,7 @@
"hyperf/support": "~3.1.0",
"php": ">=8.1",
"psr/container": "^1.0|^2.0",
- "symfony/finder": "^5.0|^6.0"
+ "symfony/finder": "^5.0|^6.0|^7.0"
},
"suggest": {
"hyperf/context": "Required to use config()",
@@ -1967,7 +1742,7 @@
"type": "open_collective"
}
],
- "time": "2023-11-24T03:10:53+00:00"
+ "time": "2023-12-08T02:35:39+00:00"
},
{
"name": "hyperf/constants",
@@ -2101,16 +1876,16 @@
},
{
"name": "hyperf/contract",
- "version": "v3.1.0",
+ "version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/hyperf/contract.git",
- "reference": "2b2f3610fce6c080c6b61764cad2745f7c9a312b"
+ "reference": "f5379df6df65363d645506f373888372135ac0c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/contract/zipball/2b2f3610fce6c080c6b61764cad2745f7c9a312b",
- "reference": "2b2f3610fce6c080c6b61764cad2745f7c9a312b",
+ "url": "https://api.github.com/repos/hyperf/contract/zipball/f5379df6df65363d645506f373888372135ac0c6",
+ "reference": "f5379df6df65363d645506f373888372135ac0c6",
"shasum": "",
"mirrors": [
{
@@ -2160,7 +1935,7 @@
"type": "open_collective"
}
],
- "time": "2023-11-24T03:10:53+00:00"
+ "time": "2023-12-11T03:14:01+00:00"
},
{
"name": "hyperf/coordinator",
@@ -2229,16 +2004,16 @@
},
{
"name": "hyperf/coroutine",
- "version": "v3.1.0",
+ "version": "v3.1.1",
"source": {
"type": "git",
"url": "https://github.com/hyperf/coroutine.git",
- "reference": "60ed5835ec00a07da9fb34fb605fd7a99c9f8a5e"
+ "reference": "cd5bad67724c5c7a7ad749d8e9eb045470488d75"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/coroutine/zipball/60ed5835ec00a07da9fb34fb605fd7a99c9f8a5e",
- "reference": "60ed5835ec00a07da9fb34fb605fd7a99c9f8a5e",
+ "url": "https://api.github.com/repos/hyperf/coroutine/zipball/cd5bad67724c5c7a7ad749d8e9eb045470488d75",
+ "reference": "cd5bad67724c5c7a7ad749d8e9eb045470488d75",
"shasum": "",
"mirrors": [
{
@@ -2295,7 +2070,7 @@
"type": "open_collective"
}
],
- "time": "2023-11-24T03:10:53+00:00"
+ "time": "2023-12-01T06:59:45+00:00"
},
{
"name": "hyperf/database",
@@ -2374,81 +2149,6 @@
],
"time": "2023-11-24T03:10:53+00:00"
},
- {
- "name": "hyperf/db-connection",
- "version": "v3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/hyperf/db-connection.git",
- "reference": "9647e9eeb1788022535988df88585253118554dc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hyperf/db-connection/zipball/9647e9eeb1788022535988df88585253118554dc",
- "reference": "9647e9eeb1788022535988df88585253118554dc",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "hyperf/database": "~3.1.0",
- "hyperf/di": "~3.1.0",
- "hyperf/framework": "~3.1.0",
- "hyperf/model-listener": "~3.1.0",
- "hyperf/pool": "~3.1.0",
- "hyperf/support": "~3.1.0",
- "hyperf/utils": "~3.1.0",
- "php": ">=8.1",
- "psr/container": "^1.0|^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- },
- "hyperf": {
- "config": "Hyperf\\DbConnection\\ConfigProvider"
- }
- },
- "autoload": {
- "psr-4": {
- "Hyperf\\DbConnection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A hyperf db connection handler for hyperf/database.",
- "homepage": "https://hyperf.io",
- "keywords": [
- "Connection",
- "database",
- "hyperf",
- "php"
- ],
- "support": {
- "docs": "https://hyperf.wiki",
- "issues": "https://github.com/hyperf/hyperf/issues",
- "pull-request": "https://github.com/hyperf/hyperf/pulls",
- "source": "https://github.com/hyperf/hyperf"
- },
- "funding": [
- {
- "url": "https://hyperf.wiki/#/zh-cn/donate",
- "type": "custom"
- },
- {
- "url": "https://opencollective.com/hyperf",
- "type": "open_collective"
- }
- ],
- "time": "2023-11-24T03:10:53+00:00"
- },
{
"name": "hyperf/di",
"version": "v3.1.0",
@@ -2606,16 +2306,16 @@
},
{
"name": "hyperf/engine",
- "version": "v2.10.3",
+ "version": "v2.10.4",
"source": {
"type": "git",
"url": "https://github.com/hyperf/engine.git",
- "reference": "7e7238708f29f39df643aba25485ba1c075943c1"
+ "reference": "34ba1825f5b596c677d027e60ec4e2b75c65d09e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/engine/zipball/7e7238708f29f39df643aba25485ba1c075943c1",
- "reference": "7e7238708f29f39df643aba25485ba1c075943c1",
+ "url": "https://api.github.com/repos/hyperf/engine/zipball/34ba1825f5b596c677d027e60ec4e2b75c65d09e",
+ "reference": "34ba1825f5b596c677d027e60ec4e2b75c65d09e",
"shasum": "",
"mirrors": [
{
@@ -2676,22 +2376,32 @@
],
"support": {
"issues": "https://github.com/hyperf/engine/issues",
- "source": "https://github.com/hyperf/engine/tree/v2.10.3"
+ "source": "https://github.com/hyperf/engine/tree/v2.10.4"
},
- "time": "2023-09-30T14:57:09+00:00"
+ "funding": [
+ {
+ "url": "https://hyperf.wiki/#/zh-cn/donate",
+ "type": "custom"
+ },
+ {
+ "url": "https://opencollective.com/hyperf",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2023-12-15T07:47:12+00:00"
},
{
"name": "hyperf/engine-contract",
- "version": "v1.9.0",
+ "version": "v1.9.1",
"source": {
"type": "git",
"url": "https://github.com/hyperf/engine-contract.git",
- "reference": "45c9c49766d8b0e539975fe4c5ed6807221c4b38"
+ "reference": "fec2e45f35404b2e5b4c3eaf1b0dce67d60771eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/engine-contract/zipball/45c9c49766d8b0e539975fe4c5ed6807221c4b38",
- "reference": "45c9c49766d8b0e539975fe4c5ed6807221c4b38",
+ "url": "https://api.github.com/repos/hyperf/engine-contract/zipball/fec2e45f35404b2e5b4c3eaf1b0dce67d60771eb",
+ "reference": "fec2e45f35404b2e5b4c3eaf1b0dce67d60771eb",
"shasum": "",
"mirrors": [
{
@@ -2739,9 +2449,19 @@
],
"support": {
"issues": "https://github.com/hyperf/engine-contract/issues",
- "source": "https://github.com/hyperf/engine-contract/tree/v1.9.0"
+ "source": "https://github.com/hyperf/engine-contract/tree/v1.9.1"
},
- "time": "2023-07-14T02:21:02+00:00"
+ "funding": [
+ {
+ "url": "https://hyperf.wiki/#/zh-cn/donate",
+ "type": "custom"
+ },
+ {
+ "url": "https://opencollective.com/hyperf",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2023-12-15T07:37:14+00:00"
},
{
"name": "hyperf/event",
@@ -3277,92 +2997,18 @@
],
"time": "2023-11-24T03:10:53+00:00"
},
- {
- "name": "hyperf/model-listener",
- "version": "v3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/hyperf/model-listener.git",
- "reference": "03ff9d027871fed6f1be784a7835f5e107c7de5f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hyperf/model-listener/zipball/03ff9d027871fed6f1be784a7835f5e107c7de5f",
- "reference": "03ff9d027871fed6f1be784a7835f5e107c7de5f",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "hyperf/contract": "~3.1.0",
- "hyperf/database": "~3.1.0",
- "hyperf/di": "~3.1.0",
- "hyperf/event": "~3.1.0",
- "hyperf/support": "~3.1.0",
- "hyperf/utils": "~3.1.0",
- "php": ">=8.1",
- "psr/container": "^1.0|^2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- },
- "hyperf": {
- "config": "Hyperf\\ModelListener\\ConfigProvider"
- }
- },
- "autoload": {
- "psr-4": {
- "Hyperf\\ModelListener\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A model listener for Hyperf.",
- "homepage": "https://hyperf.io",
- "keywords": [
- "hyperf",
- "model-listener",
- "php",
- "swoole"
- ],
- "support": {
- "docs": "https://hyperf.wiki",
- "issues": "https://github.com/hyperf/hyperf/issues",
- "pull-request": "https://github.com/hyperf/hyperf/pulls",
- "source": "https://github.com/hyperf/hyperf"
- },
- "funding": [
- {
- "url": "https://hyperf.wiki/#/zh-cn/donate",
- "type": "custom"
- },
- {
- "url": "https://opencollective.com/hyperf",
- "type": "open_collective"
- }
- ],
- "time": "2023-11-24T03:10:53+00:00"
- },
{
"name": "hyperf/paginator",
- "version": "v3.1.0",
+ "version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/hyperf/paginator.git",
- "reference": "843d0eb4e7ae94907f4bb5bd466e8caa9df37951"
+ "reference": "0b0c6dda74fd8a8d9c75b5078252d5e1105ad752"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/paginator/zipball/843d0eb4e7ae94907f4bb5bd466e8caa9df37951",
- "reference": "843d0eb4e7ae94907f4bb5bd466e8caa9df37951",
+ "url": "https://api.github.com/repos/hyperf/paginator/zipball/0b0c6dda74fd8a8d9c75b5078252d5e1105ad752",
+ "reference": "0b0c6dda74fd8a8d9c75b5078252d5e1105ad752",
"shasum": "",
"mirrors": [
{
@@ -3423,7 +3069,7 @@
"type": "open_collective"
}
],
- "time": "2023-11-24T03:10:53+00:00"
+ "time": "2023-12-11T03:14:01+00:00"
},
{
"name": "hyperf/pipeline",
@@ -3561,82 +3207,6 @@
],
"time": "2023-11-24T03:10:53+00:00"
},
- {
- "name": "hyperf/process",
- "version": "v3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/hyperf/process.git",
- "reference": "962149325efc5f762e85286f2cb1cc5511d8a21a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hyperf/process/zipball/962149325efc5f762e85286f2cb1cc5511d8a21a",
- "reference": "962149325efc5f762e85286f2cb1cc5511d8a21a",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "hyperf/contract": "~3.1.0",
- "hyperf/support": "~3.1.0",
- "hyperf/utils": "~3.1.0",
- "php": ">=8.1",
- "psr/container": "^1.0|^2.0",
- "psr/event-dispatcher": "^1.0"
- },
- "suggest": {
- "hyperf/di": "Required to use annotations.",
- "hyperf/event": "Required to dump the message before and after process.",
- "hyperf/framework": "Required to use BootProcessListener."
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- },
- "hyperf": {
- "config": "Hyperf\\Process\\ConfigProvider"
- }
- },
- "autoload": {
- "psr-4": {
- "Hyperf\\Process\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "A process component for hyperf.",
- "homepage": "https://hyperf.io",
- "keywords": [
- "hyperf",
- "php",
- "process"
- ],
- "support": {
- "docs": "https://hyperf.wiki",
- "issues": "https://github.com/hyperf/hyperf/issues",
- "pull-request": "https://github.com/hyperf/hyperf/pulls",
- "source": "https://github.com/hyperf/hyperf"
- },
- "funding": [
- {
- "url": "https://hyperf.wiki/#/zh-cn/donate",
- "type": "custom"
- },
- {
- "url": "https://opencollective.com/hyperf",
- "type": "open_collective"
- }
- ],
- "time": "2023-11-24T03:10:53+00:00"
- },
{
"name": "hyperf/redis",
"version": "v3.1.0",
@@ -3856,16 +3426,16 @@
},
{
"name": "hyperf/server",
- "version": "v3.1.0",
+ "version": "v3.1.2",
"source": {
"type": "git",
"url": "https://github.com/hyperf/server.git",
- "reference": "2c667e0977945d26a56bec53b1c946286cffc3a2"
+ "reference": "d92c3756ccadd02349fd417eef382d8d55c970bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/hyperf/server/zipball/2c667e0977945d26a56bec53b1c946286cffc3a2",
- "reference": "2c667e0977945d26a56bec53b1c946286cffc3a2",
+ "url": "https://api.github.com/repos/hyperf/server/zipball/d92c3756ccadd02349fd417eef382d8d55c970bf",
+ "reference": "d92c3756ccadd02349fd417eef382d8d55c970bf",
"shasum": "",
"mirrors": [
{
@@ -3884,7 +3454,7 @@
"psr/container": "^1.0|^2.0",
"psr/event-dispatcher": "^1.0",
"psr/log": "^1.0|^2.0|^3.0",
- "symfony/console": "^5.0|^6.0"
+ "symfony/console": "^5.0|^6.0|^7.0"
},
"suggest": {
"hyperf/event": "Dump the info after server start.",
@@ -3932,7 +3502,7 @@
"type": "open_collective"
}
],
- "time": "2023-11-24T03:10:53+00:00"
+ "time": "2023-12-12T08:06:45+00:00"
},
{
"name": "hyperf/stdlib",
@@ -4989,16 +4559,16 @@
},
{
"name": "nesbot/carbon",
- "version": "2.71.0",
+ "version": "2.72.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "98276233188583f2ff845a0f992a235472d9466a"
+ "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/98276233188583f2ff845a0f992a235472d9466a",
- "reference": "98276233188583f2ff845a0f992a235472d9466a",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
+ "reference": "2b3b3db0a2d0556a177392ff1a3bf5608fa09f78",
"shasum": "",
"mirrors": [
{
@@ -5008,6 +4578,7 @@
]
},
"require": {
+ "carbonphp/carbon-doctrine-types": "*",
"ext-json": "*",
"php": "^7.1.8 || ^8.0",
"psr/clock": "^1.0",
@@ -5019,8 +4590,8 @@
"psr/clock-implementation": "1.0"
},
"require-dev": {
- "doctrine/dbal": "^2.0 || ^3.1.4",
- "doctrine/orm": "^2.7",
+ "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0",
+ "doctrine/orm": "^2.7 || ^3.0",
"friendsofphp/php-cs-fixer": "^3.0",
"kylekatarnls/multi-tester": "^2.0",
"ondrejmirtes/better-reflection": "*",
@@ -5097,7 +4668,7 @@
"type": "tidelift"
}
],
- "time": "2023-09-25T11:31:05+00:00"
+ "time": "2023-12-08T23:47:49+00:00"
},
{
"name": "nikic/fast-route",
@@ -5157,16 +4728,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.17.1",
+ "version": "v4.18.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
+ "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
- "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
+ "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
"shasum": "",
"mirrors": [
{
@@ -5213,9 +4784,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0"
},
- "time": "2023-08-13T19:53:39+00:00"
+ "time": "2023-12-10T21:03:43+00:00"
},
{
"name": "php-di/phpdoc-reader",
@@ -5347,17 +4918,17 @@
"time": "2023-11-12T21:59:55+00:00"
},
{
- "name": "psr/cache",
- "version": "3.0.0",
+ "name": "phpstan/phpstan",
+ "version": "1.10.49",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/cache.git",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf"
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "9367ba4c4f6ad53e9efb594d74a8941563caccf6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
- "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9367ba4c4f6ad53e9efb594d74a8941563caccf6",
+ "reference": "9367ba4c4f6ad53e9efb594d74a8941563caccf6",
"shasum": "",
"mirrors": [
{
@@ -5367,39 +4938,52 @@
]
},
"require": {
- "php": ">=8.0.0"
+ "php": "^7.2|^8.0"
},
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
"autoload": {
- "psr-4": {
- "Psr\\Cache\\": "src/"
- }
+ "files": [
+ "bootstrap.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for caching libraries",
+ "description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
- "cache",
- "psr",
- "psr-6"
+ "dev",
+ "static analysis"
],
"support": {
- "source": "https://github.com/php-fig/cache/tree/3.0.0"
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
},
- "time": "2021-02-03T23:26:27+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-12-12T10:05:12+00:00"
},
{
"name": "psr/clock",
@@ -5929,63 +5513,6 @@
},
"time": "2021-07-14T16:46:02+00:00"
},
- {
- "name": "psr/simple-cache",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/simple-cache.git",
- "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865",
- "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=8.0.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\SimpleCache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interfaces for simple caching",
- "keywords": [
- "cache",
- "caching",
- "psr",
- "psr-16",
- "simple-cache"
- ],
- "support": {
- "source": "https://github.com/php-fig/simple-cache/tree/3.0.0"
- },
- "time": "2021-10-29T13:26:27+00:00"
- },
{
"name": "react/promise",
"version": "v3.0.0",
@@ -6065,6 +5592,73 @@
],
"time": "2023-07-11T16:12:49+00:00"
},
+ {
+ "name": "rector/rector",
+ "version": "0.15.25",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/rectorphp/rector.git",
+ "reference": "015935c7ed9e48a4f5895ba974f337e20a263841"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/015935c7ed9e48a4f5895ba974f337e20a263841",
+ "reference": "015935c7ed9e48a4f5895ba974f337e20a263841",
+ "shasum": "",
+ "mirrors": [
+ {
+ "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+ "preferred": true
+ }
+ ]
+ },
+ "require": {
+ "php": "^7.2|^8.0",
+ "phpstan/phpstan": "^1.10.14"
+ },
+ "conflict": {
+ "rector/rector-doctrine": "*",
+ "rector/rector-downgrade-php": "*",
+ "rector/rector-phpunit": "*",
+ "rector/rector-symfony": "*"
+ },
+ "bin": [
+ "bin/rector"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.15-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Instant Upgrade and Automated Refactoring of any PHP code",
+ "keywords": [
+ "automation",
+ "dev",
+ "migration",
+ "refactoring"
+ ],
+ "support": {
+ "issues": "https://github.com/rectorphp/rector/issues",
+ "source": "https://github.com/rectorphp/rector/tree/0.15.25"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2023-04-20T16:07:39+00:00"
+ },
{
"name": "roave/dont",
"version": "1.6.0",
@@ -6169,67 +5763,6 @@
},
"time": "2020-09-05T13:00:25+00:00"
},
- {
- "name": "s1lentium/iptools",
- "version": "v1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/S1lentium/IPTools.git",
- "reference": "88be1aaaab3c50fc131ebe778e246215ff006d8e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/S1lentium/IPTools/zipball/88be1aaaab3c50fc131ebe778e246215ff006d8e",
- "reference": "88be1aaaab3c50fc131ebe778e246215ff006d8e",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "ext-bcmath": "*",
- "php": "^8.0"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.5",
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "IPTools\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Safarov Alisher",
- "email": "alisher.safarov@outlook.com",
- "homepage": "https://github.com/S1lentium"
- }
- ],
- "description": "PHP Library for manipulating network addresses (IPv4 and IPv6)",
- "keywords": [
- "IP",
- "IP-Tools",
- "cidr",
- "ipv4",
- "ipv6",
- "network",
- "subnet"
- ],
- "support": {
- "issues": "https://github.com/S1lentium/IPTools/issues",
- "source": "https://github.com/S1lentium/IPTools/tree/v1.2.0"
- },
- "time": "2022-08-17T14:28:59+00:00"
- },
{
"name": "seld/jsonlint",
"version": "1.10.0",
@@ -6423,19 +5956,18 @@
},
{
"name": "singularity/hdk-auth",
- "version": "1.0.0-alpha.7",
+ "version": "1.0.0-beta.0",
"dist": {
"type": "zip",
- "url": "https://nest.doylee.cn/api/packages/HDK/composer/files/singularity%2Fhdk-auth/1.0.0-alpha.7/singularity-hdk-auth.1.0.0-alpha.7.zip",
- "shasum": "2b1b1f4e12d5c51136b1cdcb885c96209d6c07a1"
+ "url": "https://nest.doylee.cn/api/packages/HDK/composer/files/singularity%2Fhdk-auth/1.0.0-beta.0/singularity-hdk-auth.1.0.0-beta.0.zip",
+ "shasum": "d334f7fe7f3987243099b86d3bdb8b7b1850ae7b"
},
"require": {
"composer/composer": ">=2.5.8",
- "donjan-deng/hyperf-casbin": "^3.22.2",
"ext-redis": "*",
"hyperf/validation": "3.1.*",
"php": ">=8.1",
- "singularity/hdk-core": "^1.0.0-alpha.16",
+ "singularity/hdk-core": "^1.0.0",
"symfony/polyfill-php82": "*",
"symfony/polyfill-php83": "*"
},
@@ -6464,23 +5996,24 @@
"MIT"
],
"description": "登录控制",
- "time": "2023-12-04T17:36:14+08:00"
+ "time": "2023-12-25T16:40:23+08:00"
},
{
"name": "singularity/hdk-core",
- "version": "1.0.0-alpha.16",
+ "version": "1.0.0-beta.1",
"dist": {
"type": "zip",
- "url": "https://nest.doylee.cn/api/packages/HDK/composer/files/singularity%2Fhdk-core/1.0.0-alpha.16/singularity-hdk-core.1.0.0-alpha.16.zip",
- "shasum": "b11b13994049f2896dac76a08aeb49afd0b4b3b1"
+ "url": "https://nest.doylee.cn/api/packages/HDK/composer/files/singularity%2Fhdk-core/1.0.0-beta.1/singularity-hdk-core.1.0.0-beta.1.zip",
+ "shasum": "6256a7175918c711bd3d5a8eb9e1e8b05a6137fc"
},
"require": {
"composer/composer": ">=2.0",
- "ergebnis/http-method": "^2.2",
+ "ergebnis/http-method": "^2.5",
"ext-dom": "*",
"ext-libxml": "*",
"ext-redis": "^5.3|^6.0",
"ext-swoole": "*",
+ "friendsofhyperf/rector": "^0.1.5",
"hyperf/config": "3.1.*",
"hyperf/constants": "3.1.*",
"hyperf/context": "3.1.*",
@@ -6491,21 +6024,22 @@
"hyperf/resource": "3.1.*",
"hyperf/translation": "3.1.*",
"jetbrains/phpstorm-attributes": "^1.0",
- "lmc/http-constants": "^1.2",
- "myclabs/php-enum": "^1.8",
+ "lmc/http-constants": "^1.2.0",
+ "myclabs/php-enum": "^1.8.4",
"php": ">=8.1",
- "roave/dont": "^1.5",
- "symfony/http-foundation": "^6.0",
- "symfony/polyfill-php81": "^1.26",
- "teapot/status-code": "^1.1"
+ "roave/dont": "^1.6.0",
+ "symfony/http-foundation": "^6.4",
+ "symfony/polyfill-php81": "^1.28",
+ "symfony/polyfill-php82": "^1.28",
+ "symfony/polyfill-php83": "^1.28",
+ "teapot/status-code": "^1.1.2"
},
"require-dev": {
"alibabacloud/dysmsapi-20170525": "^2.0",
- "firebase/php-jwt": "^6.1",
+ "firebase/php-jwt": "^6.9",
"friendsofhyperf/pest-plugin-hyperf": "3.1.*",
- "friendsofhyperf/rector": "^0.1.5",
- "friendsofphp/php-cs-fixer": "^3.13",
- "guzzlehttp/guzzle": "^7.5",
+ "friendsofphp/php-cs-fixer": "^3.41.1",
+ "guzzlehttp/guzzle": "^7.8",
"hyperf/crontab": "3.1.*",
"hyperf/database": "3.1.*",
"hyperf/db": "3.1.*",
@@ -6514,12 +6048,13 @@
"hyperf/testing": "^3.1",
"hyperf/validation": "3.1.*",
"pestphp/pest": "^2.23",
- "phpstan/phpstan": "^1.9",
+ "phpstan/phpstan": "^1.10.49",
+ "rector/rector": "^0.15.25",
"roave/security-advisories": "dev-latest",
"spatie/pest-plugin-test-time": "^2.0",
"swoole/ide-helper": "*",
- "symfony/mailer": "^6.0",
- "symfony/serializer": "^6.0"
+ "symfony/mailer": "^6.4.0",
+ "symfony/serializer": "^6.4.1"
},
"suggest": {
"alibabacloud/dysmsapi-20170525": "阿里云短信服务必需",
@@ -6557,7 +6092,7 @@
}
],
"description": "Common Hyperf Development Kit",
- "time": "2023-12-04T17:15:32+08:00"
+ "time": "2023-12-15T16:09:12+08:00"
},
{
"name": "swow/psr7-plus",
@@ -6615,190 +6150,6 @@
},
"time": "2023-06-15T09:18:11+00:00"
},
- {
- "name": "symfony/cache",
- "version": "v6.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/cache.git",
- "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/ac2d25f97b17eec6e19760b6b9962a4f7c44356a",
- "reference": "ac2d25f97b17eec6e19760b6b9962a4f7c44356a",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=8.1",
- "psr/cache": "^2.0|^3.0",
- "psr/log": "^1.1|^2|^3",
- "symfony/cache-contracts": "^2.5|^3",
- "symfony/service-contracts": "^2.5|^3",
- "symfony/var-exporter": "^6.3.6|^7.0"
- },
- "conflict": {
- "doctrine/dbal": "<2.13.1",
- "symfony/dependency-injection": "<5.4",
- "symfony/http-kernel": "<5.4",
- "symfony/var-dumper": "<5.4"
- },
- "provide": {
- "psr/cache-implementation": "2.0|3.0",
- "psr/simple-cache-implementation": "1.0|2.0|3.0",
- "symfony/cache-implementation": "1.1|2.0|3.0"
- },
- "require-dev": {
- "cache/integration-tests": "dev-master",
- "doctrine/dbal": "^2.13.1|^3|^4",
- "predis/predis": "^1.1|^2.0",
- "psr/simple-cache": "^1.0|^2.0|^3.0",
- "symfony/config": "^5.4|^6.0|^7.0",
- "symfony/dependency-injection": "^5.4|^6.0|^7.0",
- "symfony/filesystem": "^5.4|^6.0|^7.0",
- "symfony/http-kernel": "^5.4|^6.0|^7.0",
- "symfony/messenger": "^5.4|^6.0|^7.0",
- "symfony/var-dumper": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Cache\\": ""
- },
- "classmap": [
- "Traits/ValueWrapper.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "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": "Provides extended PSR-6, PSR-16 (and tags) implementations",
- "homepage": "https://symfony.com",
- "keywords": [
- "caching",
- "psr6"
- ],
- "support": {
- "source": "https://github.com/symfony/cache/tree/v6.4.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": "2023-11-24T19:28:07+00:00"
- },
- {
- "name": "symfony/cache-contracts",
- "version": "v3.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/cache-contracts.git",
- "reference": "1d74b127da04ffa87aa940abe15446fa89653778"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/1d74b127da04ffa87aa940abe15446fa89653778",
- "reference": "1d74b127da04ffa87aa940abe15446fa89653778",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=8.1",
- "psr/cache": "^3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Cache\\": ""
- }
- },
- "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": "Generic abstractions related to caching",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/cache-contracts/tree/v3.4.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": "2023-09-25T12:52:38+00:00"
- },
{
"name": "symfony/console",
"version": "v6.4.1",
@@ -7140,76 +6491,6 @@
],
"time": "2023-05-23T14:45:45+00:00"
},
- {
- "name": "symfony/expression-language",
- "version": "v6.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/expression-language.git",
- "reference": "6c8b12f1e5ee5d91b812fb8628fca86e2fe5d152"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/expression-language/zipball/6c8b12f1e5ee5d91b812fb8628fca86e2fe5d152",
- "reference": "6c8b12f1e5ee5d91b812fb8628fca86e2fe5d152",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=8.1",
- "symfony/cache": "^5.4|^6.0|^7.0",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/service-contracts": "^2.5|^3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\ExpressionLanguage\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an engine that can compile and evaluate expressions",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/expression-language/tree/v6.4.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": "2023-07-27T06:52:43+00:00"
- },
{
"name": "symfony/filesystem",
"version": "v6.4.0",
@@ -8823,87 +8104,6 @@
],
"time": "2023-07-25T15:08:44+00:00"
},
- {
- "name": "symfony/var-exporter",
- "version": "v6.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-exporter.git",
- "reference": "2d08ca6b9cc704dce525615d1e6d1788734f36d9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2d08ca6b9cc704dce525615d1e6d1788734f36d9",
- "reference": "2d08ca6b9cc704dce525615d1e6d1788734f36d9",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3"
- },
- "require-dev": {
- "symfony/var-dumper": "^5.4|^6.0|^7.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\VarExporter\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "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": "Allows exporting any serializable PHP data structure to plain PHP code",
- "homepage": "https://symfony.com",
- "keywords": [
- "clone",
- "construct",
- "export",
- "hydrate",
- "instantiate",
- "lazy-loading",
- "proxy",
- "serialize"
- ],
- "support": {
- "source": "https://github.com/symfony/var-exporter/tree/v6.4.1"
- },
- "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": "2023-11-30T10:32:10+00:00"
- },
{
"name": "teapot/status-code",
"version": "v1.1.2",
@@ -9364,16 +8564,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.40.1",
+ "version": "v3.42.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "7002f09c9593f515625a9f9717b10c2ab64dd3d5"
+ "reference": "632ef1be3447a9b890bef06147475facee535d0f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/7002f09c9593f515625a9f9717b10c2ab64dd3d5",
- "reference": "7002f09c9593f515625a9f9717b10c2ab64dd3d5",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/632ef1be3447a9b890bef06147475facee535d0f",
+ "reference": "632ef1be3447a9b890bef06147475facee535d0f",
"shasum": "",
"mirrors": [
{
@@ -9409,10 +8609,7 @@
"php-cs-fixer/accessible-object": "^1.1",
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.4",
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.4",
- "phpspec/prophecy": "^1.17",
- "phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^9.6",
- "symfony/phpunit-bridge": "^6.3.8 || ^7.0",
"symfony/yaml": "^5.4 || ^6.0 || ^7.0"
},
"suggest": {
@@ -9451,7 +8648,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.40.1"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.42.0"
},
"funding": [
{
@@ -9459,7 +8656,7 @@
"type": "github"
}
],
- "time": "2023-12-02T23:18:26+00:00"
+ "time": "2023-12-24T14:38:51+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -10499,16 +9696,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.24.4",
+ "version": "1.24.5",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496"
+ "reference": "fedf211ff14ec8381c9bf5714e33a7a552dd1acc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496",
- "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fedf211ff14ec8381c9bf5714e33a7a552dd1acc",
+ "reference": "fedf211ff14ec8381c9bf5714e33a7a552dd1acc",
"shasum": "",
"mirrors": [
{
@@ -10546,90 +9743,22 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.5"
},
- "time": "2023-11-26T18:29:22+00:00"
- },
- {
- "name": "phpstan/phpstan",
- "version": "1.10.46",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "90d3d25c5b98b8068916bbf08ce42d5cb6c54e70"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/90d3d25c5b98b8068916bbf08ce42d5cb6c54e70",
- "reference": "90d3d25c5b98b8068916bbf08ce42d5cb6c54e70",
- "shasum": "",
- "mirrors": [
- {
- "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
- "preferred": true
- }
- ]
- },
- "require": {
- "php": "^7.2|^8.0"
- },
- "conflict": {
- "phpstan/phpstan-shim": "*"
- },
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPStan - PHP Static Analysis Tool",
- "keywords": [
- "dev",
- "static analysis"
- ],
- "support": {
- "docs": "https://phpstan.org/user-guide/getting-started",
- "forum": "https://github.com/phpstan/phpstan/discussions",
- "issues": "https://github.com/phpstan/phpstan/issues",
- "security": "https://github.com/phpstan/phpstan/security/policy",
- "source": "https://github.com/phpstan/phpstan-src"
- },
- "funding": [
- {
- "url": "https://github.com/ondrejmirtes",
- "type": "github"
- },
- {
- "url": "https://github.com/phpstan",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
- "type": "tidelift"
- }
- ],
- "time": "2023-11-28T14:57:26+00:00"
+ "time": "2023-12-16T09:33:33+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "10.1.8",
+ "version": "10.1.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "84838eed9ded511f61dc3e8b5944a52d9017b297"
+ "reference": "78c3b7625965c2513ee96569a4dbb62601784145"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/84838eed9ded511f61dc3e8b5944a52d9017b297",
- "reference": "84838eed9ded511f61dc3e8b5944a52d9017b297",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145",
+ "reference": "78c3b7625965c2513ee96569a4dbb62601784145",
"shasum": "",
"mirrors": [
{
@@ -10642,7 +9771,7 @@
"ext-dom": "*",
"ext-libxml": "*",
"ext-xmlwriter": "*",
- "nikic/php-parser": "^4.15",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1",
"phpunit/php-file-iterator": "^4.0",
"phpunit/php-text-template": "^3.0",
@@ -10692,7 +9821,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.8"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11"
},
"funding": [
{
@@ -10700,7 +9829,7 @@
"type": "github"
}
],
- "time": "2023-11-15T13:31:15+00:00"
+ "time": "2023-12-21T15:38:30+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -11346,16 +10475,16 @@
},
{
"name": "sebastian/complexity",
- "version": "3.1.0",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "68cfb347a44871f01e33ab0ef8215966432f6957"
+ "reference": "68ff824baeae169ec9f2137158ee529584553799"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68cfb347a44871f01e33ab0ef8215966432f6957",
- "reference": "68cfb347a44871f01e33ab0ef8215966432f6957",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799",
+ "reference": "68ff824baeae169ec9f2137158ee529584553799",
"shasum": "",
"mirrors": [
{
@@ -11365,7 +10494,7 @@
]
},
"require": {
- "nikic/php-parser": "^4.10",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1"
},
"require-dev": {
@@ -11374,7 +10503,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "3.1-dev"
+ "dev-main": "3.2-dev"
}
},
"autoload": {
@@ -11398,7 +10527,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/complexity/issues",
"security": "https://github.com/sebastianbergmann/complexity/security/policy",
- "source": "https://github.com/sebastianbergmann/complexity/tree/3.1.0"
+ "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0"
},
"funding": [
{
@@ -11406,7 +10535,7 @@
"type": "github"
}
],
- "time": "2023-09-28T11:50:59+00:00"
+ "time": "2023-12-21T08:37:17+00:00"
},
{
"name": "sebastian/diff",
@@ -11705,16 +10834,16 @@
},
{
"name": "sebastian/lines-of-code",
- "version": "2.0.1",
+ "version": "2.0.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d"
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/649e40d279e243d985aa8fb6e74dd5bb28dc185d",
- "reference": "649e40d279e243d985aa8fb6e74dd5bb28dc185d",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0",
+ "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0",
"shasum": "",
"mirrors": [
{
@@ -11724,7 +10853,7 @@
]
},
"require": {
- "nikic/php-parser": "^4.10",
+ "nikic/php-parser": "^4.18 || ^5.0",
"php": ">=8.1"
},
"require-dev": {
@@ -11757,7 +10886,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
"security": "https://github.com/sebastianbergmann/lines-of-code/security/policy",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.1"
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2"
},
"funding": [
{
@@ -11765,7 +10894,7 @@
"type": "github"
}
],
- "time": "2023-08-31T09:25:50+00:00"
+ "time": "2023-12-21T08:38:20+00:00"
},
{
"name": "sebastian/object-enumerator",
diff --git a/phpstan.dist.neon b/phpstan.dist.neon
new file mode 100644
index 0000000..521d10f
--- /dev/null
+++ b/phpstan.dist.neon
@@ -0,0 +1,15 @@
+parameters:
+ level: 1
+ reportUnmatchedIgnoredErrors: false
+ checkGenericClassInNonGenericObjectType: false
+ paths:
+ - publish
+ - src
+ - tests
+ ignoreErrors:
+ - '#Constant BASE_PATH not found#'
+ - '#Unknown parameter \$[a-zA-Z0-9]+ in call to callable Closure\.#'
+ - '#Property [a-zA-Z0-9\\_]+::\$[a-zA-Z0-9]+ is never written, only read\.#'
+ - '#Method [a-zA-Z0-9\\_]+::[a-zA-Z0-9]+\(\) is unused\.#'
+ - '#Method [a-zA-Z0-9\\_]+::[a-zA-Z0-9]+\(\) has parameter \$response with no value type specified in iterable type array\.#'
+ - '#Undefined variable: \$this#'
diff --git a/phpunit.xml b/phpunit.xml
index d2c615a..7fe4569 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -1,15 +1,20 @@
-
-
- ./tests/
-
-
\ No newline at end of file
+
+
+
+ ./tests/
+
+
+
+
+ ./src
+
+
+
diff --git a/publish/languages/en/saml_error.php b/publish/languages/en/saml_error.php
index 41307e7..9c51e74 100644
--- a/publish/languages/en/saml_error.php
+++ b/publish/languages/en/saml_error.php
@@ -14,4 +14,4 @@ return [
'saml_request' => 'SAMLRequest is required',
'saml_response' => 'SAMLResponse is required',
],
-];
\ No newline at end of file
+];
diff --git a/publish/languages/zh_CN/saml_error.php b/publish/languages/zh_CN/saml_error.php
index c3200b3..dd7b903 100644
--- a/publish/languages/zh_CN/saml_error.php
+++ b/publish/languages/zh_CN/saml_error.php
@@ -14,4 +14,4 @@ return [
'saml_request' => 'SAMLRequest 参数不能为空',
'saml_response' => 'SAMLResponse 参数不能为空',
],
-];
\ No newline at end of file
+];
diff --git a/publish/saml.php b/publish/saml.php
index 5e966fb..a8fd4eb 100644
--- a/publish/saml.php
+++ b/publish/saml.php
@@ -2,21 +2,23 @@
declare(strict_types=1);
+use function Hyperf\Support\env;
+
return [
// 当前项目类型
'type' => 'sp', // 可选值:sp/idp
-
+
// 是否支持多用户同时在线
'allow_multi_online' => true,
-
+
// IDP 相关配置
'server' => [
// common config
'idp_id' => env('IDP_ID', 'https://test-accountx.luxcreo.cn/api/v1/auth'),
// 单点登录
-
+
// idp config
-
+
// sp config
// 以下内容向服务端申请
'idp_assertion_url' => env('IDP_ASSERTION_URL', 'https://test-accountx.luxcreo.cn/api/v1/auth/assertion'),
@@ -24,16 +26,16 @@ return [
'idp_logout_url' => env('IDP_LOGOUT_URL', 'https://test-accountx.luxcreo.cn/api/v1/slo'),
//单点退出
],
-
+
// SP 相关配置
'client' => [
// sp config
// 以下内容向服务端申请
'entity_id' => env('ENTITY_ID', ''), // TODO 业务系统唯一标识
'acs_url' => env('ACS_URL', ''), // TODO 回调地址
- 'landing_host' =>env('LANDING_HOST', ''), // TODO 站点 host
+ 'landing_host' => env('LANDING_HOST', ''), // TODO 站点 host
],
-
+
// 证书
'credential' => [
'enable' => false,
@@ -42,4 +44,4 @@ return [
'crt' => 'saml.crt',
'pem' => 'saml.pem',
],
-];
\ No newline at end of file
+];
diff --git a/src/Constants/SamlErrorCode.php b/src/Constants/SamlErrorCode.php
index 86df1c5..29d4fc9 100644
--- a/src/Constants/SamlErrorCode.php
+++ b/src/Constants/SamlErrorCode.php
@@ -7,6 +7,7 @@
* Created on 2022/4/25
*/
declare(strict_types=1);
+
namespace Singularity\HyperfSaml\Constants;
use Hyperf\Constants\AbstractConstants;
@@ -23,27 +24,26 @@ use Hyperf\Constants\Annotation\Constants;
*/
class SamlErrorCode extends AbstractConstants
{
-
// 203 SAML 鉴权
/**
* @Message("saml_error.default")
*/
public const AUTH_SAML_ERROR = 203000;
-
+
// 20301 验证
/**
* @Message("saml_error.params.default")
*/
public const AUTH_SAML_REQUEST_PARAMS_ERROR = 2030100;
-
+
/**
* @Message("saml_error.params.saml_request")
*/
public const AUTH_SAML_REQUEST_PARAMS_SAML_REQUEST = 2030101;
-
+
/**
* @Message("saml_error.params.saml_response")
*/
public const AUTH_SAML_REQUEST_PARAMS_SAML_RESPONSE = 2030102;
-
-}
\ No newline at end of file
+
+}
diff --git a/src/Exceptions/Handler/SamlIdpHandler.php b/src/Exceptions/Handler/SamlIdpHandler.php
index 9541b8c..3fc8596 100644
--- a/src/Exceptions/Handler/SamlIdpHandler.php
+++ b/src/Exceptions/Handler/SamlIdpHandler.php
@@ -1,6 +1,7 @@
stopPropagation();
-
+
// IDP 相关
if ($throwable instanceof ValidationException) {
$SAMLResponse = $this->logoutService->createLogoutResponse(
@@ -84,7 +87,7 @@ class SamlIdpHandler extends ExceptionHandler
messageId: $throwable->getMessageId(),
);
}
-
+
$error_type = get_class($throwable);
$data = [
'errorCode' => $throwable->getCode(),
@@ -98,7 +101,7 @@ class SamlIdpHandler extends ExceptionHandler
'sp' => config('saml.client.entity_id'),
'messageId' => $throwable->getMessageId(),
], JSON_UNESCAPED_UNICODE);
-
+
$this->logger->error(
<<getRelayState(),
[]
);
-
+
$this->logger->error("location: $url");
return $response
->withStatus(302)
->withAddedHeader('Location', $url);
}
-
+
/**
* @inheritDoc
*/
@@ -150,4 +153,4 @@ ERROR_LOG
{
return $throwable instanceof RuntimeException;
}
-}
\ No newline at end of file
+}
diff --git a/src/Exceptions/Handler/SamlSpHandler.php b/src/Exceptions/Handler/SamlSpHandler.php
index 2a0a9e6..72f0dca 100644
--- a/src/Exceptions/Handler/SamlSpHandler.php
+++ b/src/Exceptions/Handler/SamlSpHandler.php
@@ -1,14 +1,16 @@
stopPropagation();
-
+
$restful = config('common.response.restful');
$code_name = config('common.response.code_name');
$message_name = config('common.response.message_name');
-
+
$this->request?->url();
-
+
$error_type = get_class($throwable);
-
+
$is_testing = config('app_status') === true;
$is_debug = $this->request?->hasHeader('Postman-Token')
|| $this->request?->header('User-Agent') === 'apifox/2.1.8 (https://www.apifox.cn)';
-
+
$data = [
$code_name => $throwable->getCode(),
$message_name => $throwable->getMessage(),
];
-
+
// 验证失败
if ($throwable instanceof ValidationException) {
$code = $throwable->getCode();
@@ -82,8 +86,8 @@ class SamlSpHandler extends ExceptionHandler
$data['availableValue'] = $throwable->getAvailableValue();
}
}
-
-
+
+
// 整理日志所需的数据
$request_time = date('Y-m-d H:i:s');
$request_headers = $this->request->getHeaders();
@@ -93,20 +97,19 @@ class SamlSpHandler extends ExceptionHandler
'sp' => config('saml.client.entity_id'),
'messageId' => $throwable->getMessageId(),
], JSON_UNESCAPED_UNICODE);
-
-
+
+
$response = $response->withHeader(
Header::CONTENT_TYPE,
'application/json; charset=utf-8'
);
-
+
if ($is_debug && $is_testing) {
$data['trace'] = [
'errorType' => $error_type,
'errorTrack' => $throwable->getTrace(),
];
}
- $cookies = json_encode($this->request->getCookieParams(), JSON_UNESCAPED_UNICODE);
$this->logger->error(
<<withStatus(
- $status_code ??
$throwable->status ??
$throwable->statusCode ??
RFC7231::INTERNAL_SERVER_ERROR
@@ -154,7 +156,7 @@ ERROR_LOG
new SwooleStream($data)
);
}
-
+
/**
* @inheritDoc
*/
@@ -162,4 +164,4 @@ ERROR_LOG
{
return $throwable instanceof RuntimeException;
}
-}
\ No newline at end of file
+}
diff --git a/src/Exceptions/Logout/ValidationException.php b/src/Exceptions/Logout/ValidationException.php
index 503b704..ca023a2 100644
--- a/src/Exceptions/Logout/ValidationException.php
+++ b/src/Exceptions/Logout/ValidationException.php
@@ -1,11 +1,11 @@
statusCode;
}
-
+
/**
* @return string
*/
@@ -33,7 +34,7 @@ class RuntimeException extends \RuntimeException
{
return $this->relayState;
}
-
+
/**
* @return string
*/
@@ -41,4 +42,4 @@ class RuntimeException extends \RuntimeException
{
return $this->messageId;
}
-}
\ No newline at end of file
+}
diff --git a/src/Exceptions/ValidationException.php b/src/Exceptions/ValidationException.php
index 0544976..484e33b 100644
--- a/src/Exceptions/ValidationException.php
+++ b/src/Exceptions/ValidationException.php
@@ -1,6 +1,7 @@
field;
}
-
+
/**
* @return mixed
*/
@@ -47,7 +48,7 @@ class ValidationException extends RuntimeException
{
return $this->currentValue;
}
-
+
/**
* @return array
*/
@@ -55,4 +56,4 @@ class ValidationException extends RuntimeException
{
return $this->availableValue;
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/AbstractService.php b/src/Services/AbstractService.php
index 31bb837..33a3416 100644
--- a/src/Services/AbstractService.php
+++ b/src/Services/AbstractService.php
@@ -52,14 +52,14 @@ abstract class AbstractService
try {
$bindingFactory = new BindingFactory();
$binding = $bindingFactory->getBindingByRequest($requestInstance);
-
+
// We prepare a message context to receive our SAML Request message.
$messageContext = new MessageContext();
-
+
// The received method fills in the messageContext with the SAML Request data.
/** @var \LightSaml\Model\Protocol\Response $response */
$binding->receive($requestInstance, $messageContext);
-
+
return $messageContext;
} catch (InvalidArgumentException $exception) {
throw new ValidationException(
@@ -68,7 +68,7 @@ abstract class AbstractService
);
}
}
-
+
/**
* 响应给 ACS
*
@@ -93,10 +93,10 @@ abstract class AbstractService
}
$messageContext = new MessageContext();
$messageContext->setMessage($responseInstance);
-
+
$bindingFactory = new BindingFactory();
$redirectBinding = $bindingFactory->create($bindingType);
-
+
// Ensure we include the RelayState.
$message = $messageContext->getMessage();
$rs = $message->getRelayState();
@@ -104,29 +104,29 @@ abstract class AbstractService
$message->setRelayState($relayState);
$messageContext->setMessage($message);
}
-
+
// Return the Response.
/** @var \Symfony\Component\HttpFoundation\RedirectResponse $httpResponse */
$httpResponse = $redirectBinding->send($messageContext);
-
+
$url_parts = parse_url($httpResponse->getTargetUrl());
-
+
$query = [];
parse_str($url_parts['query'], $query);
// $query['Signature'] = $this->base64Wrapper->encode($query['Signature']);
-
+
$query += $extraParams;
$url_parts['query'] = http_build_query($query);
$url_parts['port'] ??= '80';
if ($url_parts['port'] !== '80') {
$url_parts['host'] .= ':' . $url_parts['port'];
}
-
+
$url = $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'] . '?' . $url_parts['query'];
if (!$returnHtml) {
return $url;
}
-
+
return sprintf(
'
@@ -142,7 +142,7 @@ abstract class AbstractService
);
// return $httpResponse->setTargetUrl($url)->getContent();
}
-
+
public function requestParser($request): Request
{
$params = $request->getQueryParams();
@@ -152,7 +152,7 @@ abstract class AbstractService
$params,
);
}
-
+
/**
* Retrieves the certificate from the IdP.
*
@@ -162,7 +162,7 @@ abstract class AbstractService
{
return X509Certificate::fromFile('cert/server.crt');
}
-
+
/**
* Retrieves the private key from the Idp.
*
@@ -172,4 +172,4 @@ abstract class AbstractService
{
return KeyHelper::createPrivateKey('cert/server.key', '', true);
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/Base.php b/src/Services/Base.php
index 67eb1ad..189f3da 100644
--- a/src/Services/Base.php
+++ b/src/Services/Base.php
@@ -37,6 +37,8 @@ use RobRichards\XMLSecLibs\XMLSecurityKey;
use Singularity\HDK\Auth\Resource\User;
use Throwable;
+use function Hyperf\Config\config;
+
/**
* Singularity\HyperfSaml\Lib\Base@HyperfSaml
*
@@ -424,4 +426,4 @@ class Base extends AbstractService
{
return $response->getRelayState();
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/Idp/AbstractLoginService.php b/src/Services/Idp/AbstractLoginService.php
index 49f7725..b85ab81 100644
--- a/src/Services/Idp/AbstractLoginService.php
+++ b/src/Services/Idp/AbstractLoginService.php
@@ -1,6 +1,7 @@
assertionBuilder(
@@ -64,12 +65,12 @@ class AbstractLoginService extends AbstractService
$messageId,
$sp?->acsUrl ?? ''
);
-
+
// 加密
$certificate = (new X509Certificate())->loadPem($sp->secret);
$encryptedAssertion = new EncryptedAssertionWriter();
$encryptedAssertion->encrypt($assertion, KeyHelper::createPublicKey($certificate));
-
+
$response
// ->addAssertion($assertion)
->addEncryptedAssertion($encryptedAssertion)
@@ -79,21 +80,21 @@ class AbstractLoginService extends AbstractService
->setID(Helper::generateID())
->setIssueInstant(new DateTime())
->setDestination($sp->acsUrl);
-
+
// Sign the response.
// $response->setSignature(
// new SignatureWriter($this->getCertificate(), $this->getPrivateKey())
// );
-
+
// Preparing the response XML
$serializationContext = new SerializationContext();
-
+
// Serialize to XML.
$response->serialize($serializationContext->getDocument(), $serializationContext);
-
+
return $response;
}
-
+
/**
* 断言构建器
*
@@ -111,33 +112,33 @@ class AbstractLoginService extends AbstractService
string $acsUrl = ''
): Assertion {
$assertion = new Assertion();
-
+
$this->logger->info('生成 NameID: ' . $user?->uid ?? 'nil');
// 构建基本信息
$name_id = new NameID(
$user?->uid ?? 'nil',
SamlConstants::NAME_ID_FORMAT_PERSISTENT
);
-
+
$subject = new Subject();
$subject_confirmation = new SubjectConfirmation();
$subject_confirmation_data = new SubjectConfirmationData();
-
+
$subject_confirmation_data = $subject_confirmation_data
->setInResponseTo($messageId) # SAML 请求的标识
->setNotOnOrAfter(new DateTime('+1 MINUTE')) # 有效期 1 分钟内
->setRecipient($acsUrl); # 断言消费服务的地址
-
+
/** @var SubjectConfirmation 验证数据 $subject_confirmation */
$subject_confirmation = $subject_confirmation
->setMethod(SamlConstants::CONFIRMATION_METHOD_BEARER)
->setSubjectConfirmationData($subject_confirmation_data);
-
+
/** @var Subject 主题/标题 $subject */
$subject = $subject
->setNameID($name_id)
->addSubjectConfirmation($subject_confirmation);
-
+
// 配置生效条件
$conditions = new Conditions();
$conditions = $conditions
@@ -146,18 +147,18 @@ class AbstractLoginService extends AbstractService
->addItem(
new AudienceRestriction([$issuerId])# 受众限制
);
-
+
$assertion = $assertion
->setId(Helper::generateID()) # 本次的 MessageID
->setIssueInstant(new DateTime()) # 当前时间戳
->setIssuer(new Issuer($this->idpId)) # 发信人——IDP的entityID
->setSubject($subject)# 设置主题/标题
->setConditions($conditions);
-
+
// 补充更多内容
if (isset($user)) {
$attribute_statement = new AttributeStatement();
-
+
// uid
$attribute_statement = $attribute_statement
->addAttribute(
@@ -172,7 +173,7 @@ class AbstractLoginService extends AbstractService
$user->uid ?? null
)
);
-
+
// secEmail
$attribute_statement = $attribute_statement
->addAttribute(
@@ -187,7 +188,7 @@ class AbstractLoginService extends AbstractService
$user->secEmail ?? null
)
);
-
+
// username
$attribute_statement = $attribute_statement
->addAttribute(
@@ -202,7 +203,7 @@ class AbstractLoginService extends AbstractService
$user->username ?? null
)
);
-
+
// 密码
$attribute_statement = $attribute_statement
->addAttribute(
@@ -216,7 +217,7 @@ class AbstractLoginService extends AbstractService
!empty($user->password)
)
);
-
+
//其他
$attribute_statement = $attribute_statement
->addAttribute(
@@ -236,11 +237,11 @@ class AbstractLoginService extends AbstractService
$user->avatar
)
);
-
+
$assertion->addItem($attribute_statement);
}
-
+
return $assertion;
}
-
-}
\ No newline at end of file
+
+}
diff --git a/src/Services/Idp/AbstractLogoutService.php b/src/Services/Idp/AbstractLogoutService.php
index 152a3a3..2cb5680 100644
--- a/src/Services/Idp/AbstractLogoutService.php
+++ b/src/Services/Idp/AbstractLogoutService.php
@@ -16,6 +16,8 @@ use Singularity\HDK\Core\Constants\CommonErrorCode;
use Singularity\HyperfSaml\Exceptions\Logout\ValidationException;
use Singularity\HyperfSaml\Services\AbstractService;
+use function Hyperf\Config\config;
+
class AbstractLogoutService extends AbstractService
{
/**
@@ -153,4 +155,4 @@ class AbstractLogoutService extends AbstractService
return $user;
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/Sp/Assertion.php b/src/Services/Sp/Assertion.php
index ac79290..c99845b 100644
--- a/src/Services/Sp/Assertion.php
+++ b/src/Services/Sp/Assertion.php
@@ -31,6 +31,8 @@ use Singularity\HyperfSaml\Exceptions\RuntimeException;
use Singularity\HyperfSaml\Exceptions\ValidationException;
use Singularity\HyperfSaml\Services\Base;
+use function Hyperf\Config\config;
+
/**
* 断言操作类
* 用于获取用户登录状态
@@ -181,4 +183,4 @@ class Assertion
)->withHeader(Header::CONTENT_TYPE, 'text/html');
// return $this->response->redirect($landing_url, RFC7231::FOUND);
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/Sp/MetadataProfile.php b/src/Services/Sp/MetadataProfile.php
index f4aefd5..7a9b061 100644
--- a/src/Services/Sp/MetadataProfile.php
+++ b/src/Services/Sp/MetadataProfile.php
@@ -8,9 +8,9 @@
*/
declare(strict_types=1);
+
namespace Singularity\HyperfSaml\Services\Sp;
class MetadataProfile
{
-
-}
\ No newline at end of file
+}
diff --git a/src/Services/Sp/Slo.php b/src/Services/Sp/Slo.php
index 16139d1..ad8cf74 100644
--- a/src/Services/Sp/Slo.php
+++ b/src/Services/Sp/Slo.php
@@ -15,10 +15,13 @@ use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Hyperf\Redis\Redis;
use Psr\Http\Message\ResponseInterface as PsrResponseInterface;
+use RedisException;
use Singularity\HDK\Auth\Services\AuthenticationInterface;
use Singularity\HyperfSaml\Services\Base;
use Teapot\StatusCode\RFC\RFC7231;
+use function Hyperf\Config\config;
+
/**
* 单点退出登录
* Singularity\HyperfSaml\Services\Sp\Slo@HyperfSaml
@@ -30,30 +33,30 @@ use Teapot\StatusCode\RFC\RFC7231;
class Slo
{
public function __construct(
- private Base $base,
- private RequestInterface $request,
- private ResponseInterface $response,
- private AuthenticationInterface $authentication,
- private Redis $redis
+ private readonly Base $base,
+ private readonly RequestInterface $request,
+ private readonly ResponseInterface $response,
+ private readonly AuthenticationInterface $authentication,
+ private readonly Redis $redis
) {
}
-
+
/**
* 重定向方式退出单点登录
*
* @param string $uid
* @param string $originToken
*
- * @return \Psr\Http\Message\ResponseInterface
+ * @return PsrResponseInterface
*/
public function redirect(string $uid, string $originToken): PsrResponseInterface
{
$idpId = config('saml.server.idp_logout_url');
$issuer = config('saml.client.entity_id');
$this->authentication->invalidByToken();
-
+
$relayState = $this->request->query('RelayState', '');
-
+
$url = $this->base->createLogoutRequest(
uid: $uid,
token: $originToken,
@@ -61,27 +64,28 @@ class Slo
issuer: $issuer,
relayState: $relayState
);
-
+
return $this->response->redirect($url, RFC7231::FOUND);
}
-
+
/**
* 回调方式退出单点登录(IDP 通知 SP)
*
- * @return \Psr\Http\Message\ResponseInterface Account 只根据 StatusCode 判断, 符合 [200, 300) 即可
+ * @return PsrResponseInterface Account 只根据 StatusCode 判断, 符合 [200, 300) 即可
+ * @throws RedisException
*/
public function callback(): PsrResponseInterface
{
$redis_prefix = config('common.redis.prefix');
-
+
$uid = $this->request->query('uid');
$originToken = $this->request->query('token');
-
+
if (empty($originToken)) {
$this->authentication->invalidByUser($uid);
} else {
$key = "{$redis_prefix}user:token_map:$uid";
-
+
$token = $this->redis->hGet($key, $originToken);
$this->redis->hDel($key, $originToken);
if ($token) {
@@ -90,4 +94,4 @@ class Slo
}
return $this->response->raw('')->withStatus(RFC7231::NO_CONTENT);
}
-}
\ No newline at end of file
+}
diff --git a/src/Services/Sp/Sso.php b/src/Services/Sp/Sso.php
index 63e6040..f22a446 100644
--- a/src/Services/Sp/Sso.php
+++ b/src/Services/Sp/Sso.php
@@ -11,7 +11,7 @@ declare(strict_types=1);
namespace Singularity\HyperfSaml\Services\Sp;
-use Hyperf\Utils\Codec\Json;
+use Hyperf\Codec\Json;
use Singularity\HDK\Core\Constants\CommonErrorCode;
use Singularity\HDK\Core\Exceptions\Forbidden;
use Swoole\Exception;
@@ -24,6 +24,8 @@ use Psr\Http\Message\ResponseInterface as PsrResponseInterface;
use Singularity\HyperfSaml\Services\Base;
use Teapot\StatusCode\RFC\RFC7231;
+use function Hyperf\Config\config;
+
/**
* SP 单点登录
* Singularity\HyperfSaml\Sp\Sso@HyperfSaml
@@ -38,7 +40,7 @@ class Sso
private string $idpAssertionUrl;
private string $acsUrl;
private string $issuer;
-
+
public function __construct(
private Base $base,
private RequestInterface $request,
@@ -48,11 +50,11 @@ class Sso
) {
$this->idpId = config('saml.server.idp_id');
$this->idpAssertionUrl = config('saml.server.idp_assertion_url');
-
+
$this->issuer = config('saml.client.entity_id');
$this->acsUrl = config('saml.client.acs_url');
}
-
+
/**
* 自动重定向获取用户登录状态
*
@@ -67,7 +69,7 @@ class Sso
);
return $this->response->redirect($url, RFC7231::FOUND);
}
-
+
/**
* 自动重定向到单点登录
*
@@ -77,7 +79,7 @@ class Sso
{
$language = $this->request->query('language') ?? config('language') ?? 'zh_CN';
$relayState = $this->request->query('RelayState', '');
-
+
$url = $this->base->createSamlRequest(
idpID: $this->idpId,
acsUrl: $this->acsUrl,
@@ -89,7 +91,7 @@ class Sso
);
return $this->response->redirect($url, RFC7231::FOUND);
}
-
+
/**
* 验证用户同时在多个设备登录
*
@@ -104,7 +106,7 @@ class Sso
public function checkMultiDeviceOnline($uid, $token): void
{
$allow_multi_online = config('saml.allow_multi_online');
-
+
// 只对限制为单设备登录的业务进行验证
if ($allow_multi_online) {
return;
@@ -112,7 +114,7 @@ class Sso
$redis_prefix = config('common.redis.prefix');
$key = "{$redis_prefix}user:token_map:{$uid}";
$type = $this->redis->type($key);
-
+
try {
$this->stdoutLogger->info('user_token redis type: ' . $type);
switch ($type) {
@@ -131,7 +133,7 @@ class Sso
$this->stdoutLogger->info('user_token redis key: ' . $origin_token);
$latest_token = $this->redis->hGet($key, $origin_token);
$this->stdoutLogger->info('user_token redis value isset: ' . $latest_token);
-
+
if (empty($latest_token) || $latest_token !== $token) {
throw new Exception(code: CommonErrorCode::AUTH_SESSION_CREATED_AT_ERROR);
}
@@ -144,8 +146,8 @@ class Sso
} catch (Exception $e) {
$code = $e->getCode();
$message = CommonErrorCode::getMessage($code);
-
+
throw new Forbidden(code: $code, message: $message);
}
}
-}
\ No newline at end of file
+}
diff --git a/tests/Cases/AbstractTestCase.php b/tests/Cases/AbstractTestCase.php
deleted file mode 100644
index 2274c20..0000000
--- a/tests/Cases/AbstractTestCase.php
+++ /dev/null
@@ -1,21 +0,0 @@
-assertTrue(true);
- }
-}
diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php
new file mode 100644
index 0000000..61cd84c
--- /dev/null
+++ b/tests/Feature/ExampleTest.php
@@ -0,0 +1,5 @@
+toBeTrue();
+});
diff --git a/tests/Pest.php b/tests/Pest.php
new file mode 100644
index 0000000..bdf0a5f
--- /dev/null
+++ b/tests/Pest.php
@@ -0,0 +1,45 @@
+in('Feature');
+
+/*
+|--------------------------------------------------------------------------
+| Expectations
+|--------------------------------------------------------------------------
+|
+| When you're writing tests, you often need to check that values meet certain conditions. The
+| "expect()" function gives you access to a set of "expectations" methods that you can use
+| to assert different things. Of course, you may extend the Expectation API at any time.
+|
+*/
+
+expect()->extend('toBeOne', function () {
+ return $this->toBe(1);
+});
+
+/*
+|--------------------------------------------------------------------------
+| Functions
+|--------------------------------------------------------------------------
+|
+| While Pest is very powerful out-of-the-box, you may have some testing code specific to your
+| project that you don't want to repeat in every file. Here you can also expose helpers as
+| global functions to help you to reduce the number of lines of code in your test files.
+|
+*/
+
+/*function something()
+{
+ // ..
+}*/
diff --git a/tests/TestCase.php b/tests/TestCase.php
new file mode 100644
index 0000000..cfb05b6
--- /dev/null
+++ b/tests/TestCase.php
@@ -0,0 +1,10 @@
+toBeTrue();
+});
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 6ce15df..5cbe900 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -1,12 +1,31 @@