PATH:
home
/
lab2454c
/
healthvalidate.com
/
vendor
/
cloudinary
/
cloudinary_php
/
src
/
Utils
<?php /** * This file is part of the Cloudinary PHP package. * * (c) Cloudinary * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Cloudinary; use DateTime; use GuzzleHttp\Psr7\Uri; use Psr\Http\Message\UriInterface; /** * Class Utils * * @internal */ class Utils { const ALGO_SHA1 = 'sha1'; const ALGO_SHA256 = 'sha256'; const SHORT_URL_SIGNATURE_LENGTH = 8; const LONG_URL_SIGNATURE_LENGTH = 32; /** * Converts a float value to the string representation. * * @param mixed $value * * @return mixed|string */ public static function floatToString($value) { if (! is_float($value)) { return $value; } // Ensure that trailing decimal(.0) part is not cropped when float is provided. // e.g. float 1.0 should be returned as "1.0" and not "1" as it happens by default. if ($value - (int)$value === 0.0) { return sprintf("%.1f", $value); } $locale = localeconv(); $string = (string)$value; $string = str_replace($locale['decimal_point'], '.', $string); return $string; } /** * Helper method for converting boolean to string representation. * * @param mixed $value Candidate to convert. If not boolean, returned as is * * @return string */ public static function boolToString($value) { if (! is_bool($value)) { return $value; } return $value ? 'true' : 'false'; } /** * Helper method for converting boolean to int representation as string. * * @param mixed $value Candidate to convert. If not boolean, returned as is * * @return string */ public static function boolToIntString($value) { if (! is_bool($value)) { return $value; } return $value ? '1' : '0'; } /** * Helper method for normalizing values in string representation. * * @param mixed $value * * @return string */ public static function normalizeToString($value) { return self::floatToString(self::boolToString($value)); } /** * Converts bytes to kilobytes. * * @param int $bytes The input value to convert. * * @return int */ public static function bytesToKB($bytes) { return (int)ceil($bytes / 1024); } /** * Used for formatting number to string with sign (+/-). * * @param int $number The number to format * * @return string */ public static function formatSigned($number) { return $number > 0 ? "+$number" : (string)$number; } /** * Formats DateTime in ISO8601 format. * * @param DateTime|mixed $date The date to format. * * @return string The formatted date. */ public static function formatDate($date) { if ($date instanceof DateTime) { $date = $date->format(DateTime::ATOM); } return $date; } /** * Format a given signature hash into a string that will be used to sign a url * * @param string $signature The signature to format * @param int $length Number of characters to use from the start of the signature * * @return string */ public static function formatSimpleSignature($signature, $length) { return 's--' . substr($signature, 0, $length) . '--'; } /** * Formats a DateTime object to ISO8601 format (e.g., "2020-12-25"). * * @param DateTime $date * * @return string */ public static function toISO8601DateOnly(DateTime $date) { return $date->format('Y-m-d'); } /** * Creates a signature for content using specified secret. * * @param string $content * @param string $secret * @param bool $raw * @param string $algo * * @return string */ public static function sign($content, $secret, $raw = null, $algo = self::ALGO_SHA1) { return hash($algo, $content . $secret, $raw); } /** * Generates a random public ID string. * * @param string $prefix Provide unique prefix to avoid collisions, see uniqid for more details. * * @return bool|string * * @see uniqid */ public static function randomPublicId($prefix = '') { return substr(sha1(uniqid($prefix . mt_rand(), true)), 0, 16); } /** * Parses URL if applicable, otherwise returns false. * * @param string|UriInterface $url The URL to parse. * @param array|null $allowedSchemes Optional array of the allowed schemes. * * @return false|UriInterface */ public static function tryParseUrl($url, array $allowedSchemes = null) { if (! $url instanceof UriInterface) { if (! is_string($url)) { return false; } $urlParts = parse_url($url); if ($urlParts === false || count($urlParts) <= 1) { return false; } $url = Uri::fromParts($urlParts); } if ($allowedSchemes !== null && ! in_array($url->getScheme(), $allowedSchemes, false)) { return false; } return $url; } /** * Fixes array encoding. * * http_build_query encodes a simple array value: * ['arr' => [v0', 'v1', ... ,'vn1]] * as: * arr[0]=v0&arr[1]=v1&...&arr[n]=vn * * The issue with this encoding is that on the server written not in PHP, * this query is parsed as an associative array/hashmap/dictionary of form: * { * "arr": { * "0" : "v0", * "1" : "v1", * ... * "n" : "vn" * } * } * * To avoid this undesired behaviour, indices must be removed, so the query string would look like: * arr[]=v0&arr[]=v1&...&arr[]=vn * * @param array $params The query params to encode. * * @return string|string[]|null */ public static function buildHttpQuery($params) { return preg_replace("/%5B\d+%5D/", "%5B%5D", http_build_query($params)); } /** * Returns current UNIX time in seconds. * * @return int */ public static function unixTimeNow() { return time(); } /** * Recursively casts all params from array to suggested type * * @param array $params The array of params * * @return array */ public static function tryParseValues(array $params) { return array_map( static function ($value) { if (is_array($value)) { return static::tryParseValues($value); } if (is_string($value)) { if ($value === '[]') { return []; } return static::tryParseBoolean($value); } return $value; }, $params ); } /** * Parses boolean from string * * @param $value * * @return bool */ public static function tryParseBoolean($value) { if (! is_string($value)) { return $value; } if (ArrayUtils::inArrayI($value, ['true', 'false'])) { return stripos($value, 'true') === 0; } return $value; } /** * Convert an object to array. * * @param $object * * @return array */ public static function objectToArray($object) { $properties = (array)$object; $snakeCaseProperties = []; foreach ($properties as $key => $value) { $key = str_replace(["*", "\0"], "", $key); $key = StringUtils::camelCaseToSnakeCase($key); if ($value === null) { continue; } elseif (is_object($value)) { $snakeCaseProperties[$key] = self::objectToArray($value); } elseif (is_array($value)) { $subArray = []; foreach ($value as $subArrayValue) { $subArray[] = self::objectToArray($subArrayValue); } $snakeCaseProperties[$key] = $subArray; } else { $snakeCaseProperties[$key] = $value; } } return $snakeCaseProperties; } }
[-] SignatureVerifier.php
[edit]
[-] ClassUtils.php
[edit]
[+]
..
[-] StringUtils.php
[edit]
[-] Utils.php
[edit]
[-] ArrayUtils.php
[edit]
[-] JsonUtils.php
[edit]
[-] FileUtils.php
[edit]