From db4ae09ee3f6773572f6c7e05aa4a0b1ee0ce2a0 Mon Sep 17 00:00:00 2001 From: El RIDO Date: Sun, 16 Jun 2019 07:10:24 +0200 Subject: [PATCH] upgraded PHP libraries --- composer.json | 74 ++++++----- vendor/composer/autoload_classmap.php | 3 +- vendor/composer/autoload_namespaces.php | 1 - vendor/composer/autoload_psr4.php | 1 + vendor/composer/autoload_static.php | 18 ++- .../random_compat/lib/byte_safe_strings.php | 32 +++-- .../random_compat/lib/cast_to_int.php | 14 +- .../random_compat/lib/error_polyfill.php | 12 +- vendor/paragonie/random_compat/lib/random.php | 5 +- .../lib/random_bytes_com_dotnet.php | 21 +-- .../lib/random_bytes_dev_urandom.php | 77 +++++++---- .../lib/random_bytes_libsodium.php | 15 ++- .../lib/random_bytes_libsodium_legacy.php | 11 +- .../random_compat/lib/random_bytes_mcrypt.php | 18 +-- .../random_compat/lib/random_int.php | 14 ++ .../random_compat/other/build_phar.php | 57 -------- .../random_compat/psalm-autoload.php | 9 -- .../src/Identicon/Generator/BaseGenerator.php | 125 ++++++++++-------- .../src/Identicon/Generator/GdGenerator.php | 26 +++- .../Generator/GeneratorInterface.php | 38 ++++-- .../Generator/ImageMagickGenerator.php | 34 +++-- .../src/Identicon/Generator/SvgGenerator.php | 88 ++++++++++++ .../identicon/src/Identicon/Identicon.php | 77 +++++++---- vendor/yzalis/identicon/src/autoload.php | 30 ----- 24 files changed, 469 insertions(+), 331 deletions(-) delete mode 100644 vendor/paragonie/random_compat/other/build_phar.php delete mode 100644 vendor/paragonie/random_compat/psalm-autoload.php create mode 100644 vendor/yzalis/identicon/src/Identicon/Generator/SvgGenerator.php delete mode 100644 vendor/yzalis/identicon/src/autoload.php diff --git a/composer.json b/composer.json index 2beddab5..09ced6b7 100644 --- a/composer.json +++ b/composer.json @@ -1,32 +1,44 @@ { - "name": "privatebin/privatebin", - "description": "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).", - "type": "project", - "keywords": ["private", "secure", "end-to-end-encrypted", "e2e", "paste", "pastebin", "zero", "zero-knowledge", "encryption", "encrypted", "AES"], - "homepage": "https://privatebin.info/", - "license":"zlib-acknowledgement", - "support": { - "issues": "https://github.com/PrivateBin/PrivateBin/issues", - "wiki": "https://github.com/PrivateBin/PrivateBin/wiki", - "source": "https://github.com/PrivateBin/PrivateBin", - "docs": "https://privatebin.info/codedoc/" - }, - "require": { - "php": "^5.4.0 || ^7.0", - "paragonie/random_compat": "2.0.15", - "yzalis/identicon": "1.1.0" - }, - "require-dev": { - "codacy/coverage": "dev-master", - "codeclimate/php-test-reporter": "dev-master", - "phpunit/phpunit": "^4.6 || ^5.0" - }, - "autoload": { - "psr-4": { - "PrivateBin\\": "lib/" - } - }, - "config": { - "autoloader-suffix": "DontChange" - } -} + "name" : "privatebin/privatebin", + "description" : "PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. Data is encrypted/decrypted in the browser using 256 bit AES in Galois Counter mode (GCM).", + "type" : "project", + "keywords" : [ + "private", + "secure", + "end-to-end-encrypted", + "e2e", + "paste", + "pastebin", + "zero", + "zero-knowledge", + "encryption", + "encrypted", + "AES" + ], + "homepage" : "https://privatebin.info/", + "license" : "zlib-acknowledgement", + "support" : { + "issues" : "https://github.com/PrivateBin/PrivateBin/issues", + "wiki" : "https://github.com/PrivateBin/PrivateBin/wiki", + "source" : "https://github.com/PrivateBin/PrivateBin", + "docs" : "https://privatebin.info/codedoc/" + }, + "require" : { + "php" : "^5.4.0 || ^7.0", + "paragonie/random_compat" : "2.0.18", + "yzalis/identicon" : "1.2.0" + }, + "require-dev" : { + "codacy/coverage" : "dev-master", + "codeclimate/php-test-reporter" : "dev-master", + "phpunit/phpunit" : "^4.6 || ^5.0" + }, + "autoload" : { + "psr-4" : { + "PrivateBin\\" : "lib/" + } + }, + "config" : { + "autoloader-suffix" : "DontChange" + } +} \ No newline at end of file diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index a6fef519..b98b672f 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -10,6 +10,7 @@ return array( 'Identicon\\Generator\\GdGenerator' => $vendorDir . '/yzalis/identicon/src/Identicon/Generator/GdGenerator.php', 'Identicon\\Generator\\GeneratorInterface' => $vendorDir . '/yzalis/identicon/src/Identicon/Generator/GeneratorInterface.php', 'Identicon\\Generator\\ImageMagickGenerator' => $vendorDir . '/yzalis/identicon/src/Identicon/Generator/ImageMagickGenerator.php', + 'Identicon\\Generator\\SvgGenerator' => $vendorDir . '/yzalis/identicon/src/Identicon/Generator/SvgGenerator.php', 'Identicon\\Identicon' => $vendorDir . '/yzalis/identicon/src/Identicon/Identicon.php', 'PrivateBin\\Configuration' => $baseDir . '/lib/Configuration.php', 'PrivateBin\\Controller' => $baseDir . '/lib/Controller.php', @@ -17,6 +18,7 @@ return array( 'PrivateBin\\Data\\Database' => $baseDir . '/lib/Data/Database.php', 'PrivateBin\\Data\\Filesystem' => $baseDir . '/lib/Data/Filesystem.php', 'PrivateBin\\Filter' => $baseDir . '/lib/Filter.php', + 'PrivateBin\\FormatV2' => $baseDir . '/lib/FormatV2.php', 'PrivateBin\\I18n' => $baseDir . '/lib/I18n.php', 'PrivateBin\\Json' => $baseDir . '/lib/Json.php', 'PrivateBin\\Model' => $baseDir . '/lib/Model.php', @@ -29,7 +31,6 @@ return array( 'PrivateBin\\Persistence\\ServerSalt' => $baseDir . '/lib/Persistence/ServerSalt.php', 'PrivateBin\\Persistence\\TrafficLimiter' => $baseDir . '/lib/Persistence/TrafficLimiter.php', 'PrivateBin\\Request' => $baseDir . '/lib/Request.php', - 'PrivateBin\\FormatV2' => $baseDir . '/lib/FormatV2.php', 'PrivateBin\\View' => $baseDir . '/lib/View.php', 'PrivateBin\\Vizhash16x16' => $baseDir . '/lib/Vizhash16x16.php', ); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index 4034081f..b7fc0125 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -6,5 +6,4 @@ $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( - 'Identicon' => array($vendorDir . '/yzalis/identicon/src'), ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index 26f0cedc..313097d4 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -7,4 +7,5 @@ $baseDir = dirname($vendorDir); return array( 'PrivateBin\\' => array($baseDir . '/lib'), + 'Identicon\\' => array($vendorDir . '/yzalis/identicon/src/Identicon'), ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index aaf90cc2..604d6bba 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -15,6 +15,10 @@ class ComposerStaticInitDontChange array ( 'PrivateBin\\' => 11, ), + 'I' => + array ( + 'Identicon\\' => 10, + ), ); public static $prefixDirsPsr4 = array ( @@ -22,15 +26,9 @@ class ComposerStaticInitDontChange array ( 0 => __DIR__ . '/../..' . '/lib', ), - ); - - public static $prefixesPsr0 = array ( - 'I' => + 'Identicon\\' => array ( - 'Identicon' => - array ( - 0 => __DIR__ . '/..' . '/yzalis/identicon/src', - ), + 0 => __DIR__ . '/..' . '/yzalis/identicon/src/Identicon', ), ); @@ -39,6 +37,7 @@ class ComposerStaticInitDontChange 'Identicon\\Generator\\GdGenerator' => __DIR__ . '/..' . '/yzalis/identicon/src/Identicon/Generator/GdGenerator.php', 'Identicon\\Generator\\GeneratorInterface' => __DIR__ . '/..' . '/yzalis/identicon/src/Identicon/Generator/GeneratorInterface.php', 'Identicon\\Generator\\ImageMagickGenerator' => __DIR__ . '/..' . '/yzalis/identicon/src/Identicon/Generator/ImageMagickGenerator.php', + 'Identicon\\Generator\\SvgGenerator' => __DIR__ . '/..' . '/yzalis/identicon/src/Identicon/Generator/SvgGenerator.php', 'Identicon\\Identicon' => __DIR__ . '/..' . '/yzalis/identicon/src/Identicon/Identicon.php', 'PrivateBin\\Configuration' => __DIR__ . '/../..' . '/lib/Configuration.php', 'PrivateBin\\Controller' => __DIR__ . '/../..' . '/lib/Controller.php', @@ -46,6 +45,7 @@ class ComposerStaticInitDontChange 'PrivateBin\\Data\\Database' => __DIR__ . '/../..' . '/lib/Data/Database.php', 'PrivateBin\\Data\\Filesystem' => __DIR__ . '/../..' . '/lib/Data/Filesystem.php', 'PrivateBin\\Filter' => __DIR__ . '/../..' . '/lib/Filter.php', + 'PrivateBin\\FormatV2' => __DIR__ . '/../..' . '/lib/FormatV2.php', 'PrivateBin\\I18n' => __DIR__ . '/../..' . '/lib/I18n.php', 'PrivateBin\\Json' => __DIR__ . '/../..' . '/lib/Json.php', 'PrivateBin\\Model' => __DIR__ . '/../..' . '/lib/Model.php', @@ -58,7 +58,6 @@ class ComposerStaticInitDontChange 'PrivateBin\\Persistence\\ServerSalt' => __DIR__ . '/../..' . '/lib/Persistence/ServerSalt.php', 'PrivateBin\\Persistence\\TrafficLimiter' => __DIR__ . '/../..' . '/lib/Persistence/TrafficLimiter.php', 'PrivateBin\\Request' => __DIR__ . '/../..' . '/lib/Request.php', - 'PrivateBin\\FormatV2' => __DIR__ . '/../..' . '/lib/FormatV2.php', 'PrivateBin\\View' => __DIR__ . '/../..' . '/lib/View.php', 'PrivateBin\\Vizhash16x16' => __DIR__ . '/../..' . '/lib/Vizhash16x16.php', ); @@ -68,7 +67,6 @@ class ComposerStaticInitDontChange return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInitDontChange::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInitDontChange::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInitDontChange::$prefixesPsr0; $loader->classMap = ComposerStaticInitDontChange::$classMap; }, null, ClassLoader::class); diff --git a/vendor/paragonie/random_compat/lib/byte_safe_strings.php b/vendor/paragonie/random_compat/lib/byte_safe_strings.php index 2a7335dd..ef24488f 100644 --- a/vendor/paragonie/random_compat/lib/byte_safe_strings.php +++ b/vendor/paragonie/random_compat/lib/byte_safe_strings.php @@ -28,8 +28,9 @@ if (!is_callable('RandomCompat_strlen')) { if ( - defined('MB_OVERLOAD_STRING') && - ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING + defined('MB_OVERLOAD_STRING') + && + ((int) ini_get('mbstring.func_overload')) & MB_OVERLOAD_STRING ) { /** * strlen() implementation that isn't brittle to mbstring.func_overload @@ -82,8 +83,8 @@ if (!is_callable('RandomCompat_substr')) { if ( defined('MB_OVERLOAD_STRING') - && - ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING + && + ((int) ini_get('mbstring.func_overload')) & MB_OVERLOAD_STRING ) { /** * substr() implementation that isn't brittle to mbstring.func_overload @@ -93,7 +94,7 @@ if (!is_callable('RandomCompat_substr')) { * * @param string $binary_string * @param int $start - * @param int $length (optional) + * @param int|null $length (optional) * * @throws TypeError * @@ -118,6 +119,7 @@ if (!is_callable('RandomCompat_substr')) { * mb_substr($str, 0, NULL, '8bit') returns an empty string on * PHP 5.3, so we have to find the length ourselves. */ + /** @var int $length */ $length = RandomCompat_strlen($binary_string) - $start; } elseif (!is_int($length)) { throw new TypeError( @@ -133,7 +135,12 @@ if (!is_callable('RandomCompat_substr')) { return ''; } - return (string) mb_substr($binary_string, $start, $length, '8bit'); + return (string) mb_substr( + (string) $binary_string, + (int) $start, + (int) $length, + '8bit' + ); } } else { @@ -145,7 +152,7 @@ if (!is_callable('RandomCompat_substr')) { * * @param string $binary_string * @param int $start - * @param int $length (optional) + * @param int|null $length (optional) * * @throws TypeError * @@ -172,10 +179,17 @@ if (!is_callable('RandomCompat_substr')) { ); } - return (string) substr($binary_string, $start, $length); + return (string) substr( + (string )$binary_string, + (int) $start, + (int) $length + ); } - return (string) substr($binary_string, $start); + return (string) substr( + (string) $binary_string, + (int) $start + ); } } } diff --git a/vendor/paragonie/random_compat/lib/cast_to_int.php b/vendor/paragonie/random_compat/lib/cast_to_int.php index 14b4b348..1b1bbfe8 100644 --- a/vendor/paragonie/random_compat/lib/cast_to_int.php +++ b/vendor/paragonie/random_compat/lib/cast_to_int.php @@ -27,19 +27,19 @@ */ 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 * @@ -50,14 +50,16 @@ if (!is_callable('RandomCompat_intval')) { if (is_int($number) || is_float($number)) { $number += 0; } elseif (is_numeric($number)) { + /** @psalm-suppress InvalidOperand */ $number += 0; } + /** @var int|float $number */ if ( is_float($number) - && + && $number > ~PHP_INT_MAX - && + && $number < PHP_INT_MAX ) { $number = (int) $number; diff --git a/vendor/paragonie/random_compat/lib/error_polyfill.php b/vendor/paragonie/random_compat/lib/error_polyfill.php index 6d4a19ac..c02c5c8b 100644 --- a/vendor/paragonie/random_compat/lib/error_polyfill.php +++ b/vendor/paragonie/random_compat/lib/error_polyfill.php @@ -1,12 +1,12 @@ GetRandom($bytes, 0)); + $buf .= base64_decode((string) $util->GetRandom($bytes, 0)); if (RandomCompat_strlen($buf) >= $bytes) { /** * Return our random entropy buffer here: */ - return RandomCompat_substr($buf, 0, $bytes); + return (string) RandomCompat_substr($buf, 0, $bytes); } ++$execCount; } while ($execCount < $bytes); @@ -85,4 +88,4 @@ if (!is_callable('random_bytes')) { 'Could not gather sufficient random data' ); } -} \ No newline at end of file +} diff --git a/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php b/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php index ac36034a..c4e31ccb 100644 --- a/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php +++ b/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php @@ -1,22 +1,22 @@ $st */ + $st = fstat($fp); + if (($st['mode'] & 0170000) !== 020000) { + fclose($fp); + $fp = false; + } } } - if (!empty($fp)) { + if (is_resource($fp)) { /** * stream_set_read_buffer() does not exist in HHVM * @@ -83,6 +106,7 @@ if (!is_callable('random_bytes')) { } try { + /** @var int $bytes */ $bytes = RandomCompat_intval($bytes); } catch (TypeError $ex) { throw new TypeError( @@ -103,7 +127,7 @@ if (!is_callable('random_bytes')) { * if (empty($fp)) line is logic that should only be run once per * page load. */ - if (!empty($fp)) { + if (is_resource($fp)) { /** * @var int */ @@ -123,29 +147,28 @@ if (!is_callable('random_bytes')) { */ $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; - } + /** + * 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 + * @var string $buf */ - $buf = $buf . $read; + $buf .= $read; } while ($remaining > 0); /** * Is our result valid? + * @var string|bool $buf */ if (is_string($buf)) { if (RandomCompat_strlen($buf) === $bytes) { diff --git a/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php b/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php index 1e017c14..2e562901 100644 --- a/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php +++ b/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php @@ -1,22 +1,22 @@ 2147483647) { $buf = ''; for ($i = 0; $i < $bytes; $i += 1073741824) { @@ -69,10 +71,11 @@ if (!is_callable('random_bytes')) { $buf .= \Sodium\randombytes_buf($n); } } else { + /** @var string|bool $buf */ $buf = \Sodium\randombytes_buf($bytes); } - if ($buf !== false) { + if (is_string($buf)) { if (RandomCompat_strlen($buf) === $bytes) { return $buf; } diff --git a/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php b/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php index 388da4dc..f78b2199 100644 --- a/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php +++ b/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php @@ -1,22 +1,22 @@ PHP_INT_MAX. PHP will cast it to * a float and we will lose some precision. + * + * @var int|float $range */ $range = $max - $min; @@ -115,6 +124,7 @@ if (!is_callable('random_int')) { * @ref http://3v4l.org/XX9r5 (64-bit) */ $bytes = PHP_INT_SIZE; + /** @var int $mask */ $mask = ~0; } else { @@ -129,16 +139,19 @@ if (!is_callable('random_int')) { } ++$bits; $range >>= 1; + /** @var int $mask */ $mask = $mask << 1 | 1; } $valueShift = $min; } + /** @var int $val */ $val = 0; /** * Now that we have our parameters set up, let's begin generating * random integers until one falls between $min and $max */ + /** @psalm-suppress RedundantCondition */ do { /** * The rejection probability is at most 0.5, so this corresponds @@ -169,6 +182,7 @@ if (!is_callable('random_int')) { for ($i = 0; $i < $bytes; ++$i) { $val |= ord($randomByteString[$i]) << ($i * 8); } + /** @var int $val */ /** * Apply mask diff --git a/vendor/paragonie/random_compat/other/build_phar.php b/vendor/paragonie/random_compat/other/build_phar.php deleted file mode 100644 index 70ef4b2e..00000000 --- a/vendor/paragonie/random_compat/other/build_phar.php +++ /dev/null @@ -1,57 +0,0 @@ -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); - } -} diff --git a/vendor/paragonie/random_compat/psalm-autoload.php b/vendor/paragonie/random_compat/psalm-autoload.php deleted file mode 100644 index d71d1b81..00000000 --- a/vendor/paragonie/random_compat/psalm-autoload.php +++ /dev/null @@ -1,9 +0,0 @@ - @@ -15,22 +15,22 @@ class BaseGenerator protected $generatedImage; /** - * @var integer + * @var array */ protected $color; /** - * @var integer + * @var array */ protected $backgroundColor; /** - * @var integer + * @var int */ protected $size; /** - * @var integer + * @var int */ protected $pixelRatio; @@ -42,14 +42,14 @@ class BaseGenerator /** * @var array */ - private $arrayOfSquare = array(); + private $arrayOfSquare = []; /** - * Set the image color + * Set the image color. * - * @param string|array $color The color in hexa (6 chars) or rgb array + * @param string|array $color The color in hexa (3 or 6 chars) or rgb array * - * @return this + * @return $this */ public function setColor($color) { @@ -63,11 +63,11 @@ class BaseGenerator } /** - * Set the image background color + * Set the image background color. * - * @param string|array $backgroundColor The color in hexa (6 chars) or rgb array + * @param string|array $backgroundColor The color in hexa (3 or 6 chars) or rgb array * - * @return this + * @return $this */ public function setBackgroundColor($backgroundColor) { @@ -80,27 +80,32 @@ class BaseGenerator return $this; } + /** + * @param array|string $color + * + * @return array + */ private function convertColor($color) { - $convertedColor = array(); if (is_array($color)) { - $convertedColor[0] = $color[0]; - $convertedColor[1] = $color[1]; - $convertedColor[2] = $color[2]; - } else { - if (false !== strpos($color, '#')) { - $color = substr($color, 1); - } - $convertedColor[0] = hexdec(substr($color, 0, 2)); - $convertedColor[1] = hexdec(substr($color, 2, 2)); - $convertedColor[2] = hexdec(substr($color, 4, 2)); + return $color; } - return $convertedColor; + if (preg_match('/^#?([a-z\d])([a-z\d])([a-z\d])$/i', $color, $matches)) { + $color = $matches[1].$matches[1]; + $color .= $matches[2].$matches[2]; + $color .= $matches[3].$matches[3]; + } + + preg_match('/#?([a-z\d]{2})([a-z\d]{2})([a-z\d]{2})$/i', $color, $matches); + + return array_map(function ($value) { + return hexdec($value); + }, array_slice($matches, 1, 3)); } /** - * Get the color + * Get the color. * * @return array */ @@ -109,9 +114,8 @@ class BaseGenerator return $this->color; } - /** - * Get the background color + * Get the background color. * * @return array */ @@ -121,48 +125,51 @@ class BaseGenerator } /** - * Convert the hash into an multidimensionnal array of boolean + * Convert the hash into an multidimensional array of boolean. * - * @return this + * @return $this */ private function convertHashToArrayOfBoolean() { preg_match_all('/(\w)(\w)/', $this->hash, $chars); + foreach ($chars[1] as $i => $char) { - if ($i % 3 == 0) { - $this->arrayOfSquare[$i/3][0] = $this->convertHexaToBoolean($char); - $this->arrayOfSquare[$i/3][4] = $this->convertHexaToBoolean($char); - } elseif ($i % 3 == 1) { - $this->arrayOfSquare[$i/3][1] = $this->convertHexaToBoolean($char); - $this->arrayOfSquare[$i/3][3] = $this->convertHexaToBoolean($char); - } else { - $this->arrayOfSquare[$i/3][2] = $this->convertHexaToBoolean($char); + $index = (int) ($i / 3); + $data = $this->convertHexaToBoolean($char); + + $items = [ + 0 => [0, 4], + 1 => [1, 3], + 2 => [2], + ]; + + foreach ($items[$i % 3] as $item) { + $this->arrayOfSquare[$index][$item] = $data; } - ksort($this->arrayOfSquare[$i/3]); + + ksort($this->arrayOfSquare[$index]); } - $this->color[0] = hexdec(array_pop($chars[1]))*16; - $this->color[1] = hexdec(array_pop($chars[1]))*16; - $this->color[2] = hexdec(array_pop($chars[1]))*16; + $this->color = array_map(function ($data) { + return hexdec($data) * 16; + }, array_reverse($chars[1])); return $this; } /** - * Convert an heaxecimal number into a boolean + * Convert an hexadecimal number into a boolean. * * @param string $hexa * - * @return boolean + * @return bool */ private function convertHexaToBoolean($hexa) { - return (bool) intval(round(hexdec($hexa)/10)); + return (bool) round(hexdec($hexa) / 10); } /** - * - * * @return array */ public function getArrayOfSquare() @@ -171,7 +178,7 @@ class BaseGenerator } /** - * Get the identicon string hash + * Get the identicon string hash. * * @return string */ @@ -181,16 +188,18 @@ class BaseGenerator } /** - * Generate a hash fron the original string + * Generate a hash from the original string. * * @param string $string * - * @return this + * @throws \Exception + * + * @return $this */ public function setString($string) { if (null === $string) { - throw new \Exception('The string cannot be null.'); + throw new Exception('The string cannot be null.'); } $this->hash = md5($string); @@ -201,11 +210,11 @@ class BaseGenerator } /** - * Set the image size + * Set the image size. * - * @param integer $size + * @param int $size * - * @return this + * @return $this */ public function setSize($size) { @@ -214,15 +223,15 @@ class BaseGenerator } $this->size = $size; - $this->pixelRatio = round($size / 5); + $this->pixelRatio = (int) round($size / 5); return $this; } /** - * Get the image size + * Get the image size. * - * @return integer + * @return int */ public function getSize() { @@ -230,9 +239,9 @@ class BaseGenerator } /** - * Get the pixel ratio + * Get the pixel ratio. * - * @return array + * @return int */ public function getPixelRatio() { diff --git a/vendor/yzalis/identicon/src/Identicon/Generator/GdGenerator.php b/vendor/yzalis/identicon/src/Identicon/Generator/GdGenerator.php index ef7b90ff..21ea9221 100644 --- a/vendor/yzalis/identicon/src/Identicon/Generator/GdGenerator.php +++ b/vendor/yzalis/identicon/src/Identicon/Generator/GdGenerator.php @@ -2,20 +2,34 @@ namespace Identicon\Generator; -use Identicon\Generator\GeneratorInterface; +use Exception; /** * @author Benjamin Laugueux */ class GdGenerator extends BaseGenerator implements GeneratorInterface { + /** + * GdGenerator constructor. + */ public function __construct() { - if (!extension_loaded('gd')) { - throw new \Exception('GD does not appear to be avaliable in your PHP installation. Please try another generator'); + if (!extension_loaded('gd') && !extension_loaded('ext-gd')) { + throw new Exception('GD does not appear to be available in your PHP installation. Please try another generator'); } } + /** + * @return string + */ + public function getMimeType() + { + return 'image/png'; + } + + /** + * @return $this + */ private function generateImage() { // prepare image @@ -30,7 +44,7 @@ class GdGenerator extends BaseGenerator implements GeneratorInterface imagefill($this->generatedImage, 0, 0, $background); } - // prepage color + // prepare color $rgbColor = $this->getColor(); $gdColor = imagecolorallocate($this->generatedImage, $rgbColor[0], $rgbColor[1], $rgbColor[2]); @@ -47,7 +61,7 @@ class GdGenerator extends BaseGenerator implements GeneratorInterface } /** - * {@inheritDoc} + * {@inheritdoc} */ public function getImageBinaryData($string, $size = null, $color = null, $backgroundColor = null) { @@ -60,7 +74,7 @@ class GdGenerator extends BaseGenerator implements GeneratorInterface } /** - * {@inheritDoc} + * {@inheritdoc} */ public function getImageResource($string, $size = null, $color = null, $backgroundColor = null) { diff --git a/vendor/yzalis/identicon/src/Identicon/Generator/GeneratorInterface.php b/vendor/yzalis/identicon/src/Identicon/Generator/GeneratorInterface.php index 78be7d48..c6e8e0e6 100644 --- a/vendor/yzalis/identicon/src/Identicon/Generator/GeneratorInterface.php +++ b/vendor/yzalis/identicon/src/Identicon/Generator/GeneratorInterface.php @@ -8,26 +8,36 @@ namespace Identicon\Generator; interface GeneratorInterface { /** - * - * - * @param string $string - * @param integer $size - * @param array|string $color - * @param array|string $backgroundColor + * @param string $string + * @param int $size + * @param array|string $color + * @param array|string $backgroundColor * * @return mixed */ - function getImageBinaryData($string, $size = null, $color = null, $backgroundColor = null); + public function getImageBinaryData($string, $size = null, $color = null, $backgroundColor = null); /** - * - * - * @param string $string - * @param integer $size - * @param array|string $color - * @param array|string $backgroundColor + * @param string $string + * @param int $size + * @param array|string $color + * @param array|string $backgroundColor * * @return string */ - function getImageResource($string, $size = null, $color = null, $backgroundColor = null); + public function getImageResource($string, $size = null, $color = null, $backgroundColor = null); + + /** + * Return the mime-type of this identicon. + * + * @return string + */ + public function getMimeType(); + + /** + * Return the color of the created identicon. + * + * @return array + */ + public function getColor(); } diff --git a/vendor/yzalis/identicon/src/Identicon/Generator/ImageMagickGenerator.php b/vendor/yzalis/identicon/src/Identicon/Generator/ImageMagickGenerator.php index f11c51d1..0bcd349b 100644 --- a/vendor/yzalis/identicon/src/Identicon/Generator/ImageMagickGenerator.php +++ b/vendor/yzalis/identicon/src/Identicon/Generator/ImageMagickGenerator.php @@ -2,20 +2,38 @@ namespace Identicon\Generator; -use Identicon\Generator\GeneratorInterface; +use Exception; +use ImagickDraw; +use ImagickPixel; /** * @author Francis Chuang */ class ImageMagickGenerator extends BaseGenerator implements GeneratorInterface { + /** + * ImageMagickGenerator constructor. + * + * @throws \Exception + */ public function __construct() { if (!extension_loaded('imagick')) { - throw new \Exception('ImageMagick does not appear to be avaliable in your PHP installation. Please try another generator'); + throw new Exception('ImageMagick does not appear to be avaliable in your PHP installation. Please try another generator'); } } + /** + * @return string + */ + public function getMimeType() + { + return 'image/png'; + } + + /** + * @return $this + */ private function generateImage() { $this->generatedImage = new \Imagick(); @@ -24,23 +42,23 @@ class ImageMagickGenerator extends BaseGenerator implements GeneratorInterface if (null === $rgbBackgroundColor) { $background = 'none'; } else { - $background = new \ImagickPixel("rgb($rgbBackgroundColor[0],$rgbBackgroundColor[1],$rgbBackgroundColor[2])"); + $background = new ImagickPixel("rgb($rgbBackgroundColor[0],$rgbBackgroundColor[1],$rgbBackgroundColor[2])"); } $this->generatedImage->newImage($this->pixelRatio * 5, $this->pixelRatio * 5, $background, 'png'); // prepare color $rgbColor = $this->getColor(); - $color = new \ImagickPixel("rgb($rgbColor[0],$rgbColor[1],$rgbColor[2])"); + $color = new ImagickPixel("rgb($rgbColor[0],$rgbColor[1],$rgbColor[2])"); - $draw = new \ImagickDraw(); + $draw = new ImagickDraw(); $draw->setFillColor($color); // draw the content foreach ($this->getArrayOfSquare() as $lineKey => $lineValue) { foreach ($lineValue as $colKey => $colValue) { if (true === $colValue) { - $draw->rectangle( $colKey * $this->pixelRatio, $lineKey * $this->pixelRatio, ($colKey + 1) * $this->pixelRatio, ($lineKey + 1) * $this->pixelRatio); + $draw->rectangle($colKey * $this->pixelRatio, $lineKey * $this->pixelRatio, ($colKey + 1) * $this->pixelRatio, ($lineKey + 1) * $this->pixelRatio); } } } @@ -51,7 +69,7 @@ class ImageMagickGenerator extends BaseGenerator implements GeneratorInterface } /** - * {@inheritDoc} + * {@inheritdoc} */ public function getImageBinaryData($string, $size = null, $color = null, $backgroundColor = null) { @@ -64,7 +82,7 @@ class ImageMagickGenerator extends BaseGenerator implements GeneratorInterface } /** - * {@inheritDoc} + * {@inheritdoc} */ public function getImageResource($string, $size = null, $color = null, $backgroundColor = null) { diff --git a/vendor/yzalis/identicon/src/Identicon/Generator/SvgGenerator.php b/vendor/yzalis/identicon/src/Identicon/Generator/SvgGenerator.php new file mode 100644 index 00000000..d654a951 --- /dev/null +++ b/vendor/yzalis/identicon/src/Identicon/Generator/SvgGenerator.php @@ -0,0 +1,88 @@ + + */ +class SvgGenerator extends BaseGenerator implements GeneratorInterface +{ + /** + * {@inheritdoc} + */ + public function getMimeType() + { + return 'image/svg+xml'; + } + + /** + * {@inheritdoc} + */ + public function getImageBinaryData($string, $size = null, $color = null, $backgroundColor = null) + { + return $this->getImageResource($string, $size, $color, $backgroundColor); + } + + /** + * {@inheritdoc} + */ + public function getImageResource($string, $size = null, $color = null, $backgroundColor = null) + { + $this + ->setString($string) + ->setSize($size) + ->setColor($color) + ->setBackgroundColor($backgroundColor) + ->_generateImage(); + + return $this->generatedImage; + } + + /** + * @return $this + */ + protected function _generateImage() + { + // prepare image + $w = $this->getPixelRatio() * 5; + $h = $this->getPixelRatio() * 5; + $svg = ''; + + $backgroundColor = '#FFFFFF'; + $rgbBackgroundColor = $this->getBackgroundColor(); + if (!is_null($rgbBackgroundColor)) { + $backgroundColor = $this->_toUnderstandableColor($rgbBackgroundColor); + } + $svg .= ''; + + $rgbColor = $this->_toUnderstandableColor($this->getColor()); + // draw content + foreach ($this->getArrayOfSquare() as $lineKey => $lineValue) { + foreach ($lineValue as $colKey => $colValue) { + if (true === $colValue) { + $svg .= ''; + } + } + } + + $svg .= ''; + + $this->generatedImage = $svg; + + return $this; + } + + /** + * @param array|string $color + * + * @return string + */ + protected function _toUnderstandableColor($color) + { + if (is_array($color)) { + return 'rgb('.implode(', ', $color).')'; + } + + return $color; + } +} diff --git a/vendor/yzalis/identicon/src/Identicon/Identicon.php b/vendor/yzalis/identicon/src/Identicon/Identicon.php index c78ccc34..08d32f5e 100644 --- a/vendor/yzalis/identicon/src/Identicon/Identicon.php +++ b/vendor/yzalis/identicon/src/Identicon/Identicon.php @@ -11,10 +11,15 @@ use Identicon\Generator\GeneratorInterface; class Identicon { /** - * @var GeneratorInterface + * @var \Identicon\Generator\GeneratorInterface */ private $generator; + /** + * Identicon constructor. + * + * @param \Identicon\Generator\GeneratorInterface|null $generator + */ public function __construct($generator = null) { if (null === $generator) { @@ -22,15 +27,14 @@ class Identicon } else { $this->generator = $generator; } - } /** - * Set the image generetor + * Set the image generator. * - * @param GeneratorInterface $generator + * @param \Identicon\Generator\GeneratorInterface $generator * - * @throws \Exception + * @return $this */ public function setGenerator(GeneratorInterface $generator) { @@ -40,26 +44,26 @@ class Identicon } /** - * Display an Identicon image + * Display an Identicon image. * - * @param string $string - * @param integer $size - * @param string $color - * @param string $backgroundColor + * @param string $string + * @param int $size + * @param string $color + * @param string $backgroundColor */ public function displayImage($string, $size = 64, $color = null, $backgroundColor = null) { - header("Content-Type: image/png"); + header('Content-Type: '.$this->generator->getMimeType()); echo $this->getImageData($string, $size, $color, $backgroundColor); } /** - * Get an Identicon PNG image data + * Get an Identicon PNG image data. * - * @param string $string - * @param integer $size - * @param string $color - * @param string $backgroundColor + * @param string $string + * @param int $size + * @param string $color + * @param string $backgroundColor * * @return string */ @@ -69,12 +73,12 @@ class Identicon } /** - * Get an Identicon PNG image resource + * Get an Identicon PNG image resource. * - * @param string $string - * @param integer $size - * @param string $color - * @param string $backgroundColor + * @param string $string + * @param int $size + * @param string $color + * @param string $backgroundColor * * @return string */ @@ -84,17 +88,36 @@ class Identicon } /** - * Get an Identicon PNG image data as base 64 encoded + * Get an Identicon PNG image data as base 64 encoded. * - * @param string $string - * @param integer $size - * @param string $color - * @param string $backgroundColor + * @param string $string + * @param int $size + * @param string $color + * @param string $backgroundColor * * @return string */ public function getImageDataUri($string, $size = 64, $color = null, $backgroundColor = null) { - return sprintf('data:image/png;base64,%s', base64_encode($this->getImageData($string, $size, $color, $backgroundColor))); + return sprintf('data:%s;base64,%s', $this->generator->getMimeType(), base64_encode($this->getImageData($string, $size, $color, $backgroundColor))); } + + /** + * Get the color of the Identicon + * + * Returns an array with RGB values of the Identicon's color. Colors may be NULL if no image has been generated + * so far (e.g., when calling the method on a new Identicon()). + * + * @return array + */ + public function getColor() + { + $colors = $this->generator->getColor(); + + return [ + "r" => $colors[0], + "g" => $colors[1], + "b" => $colors[2] + ]; + } } diff --git a/vendor/yzalis/identicon/src/autoload.php b/vendor/yzalis/identicon/src/autoload.php deleted file mode 100644 index 33f57e93..00000000 --- a/vendor/yzalis/identicon/src/autoload.php +++ /dev/null @@ -1,30 +0,0 @@ -