PHP 7.2 버전용으로 올림!
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
* Apache2
|
* Apache2
|
||||||
* <code>mpm_event</code> 권장
|
* <code>mpm_event</code> 권장
|
||||||
* PHP 7.0 이상
|
* PHP 7.2 이상
|
||||||
* <code>php-fpm</code> 권장
|
* <code>php-fpm</code> 권장
|
||||||
* php에서 curl을 실행가능해야 합니다.
|
* php에서 curl을 실행가능해야 합니다.
|
||||||
* MySQL 5.6 이상, 또는 MariaDB 10.0 이상
|
* MySQL 5.6 이상, 또는 MariaDB 10.0 이상
|
||||||
@@ -32,13 +32,13 @@ sudo -u www-data git clone ssh://git@storage.hided.net:2525/devsam/core.git
|
|||||||
git clone ssh://git@storage.hided.net:2525/devsam/image.git
|
git clone ssh://git@storage.hided.net:2525/devsam/image.git
|
||||||
```
|
```
|
||||||
|
|
||||||
> 이미지는 별도의 업데이트 기능을 제공하지 않습니다. 수동으로 <code>git pull</code>을 해야합니다.
|
> 이미지는 git hook을 이용한 업데이트 기능을 제공하지만 아직 범용성 있는 설계가 되어있진 않습니다.
|
||||||
|
|
||||||
### 설치
|
### 설치
|
||||||
|
|
||||||
이후 해당 경로를 웹 브라우저를 통해 접근하여 설치를 진행할 수 있습니다.
|
이후 해당 경로를 웹 브라우저를 통해 접근하여 설치를 진행할 수 있습니다.
|
||||||
|
|
||||||
Database 수는 로그인 관리 서버 1개, 내부 서버 5개로, 총 6개의 Database가 필요합니다. 내부 설정을 고쳐서 서버 수를 늘리거나 줄일 경우 그에 맞는 Database 수가 필요합니다. 또한 Database마다 관리할 별도의 계정을 만드는 것을 추천합니다.
|
Database 수는 로그인 관리 서버 1개, 내부 서버 7개로, 총 8개의 Database가 필요합니다. 내부 설정을 고쳐서 서버 수를 늘리거나 줄일 경우 그에 맞는 Database 수가 필요합니다. 또한 Database마다 관리할 별도의 계정을 만드는 것을 추천합니다.
|
||||||
|
|
||||||
설치 이후에는 서버관리 페이지에서 **업데이트** 명령을 통해 원 클릭 업데이트가 가능합니다.
|
설치 이후에는 서버관리 페이지에서 **업데이트** 명령을 통해 원 클릭 업데이트가 가능합니다.
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
"vlucas/valitron": "^1.4",
|
"vlucas/valitron": "^1.4",
|
||||||
"php-extended/php-tail": "^2.1",
|
"php-extended/php-tail": "^2.1",
|
||||||
"pguardiario/phpuri": "^1.0",
|
"pguardiario/phpuri": "^1.0",
|
||||||
"symfony/lock": "^3.4"
|
"symfony/lock": "^4.1"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|||||||
Generated
+49
-154
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"_readme": [
|
"_readme": [
|
||||||
"This file locks the dependencies of your project to a known state",
|
"This file locks the dependencies of your project to a known state",
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "a329d39be5161c87438d41f9adf4417b",
|
"content-hash": "1414d4ab0c85125f75e200bf7231489d",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brandonwamboldt/utilphp",
|
"name": "brandonwamboldt/utilphp",
|
||||||
@@ -90,16 +90,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/guzzle",
|
"name": "guzzlehttp/guzzle",
|
||||||
"version": "6.3.2",
|
"version": "6.3.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/guzzle.git",
|
"url": "https://github.com/guzzle/guzzle.git",
|
||||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90"
|
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -109,7 +109,7 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4",
|
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
||||||
"psr/log": "^1.0"
|
"psr/log": "^1.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
"rest",
|
"rest",
|
||||||
"web service"
|
"web service"
|
||||||
],
|
],
|
||||||
"time": "2018-03-26T16:33:04+00:00"
|
"time": "2018-04-22T15:46:56+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/promises",
|
"name": "guzzlehttp/promises",
|
||||||
@@ -271,16 +271,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "leafo/scssphp",
|
"name": "leafo/scssphp",
|
||||||
"version": "v0.7.5",
|
"version": "v0.7.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/leafo/scssphp.git",
|
"url": "https://github.com/leafo/scssphp.git",
|
||||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e"
|
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/leafo/scssphp/zipball/8b538d828bbb75276974605c4a1a435e939da74e",
|
"url": "https://api.github.com/repos/leafo/scssphp/zipball/585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e",
|
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -319,7 +319,7 @@
|
|||||||
"scss",
|
"scss",
|
||||||
"stylesheet"
|
"stylesheet"
|
||||||
],
|
],
|
||||||
"time": "2018-02-09T02:04:21+00:00"
|
"time": "2018-05-24T02:18:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/plates",
|
"name": "league/plates",
|
||||||
@@ -454,54 +454,6 @@
|
|||||||
],
|
],
|
||||||
"time": "2017-06-19T01:22:40+00:00"
|
"time": "2017-06-19T01:22:40+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "paragonie/random_compat",
|
|
||||||
"version": "v2.0.12",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/paragonie/random_compat.git",
|
|
||||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
|
||||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "4.*|5.*"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"lib/random.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Paragon Initiative Enterprises",
|
|
||||||
"email": "security@paragonie.com",
|
|
||||||
"homepage": "https://paragonie.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
|
||||||
"keywords": [
|
|
||||||
"csprng",
|
|
||||||
"pseudorandom",
|
|
||||||
"random"
|
|
||||||
],
|
|
||||||
"time": "2018-04-04T21:24:14+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "pguardiario/phpuri",
|
"name": "pguardiario/phpuri",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
@@ -528,16 +480,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "php-extended/php-system",
|
"name": "php-extended/php-system",
|
||||||
"version": "1.3.0",
|
"version": "1.4.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-extended/php-system.git",
|
"url": "https://gitlab.com/php-extended/php-system.git",
|
||||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c"
|
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-extended/php-system/zipball/66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
@@ -553,31 +505,31 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Anastaszor",
|
"name": "Anastaszor",
|
||||||
"role": "developer"
|
"role": "Developer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "A generic way to find informations about the running system",
|
"description": "A generic way to find informations about the running system",
|
||||||
"homepage": "https://github.com/php-extended/php-system",
|
"homepage": "https://gitlab.com/php-extended/php-system",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"operating system",
|
"operating system",
|
||||||
"os",
|
"os",
|
||||||
"php",
|
"php",
|
||||||
"system"
|
"system"
|
||||||
],
|
],
|
||||||
"time": "2017-01-14T11:56:24+00:00"
|
"time": "2018-06-07T06:03:27+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "php-extended/php-tail",
|
"name": "php-extended/php-tail",
|
||||||
"version": "2.1.1",
|
"version": "2.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-extended/php-tail.git",
|
"url": "https://gitlab.com/php-extended/php-tail.git",
|
||||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7"
|
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-extended/php-tail/zipball/eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -596,11 +548,11 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Anastaszor",
|
"name": "Anastaszor",
|
||||||
"role": "developer"
|
"role": "Developer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "A smart way to tail files depending of the environment",
|
"description": "A smart way to tail files depending of the environment",
|
||||||
"homepage": "https://github.com/php-extended/php-tail",
|
"homepage": "https://gitlab.com/php-extended/php-tail",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"cheat",
|
"cheat",
|
||||||
"mighty",
|
"mighty",
|
||||||
@@ -608,7 +560,7 @@
|
|||||||
"php",
|
"php",
|
||||||
"tail"
|
"tail"
|
||||||
],
|
],
|
||||||
"time": "2017-07-25T13:52:42+00:00"
|
"time": "2018-06-07T06:04:58+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/http-message",
|
"name": "psr/http-message",
|
||||||
@@ -752,22 +704,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/lock",
|
"name": "symfony/lock",
|
||||||
"version": "v3.4.9",
|
"version": "v4.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/lock.git",
|
"url": "https://github.com/symfony/lock.git",
|
||||||
"reference": "3a707193326d31603824706e34a95af899a59788"
|
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/lock/zipball/3a707193326d31603824706e34a95af899a59788",
|
"url": "https://api.github.com/repos/symfony/lock/zipball/a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||||
"reference": "3a707193326d31603824706e34a95af899a59788",
|
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.5.9|>=7.0.8",
|
"php": "^7.1.3",
|
||||||
"psr/log": "~1.0",
|
"psr/log": "~1.0"
|
||||||
"symfony/polyfill-php70": "~1.0"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"predis/predis": "~1.0"
|
"predis/predis": "~1.0"
|
||||||
@@ -775,7 +726,7 @@
|
|||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "3.4-dev"
|
"dev-master": "4.1-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -810,96 +761,40 @@
|
|||||||
"redlock",
|
"redlock",
|
||||||
"semaphore"
|
"semaphore"
|
||||||
],
|
],
|
||||||
"time": "2018-04-29T14:44:26+00:00"
|
"time": "2018-05-30T07:26:09+00:00"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-php70",
|
|
||||||
"version": "v1.8.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-php70.git",
|
|
||||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
|
|
||||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"paragonie/random_compat": "~1.0|~2.0",
|
|
||||||
"php": ">=5.3.3"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.8-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php70\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
],
|
|
||||||
"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 7.0+ features to lower PHP versions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"time": "2018-04-26T10:06:28+00:00"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "vlucas/valitron",
|
"name": "vlucas/valitron",
|
||||||
"version": "v1.4.2",
|
"version": "v1.4.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/vlucas/valitron.git",
|
"url": "https://github.com/vlucas/valitron.git",
|
||||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6"
|
"reference": "3c5463315bfa23b17f8949b100a960d035234e43"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/87775d76268beda2afa085bdd6e44b17e98907c6",
|
"url": "https://api.github.com/repos/vlucas/valitron/zipball/3c5463315bfa23b17f8949b100a960d035234e43",
|
||||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6",
|
"reference": "3c5463315bfa23b17f8949b100a960d035234e43",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.2"
|
"php": ">=5.3.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~4.0"
|
"phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mbstring": "It can support the multiple bytes string length."
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": {
|
"psr-4": {
|
||||||
"Valitron": "src/"
|
"Valitron\\": "src/Valitron"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
"BSD"
|
"BSD-3-Clause"
|
||||||
],
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
@@ -915,7 +810,7 @@
|
|||||||
"validation",
|
"validation",
|
||||||
"validator"
|
"validator"
|
||||||
],
|
],
|
||||||
"time": "2017-10-30T23:15:06+00:00"
|
"time": "2018-05-06T10:45:26+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [],
|
"packages-dev": [],
|
||||||
|
|||||||
Binary file not shown.
-7
@@ -6,21 +6,14 @@ $vendorDir = dirname(dirname(__FILE__));
|
|||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'ArithmeticError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
|
|
||||||
'AssertionError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
|
|
||||||
'DB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'DB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'DBHelper' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'DBHelper' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'DBTransaction' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'DBTransaction' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'DivisionByZeroError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php',
|
|
||||||
'Error' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/Error.php',
|
|
||||||
'FB' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
'FB' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
||||||
'FirePHP' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
'FirePHP' => $vendorDir . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
||||||
'MeekroDB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'MeekroDB' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'MeekroDBEval' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'MeekroDBEval' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'MeekroDBException' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'MeekroDBException' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'ParseError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/ParseError.php',
|
|
||||||
'SessionUpdateTimestampHandlerInterface' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
|
|
||||||
'TypeError' => $vendorDir . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
|
|
||||||
'WhereClause' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
'WhereClause' => $vendorDir . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'kakao\\KakaoKey' => $baseDir . '/d_setting/KakaoKey.php',
|
'kakao\\KakaoKey' => $baseDir . '/d_setting/KakaoKey.php',
|
||||||
'sammo\\RootDB' => $baseDir . '/d_setting/RootDB.php',
|
'sammo\\RootDB' => $baseDir . '/d_setting/RootDB.php',
|
||||||
|
|||||||
Vendored
-2
@@ -6,10 +6,8 @@ $vendorDir = dirname(dirname(__FILE__));
|
|||||||
$baseDir = dirname($vendorDir);
|
$baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
|
|
||||||
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
|
||||||
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
|
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
|
||||||
'023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php',
|
|
||||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
|
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||||
'5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php',
|
'5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php',
|
||||||
'870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php',
|
'870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php',
|
||||||
|
|||||||
-1
@@ -7,5 +7,4 @@ $baseDir = dirname($vendorDir);
|
|||||||
|
|
||||||
return array(
|
return array(
|
||||||
'utilphp\\' => array($vendorDir . '/brandonwamboldt/utilphp/src'),
|
'utilphp\\' => array($vendorDir . '/brandonwamboldt/utilphp/src'),
|
||||||
'Valitron' => array($vendorDir . '/vlucas/valitron/src'),
|
|
||||||
);
|
);
|
||||||
|
|||||||
Vendored
+1
-1
@@ -8,7 +8,7 @@ $baseDir = dirname($vendorDir);
|
|||||||
return array(
|
return array(
|
||||||
'sammo\\' => array($baseDir . '/src/sammo'),
|
'sammo\\' => array($baseDir . '/src/sammo'),
|
||||||
'kakao\\' => array($baseDir . '/src/kakao'),
|
'kakao\\' => array($baseDir . '/src/kakao'),
|
||||||
'Symfony\\Polyfill\\Php70\\' => array($vendorDir . '/symfony/polyfill-php70'),
|
'Valitron\\' => array($vendorDir . '/vlucas/valitron/src/Valitron'),
|
||||||
'Symfony\\Component\\Lock\\' => array($vendorDir . '/symfony/lock'),
|
'Symfony\\Component\\Lock\\' => array($vendorDir . '/symfony/lock'),
|
||||||
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
||||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
|
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
|
||||||
|
|||||||
Vendored
+6
-19
@@ -7,10 +7,8 @@ namespace Composer\Autoload;
|
|||||||
class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
||||||
{
|
{
|
||||||
public static $files = array (
|
public static $files = array (
|
||||||
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
|
|
||||||
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
|
||||||
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
|
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
|
||||||
'023d27dca8066ef29e6739335ea73bad' => __DIR__ . '/..' . '/symfony/polyfill-php70/bootstrap.php',
|
|
||||||
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
|
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
|
||||||
'5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php',
|
'5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php',
|
||||||
'870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php',
|
'870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php',
|
||||||
@@ -25,9 +23,12 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
|||||||
array (
|
array (
|
||||||
'kakao\\' => 6,
|
'kakao\\' => 6,
|
||||||
),
|
),
|
||||||
|
'V' =>
|
||||||
|
array (
|
||||||
|
'Valitron\\' => 9,
|
||||||
|
),
|
||||||
'S' =>
|
'S' =>
|
||||||
array (
|
array (
|
||||||
'Symfony\\Polyfill\\Php70\\' => 23,
|
|
||||||
'Symfony\\Component\\Lock\\' => 23,
|
'Symfony\\Component\\Lock\\' => 23,
|
||||||
),
|
),
|
||||||
'P' =>
|
'P' =>
|
||||||
@@ -63,9 +64,9 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
|||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/../..' . '/src/kakao',
|
0 => __DIR__ . '/../..' . '/src/kakao',
|
||||||
),
|
),
|
||||||
'Symfony\\Polyfill\\Php70\\' =>
|
'Valitron\\' =>
|
||||||
array (
|
array (
|
||||||
0 => __DIR__ . '/..' . '/symfony/polyfill-php70',
|
0 => __DIR__ . '/..' . '/vlucas/valitron/src/Valitron',
|
||||||
),
|
),
|
||||||
'Symfony\\Component\\Lock\\' =>
|
'Symfony\\Component\\Lock\\' =>
|
||||||
array (
|
array (
|
||||||
@@ -121,31 +122,17 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a
|
|||||||
0 => __DIR__ . '/..' . '/brandonwamboldt/utilphp/src',
|
0 => __DIR__ . '/..' . '/brandonwamboldt/utilphp/src',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
'V' =>
|
|
||||||
array (
|
|
||||||
'Valitron' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/vlucas/valitron/src',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
public static $classMap = array (
|
public static $classMap = array (
|
||||||
'ArithmeticError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ArithmeticError.php',
|
|
||||||
'AssertionError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/AssertionError.php',
|
|
||||||
'DB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'DB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'DBHelper' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'DBHelper' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'DBTransaction' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'DBTransaction' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'DivisionByZeroError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/DivisionByZeroError.php',
|
|
||||||
'Error' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/Error.php',
|
|
||||||
'FB' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
'FB' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/fb.php',
|
||||||
'FirePHP' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
'FirePHP' => __DIR__ . '/..' . '/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php',
|
||||||
'MeekroDB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'MeekroDB' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'MeekroDBEval' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'MeekroDBEval' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'MeekroDBException' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'MeekroDBException' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'ParseError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/ParseError.php',
|
|
||||||
'SessionUpdateTimestampHandlerInterface' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/SessionUpdateTimestampHandlerInterface.php',
|
|
||||||
'TypeError' => __DIR__ . '/..' . '/symfony/polyfill-php70/Resources/stubs/TypeError.php',
|
|
||||||
'WhereClause' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
'WhereClause' => __DIR__ . '/..' . '/sergeytsalkov/meekrodb/db.class.php',
|
||||||
'kakao\\KakaoKey' => __DIR__ . '/../..' . '/d_setting/KakaoKey.php',
|
'kakao\\KakaoKey' => __DIR__ . '/../..' . '/d_setting/KakaoKey.php',
|
||||||
'sammo\\RootDB' => __DIR__ . '/../..' . '/d_setting/RootDB.php',
|
'sammo\\RootDB' => __DIR__ . '/../..' . '/d_setting/RootDB.php',
|
||||||
|
|||||||
Vendored
+53
-162
@@ -87,17 +87,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/guzzle",
|
"name": "guzzlehttp/guzzle",
|
||||||
"version": "6.3.2",
|
"version": "6.3.3",
|
||||||
"version_normalized": "6.3.2.0",
|
"version_normalized": "6.3.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/guzzle.git",
|
"url": "https://github.com/guzzle/guzzle.git",
|
||||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90"
|
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||||
"reference": "68d0ea14d5a3f42a20e87632a5f84931e2709c90",
|
"reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -107,13 +107,13 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4",
|
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
||||||
"psr/log": "^1.0"
|
"psr/log": "^1.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"psr/log": "Required for using the Log middleware"
|
"psr/log": "Required for using the Log middleware"
|
||||||
},
|
},
|
||||||
"time": "2018-03-26T16:33:04+00:00",
|
"time": "2018-04-22T15:46:56+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -274,17 +274,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "leafo/scssphp",
|
"name": "leafo/scssphp",
|
||||||
"version": "v0.7.5",
|
"version": "v0.7.6",
|
||||||
"version_normalized": "0.7.5.0",
|
"version_normalized": "0.7.6.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/leafo/scssphp.git",
|
"url": "https://github.com/leafo/scssphp.git",
|
||||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e"
|
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/leafo/scssphp/zipball/8b538d828bbb75276974605c4a1a435e939da74e",
|
"url": "https://api.github.com/repos/leafo/scssphp/zipball/585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||||
"reference": "8b538d828bbb75276974605c4a1a435e939da74e",
|
"reference": "585f6ae84de62ffecf69c23805f25d78d7e4b794",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -294,7 +294,7 @@
|
|||||||
"phpunit/phpunit": "~4.6",
|
"phpunit/phpunit": "~4.6",
|
||||||
"squizlabs/php_codesniffer": "~2.5"
|
"squizlabs/php_codesniffer": "~2.5"
|
||||||
},
|
},
|
||||||
"time": "2018-02-09T02:04:21+00:00",
|
"time": "2018-05-24T02:18:53+00:00",
|
||||||
"bin": [
|
"bin": [
|
||||||
"bin/pscss"
|
"bin/pscss"
|
||||||
],
|
],
|
||||||
@@ -463,56 +463,6 @@
|
|||||||
"psr-3"
|
"psr-3"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "paragonie/random_compat",
|
|
||||||
"version": "v2.0.12",
|
|
||||||
"version_normalized": "2.0.12.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/paragonie/random_compat.git",
|
|
||||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
|
||||||
"reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "4.*|5.*"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
|
||||||
},
|
|
||||||
"time": "2018-04-04T21:24:14+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"lib/random.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Paragon Initiative Enterprises",
|
|
||||||
"email": "security@paragonie.com",
|
|
||||||
"homepage": "https://paragonie.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
|
||||||
"keywords": [
|
|
||||||
"csprng",
|
|
||||||
"pseudorandom",
|
|
||||||
"random"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "pguardiario/phpuri",
|
"name": "pguardiario/phpuri",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
@@ -541,20 +491,20 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "php-extended/php-system",
|
"name": "php-extended/php-system",
|
||||||
"version": "1.3.0",
|
"version": "1.4.0",
|
||||||
"version_normalized": "1.3.0.0",
|
"version_normalized": "1.4.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-extended/php-system.git",
|
"url": "https://gitlab.com/php-extended/php-system.git",
|
||||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c"
|
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-extended/php-system/zipball/66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-system/repository/archive.zip?sha=9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||||
"reference": "66727d5dc0a665916bd7e08bcfb9820e7be1d20c",
|
"reference": "9e6b3c2009ef56dc123efc43900e40cdf217ace0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"time": "2017-01-14T11:56:24+00:00",
|
"time": "2018-06-07T06:03:27+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -569,11 +519,11 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Anastaszor",
|
"name": "Anastaszor",
|
||||||
"role": "developer"
|
"role": "Developer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "A generic way to find informations about the running system",
|
"description": "A generic way to find informations about the running system",
|
||||||
"homepage": "https://github.com/php-extended/php-system",
|
"homepage": "https://gitlab.com/php-extended/php-system",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"operating system",
|
"operating system",
|
||||||
"os",
|
"os",
|
||||||
@@ -583,23 +533,23 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "php-extended/php-tail",
|
"name": "php-extended/php-tail",
|
||||||
"version": "2.1.1",
|
"version": "2.2.0",
|
||||||
"version_normalized": "2.1.1.0",
|
"version_normalized": "2.2.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-extended/php-tail.git",
|
"url": "https://gitlab.com/php-extended/php-tail.git",
|
||||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7"
|
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-extended/php-tail/zipball/eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
"url": "https://gitlab.com/api/v4/projects/php-extended%2Fphp-tail/repository/archive.zip?sha=19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||||
"reference": "eabf7bee64f8c30fe9b9e1176562fdb903c54ae7",
|
"reference": "19fbd3a79ccc071954f28296b2c44754335304a0",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php-extended/php-system": "^1.2"
|
"php-extended/php-system": "^1.2"
|
||||||
},
|
},
|
||||||
"time": "2017-07-25T13:52:42+00:00",
|
"time": "2018-06-07T06:04:58+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -614,11 +564,11 @@
|
|||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "Anastaszor",
|
"name": "Anastaszor",
|
||||||
"role": "developer"
|
"role": "Developer"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "A smart way to tail files depending of the environment",
|
"description": "A smart way to tail files depending of the environment",
|
||||||
"homepage": "https://github.com/php-extended/php-tail",
|
"homepage": "https://gitlab.com/php-extended/php-tail",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"cheat",
|
"cheat",
|
||||||
"mighty",
|
"mighty",
|
||||||
@@ -775,32 +725,31 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/lock",
|
"name": "symfony/lock",
|
||||||
"version": "v3.4.9",
|
"version": "v4.1.0",
|
||||||
"version_normalized": "3.4.9.0",
|
"version_normalized": "4.1.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/lock.git",
|
"url": "https://github.com/symfony/lock.git",
|
||||||
"reference": "3a707193326d31603824706e34a95af899a59788"
|
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/lock/zipball/3a707193326d31603824706e34a95af899a59788",
|
"url": "https://api.github.com/repos/symfony/lock/zipball/a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||||
"reference": "3a707193326d31603824706e34a95af899a59788",
|
"reference": "a1df50492e927ad00ca271f29adb2949a14f2a5a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.5.9|>=7.0.8",
|
"php": "^7.1.3",
|
||||||
"psr/log": "~1.0",
|
"psr/log": "~1.0"
|
||||||
"symfony/polyfill-php70": "~1.0"
|
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"predis/predis": "~1.0"
|
"predis/predis": "~1.0"
|
||||||
},
|
},
|
||||||
"time": "2018-04-29T14:44:26+00:00",
|
"time": "2018-05-30T07:26:09+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "3.4-dev"
|
"dev-master": "4.1-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
@@ -837,99 +786,41 @@
|
|||||||
"semaphore"
|
"semaphore"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-php70",
|
|
||||||
"version": "v1.8.0",
|
|
||||||
"version_normalized": "1.8.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-php70.git",
|
|
||||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6",
|
|
||||||
"reference": "77454693d8f10dd23bb24955cffd2d82db1007a6",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"paragonie/random_compat": "~1.0|~2.0",
|
|
||||||
"php": ">=5.3.3"
|
|
||||||
},
|
|
||||||
"time": "2018-04-26T10:06:28+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.8-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php70\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
],
|
|
||||||
"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 7.0+ features to lower PHP versions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "vlucas/valitron",
|
"name": "vlucas/valitron",
|
||||||
"version": "v1.4.2",
|
"version": "v1.4.3",
|
||||||
"version_normalized": "1.4.2.0",
|
"version_normalized": "1.4.3.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/vlucas/valitron.git",
|
"url": "https://github.com/vlucas/valitron.git",
|
||||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6"
|
"reference": "3c5463315bfa23b17f8949b100a960d035234e43"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/vlucas/valitron/zipball/87775d76268beda2afa085bdd6e44b17e98907c6",
|
"url": "https://api.github.com/repos/vlucas/valitron/zipball/3c5463315bfa23b17f8949b100a960d035234e43",
|
||||||
"reference": "87775d76268beda2afa085bdd6e44b17e98907c6",
|
"reference": "3c5463315bfa23b17f8949b100a960d035234e43",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.2"
|
"php": ">=5.3.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~4.0"
|
"phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5"
|
||||||
},
|
},
|
||||||
"time": "2017-10-30T23:15:06+00:00",
|
"suggest": {
|
||||||
|
"ext-mbstring": "It can support the multiple bytes string length."
|
||||||
|
},
|
||||||
|
"time": "2018-05-06T10:45:26+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": {
|
"psr-4": {
|
||||||
"Valitron": "src/"
|
"Valitron\\": "src/Valitron"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
"BSD"
|
"BSD-3-Clause"
|
||||||
],
|
],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
|||||||
+5
@@ -1,5 +1,10 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
|
## 6.3.3 - 2018-04-22
|
||||||
|
|
||||||
|
* Fix: Default headers when decode_content is specified
|
||||||
|
|
||||||
|
|
||||||
## 6.3.2 - 2018-03-26
|
## 6.3.2 - 2018-03-26
|
||||||
|
|
||||||
* Fix: Release process
|
* Fix: Release process
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4",
|
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
||||||
"psr/log": "^1.0"
|
"psr/log": "^1.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
|||||||
+1
-1
@@ -331,7 +331,7 @@ class Client implements ClientInterface
|
|||||||
&& $options['decode_content'] !== true
|
&& $options['decode_content'] !== true
|
||||||
) {
|
) {
|
||||||
// Ensure that we don't have the header in different case and set the new value.
|
// Ensure that we don't have the header in different case and set the new value.
|
||||||
$options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $modify['set_headers']);
|
$options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $options['_conditional']);
|
||||||
$modify['set_headers']['Accept-Encoding'] = $options['decode_content'];
|
$modify['set_headers']['Accept-Encoding'] = $options['decode_content'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@ use Psr\Http\Message\UriInterface;
|
|||||||
*/
|
*/
|
||||||
interface ClientInterface
|
interface ClientInterface
|
||||||
{
|
{
|
||||||
const VERSION = '6.3.2';
|
const VERSION = '6.3.3';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an HTTP request.
|
* Send an HTTP request.
|
||||||
|
|||||||
+2
-2
@@ -377,8 +377,8 @@ class SetCookie
|
|||||||
// Check if any of the invalid characters are present in the cookie name
|
// Check if any of the invalid characters are present in the cookie name
|
||||||
if (preg_match(
|
if (preg_match(
|
||||||
'/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/',
|
'/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/',
|
||||||
$name)
|
$name
|
||||||
) {
|
)) {
|
||||||
return 'Cookie name must not contain invalid characters: ASCII '
|
return 'Cookie name must not contain invalid characters: ASCII '
|
||||||
. 'Control characters (0-31;127), space, tab and the '
|
. 'Control characters (0-31;127), space, tab and the '
|
||||||
. 'following characters: ()<>@,;:\"/?={}';
|
. 'following characters: ()<>@,;:\"/?={}';
|
||||||
|
|||||||
+1
-1
@@ -73,7 +73,7 @@ final class Middleware
|
|||||||
/**
|
/**
|
||||||
* Middleware that pushes history data to an ArrayAccess container.
|
* Middleware that pushes history data to an ArrayAccess container.
|
||||||
*
|
*
|
||||||
* @param array $container Container to hold the history (by reference).
|
* @param array|\ArrayAccess $container Container to hold the history (by reference).
|
||||||
*
|
*
|
||||||
* @return callable Returns a function that accepts the next handler.
|
* @return callable Returns a function that accepts the next handler.
|
||||||
* @throws \InvalidArgumentException if container is not an array or ArrayAccess.
|
* @throws \InvalidArgumentException if container is not an array or ArrayAccess.
|
||||||
|
|||||||
+4
-6
@@ -207,7 +207,7 @@ class Server
|
|||||||
$elapsed = round((microtime(true) - $start), 4);
|
$elapsed = round((microtime(true) - $start), 4);
|
||||||
|
|
||||||
$v = Version::VERSION;
|
$v = Version::VERSION;
|
||||||
$t = date('r');
|
$t = gmdate('r');
|
||||||
$css = "/* compiled by scssphp $v on $t (${elapsed}s) */\n\n" . $css;
|
$css = "/* compiled by scssphp $v on $t (${elapsed}s) */\n\n" . $css;
|
||||||
$etag = md5($css);
|
$etag = md5($css);
|
||||||
|
|
||||||
@@ -329,7 +329,7 @@ class Server
|
|||||||
try {
|
try {
|
||||||
list($css, $etag) = $this->compile($input, $output);
|
list($css, $etag) = $this->compile($input, $output);
|
||||||
|
|
||||||
$lastModified = gmdate('D, d M Y H:i:s', filemtime($output)) . ' GMT';
|
$lastModified = gmdate('r', filemtime($output));
|
||||||
|
|
||||||
header('Last-Modified: ' . $lastModified);
|
header('Last-Modified: ' . $lastModified);
|
||||||
header('Content-type: text/css');
|
header('Content-type: text/css');
|
||||||
@@ -371,7 +371,7 @@ class Server
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$lastModified = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
|
$lastModified = gmdate('r', $mtime);
|
||||||
header('Last-Modified: ' . $lastModified);
|
header('Last-Modified: ' . $lastModified);
|
||||||
|
|
||||||
echo file_get_contents($output);
|
echo file_get_contents($output);
|
||||||
@@ -510,8 +510,6 @@ class Server
|
|||||||
$this->scss = $scss;
|
$this->scss = $scss;
|
||||||
$this->showErrorsAsCSS = false;
|
$this->showErrorsAsCSS = false;
|
||||||
|
|
||||||
if (! ini_get('date.timezone')) {
|
date_default_timezone_set('UTC');
|
||||||
throw new ServerException('Default date.timezone not set');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-6
@@ -316,9 +316,16 @@ class Compiler
|
|||||||
$out->parent = $this->scope;
|
$out->parent = $this->scope;
|
||||||
$out->selectors = $selectors;
|
$out->selectors = $selectors;
|
||||||
$out->depth = $this->env->depth;
|
$out->depth = $this->env->depth;
|
||||||
$out->sourceName = $this->env->block->sourceName;
|
|
||||||
$out->sourceLine = $this->env->block->sourceLine;
|
if ($this->env->block instanceof Block) {
|
||||||
$out->sourceColumn = $this->env->block->sourceColumn;
|
$out->sourceName = $this->env->block->sourceName;
|
||||||
|
$out->sourceLine = $this->env->block->sourceLine;
|
||||||
|
$out->sourceColumn = $this->env->block->sourceColumn;
|
||||||
|
} else {
|
||||||
|
$out->sourceName = null;
|
||||||
|
$out->sourceLine = null;
|
||||||
|
$out->sourceColumn = null;
|
||||||
|
}
|
||||||
|
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
@@ -2694,7 +2701,9 @@ class Compiler
|
|||||||
$b = round($b);
|
$b = round($b);
|
||||||
|
|
||||||
if (count($value) === 5 && $value[4] !== 1) { // rgba
|
if (count($value) === 5 && $value[4] !== 1) { // rgba
|
||||||
return 'rgba(' . $r . ', ' . $g . ', ' . $b . ', ' . $value[4] . ')';
|
$a = new Node\Number($value[4], '');
|
||||||
|
|
||||||
|
return 'rgba(' . $r . ', ' . $g . ', ' . $b . ', ' . $a . ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
$h = sprintf('#%02x%02x%02x', $r, $g, $b);
|
$h = sprintf('#%02x%02x%02x', $r, $g, $b);
|
||||||
@@ -4331,7 +4340,7 @@ class Compiler
|
|||||||
protected function libRgba($args)
|
protected function libRgba($args)
|
||||||
{
|
{
|
||||||
if ($color = $this->coerceColor($args[0])) {
|
if ($color = $this->coerceColor($args[0])) {
|
||||||
$num = ! isset($args[1]) ? $args[3] : $args[1];
|
$num = isset($args[3]) ? $args[3] : $args[1];
|
||||||
$alpha = $this->assertNumber($num);
|
$alpha = $this->assertNumber($num);
|
||||||
$color[4] = $alpha;
|
$color[4] = $alpha;
|
||||||
|
|
||||||
@@ -4526,7 +4535,7 @@ class Compiler
|
|||||||
];
|
];
|
||||||
|
|
||||||
if ($firstAlpha != 1.0 || $secondAlpha != 1.0) {
|
if ($firstAlpha != 1.0 || $secondAlpha != 1.0) {
|
||||||
$new[] = $firstAlpha * $weight + $secondAlpha * ($weight - 1);
|
$new[] = $firstAlpha * $weight + $secondAlpha * (1 - $weight);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->fixColor($new);
|
return $this->fixColor($new);
|
||||||
|
|||||||
Vendored
+15
@@ -1302,6 +1302,21 @@ class Parser
|
|||||||
{
|
{
|
||||||
$s = $this->seek();
|
$s = $this->seek();
|
||||||
|
|
||||||
|
if ($this->literal('url(') && $this->match('data:([a-z]+)\/([a-z0-9.+-]+);base64,', $m, false)) {
|
||||||
|
$len = strspn($this->buffer, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwyxz0123456789+/=', $this->count);
|
||||||
|
|
||||||
|
$this->count += $len;
|
||||||
|
|
||||||
|
if ($this->literal(')')) {
|
||||||
|
$content = substr($this->buffer, $s, $this->count - $s);
|
||||||
|
$out = [Type::T_KEYWORD, $content];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->seek($s);
|
||||||
|
|
||||||
if ($this->literal('not', false) && $this->whitespace() && $this->value($inner)) {
|
if ($this->literal('not', false) && $this->whitespace() && $this->value($inner)) {
|
||||||
$out = [Type::T_UNARY, 'not', $inner, $this->inParens];
|
$out = [Type::T_UNARY, 'not', $inner, $this->inParens];
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -18,5 +18,5 @@ namespace Leafo\ScssPhp;
|
|||||||
*/
|
*/
|
||||||
class Version
|
class Version
|
||||||
{
|
{
|
||||||
const VERSION = 'v0.7.5';
|
const VERSION = 'v0.7.6';
|
||||||
}
|
}
|
||||||
|
|||||||
-22
@@ -1,22 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2015 Paragon Initiative Enterprises
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )
|
|
||||||
|
|
||||||
php -dphar.readonly=0 "$basedir/other/build_phar.php" $*
|
|
||||||
-37
@@ -1,37 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "paragonie/random_compat",
|
|
||||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
|
||||||
"keywords": [
|
|
||||||
"csprng",
|
|
||||||
"random",
|
|
||||||
"pseudorandom"
|
|
||||||
],
|
|
||||||
"license": "MIT",
|
|
||||||
"type": "library",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Paragon Initiative Enterprises",
|
|
||||||
"email": "security@paragonie.com",
|
|
||||||
"homepage": "https://paragonie.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/paragonie/random_compat/issues",
|
|
||||||
"email": "info@paragonie.com",
|
|
||||||
"source": "https://github.com/paragonie/random_compat"
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "4.*|5.*"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"lib/random.php"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
-----BEGIN PUBLIC KEY-----
|
|
||||||
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm
|
|
||||||
pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p
|
|
||||||
+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc
|
|
||||||
-----END PUBLIC KEY-----
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
-----BEGIN PGP SIGNATURE-----
|
|
||||||
Version: GnuPG v2.0.22 (MingW32)
|
|
||||||
|
|
||||||
iQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip
|
|
||||||
QwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg
|
|
||||||
1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW
|
|
||||||
NDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA
|
|
||||||
NNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV
|
|
||||||
JHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74=
|
|
||||||
=B6+8
|
|
||||||
-----END PGP SIGNATURE-----
|
|
||||||
@@ -1,181 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!is_callable('RandomCompat_strlen')) {
|
|
||||||
if (
|
|
||||||
defined('MB_OVERLOAD_STRING') &&
|
|
||||||
ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING
|
|
||||||
) {
|
|
||||||
/**
|
|
||||||
* strlen() implementation that isn't brittle to mbstring.func_overload
|
|
||||||
*
|
|
||||||
* This version uses mb_strlen() in '8bit' mode to treat strings as raw
|
|
||||||
* binary rather than UTF-8, ISO-8859-1, etc
|
|
||||||
*
|
|
||||||
* @param string $binary_string
|
|
||||||
*
|
|
||||||
* @throws TypeError
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
function RandomCompat_strlen($binary_string)
|
|
||||||
{
|
|
||||||
if (!is_string($binary_string)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_strlen() expects a string'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int) mb_strlen($binary_string, '8bit');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
/**
|
|
||||||
* strlen() implementation that isn't brittle to mbstring.func_overload
|
|
||||||
*
|
|
||||||
* This version just used the default strlen()
|
|
||||||
*
|
|
||||||
* @param string $binary_string
|
|
||||||
*
|
|
||||||
* @throws TypeError
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
function RandomCompat_strlen($binary_string)
|
|
||||||
{
|
|
||||||
if (!is_string($binary_string)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_strlen() expects a string'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return (int) strlen($binary_string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_callable('RandomCompat_substr')) {
|
|
||||||
|
|
||||||
if (
|
|
||||||
defined('MB_OVERLOAD_STRING')
|
|
||||||
&&
|
|
||||||
ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING
|
|
||||||
) {
|
|
||||||
/**
|
|
||||||
* substr() implementation that isn't brittle to mbstring.func_overload
|
|
||||||
*
|
|
||||||
* This version uses mb_substr() in '8bit' mode to treat strings as raw
|
|
||||||
* binary rather than UTF-8, ISO-8859-1, etc
|
|
||||||
*
|
|
||||||
* @param string $binary_string
|
|
||||||
* @param int $start
|
|
||||||
* @param int $length (optional)
|
|
||||||
*
|
|
||||||
* @throws TypeError
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function RandomCompat_substr($binary_string, $start, $length = null)
|
|
||||||
{
|
|
||||||
if (!is_string($binary_string)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_substr(): First argument should be a string'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_int($start)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_substr(): Second argument should be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($length === null) {
|
|
||||||
/**
|
|
||||||
* mb_substr($str, 0, NULL, '8bit') returns an empty string on
|
|
||||||
* PHP 5.3, so we have to find the length ourselves.
|
|
||||||
*/
|
|
||||||
$length = RandomCompat_strlen($binary_string) - $start;
|
|
||||||
} elseif (!is_int($length)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_substr(): Third argument should be an integer, or omitted'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Consistency with PHP's behavior
|
|
||||||
if ($start === RandomCompat_strlen($binary_string) && $length === 0) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
if ($start > RandomCompat_strlen($binary_string)) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) mb_substr($binary_string, $start, $length, '8bit');
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* substr() implementation that isn't brittle to mbstring.func_overload
|
|
||||||
*
|
|
||||||
* This version just uses the default substr()
|
|
||||||
*
|
|
||||||
* @param string $binary_string
|
|
||||||
* @param int $start
|
|
||||||
* @param int $length (optional)
|
|
||||||
*
|
|
||||||
* @throws TypeError
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function RandomCompat_substr($binary_string, $start, $length = null)
|
|
||||||
{
|
|
||||||
if (!is_string($binary_string)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_substr(): First argument should be a string'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_int($start)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_substr(): Second argument should be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($length !== null) {
|
|
||||||
if (!is_int($length)) {
|
|
||||||
throw new TypeError(
|
|
||||||
'RandomCompat_substr(): Third argument should be an integer, or omitted'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) substr($binary_string, $start, $length);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) substr($binary_string, $start);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!is_callable('RandomCompat_intval')) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cast to an integer if we can, safely.
|
|
||||||
*
|
|
||||||
* If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
|
|
||||||
* (non-inclusive), it will sanely cast it to an int. If you it's equal to
|
|
||||||
* ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
|
|
||||||
* lose precision, so the <= and => operators might accidentally let a float
|
|
||||||
* through.
|
|
||||||
*
|
|
||||||
* @param int|float $number The number we want to convert to an int
|
|
||||||
* @param bool $fail_open Set to true to not throw an exception
|
|
||||||
*
|
|
||||||
* @return float|int
|
|
||||||
* @psalm-suppress InvalidReturnType
|
|
||||||
*
|
|
||||||
* @throws TypeError
|
|
||||||
*/
|
|
||||||
function RandomCompat_intval($number, $fail_open = false)
|
|
||||||
{
|
|
||||||
if (is_int($number) || is_float($number)) {
|
|
||||||
$number += 0;
|
|
||||||
} elseif (is_numeric($number)) {
|
|
||||||
$number += 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
is_float($number)
|
|
||||||
&&
|
|
||||||
$number > ~PHP_INT_MAX
|
|
||||||
&&
|
|
||||||
$number < PHP_INT_MAX
|
|
||||||
) {
|
|
||||||
$number = (int) $number;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_int($number)) {
|
|
||||||
return (int) $number;
|
|
||||||
} elseif (!$fail_open) {
|
|
||||||
throw new TypeError(
|
|
||||||
'Expected an integer.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $number;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!class_exists('Error', false)) {
|
|
||||||
// We can't really avoid making this extend Exception in PHP 5.
|
|
||||||
class Error extends Exception
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!class_exists('TypeError', false)) {
|
|
||||||
if (is_subclass_of('Error', 'Exception')) {
|
|
||||||
class TypeError extends Error
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
class TypeError extends Exception
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-225
@@ -1,225 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* @version 2.0.10
|
|
||||||
* @released 2017-03-13
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!defined('PHP_VERSION_ID')) {
|
|
||||||
// This constant was introduced in PHP 5.2.7
|
|
||||||
$RandomCompatversion = array_map('intval', explode('.', PHP_VERSION));
|
|
||||||
define(
|
|
||||||
'PHP_VERSION_ID',
|
|
||||||
$RandomCompatversion[0] * 10000
|
|
||||||
+ $RandomCompatversion[1] * 100
|
|
||||||
+ $RandomCompatversion[2]
|
|
||||||
);
|
|
||||||
$RandomCompatversion = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHP 7.0.0 and newer have these functions natively.
|
|
||||||
*/
|
|
||||||
if (PHP_VERSION_ID >= 70000) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!defined('RANDOM_COMPAT_READ_BUFFER')) {
|
|
||||||
define('RANDOM_COMPAT_READ_BUFFER', 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
$RandomCompatDIR = dirname(__FILE__);
|
|
||||||
|
|
||||||
require_once $RandomCompatDIR . '/byte_safe_strings.php';
|
|
||||||
require_once $RandomCompatDIR . '/cast_to_int.php';
|
|
||||||
require_once $RandomCompatDIR . '/error_polyfill.php';
|
|
||||||
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* PHP 5.2.0 - 5.6.x way to implement random_bytes()
|
|
||||||
*
|
|
||||||
* We use conditional statements here to define the function in accordance
|
|
||||||
* to the operating environment. It's a micro-optimization.
|
|
||||||
*
|
|
||||||
* In order of preference:
|
|
||||||
* 1. Use libsodium if available.
|
|
||||||
* 2. fread() /dev/urandom if available (never on Windows)
|
|
||||||
* 3. mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM)
|
|
||||||
* 4. COM('CAPICOM.Utilities.1')->GetRandom()
|
|
||||||
*
|
|
||||||
* See RATIONALE.md for our reasoning behind this particular order
|
|
||||||
*/
|
|
||||||
if (extension_loaded('libsodium')) {
|
|
||||||
// See random_bytes_libsodium.php
|
|
||||||
if (PHP_VERSION_ID >= 50300 && is_callable('\\Sodium\\randombytes_buf')) {
|
|
||||||
require_once $RandomCompatDIR . '/random_bytes_libsodium.php';
|
|
||||||
} elseif (method_exists('Sodium', 'randombytes_buf')) {
|
|
||||||
require_once $RandomCompatDIR . '/random_bytes_libsodium_legacy.php';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reading directly from /dev/urandom:
|
|
||||||
*/
|
|
||||||
if (DIRECTORY_SEPARATOR === '/') {
|
|
||||||
// DIRECTORY_SEPARATOR === '/' on Unix-like OSes -- this is a fast
|
|
||||||
// way to exclude Windows.
|
|
||||||
$RandomCompatUrandom = true;
|
|
||||||
$RandomCompat_basedir = ini_get('open_basedir');
|
|
||||||
|
|
||||||
if (!empty($RandomCompat_basedir)) {
|
|
||||||
$RandomCompat_open_basedir = explode(
|
|
||||||
PATH_SEPARATOR,
|
|
||||||
strtolower($RandomCompat_basedir)
|
|
||||||
);
|
|
||||||
$RandomCompatUrandom = (array() !== array_intersect(
|
|
||||||
array('/dev', '/dev/', '/dev/urandom'),
|
|
||||||
$RandomCompat_open_basedir
|
|
||||||
));
|
|
||||||
$RandomCompat_open_basedir = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
!is_callable('random_bytes')
|
|
||||||
&&
|
|
||||||
$RandomCompatUrandom
|
|
||||||
&&
|
|
||||||
@is_readable('/dev/urandom')
|
|
||||||
) {
|
|
||||||
// Error suppression on is_readable() in case of an open_basedir
|
|
||||||
// or safe_mode failure. All we care about is whether or not we
|
|
||||||
// can read it at this point. If the PHP environment is going to
|
|
||||||
// panic over trying to see if the file can be read in the first
|
|
||||||
// place, that is not helpful to us here.
|
|
||||||
|
|
||||||
// See random_bytes_dev_urandom.php
|
|
||||||
require_once $RandomCompatDIR . '/random_bytes_dev_urandom.php';
|
|
||||||
}
|
|
||||||
// Unset variables after use
|
|
||||||
$RandomCompat_basedir = null;
|
|
||||||
} else {
|
|
||||||
$RandomCompatUrandom = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* mcrypt_create_iv()
|
|
||||||
*
|
|
||||||
* We only want to use mcypt_create_iv() if:
|
|
||||||
*
|
|
||||||
* - random_bytes() hasn't already been defined
|
|
||||||
* - the mcrypt extensions is loaded
|
|
||||||
* - One of these two conditions is true:
|
|
||||||
* - We're on Windows (DIRECTORY_SEPARATOR !== '/')
|
|
||||||
* - We're not on Windows and /dev/urandom is readabale
|
|
||||||
* (i.e. we're not in a chroot jail)
|
|
||||||
* - Special case:
|
|
||||||
* - If we're not on Windows, but the PHP version is between
|
|
||||||
* 5.6.10 and 5.6.12, we don't want to use mcrypt. It will
|
|
||||||
* hang indefinitely. This is bad.
|
|
||||||
* - If we're on Windows, we want to use PHP >= 5.3.7 or else
|
|
||||||
* we get insufficient entropy errors.
|
|
||||||
*/
|
|
||||||
if (
|
|
||||||
!is_callable('random_bytes')
|
|
||||||
&&
|
|
||||||
// Windows on PHP < 5.3.7 is broken, but non-Windows is not known to be.
|
|
||||||
(DIRECTORY_SEPARATOR === '/' || PHP_VERSION_ID >= 50307)
|
|
||||||
&&
|
|
||||||
// Prevent this code from hanging indefinitely on non-Windows;
|
|
||||||
// see https://bugs.php.net/bug.php?id=69833
|
|
||||||
(
|
|
||||||
DIRECTORY_SEPARATOR !== '/' ||
|
|
||||||
(PHP_VERSION_ID <= 50609 || PHP_VERSION_ID >= 50613)
|
|
||||||
)
|
|
||||||
&&
|
|
||||||
extension_loaded('mcrypt')
|
|
||||||
) {
|
|
||||||
// See random_bytes_mcrypt.php
|
|
||||||
require_once $RandomCompatDIR . '/random_bytes_mcrypt.php';
|
|
||||||
}
|
|
||||||
$RandomCompatUrandom = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a Windows-specific fallback, for when the mcrypt extension
|
|
||||||
* isn't loaded.
|
|
||||||
*/
|
|
||||||
if (
|
|
||||||
!is_callable('random_bytes')
|
|
||||||
&&
|
|
||||||
extension_loaded('com_dotnet')
|
|
||||||
&&
|
|
||||||
class_exists('COM')
|
|
||||||
) {
|
|
||||||
$RandomCompat_disabled_classes = preg_split(
|
|
||||||
'#\s*,\s*#',
|
|
||||||
strtolower(ini_get('disable_classes'))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!in_array('com', $RandomCompat_disabled_classes)) {
|
|
||||||
try {
|
|
||||||
$RandomCompatCOMtest = new COM('CAPICOM.Utilities.1');
|
|
||||||
if (method_exists($RandomCompatCOMtest, 'GetRandom')) {
|
|
||||||
// See random_bytes_com_dotnet.php
|
|
||||||
require_once $RandomCompatDIR . '/random_bytes_com_dotnet.php';
|
|
||||||
}
|
|
||||||
} catch (com_exception $e) {
|
|
||||||
// Don't try to use it.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$RandomCompat_disabled_classes = null;
|
|
||||||
$RandomCompatCOMtest = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* throw new Exception
|
|
||||||
*/
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* We don't have any more options, so let's throw an exception right now
|
|
||||||
* and hope the developer won't let it fail silently.
|
|
||||||
*
|
|
||||||
* @param mixed $length
|
|
||||||
* @psalm-suppress MissingReturnType
|
|
||||||
* @throws Exception
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function random_bytes($length)
|
|
||||||
{
|
|
||||||
unset($length); // Suppress "variable not used" warnings.
|
|
||||||
throw new Exception(
|
|
||||||
'There is no suitable CSPRNG installed on your system'
|
|
||||||
);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_callable('random_int')) {
|
|
||||||
require_once $RandomCompatDIR . '/random_int.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
$RandomCompatDIR = null;
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* Windows with PHP < 5.3.0 will not have the function
|
|
||||||
* openssl_random_pseudo_bytes() available, so let's use
|
|
||||||
* CAPICOM to work around this deficiency.
|
|
||||||
*
|
|
||||||
* @param int $bytes
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function random_bytes($bytes)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$bytes = RandomCompat_intval($bytes);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_bytes(): $bytes must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bytes < 1) {
|
|
||||||
throw new Error(
|
|
||||||
'Length must be greater than 0'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$buf = '';
|
|
||||||
if (!class_exists('COM')) {
|
|
||||||
throw new Error(
|
|
||||||
'COM does not exist'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$util = new COM('CAPICOM.Utilities.1');
|
|
||||||
$execCount = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Let's not let it loop forever. If we run N times and fail to
|
|
||||||
* get N bytes of random data, then CAPICOM has failed us.
|
|
||||||
*/
|
|
||||||
do {
|
|
||||||
$buf .= base64_decode($util->GetRandom($bytes, 0));
|
|
||||||
if (RandomCompat_strlen($buf) >= $bytes) {
|
|
||||||
/**
|
|
||||||
* Return our random entropy buffer here:
|
|
||||||
*/
|
|
||||||
return RandomCompat_substr($buf, 0, $bytes);
|
|
||||||
}
|
|
||||||
++$execCount;
|
|
||||||
} while ($execCount < $bytes);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we reach here, PHP has failed us.
|
|
||||||
*/
|
|
||||||
throw new Exception(
|
|
||||||
'Could not gather sufficient random data'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,167 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!defined('RANDOM_COMPAT_READ_BUFFER')) {
|
|
||||||
define('RANDOM_COMPAT_READ_BUFFER', 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* Unless open_basedir is enabled, use /dev/urandom for
|
|
||||||
* random numbers in accordance with best practices
|
|
||||||
*
|
|
||||||
* Why we use /dev/urandom and not /dev/random
|
|
||||||
* @ref http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers
|
|
||||||
*
|
|
||||||
* @param int $bytes
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function random_bytes($bytes)
|
|
||||||
{
|
|
||||||
static $fp = null;
|
|
||||||
/**
|
|
||||||
* This block should only be run once
|
|
||||||
*/
|
|
||||||
if (empty($fp)) {
|
|
||||||
/**
|
|
||||||
* We use /dev/urandom if it is a char device.
|
|
||||||
* We never fall back to /dev/random
|
|
||||||
*/
|
|
||||||
$fp = fopen('/dev/urandom', 'rb');
|
|
||||||
if (!empty($fp)) {
|
|
||||||
$st = fstat($fp);
|
|
||||||
if (($st['mode'] & 0170000) !== 020000) {
|
|
||||||
fclose($fp);
|
|
||||||
$fp = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($fp)) {
|
|
||||||
/**
|
|
||||||
* stream_set_read_buffer() does not exist in HHVM
|
|
||||||
*
|
|
||||||
* If we don't set the stream's read buffer to 0, PHP will
|
|
||||||
* internally buffer 8192 bytes, which can waste entropy
|
|
||||||
*
|
|
||||||
* stream_set_read_buffer returns 0 on success
|
|
||||||
*/
|
|
||||||
if (is_callable('stream_set_read_buffer')) {
|
|
||||||
stream_set_read_buffer($fp, RANDOM_COMPAT_READ_BUFFER);
|
|
||||||
}
|
|
||||||
if (is_callable('stream_set_chunk_size')) {
|
|
||||||
stream_set_chunk_size($fp, RANDOM_COMPAT_READ_BUFFER);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$bytes = RandomCompat_intval($bytes);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_bytes(): $bytes must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bytes < 1) {
|
|
||||||
throw new Error(
|
|
||||||
'Length must be greater than 0'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This if() block only runs if we managed to open a file handle
|
|
||||||
*
|
|
||||||
* It does not belong in an else {} block, because the above
|
|
||||||
* if (empty($fp)) line is logic that should only be run once per
|
|
||||||
* page load.
|
|
||||||
*/
|
|
||||||
if (!empty($fp)) {
|
|
||||||
/**
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
$remaining = $bytes;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string|bool
|
|
||||||
*/
|
|
||||||
$buf = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* We use fread() in a loop to protect against partial reads
|
|
||||||
*/
|
|
||||||
do {
|
|
||||||
/**
|
|
||||||
* @var string|bool
|
|
||||||
*/
|
|
||||||
$read = fread($fp, $remaining);
|
|
||||||
if (!is_string($read)) {
|
|
||||||
if ($read === false) {
|
|
||||||
/**
|
|
||||||
* We cannot safely read from the file. Exit the
|
|
||||||
* do-while loop and trigger the exception condition
|
|
||||||
*
|
|
||||||
* @var string|bool
|
|
||||||
*/
|
|
||||||
$buf = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Decrease the number of bytes returned from remaining
|
|
||||||
*/
|
|
||||||
$remaining -= RandomCompat_strlen($read);
|
|
||||||
/**
|
|
||||||
* @var string|bool
|
|
||||||
*/
|
|
||||||
$buf = $buf . $read;
|
|
||||||
} while ($remaining > 0);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is our result valid?
|
|
||||||
*/
|
|
||||||
if (is_string($buf)) {
|
|
||||||
if (RandomCompat_strlen($buf) === $bytes) {
|
|
||||||
/**
|
|
||||||
* Return our random entropy buffer here:
|
|
||||||
*/
|
|
||||||
return $buf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we reach here, PHP has failed us.
|
|
||||||
*/
|
|
||||||
throw new Exception(
|
|
||||||
'Error reading from source device'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* If the libsodium PHP extension is loaded, we'll use it above any other
|
|
||||||
* solution.
|
|
||||||
*
|
|
||||||
* libsodium-php project:
|
|
||||||
* @ref https://github.com/jedisct1/libsodium-php
|
|
||||||
*
|
|
||||||
* @param int $bytes
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function random_bytes($bytes)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$bytes = RandomCompat_intval($bytes);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_bytes(): $bytes must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bytes < 1) {
|
|
||||||
throw new Error(
|
|
||||||
'Length must be greater than 0'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \Sodium\randombytes_buf() doesn't allow more than 2147483647 bytes to be
|
|
||||||
* generated in one invocation.
|
|
||||||
*/
|
|
||||||
if ($bytes > 2147483647) {
|
|
||||||
$buf = '';
|
|
||||||
for ($i = 0; $i < $bytes; $i += 1073741824) {
|
|
||||||
$n = ($bytes - $i) > 1073741824
|
|
||||||
? 1073741824
|
|
||||||
: $bytes - $i;
|
|
||||||
$buf .= \Sodium\randombytes_buf($n);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$buf = \Sodium\randombytes_buf($bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($buf !== false) {
|
|
||||||
if (RandomCompat_strlen($buf) === $bytes) {
|
|
||||||
return $buf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we reach here, PHP has failed us.
|
|
||||||
*/
|
|
||||||
throw new Exception(
|
|
||||||
'Could not gather sufficient random data'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* If the libsodium PHP extension is loaded, we'll use it above any other
|
|
||||||
* solution.
|
|
||||||
*
|
|
||||||
* libsodium-php project:
|
|
||||||
* @ref https://github.com/jedisct1/libsodium-php
|
|
||||||
*
|
|
||||||
* @param int $bytes
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function random_bytes($bytes)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$bytes = RandomCompat_intval($bytes);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_bytes(): $bytes must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bytes < 1) {
|
|
||||||
throw new Error(
|
|
||||||
'Length must be greater than 0'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
$buf = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \Sodium\randombytes_buf() doesn't allow more than 2147483647 bytes to be
|
|
||||||
* generated in one invocation.
|
|
||||||
*/
|
|
||||||
if ($bytes > 2147483647) {
|
|
||||||
for ($i = 0; $i < $bytes; $i += 1073741824) {
|
|
||||||
$n = ($bytes - $i) > 1073741824
|
|
||||||
? 1073741824
|
|
||||||
: $bytes - $i;
|
|
||||||
$buf .= Sodium::randombytes_buf((int) $n);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$buf .= Sodium::randombytes_buf((int) $bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_string($buf)) {
|
|
||||||
if (RandomCompat_strlen($buf) === $bytes) {
|
|
||||||
return $buf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we reach here, PHP has failed us.
|
|
||||||
*/
|
|
||||||
throw new Exception(
|
|
||||||
'Could not gather sufficient random data'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!is_callable('random_bytes')) {
|
|
||||||
/**
|
|
||||||
* Powered by ext/mcrypt (and thankfully NOT libmcrypt)
|
|
||||||
*
|
|
||||||
* @ref https://bugs.php.net/bug.php?id=55169
|
|
||||||
* @ref https://github.com/php/php-src/blob/c568ffe5171d942161fc8dda066bce844bdef676/ext/mcrypt/mcrypt.c#L1321-L1386
|
|
||||||
*
|
|
||||||
* @param int $bytes
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function random_bytes($bytes)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$bytes = RandomCompat_intval($bytes);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_bytes(): $bytes must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($bytes < 1) {
|
|
||||||
throw new Error(
|
|
||||||
'Length must be greater than 0'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$buf = @mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM);
|
|
||||||
if (
|
|
||||||
$buf !== false
|
|
||||||
&&
|
|
||||||
RandomCompat_strlen($buf) === $bytes
|
|
||||||
) {
|
|
||||||
/**
|
|
||||||
* Return our random entropy buffer here:
|
|
||||||
*/
|
|
||||||
return $buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we reach here, PHP has failed us.
|
|
||||||
*/
|
|
||||||
throw new Exception(
|
|
||||||
'Could not gather sufficient random data'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-190
@@ -1,190 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
if (!is_callable('random_int')) {
|
|
||||||
/**
|
|
||||||
* Random_* Compatibility Library
|
|
||||||
* for using the new PHP 7 random_* API in PHP 5 projects
|
|
||||||
*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
|
||||||
* in the Software without restriction, including without limitation the rights
|
|
||||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
* copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
* SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch a random integer between $min and $max inclusive
|
|
||||||
*
|
|
||||||
* @param int $min
|
|
||||||
* @param int $max
|
|
||||||
*
|
|
||||||
* @throws Exception
|
|
||||||
*
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
function random_int($min, $max)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Type and input logic checks
|
|
||||||
*
|
|
||||||
* If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
|
|
||||||
* (non-inclusive), it will sanely cast it to an int. If you it's equal to
|
|
||||||
* ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
|
|
||||||
* lose precision, so the <= and => operators might accidentally let a float
|
|
||||||
* through.
|
|
||||||
*/
|
|
||||||
|
|
||||||
try {
|
|
||||||
$min = RandomCompat_intval($min);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_int(): $min must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$max = RandomCompat_intval($max);
|
|
||||||
} catch (TypeError $ex) {
|
|
||||||
throw new TypeError(
|
|
||||||
'random_int(): $max must be an integer'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Now that we've verified our weak typing system has given us an integer,
|
|
||||||
* let's validate the logic then we can move forward with generating random
|
|
||||||
* integers along a given range.
|
|
||||||
*/
|
|
||||||
if ($min > $max) {
|
|
||||||
throw new Error(
|
|
||||||
'Minimum value must be less than or equal to the maximum value'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($max === $min) {
|
|
||||||
return (int) $min;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize variables to 0
|
|
||||||
*
|
|
||||||
* We want to store:
|
|
||||||
* $bytes => the number of random bytes we need
|
|
||||||
* $mask => an integer bitmask (for use with the &) operator
|
|
||||||
* so we can minimize the number of discards
|
|
||||||
*/
|
|
||||||
$attempts = $bits = $bytes = $mask = $valueShift = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* At this point, $range is a positive number greater than 0. It might
|
|
||||||
* overflow, however, if $max - $min > PHP_INT_MAX. PHP will cast it to
|
|
||||||
* a float and we will lose some precision.
|
|
||||||
*/
|
|
||||||
$range = $max - $min;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test for integer overflow:
|
|
||||||
*/
|
|
||||||
if (!is_int($range)) {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Still safely calculate wider ranges.
|
|
||||||
* Provided by @CodesInChaos, @oittaa
|
|
||||||
*
|
|
||||||
* @ref https://gist.github.com/CodesInChaos/03f9ea0b58e8b2b8d435
|
|
||||||
*
|
|
||||||
* We use ~0 as a mask in this case because it generates all 1s
|
|
||||||
*
|
|
||||||
* @ref https://eval.in/400356 (32-bit)
|
|
||||||
* @ref http://3v4l.org/XX9r5 (64-bit)
|
|
||||||
*/
|
|
||||||
$bytes = PHP_INT_SIZE;
|
|
||||||
$mask = ~0;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* $bits is effectively ceil(log($range, 2)) without dealing with
|
|
||||||
* type juggling
|
|
||||||
*/
|
|
||||||
while ($range > 0) {
|
|
||||||
if ($bits % 8 === 0) {
|
|
||||||
++$bytes;
|
|
||||||
}
|
|
||||||
++$bits;
|
|
||||||
$range >>= 1;
|
|
||||||
$mask = $mask << 1 | 1;
|
|
||||||
}
|
|
||||||
$valueShift = $min;
|
|
||||||
}
|
|
||||||
|
|
||||||
$val = 0;
|
|
||||||
/**
|
|
||||||
* Now that we have our parameters set up, let's begin generating
|
|
||||||
* random integers until one falls between $min and $max
|
|
||||||
*/
|
|
||||||
do {
|
|
||||||
/**
|
|
||||||
* The rejection probability is at most 0.5, so this corresponds
|
|
||||||
* to a failure probability of 2^-128 for a working RNG
|
|
||||||
*/
|
|
||||||
if ($attempts > 128) {
|
|
||||||
throw new Exception(
|
|
||||||
'random_int: RNG is broken - too many rejections'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Let's grab the necessary number of random bytes
|
|
||||||
*/
|
|
||||||
$randomByteString = random_bytes($bytes);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Let's turn $randomByteString into an integer
|
|
||||||
*
|
|
||||||
* This uses bitwise operators (<< and |) to build an integer
|
|
||||||
* out of the values extracted from ord()
|
|
||||||
*
|
|
||||||
* Example: [9F] | [6D] | [32] | [0C] =>
|
|
||||||
* 159 + 27904 + 3276800 + 201326592 =>
|
|
||||||
* 204631455
|
|
||||||
*/
|
|
||||||
$val &= 0;
|
|
||||||
for ($i = 0; $i < $bytes; ++$i) {
|
|
||||||
$val |= ord($randomByteString[$i]) << ($i * 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply mask
|
|
||||||
*/
|
|
||||||
$val &= $mask;
|
|
||||||
$val += $valueShift;
|
|
||||||
|
|
||||||
++$attempts;
|
|
||||||
/**
|
|
||||||
* If $val overflows to a floating point number,
|
|
||||||
* ... or is larger than $max,
|
|
||||||
* ... or smaller than $min,
|
|
||||||
* then try again.
|
|
||||||
*/
|
|
||||||
} while (!is_int($val) || $val > $max || $val < $min);
|
|
||||||
|
|
||||||
return (int) $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
<?php
|
|
||||||
$dist = dirname(__DIR__).'/dist';
|
|
||||||
if (!is_dir($dist)) {
|
|
||||||
mkdir($dist, 0755);
|
|
||||||
}
|
|
||||||
if (file_exists($dist.'/random_compat.phar')) {
|
|
||||||
unlink($dist.'/random_compat.phar');
|
|
||||||
}
|
|
||||||
$phar = new Phar(
|
|
||||||
$dist.'/random_compat.phar',
|
|
||||||
FilesystemIterator::CURRENT_AS_FILEINFO | \FilesystemIterator::KEY_AS_FILENAME,
|
|
||||||
'random_compat.phar'
|
|
||||||
);
|
|
||||||
rename(
|
|
||||||
dirname(__DIR__).'/lib/random.php',
|
|
||||||
dirname(__DIR__).'/lib/index.php'
|
|
||||||
);
|
|
||||||
$phar->buildFromDirectory(dirname(__DIR__).'/lib');
|
|
||||||
rename(
|
|
||||||
dirname(__DIR__).'/lib/index.php',
|
|
||||||
dirname(__DIR__).'/lib/random.php'
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If we pass an (optional) path to a private key as a second argument, we will
|
|
||||||
* sign the Phar with OpenSSL.
|
|
||||||
*
|
|
||||||
* If you leave this out, it will produce an unsigned .phar!
|
|
||||||
*/
|
|
||||||
if ($argc > 1) {
|
|
||||||
if (!@is_readable($argv[1])) {
|
|
||||||
echo 'Could not read the private key file:', $argv[1], "\n";
|
|
||||||
exit(255);
|
|
||||||
}
|
|
||||||
$pkeyFile = file_get_contents($argv[1]);
|
|
||||||
|
|
||||||
$private = openssl_get_privatekey($pkeyFile);
|
|
||||||
if ($private !== false) {
|
|
||||||
$pkey = '';
|
|
||||||
openssl_pkey_export($private, $pkey);
|
|
||||||
$phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save the corresponding public key to the file
|
|
||||||
*/
|
|
||||||
if (!@is_readable($dist.'/random_compat.phar.pubkey')) {
|
|
||||||
$details = openssl_pkey_get_details($private);
|
|
||||||
file_put_contents(
|
|
||||||
$dist.'/random_compat.phar.pubkey',
|
|
||||||
$details['key']
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo 'An error occurred reading the private key from OpenSSL.', "\n";
|
|
||||||
exit(255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'lib/byte_safe_strings.php';
|
|
||||||
require_once 'lib/cast_to_int.php';
|
|
||||||
require_once 'lib/error_polyfill.php';
|
|
||||||
require_once 'other/ide_stubs/libsodium.php';
|
|
||||||
require_once 'lib/random.php';
|
|
||||||
|
|
||||||
$int = random_int(0, 65536);
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
<psalm
|
|
||||||
autoloader="psalm-autoload.php"
|
|
||||||
stopOnFirstError="false"
|
|
||||||
useDocblockTypes="true"
|
|
||||||
>
|
|
||||||
<projectFiles>
|
|
||||||
<directory name="lib" />
|
|
||||||
</projectFiles>
|
|
||||||
<issueHandlers>
|
|
||||||
<RedundantConditionGivenDocblockType errorLevel="info" />
|
|
||||||
<UnresolvableInclude errorLevel="info" />
|
|
||||||
<DuplicateClass errorLevel="info" />
|
|
||||||
<InvalidOperand errorLevel="info" />
|
|
||||||
<UndefinedConstant errorLevel="info" />
|
|
||||||
<MissingReturnType errorLevel="info" />
|
|
||||||
</issueHandlers>
|
|
||||||
</psalm>
|
|
||||||
+3
-3
@@ -2,7 +2,7 @@
|
|||||||
"name" : "php-extended/php-system",
|
"name" : "php-extended/php-system",
|
||||||
"description" : "A generic way to find informations about the running system",
|
"description" : "A generic way to find informations about the running system",
|
||||||
"type" : "library",
|
"type" : "library",
|
||||||
"homepage" : "https://github.com/php-extended/php-system",
|
"homepage" : "https://gitlab.com/php-extended/php-system",
|
||||||
"license" : "MIT",
|
"license" : "MIT",
|
||||||
"authors" : [{
|
"authors" : [{
|
||||||
"name" : "Anastaszor",
|
"name" : "Anastaszor",
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"support" : {
|
"support" : {
|
||||||
"issues" : "https://github.com/php-extended/php-system/issues",
|
"issues" : "https://gitlab.com/php-extended/php-system/issues",
|
||||||
"source" : "https://github.com/php-extended/php-system"
|
"source" : "https://gitlab.com/php-extended/php-system"
|
||||||
},
|
},
|
||||||
"autoload" : {
|
"autoload" : {
|
||||||
"psr-4" : {
|
"psr-4" : {
|
||||||
|
|||||||
+3
-3
@@ -9,8 +9,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"support" : {
|
"support" : {
|
||||||
"issues" : "https://github.com/php-extended/php-tail/issues",
|
"issues" : "https://gitlab.com/php-extended/php-tail/issues",
|
||||||
"source" : "https://github.com/php-extended/php-tail"
|
"source" : "https://gitlab.com/php-extended/php-tail"
|
||||||
},
|
},
|
||||||
"keywords" : [
|
"keywords" : [
|
||||||
"php",
|
"php",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"PhpExtended\\Tail\\" : "src/"
|
"PhpExtended\\Tail\\" : "src/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"homepage" : "https://github.com/php-extended/php-tail",
|
"homepage" : "https://gitlab.com/php-extended/php-tail",
|
||||||
"require" : {
|
"require" : {
|
||||||
"php-extended/php-system" : "^1.2"
|
"php-extended/php-system" : "^1.2"
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+6
-26
@@ -22,12 +22,9 @@ final class Key
|
|||||||
private $expiringTime;
|
private $expiringTime;
|
||||||
private $state = array();
|
private $state = array();
|
||||||
|
|
||||||
/**
|
public function __construct(string $resource)
|
||||||
* @param string $resource
|
|
||||||
*/
|
|
||||||
public function __construct($resource)
|
|
||||||
{
|
{
|
||||||
$this->resource = (string) $resource;
|
$this->resource = $resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __toString()
|
public function __toString()
|
||||||
@@ -35,39 +32,22 @@ final class Key
|
|||||||
return $this->resource;
|
return $this->resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function hasState(string $stateKey): bool
|
||||||
* @param string $stateKey
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function hasState($stateKey)
|
|
||||||
{
|
{
|
||||||
return isset($this->state[$stateKey]);
|
return isset($this->state[$stateKey]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function setState(string $stateKey, $state): void
|
||||||
* @param string $stateKey
|
|
||||||
* @param mixed $state
|
|
||||||
*/
|
|
||||||
public function setState($stateKey, $state)
|
|
||||||
{
|
{
|
||||||
$this->state[$stateKey] = $state;
|
$this->state[$stateKey] = $state;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function removeState(string $stateKey): void
|
||||||
* @param string $stateKey
|
|
||||||
*/
|
|
||||||
public function removeState($stateKey)
|
|
||||||
{
|
{
|
||||||
unset($this->state[$stateKey]);
|
unset($this->state[$stateKey]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function getState(string $stateKey)
|
||||||
* @param $stateKey
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function getState($stateKey)
|
|
||||||
{
|
{
|
||||||
return $this->state[$stateKey];
|
return $this->state[$stateKey];
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+11
-10
@@ -41,12 +41,12 @@ final class Lock implements LockInterface, LoggerAwareInterface
|
|||||||
* @param float|null $ttl Maximum expected lock duration in seconds
|
* @param float|null $ttl Maximum expected lock duration in seconds
|
||||||
* @param bool $autoRelease Whether to automatically release the lock or not when the lock instance is destroyed
|
* @param bool $autoRelease Whether to automatically release the lock or not when the lock instance is destroyed
|
||||||
*/
|
*/
|
||||||
public function __construct(Key $key, StoreInterface $store, $ttl = null, $autoRelease = true)
|
public function __construct(Key $key, StoreInterface $store, float $ttl = null, bool $autoRelease = true)
|
||||||
{
|
{
|
||||||
$this->store = $store;
|
$this->store = $store;
|
||||||
$this->key = $key;
|
$this->key = $key;
|
||||||
$this->ttl = $ttl;
|
$this->ttl = $ttl;
|
||||||
$this->autoRelease = (bool) $autoRelease;
|
$this->autoRelease = $autoRelease;
|
||||||
|
|
||||||
$this->logger = new NullLogger();
|
$this->logger = new NullLogger();
|
||||||
}
|
}
|
||||||
@@ -105,22 +105,25 @@ final class Lock implements LockInterface, LoggerAwareInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function refresh()
|
public function refresh($ttl = null)
|
||||||
{
|
{
|
||||||
if (!$this->ttl) {
|
if (null === $ttl) {
|
||||||
|
$ttl = $this->ttl;
|
||||||
|
}
|
||||||
|
if (!$ttl) {
|
||||||
throw new InvalidArgumentException('You have to define an expiration duration.');
|
throw new InvalidArgumentException('You have to define an expiration duration.');
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$this->key->resetLifetime();
|
$this->key->resetLifetime();
|
||||||
$this->store->putOffExpiration($this->key, $this->ttl);
|
$this->store->putOffExpiration($this->key, $ttl);
|
||||||
$this->dirty = true;
|
$this->dirty = true;
|
||||||
|
|
||||||
if ($this->key->isExpired()) {
|
if ($this->key->isExpired()) {
|
||||||
throw new LockExpiredException(sprintf('Failed to put off the expiration of the "%s" lock within the specified time.', $this->key));
|
throw new LockExpiredException(sprintf('Failed to put off the expiration of the "%s" lock within the specified time.', $this->key));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->logger->info('Expiration defined for "{resource}" lock for "{ttl}" seconds.', array('resource' => $this->key, 'ttl' => $this->ttl));
|
$this->logger->info('Expiration defined for "{resource}" lock for "{ttl}" seconds.', array('resource' => $this->key, 'ttl' => $ttl));
|
||||||
} catch (LockConflictedException $e) {
|
} catch (LockConflictedException $e) {
|
||||||
$this->dirty = false;
|
$this->dirty = false;
|
||||||
$this->logger->notice('Failed to define an expiration for the "{resource}" lock, someone else acquired the lock.', array('resource' => $this->key));
|
$this->logger->notice('Failed to define an expiration for the "{resource}" lock, someone else acquired the lock.', array('resource' => $this->key));
|
||||||
@@ -154,7 +157,7 @@ final class Lock implements LockInterface, LoggerAwareInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return bool
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function isExpired()
|
public function isExpired()
|
||||||
{
|
{
|
||||||
@@ -162,9 +165,7 @@ final class Lock implements LockInterface, LoggerAwareInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the remaining lifetime.
|
* {@inheritdoc}
|
||||||
*
|
|
||||||
* @return float|null Remaining lifetime in seconds. Null when the lock won't expire.
|
|
||||||
*/
|
*/
|
||||||
public function getRemainingLifetime()
|
public function getRemainingLifetime()
|
||||||
{
|
{
|
||||||
|
|||||||
+16
-2
@@ -24,7 +24,7 @@ interface LockInterface
|
|||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Acquires the lock. If the lock is acquired by someone else, the parameter `blocking` determines whether or not
|
* Acquires the lock. If the lock is acquired by someone else, the parameter `blocking` determines whether or not
|
||||||
* the the call should block until the release of the lock.
|
* the call should block until the release of the lock.
|
||||||
*
|
*
|
||||||
* @param bool $blocking Whether or not the Lock should wait for the release of someone else
|
* @param bool $blocking Whether or not the Lock should wait for the release of someone else
|
||||||
*
|
*
|
||||||
@@ -38,10 +38,12 @@ interface LockInterface
|
|||||||
/**
|
/**
|
||||||
* Increase the duration of an acquired lock.
|
* Increase the duration of an acquired lock.
|
||||||
*
|
*
|
||||||
|
* @param float|null $ttl Maximum expected lock duration in seconds
|
||||||
|
*
|
||||||
* @throws LockConflictedException If the lock is acquired by someone else
|
* @throws LockConflictedException If the lock is acquired by someone else
|
||||||
* @throws LockAcquiringException If the lock can not be refreshed
|
* @throws LockAcquiringException If the lock can not be refreshed
|
||||||
*/
|
*/
|
||||||
public function refresh();
|
public function refresh(/* $ttl = null */);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether or not the lock is acquired.
|
* Returns whether or not the lock is acquired.
|
||||||
@@ -56,4 +58,16 @@ interface LockInterface
|
|||||||
* @throws LockReleasingException If the lock can not be released
|
* @throws LockReleasingException If the lock can not be released
|
||||||
*/
|
*/
|
||||||
public function release();
|
public function release();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isExpired();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the remaining lifetime.
|
||||||
|
*
|
||||||
|
* @return float|null Remaining lifetime in seconds. Null when the lock won't expire.
|
||||||
|
*/
|
||||||
|
public function getRemainingLifetime();
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-5
@@ -36,7 +36,7 @@ class FlockStore implements StoreInterface
|
|||||||
*
|
*
|
||||||
* @throws LockStorageException If the lock directory doesn’t exist or is not writable
|
* @throws LockStorageException If the lock directory doesn’t exist or is not writable
|
||||||
*/
|
*/
|
||||||
public function __construct($lockPath = null)
|
public function __construct(string $lockPath = null)
|
||||||
{
|
{
|
||||||
if (null === $lockPath) {
|
if (null === $lockPath) {
|
||||||
$lockPath = sys_get_temp_dir();
|
$lockPath = sys_get_temp_dir();
|
||||||
@@ -78,8 +78,7 @@ class FlockStore implements StoreInterface
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Silence error reporting
|
// Silence error reporting
|
||||||
set_error_handler(function () {
|
set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; });
|
||||||
});
|
|
||||||
if (!$handle = fopen($fileName, 'r')) {
|
if (!$handle = fopen($fileName, 'r')) {
|
||||||
if ($handle = fopen($fileName, 'x')) {
|
if ($handle = fopen($fileName, 'x')) {
|
||||||
chmod($fileName, 0444);
|
chmod($fileName, 0444);
|
||||||
@@ -91,8 +90,7 @@ class FlockStore implements StoreInterface
|
|||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
|
|
||||||
if (!$handle) {
|
if (!$handle) {
|
||||||
$error = error_get_last();
|
throw new LockStorageException($error, 0, null);
|
||||||
throw new LockStorageException($error['message'], 0, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// On Windows, even if PHP doc says the contrary, LOCK_NB works, see
|
// On Windows, even if PHP doc says the contrary, LOCK_NB works, see
|
||||||
|
|||||||
+2
-6
@@ -38,7 +38,7 @@ class MemcachedStore implements StoreInterface
|
|||||||
* @param \Memcached $memcached
|
* @param \Memcached $memcached
|
||||||
* @param int $initialTtl the expiration delay of locks in seconds
|
* @param int $initialTtl the expiration delay of locks in seconds
|
||||||
*/
|
*/
|
||||||
public function __construct(\Memcached $memcached, $initialTtl = 300)
|
public function __construct(\Memcached $memcached, int $initialTtl = 300)
|
||||||
{
|
{
|
||||||
if (!static::isSupported()) {
|
if (!static::isSupported()) {
|
||||||
throw new InvalidArgumentException('Memcached extension is required');
|
throw new InvalidArgumentException('Memcached extension is required');
|
||||||
@@ -149,12 +149,8 @@ class MemcachedStore implements StoreInterface
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve an unique token for the given key.
|
* Retrieve an unique token for the given key.
|
||||||
*
|
|
||||||
* @param Key $key
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
*/
|
||||||
private function getToken(Key $key)
|
private function getToken(Key $key): string
|
||||||
{
|
{
|
||||||
if (!$key->hasState(__CLASS__)) {
|
if (!$key->hasState(__CLASS__)) {
|
||||||
$token = base64_encode(random_bytes(32));
|
$token = base64_encode(random_bytes(32));
|
||||||
|
|||||||
+3
-11
@@ -32,7 +32,7 @@ class RedisStore implements StoreInterface
|
|||||||
* @param \Redis|\RedisArray|\RedisCluster|\Predis\Client $redisClient
|
* @param \Redis|\RedisArray|\RedisCluster|\Predis\Client $redisClient
|
||||||
* @param float $initialTtl the expiration delay of locks in seconds
|
* @param float $initialTtl the expiration delay of locks in seconds
|
||||||
*/
|
*/
|
||||||
public function __construct($redisClient, $initialTtl = 300.0)
|
public function __construct($redisClient, float $initialTtl = 300.0)
|
||||||
{
|
{
|
||||||
if (!$redisClient instanceof \Redis && !$redisClient instanceof \RedisArray && !$redisClient instanceof \RedisCluster && !$redisClient instanceof \Predis\Client && !$redisClient instanceof RedisProxy) {
|
if (!$redisClient instanceof \Redis && !$redisClient instanceof \RedisArray && !$redisClient instanceof \RedisCluster && !$redisClient instanceof \Predis\Client && !$redisClient instanceof RedisProxy) {
|
||||||
throw new InvalidArgumentException(sprintf('%s() expects parameter 1 to be Redis, RedisArray, RedisCluster or Predis\Client, %s given', __METHOD__, is_object($redisClient) ? get_class($redisClient) : gettype($redisClient)));
|
throw new InvalidArgumentException(sprintf('%s() expects parameter 1 to be Redis, RedisArray, RedisCluster or Predis\Client, %s given', __METHOD__, is_object($redisClient) ? get_class($redisClient) : gettype($redisClient)));
|
||||||
@@ -124,13 +124,9 @@ class RedisStore implements StoreInterface
|
|||||||
/**
|
/**
|
||||||
* Evaluates a script in the corresponding redis client.
|
* Evaluates a script in the corresponding redis client.
|
||||||
*
|
*
|
||||||
* @param string $script
|
|
||||||
* @param string $resource
|
|
||||||
* @param array $args
|
|
||||||
*
|
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
private function evaluate($script, $resource, array $args)
|
private function evaluate(string $script, string $resource, array $args)
|
||||||
{
|
{
|
||||||
if ($this->redis instanceof \Redis || $this->redis instanceof \RedisCluster || $this->redis instanceof RedisProxy) {
|
if ($this->redis instanceof \Redis || $this->redis instanceof \RedisCluster || $this->redis instanceof RedisProxy) {
|
||||||
return $this->redis->eval($script, array_merge(array($resource), $args), 1);
|
return $this->redis->eval($script, array_merge(array($resource), $args), 1);
|
||||||
@@ -149,12 +145,8 @@ class RedisStore implements StoreInterface
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves an unique token for the given key.
|
* Retrieves an unique token for the given key.
|
||||||
*
|
|
||||||
* @param Key $key
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
*/
|
||||||
private function getToken(Key $key)
|
private function getToken(Key $key): string
|
||||||
{
|
{
|
||||||
if (!$key->hasState(__CLASS__)) {
|
if (!$key->hasState(__CLASS__)) {
|
||||||
$token = base64_encode(random_bytes(32));
|
$token = base64_encode(random_bytes(32));
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ class RetryTillSaveStore implements StoreInterface, LoggerAwareInterface
|
|||||||
* @param int $retrySleep Duration in ms between 2 retry
|
* @param int $retrySleep Duration in ms between 2 retry
|
||||||
* @param int $retryCount Maximum amount of retry
|
* @param int $retryCount Maximum amount of retry
|
||||||
*/
|
*/
|
||||||
public function __construct(StoreInterface $decorated, $retrySleep = 100, $retryCount = PHP_INT_MAX)
|
public function __construct(StoreInterface $decorated, int $retrySleep = 100, int $retryCount = PHP_INT_MAX)
|
||||||
{
|
{
|
||||||
$this->decorated = $decorated;
|
$this->decorated = $decorated;
|
||||||
$this->retrySleep = $retrySleep;
|
$this->retrySleep = $retrySleep;
|
||||||
|
|||||||
+3
-23
@@ -13,7 +13,6 @@ namespace Symfony\Component\Lock\Store;
|
|||||||
|
|
||||||
use Symfony\Component\Lock\Exception\InvalidArgumentException;
|
use Symfony\Component\Lock\Exception\InvalidArgumentException;
|
||||||
use Symfony\Component\Lock\Exception\LockConflictedException;
|
use Symfony\Component\Lock\Exception\LockConflictedException;
|
||||||
use Symfony\Component\Lock\Exception\NotSupportedException;
|
|
||||||
use Symfony\Component\Lock\Key;
|
use Symfony\Component\Lock\Key;
|
||||||
use Symfony\Component\Lock\StoreInterface;
|
use Symfony\Component\Lock\StoreInterface;
|
||||||
|
|
||||||
@@ -27,23 +26,13 @@ class SemaphoreStore implements StoreInterface
|
|||||||
/**
|
/**
|
||||||
* Returns whether or not the store is supported.
|
* Returns whether or not the store is supported.
|
||||||
*
|
*
|
||||||
* @param bool|null $blocking when not null, checked again the blocking mode
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*
|
*
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
public static function isSupported($blocking = null)
|
public static function isSupported()
|
||||||
{
|
{
|
||||||
if (!extension_loaded('sysvsem')) {
|
return extension_loaded('sysvsem');
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false === $blocking && \PHP_VERSION_ID < 50601) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
@@ -76,16 +65,7 @@ class SemaphoreStore implements StoreInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
$resource = sem_get(crc32($key));
|
$resource = sem_get(crc32($key));
|
||||||
|
$acquired = sem_acquire($resource, !$blocking);
|
||||||
if (\PHP_VERSION_ID < 50601) {
|
|
||||||
if (!$blocking) {
|
|
||||||
throw new NotSupportedException(sprintf('The store "%s" does not supports non blocking locks.', get_class($this)));
|
|
||||||
}
|
|
||||||
|
|
||||||
$acquired = sem_acquire($resource);
|
|
||||||
} else {
|
|
||||||
$acquired = sem_acquire($resource, !$blocking);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$acquired) {
|
if (!$acquired) {
|
||||||
throw new LockConflictedException();
|
throw new LockConflictedException();
|
||||||
|
|||||||
+14
@@ -97,6 +97,20 @@ class LockTest extends TestCase
|
|||||||
$lock->refresh();
|
$lock->refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testRefreshCustom()
|
||||||
|
{
|
||||||
|
$key = new Key(uniqid(__METHOD__, true));
|
||||||
|
$store = $this->getMockBuilder(StoreInterface::class)->getMock();
|
||||||
|
$lock = new Lock($key, $store, 10);
|
||||||
|
|
||||||
|
$store
|
||||||
|
->expects($this->once())
|
||||||
|
->method('putOffExpiration')
|
||||||
|
->with($key, 20);
|
||||||
|
|
||||||
|
$lock->refresh(20);
|
||||||
|
}
|
||||||
|
|
||||||
public function testIsAquired()
|
public function testIsAquired()
|
||||||
{
|
{
|
||||||
$key = new Key(uniqid(__METHOD__, true));
|
$key = new Key(uniqid(__METHOD__, true));
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ trait BlockingStoreTestTrait
|
|||||||
* This test is time sensible: the $clockDelay could be adjust.
|
* This test is time sensible: the $clockDelay could be adjust.
|
||||||
*
|
*
|
||||||
* @requires extension pcntl
|
* @requires extension pcntl
|
||||||
|
* @requires extension posix
|
||||||
* @requires function pcntl_sigwaitinfo
|
* @requires function pcntl_sigwaitinfo
|
||||||
*/
|
*/
|
||||||
public function testBlockingLocks()
|
public function testBlockingLocks()
|
||||||
@@ -38,12 +39,6 @@ trait BlockingStoreTestTrait
|
|||||||
// Amount a microsecond used to order async actions
|
// Amount a microsecond used to order async actions
|
||||||
$clockDelay = 50000;
|
$clockDelay = 50000;
|
||||||
|
|
||||||
if (\PHP_VERSION_ID < 50600 || defined('HHVM_VERSION_ID')) {
|
|
||||||
$this->markTestSkipped('The PHP engine does not keep resource in child forks');
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var StoreInterface $store */
|
/** @var StoreInterface $store */
|
||||||
$store = $this->getStore();
|
$store = $this->getStore();
|
||||||
$key = new Key(uniqid(__METHOD__, true));
|
$key = new Key(uniqid(__METHOD__, true));
|
||||||
|
|||||||
@@ -27,10 +27,6 @@ class SemaphoreStoreTest extends AbstractStoreTest
|
|||||||
*/
|
*/
|
||||||
protected function getStore()
|
protected function getStore()
|
||||||
{
|
{
|
||||||
if (\PHP_VERSION_ID < 50601) {
|
|
||||||
$this->markTestSkipped('Non blocking semaphore are supported by PHP version greater or equals than 5.6.1');
|
|
||||||
}
|
|
||||||
|
|
||||||
return new SemaphoreStore();
|
return new SemaphoreStore();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+2
-3
@@ -16,8 +16,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^5.5.9|>=7.0.8",
|
"php": "^7.1.3",
|
||||||
"symfony/polyfill-php70": "~1.0",
|
|
||||||
"psr/log": "~1.0"
|
"psr/log": "~1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
@@ -32,7 +31,7 @@
|
|||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "3.4-dev"
|
"dev-master": "4.1-dev"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
Copyright (c) 2015-2018 Fabien Potencier
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
-74
@@ -1,74 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Polyfill\Php70;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Nicolas Grekas <p@tchwork.com>
|
|
||||||
*
|
|
||||||
* @internal
|
|
||||||
*/
|
|
||||||
final class Php70
|
|
||||||
{
|
|
||||||
public static function intdiv($dividend, $divisor)
|
|
||||||
{
|
|
||||||
$dividend = self::intArg($dividend, __FUNCTION__, 1);
|
|
||||||
$divisor = self::intArg($divisor, __FUNCTION__, 2);
|
|
||||||
|
|
||||||
if (0 === $divisor) {
|
|
||||||
throw new \DivisionByZeroError('Division by zero');
|
|
||||||
}
|
|
||||||
if (-1 === $divisor && ~PHP_INT_MAX === $dividend) {
|
|
||||||
throw new \ArithmeticError('Division of PHP_INT_MIN by -1 is not an integer');
|
|
||||||
}
|
|
||||||
|
|
||||||
return ($dividend - ($dividend % $divisor)) / $divisor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function preg_replace_callback_array(array $patterns, $subject, $limit = -1, &$count = 0)
|
|
||||||
{
|
|
||||||
$count = 0;
|
|
||||||
$result = (string) $subject;
|
|
||||||
if (0 === $limit = self::intArg($limit, __FUNCTION__, 3)) {
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($patterns as $pattern => $callback) {
|
|
||||||
$result = preg_replace_callback($pattern, $callback, $result, $limit, $c);
|
|
||||||
$count += $c;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function error_clear_last()
|
|
||||||
{
|
|
||||||
static $handler;
|
|
||||||
if (!$handler) {
|
|
||||||
$handler = function() { return false; };
|
|
||||||
}
|
|
||||||
set_error_handler($handler);
|
|
||||||
@trigger_error('');
|
|
||||||
restore_error_handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function intArg($value, $caller, $pos)
|
|
||||||
{
|
|
||||||
if (\is_int($value)) {
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
if (!\is_numeric($value) || PHP_INT_MAX <= ($value += 0) || ~PHP_INT_MAX >= $value) {
|
|
||||||
throw new \TypeError(sprintf('%s() expects parameter %d to be integer, %s given', $caller, $pos, gettype($value)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int) $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-28
@@ -1,28 +0,0 @@
|
|||||||
Symfony Polyfill / Php70
|
|
||||||
========================
|
|
||||||
|
|
||||||
This component provides features unavailable in releases prior to PHP 7.0:
|
|
||||||
|
|
||||||
- [`intdiv`](http://php.net/intdiv)
|
|
||||||
- [`preg_replace_callback_array`](http://php.net/preg_replace_callback_array)
|
|
||||||
- [`error_clear_last`](http://php.net/error_clear_last)
|
|
||||||
- `random_bytes` and `random_int` (from [paragonie/random_compat](https://github.com/paragonie/random_compat))
|
|
||||||
- [`*Error` throwable classes](http://php.net/Error)
|
|
||||||
- [`PHP_INT_MIN`](http://php.net/manual/en/reserved.constants.php#constant.php-int-min)
|
|
||||||
- `SessionUpdateTimestampHandlerInterface`
|
|
||||||
|
|
||||||
More information can be found in the
|
|
||||||
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
|
|
||||||
|
|
||||||
Compatibility notes
|
|
||||||
===================
|
|
||||||
|
|
||||||
To write portable code between PHP5 and PHP7, some care must be taken:
|
|
||||||
- `\*Error` exceptions must be caught before `\Exception`;
|
|
||||||
- after calling `error_clear_last()`, the result of `$e = error_get_last()` must be
|
|
||||||
verified using `isset($e['message'][0])` instead of `null !== $e`.
|
|
||||||
|
|
||||||
License
|
|
||||||
=======
|
|
||||||
|
|
||||||
This library is released under the [MIT license](LICENSE).
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class ArithmeticError extends Error
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class AssertionError extends Error
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class DivisionByZeroError extends Error
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Error extends Exception
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class ParseError extends Error
|
|
||||||
{
|
|
||||||
}
|
|
||||||
-23
@@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
interface SessionUpdateTimestampHandlerInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Checks if a session identifier already exists or not.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function validateId($key);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates the timestamp of a session when its data didn't change.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @param string $val
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function updateTimestamp($key, $val);
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class TypeError extends Error
|
|
||||||
{
|
|
||||||
}
|
|
||||||
-27
@@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
use Symfony\Polyfill\Php70 as p;
|
|
||||||
|
|
||||||
if (PHP_VERSION_ID < 70000) {
|
|
||||||
if (!defined('PHP_INT_MIN')) {
|
|
||||||
define('PHP_INT_MIN', ~PHP_INT_MAX);
|
|
||||||
}
|
|
||||||
if (!function_exists('intdiv')) {
|
|
||||||
function intdiv($dividend, $divisor) { return p\Php70::intdiv($dividend, $divisor); }
|
|
||||||
}
|
|
||||||
if (!function_exists('preg_replace_callback_array')) {
|
|
||||||
function preg_replace_callback_array(array $patterns, $subject, $limit = -1, &$count = 0) { return p\Php70::preg_replace_callback_array($patterns, $subject, $limit, $count); }
|
|
||||||
}
|
|
||||||
if (!function_exists('error_clear_last')) {
|
|
||||||
function error_clear_last() { return p\Php70::error_clear_last(); }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-33
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "symfony/polyfill-php70",
|
|
||||||
"type": "library",
|
|
||||||
"description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
|
|
||||||
"keywords": ["polyfill", "shim", "compatibility", "portable"],
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"license": "MIT",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.3",
|
|
||||||
"paragonie/random_compat": "~1.0|~2.0"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": { "Symfony\\Polyfill\\Php70\\": "" },
|
|
||||||
"files": [ "bootstrap.php" ],
|
|
||||||
"classmap": [ "Resources/stubs" ]
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.8-dev"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Vendored
+14
@@ -86,6 +86,19 @@ if($v->validate()) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Or use dot syntax to validate all members of a numeric array:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$v = new Valitron\Validator(array('values' => array(50, 90)));
|
||||||
|
$v->rule('max', 'values.*', 100);
|
||||||
|
if($v->validate()) {
|
||||||
|
echo "Yay! We're all good!";
|
||||||
|
} else {
|
||||||
|
// Errors
|
||||||
|
print_r($v->errors());
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
Setting language and language dir globally:
|
Setting language and language dir globally:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
@@ -121,6 +134,7 @@ V::lang('ar');
|
|||||||
* `notIn` - Negation of `in` rule (not in array of values)
|
* `notIn` - Negation of `in` rule (not in array of values)
|
||||||
* `ip` - Valid IP address
|
* `ip` - Valid IP address
|
||||||
* `email` - Valid email address
|
* `email` - Valid email address
|
||||||
|
* `emailDNS` - Valid email address with active DNS record
|
||||||
* `url` - Valid URL
|
* `url` - Valid URL
|
||||||
* `urlActive` - Valid URL with active DNS record
|
* `urlActive` - Valid URL with active DNS record
|
||||||
* `alpha` - Alphabetic characters only
|
* `alpha` - Alphabetic characters only
|
||||||
|
|||||||
Vendored
+12
-4
@@ -4,7 +4,7 @@
|
|||||||
"description": "Simple, elegant, stand-alone validation library with NO dependencies",
|
"description": "Simple, elegant, stand-alone validation library with NO dependencies",
|
||||||
"keywords": ["validation", "validator", "valid"],
|
"keywords": ["validation", "validator", "valid"],
|
||||||
"homepage": "http://github.com/vlucas/valitron",
|
"homepage": "http://github.com/vlucas/valitron",
|
||||||
"license" : "BSD",
|
"license" : "BSD-3-Clause",
|
||||||
"authors" : [
|
"authors" : [
|
||||||
{
|
{
|
||||||
"name": "Vance Lucas",
|
"name": "Vance Lucas",
|
||||||
@@ -16,11 +16,19 @@
|
|||||||
"php": ">=5.3.2"
|
"php": ">=5.3.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~4.0"
|
"phpunit/phpunit": "^4.8.35 || ^5.5 || ^6.5"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-mbstring": "It can support the multiple bytes string length."
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": {
|
"psr-4": {
|
||||||
"Valitron": "src/"
|
"Valitron\\": "src/Valitron"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"Valitron\\": "tests/Valitron"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
Vendored
+33
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
return array(
|
||||||
|
'required' => "yra privalomas",
|
||||||
|
'equals' => "reikšmė turi būti tokia pati, kaip „%s“",
|
||||||
|
'different' => "turi būti kitokia, nei „%s“",
|
||||||
|
'accepted' => "turi būti priimta",
|
||||||
|
'numeric' => "turi būti sveikasis skaičius",
|
||||||
|
'integer' => "turi būti skaičius",
|
||||||
|
'length' => "turi būti %d ženklų ilgio",
|
||||||
|
'min' => "turi būti bent %s",
|
||||||
|
'max' => "turi būti ne daugiau kaip %s",
|
||||||
|
'in' => "turi neteisingą vertę",
|
||||||
|
'notIn' => "turi neteisingą vertę",
|
||||||
|
'ip' => "nėra teisingas IP adresas",
|
||||||
|
'email' => "nėra teisingas el. pašto adresas",
|
||||||
|
'url' => "nėra teisingas URL",
|
||||||
|
'urlActive' => "turi būti aktyvus domenas",
|
||||||
|
'alpha' => "turi turėti tik raides a-ž",
|
||||||
|
'alphaNum' => "turi turėti tik raides a-ž ir/ar skaičius 0-9",
|
||||||
|
'slug' => "turi turėti tik raides a-ž, skaičius 0-9, brukšnelius ir apatinius brukšnelius",
|
||||||
|
'regex' => "yra neteisingų ženklų",
|
||||||
|
'date' => "nėra teisinga data",
|
||||||
|
'dateFormat' => "turi būti „%s“ formato data",
|
||||||
|
'dateBefore' => "turi būti data, ankstesnė nei „%s“",
|
||||||
|
'dateAfter' => "turi būti data, vėlesnė nei „%s“",
|
||||||
|
'contains' => "turi turėti %s",
|
||||||
|
'boolean' => "turi būti būlio (taip/ne) tipo",
|
||||||
|
'lengthBetween' => "turi būti nuo %d iki %d ilgio",
|
||||||
|
'creditCard' => "turi būti teisingas kreditinės kortelės numeris",
|
||||||
|
'lengthMin' => "turi būti bent %d ženklų ilgio",
|
||||||
|
'lengthMax' => "turi būti ne ilgesnis nei %d ženklų",
|
||||||
|
'instanceOf' => "turi būti „%s“ atvejis"
|
||||||
|
);
|
||||||
Vendored
+34
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'required' => "är obligatorisk",
|
||||||
|
'equals' => "måste vara samma som '%s'",
|
||||||
|
'different' => "får inte vara samma som '%s'",
|
||||||
|
'accepted' => "måste accepteras",
|
||||||
|
'numeric' => "måste vara numerisk",
|
||||||
|
'integer' => "måste vara ett heltal",
|
||||||
|
'length' => "måste vara %d tecken långt",
|
||||||
|
'min' => "måste vara minst %s",
|
||||||
|
'max' => "får inte vara mer än %s",
|
||||||
|
'in' => "innehåller ogiltigt värde",
|
||||||
|
'notIn' => "innehåller ogiltigt värde",
|
||||||
|
'ip' => "är inte en giltlig IP-adress",
|
||||||
|
'email' => "är inte en giltlig e-postadress",
|
||||||
|
'url' => "är inte en giltlig URL",
|
||||||
|
'urlActive' => "måste vara ett aktivt domännamn",
|
||||||
|
'alpha' => "får bara inehålla bokstäver a-z",
|
||||||
|
'alphaNum' => "får bara inehålla bokstäver a-z och/eller siffror 0-9",
|
||||||
|
'slug' => "får bara inehålla bokstäver a-z och/eller siffror 0-9, bindesträck og understräck",
|
||||||
|
'regex' => "inehåller ogiltliga tecken",
|
||||||
|
'date' => "är inte ett giltligt datum",
|
||||||
|
'dateFormat' => "måste vara ett datum med formatet '%s'",
|
||||||
|
'dateBefore' => "måste vara ett datum före '%s'",
|
||||||
|
'dateAfter' => "måste vara ett datum efter '%s'",
|
||||||
|
'contains' => "måste innehålla %s",
|
||||||
|
'boolean' => "måste vara ett booleskt värde",
|
||||||
|
'lengthBetween' => "måste vara mellan %d och %d tecken långt",
|
||||||
|
'creditCard' => "måste vara et gyldig kredittkortnummer",
|
||||||
|
'lengthMin' => "måste vara minst %d tecken långt",
|
||||||
|
'lengthMax' => "får itne överstiga %d tecken",
|
||||||
|
'instanceOf' => "måste vara en instans av '%s'"
|
||||||
|
);
|
||||||
+6
-1
@@ -24,5 +24,10 @@ return array(
|
|||||||
'dateFormat' => "日期的格式应该为 '%s'",
|
'dateFormat' => "日期的格式应该为 '%s'",
|
||||||
'dateBefore' => "日期必须在 '%s' 之前",
|
'dateBefore' => "日期必须在 '%s' 之前",
|
||||||
'dateAfter' => "日期必须在 '%s' 之后",
|
'dateAfter' => "日期必须在 '%s' 之后",
|
||||||
'contains' => "必须包含 %s"
|
'contains' => "必须包含 %s",
|
||||||
|
'boolean' => "必须是真或假",
|
||||||
|
'lengthBetween' => "长度只能介于 %d 和 %d 之间",
|
||||||
|
'creditCard' => "信用卡号码不正确",
|
||||||
|
'lengthMin' => "长度必须大于 %d",
|
||||||
|
'lengthMax' => "长度必须小于 %d"
|
||||||
);
|
);
|
||||||
|
|||||||
+51
-8
@@ -77,6 +77,11 @@ class Validator
|
|||||||
*/
|
*/
|
||||||
protected $validUrlPrefixes = array('http://', 'https://', 'ftp://');
|
protected $validUrlPrefixes = array('http://', 'https://', 'ftp://');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $stop_on_first_fail = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup validation
|
* Setup validation
|
||||||
*
|
*
|
||||||
@@ -173,9 +178,9 @@ class Validator
|
|||||||
*/
|
*/
|
||||||
protected function validateEquals($field, $value, array $params)
|
protected function validateEquals($field, $value, array $params)
|
||||||
{
|
{
|
||||||
$field2 = $params[0];
|
// extract the second field value, this accounts for nested array values
|
||||||
|
list($field2Value, $multiple) = $this->getPart($this->_fields, explode('.', $params[0]));
|
||||||
return isset($this->_fields[$field2]) && $value == $this->_fields[$field2];
|
return isset($field2Value) && $value == $field2Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -189,9 +194,9 @@ class Validator
|
|||||||
*/
|
*/
|
||||||
protected function validateDifferent($field, $value, array $params)
|
protected function validateDifferent($field, $value, array $params)
|
||||||
{
|
{
|
||||||
$field2 = $params[0];
|
// extract the second field value, this accounts for nested array values
|
||||||
|
list($field2Value, $multiple) = $this->getPart($this->_fields, explode('.', $params[0]));
|
||||||
return isset($this->_fields[$field2]) && $value != $this->_fields[$field2];
|
return isset($field2Value) && $value != $field2Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -246,7 +251,7 @@ class Validator
|
|||||||
{
|
{
|
||||||
if (isset($params[0]) && (bool) $params[0]){
|
if (isset($params[0]) && (bool) $params[0]){
|
||||||
//strict mode
|
//strict mode
|
||||||
return preg_match('/^-?([0-9])+$/i', $value);
|
return preg_match('/^([0-9]|-[1-9]|-?[1-9][0-9]*)$/i', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return filter_var($value, \FILTER_VALIDATE_INT) !== false;
|
return filter_var($value, \FILTER_VALIDATE_INT) !== false;
|
||||||
@@ -500,6 +505,26 @@ class Validator
|
|||||||
return filter_var($value, \FILTER_VALIDATE_EMAIL) !== false;
|
return filter_var($value, \FILTER_VALIDATE_EMAIL) !== false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a field is a valid e-mail address and the domain name is active
|
||||||
|
*
|
||||||
|
* @param string $field
|
||||||
|
* @param mixed $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function validateEmailDNS($field, $value)
|
||||||
|
{
|
||||||
|
if ($this->validateEmail($field, $value)) {
|
||||||
|
$domain = ltrim(stristr($value, '@'), '@') . '.';
|
||||||
|
if (function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46')) {
|
||||||
|
$domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
|
||||||
|
}
|
||||||
|
return checkdnsrr($domain, 'ANY');
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate that a field is a valid URL by syntax
|
* Validate that a field is a valid URL by syntax
|
||||||
*
|
*
|
||||||
@@ -945,6 +970,7 @@ class Validator
|
|||||||
*/
|
*/
|
||||||
public function validate()
|
public function validate()
|
||||||
{
|
{
|
||||||
|
$set_to_break = false;
|
||||||
foreach ($this->_validations as $v) {
|
foreach ($this->_validations as $v) {
|
||||||
foreach ($v['fields'] as $field) {
|
foreach ($v['fields'] as $field) {
|
||||||
list($values, $multiple) = $this->getPart($this->_fields, explode('.', $field));
|
list($values, $multiple) = $this->getPart($this->_fields, explode('.', $field));
|
||||||
@@ -979,13 +1005,26 @@ class Validator
|
|||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$this->error($field, $v['message'], $v['params']);
|
$this->error($field, $v['message'], $v['params']);
|
||||||
|
if($this->stop_on_first_fail) {
|
||||||
|
$set_to_break = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if($set_to_break) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return count($this->errors()) === 0;
|
return count($this->errors()) === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the validation stop a rule is failed
|
||||||
|
* @param bool $stop
|
||||||
|
*/
|
||||||
|
public function stopOnFirstFail($stop = true) {
|
||||||
|
$this->stop_on_first_fail = (bool) $stop;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all rule callbacks, the static and instance ones.
|
* Returns all rule callbacks, the static and instance ones.
|
||||||
*
|
*
|
||||||
@@ -1092,7 +1131,7 @@ class Validator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if either a valdiator with the given name has been
|
* Returns true if either a validator with the given name has been
|
||||||
* registered or there is a default validator by that name.
|
* registered or there is a default validator by that name.
|
||||||
*
|
*
|
||||||
* @param string $name
|
* @param string $name
|
||||||
@@ -1160,6 +1199,8 @@ class Validator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Add label to rule
|
||||||
|
*
|
||||||
* @param string $value
|
* @param string $value
|
||||||
* @internal param array $labels
|
* @internal param array $labels
|
||||||
* @return $this
|
* @return $this
|
||||||
@@ -1173,6 +1214,8 @@ class Validator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Add labels to rules
|
||||||
|
*
|
||||||
* @param array $labels
|
* @param array $labels
|
||||||
* @return $this
|
* @return $this
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user