Adding a lot of stuff that php-zip depends on
This commit is contained in:
parent
2b288abaff
commit
e4dda1792f
22
SafeBoxEncryptor/vendor/paragonie/random_compat/LICENSE
vendored
Normal file
22
SafeBoxEncryptor/vendor/paragonie/random_compat/LICENSE
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
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.
|
||||||
|
|
5
SafeBoxEncryptor/vendor/paragonie/random_compat/build-phar.sh
vendored
Normal file
5
SafeBoxEncryptor/vendor/paragonie/random_compat/build-phar.sh
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )
|
||||||
|
|
||||||
|
php -dphar.readonly=0 "$basedir/other/build_phar.php" $*
|
34
SafeBoxEncryptor/vendor/paragonie/random_compat/composer.json
vendored
Normal file
34
SafeBoxEncryptor/vendor/paragonie/random_compat/composer.json
vendored
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
"name": "paragonie/random_compat",
|
||||||
|
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||||
|
"keywords": [
|
||||||
|
"csprng",
|
||||||
|
"random",
|
||||||
|
"polyfill",
|
||||||
|
"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": ">= 7"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"vimeo/psalm": "^1",
|
||||||
|
"phpunit/phpunit": "4.*|5.*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||||
|
}
|
||||||
|
}
|
5
SafeBoxEncryptor/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey
vendored
Normal file
5
SafeBoxEncryptor/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PUBLIC KEY-----
|
||||||
|
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm
|
||||||
|
pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p
|
||||||
|
+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc
|
||||||
|
-----END PUBLIC KEY-----
|
11
SafeBoxEncryptor/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc
vendored
Normal file
11
SafeBoxEncryptor/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
-----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-----
|
32
SafeBoxEncryptor/vendor/paragonie/random_compat/lib/random.php
vendored
Normal file
32
SafeBoxEncryptor/vendor/paragonie/random_compat/lib/random.php
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Random_* Compatibility Library
|
||||||
|
* for using the new PHP 7 random_* API in PHP 5 projects
|
||||||
|
*
|
||||||
|
* @version 2.99.99
|
||||||
|
* @released 2018-06-06
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 - 2018 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// NOP
|
57
SafeBoxEncryptor/vendor/paragonie/random_compat/other/build_phar.php
vendored
Normal file
57
SafeBoxEncryptor/vendor/paragonie/random_compat/other/build_phar.php
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<?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);
|
||||||
|
}
|
||||||
|
}
|
9
SafeBoxEncryptor/vendor/paragonie/random_compat/psalm-autoload.php
vendored
Normal file
9
SafeBoxEncryptor/vendor/paragonie/random_compat/psalm-autoload.php
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?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);
|
19
SafeBoxEncryptor/vendor/paragonie/random_compat/psalm.xml
vendored
Normal file
19
SafeBoxEncryptor/vendor/paragonie/random_compat/psalm.xml
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?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" />
|
||||||
|
<InvalidReturnType errorLevel="info" />
|
||||||
|
</issueHandlers>
|
||||||
|
</psalm>
|
36
SafeBoxEncryptor/vendor/psr/http-message/CHANGELOG.md
vendored
Normal file
36
SafeBoxEncryptor/vendor/psr/http-message/CHANGELOG.md
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file, in reverse chronological order by release.
|
||||||
|
|
||||||
|
## 1.0.1 - 2016-08-06
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Nothing.
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
|
||||||
|
- Nothing.
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
|
||||||
|
- Nothing.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Updated all `@return self` annotation references in interfaces to use
|
||||||
|
`@return static`, which more closelly follows the semantics of the
|
||||||
|
specification.
|
||||||
|
- Updated the `MessageInterface::getHeaders()` return annotation to use the
|
||||||
|
value `string[][]`, indicating the format is a nested array of strings.
|
||||||
|
- Updated the `@link` annotation for `RequestInterface::withRequestTarget()`
|
||||||
|
to point to the correct section of RFC 7230.
|
||||||
|
- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation
|
||||||
|
to add the parameter name (`$uploadedFiles`).
|
||||||
|
- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()`
|
||||||
|
method to correctly reference the method parameter (it was referencing an
|
||||||
|
incorrect parameter name previously).
|
||||||
|
|
||||||
|
## 1.0.0 - 2016-05-18
|
||||||
|
|
||||||
|
Initial stable release; reflects accepted PSR-7 specification.
|
19
SafeBoxEncryptor/vendor/psr/http-message/LICENSE
vendored
Normal file
19
SafeBoxEncryptor/vendor/psr/http-message/LICENSE
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2014 PHP Framework Interoperability Group
|
||||||
|
|
||||||
|
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.
|
13
SafeBoxEncryptor/vendor/psr/http-message/README.md
vendored
Normal file
13
SafeBoxEncryptor/vendor/psr/http-message/README.md
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
PSR Http Message
|
||||||
|
================
|
||||||
|
|
||||||
|
This repository holds all interfaces/classes/traits related to
|
||||||
|
[PSR-7](http://www.php-fig.org/psr/psr-7/).
|
||||||
|
|
||||||
|
Note that this is not a HTTP message implementation of its own. It is merely an
|
||||||
|
interface that describes a HTTP message. See the specification for more details.
|
||||||
|
|
||||||
|
Usage
|
||||||
|
-----
|
||||||
|
|
||||||
|
We'll certainly need some stuff in here.
|
26
SafeBoxEncryptor/vendor/psr/http-message/composer.json
vendored
Normal file
26
SafeBoxEncryptor/vendor/psr/http-message/composer.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"description": "Common interface for HTTP messages",
|
||||||
|
"keywords": ["psr", "psr-7", "http", "http-message", "request", "response"],
|
||||||
|
"homepage": "https://github.com/php-fig/http-message",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "http://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
187
SafeBoxEncryptor/vendor/psr/http-message/src/MessageInterface.php
vendored
Normal file
187
SafeBoxEncryptor/vendor/psr/http-message/src/MessageInterface.php
vendored
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* HTTP messages consist of requests from a client to a server and responses
|
||||||
|
* from a server to a client. This interface defines the methods common to
|
||||||
|
* each.
|
||||||
|
*
|
||||||
|
* Messages are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*
|
||||||
|
* @link http://www.ietf.org/rfc/rfc7230.txt
|
||||||
|
* @link http://www.ietf.org/rfc/rfc7231.txt
|
||||||
|
*/
|
||||||
|
interface MessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieves the HTTP protocol version as a string.
|
||||||
|
*
|
||||||
|
* The string MUST contain only the HTTP version number (e.g., "1.1", "1.0").
|
||||||
|
*
|
||||||
|
* @return string HTTP protocol version.
|
||||||
|
*/
|
||||||
|
public function getProtocolVersion();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified HTTP protocol version.
|
||||||
|
*
|
||||||
|
* The version string MUST contain only the HTTP version number (e.g.,
|
||||||
|
* "1.1", "1.0").
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new protocol version.
|
||||||
|
*
|
||||||
|
* @param string $version HTTP protocol version
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withProtocolVersion($version);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves all message header values.
|
||||||
|
*
|
||||||
|
* The keys represent the header name as it will be sent over the wire, and
|
||||||
|
* each value is an array of strings associated with the header.
|
||||||
|
*
|
||||||
|
* // Represent the headers as a string
|
||||||
|
* foreach ($message->getHeaders() as $name => $values) {
|
||||||
|
* echo $name . ": " . implode(", ", $values);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* // Emit headers iteratively:
|
||||||
|
* foreach ($message->getHeaders() as $name => $values) {
|
||||||
|
* foreach ($values as $value) {
|
||||||
|
* header(sprintf('%s: %s', $name, $value), false);
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* While header names are not case-sensitive, getHeaders() will preserve the
|
||||||
|
* exact case in which headers were originally specified.
|
||||||
|
*
|
||||||
|
* @return string[][] Returns an associative array of the message's headers. Each
|
||||||
|
* key MUST be a header name, and each value MUST be an array of strings
|
||||||
|
* for that header.
|
||||||
|
*/
|
||||||
|
public function getHeaders();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a header exists by the given case-insensitive name.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @return bool Returns true if any header names match the given header
|
||||||
|
* name using a case-insensitive string comparison. Returns false if
|
||||||
|
* no matching header name is found in the message.
|
||||||
|
*/
|
||||||
|
public function hasHeader($name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a message header value by the given case-insensitive name.
|
||||||
|
*
|
||||||
|
* This method returns an array of all the header values of the given
|
||||||
|
* case-insensitive header name.
|
||||||
|
*
|
||||||
|
* If the header does not appear in the message, this method MUST return an
|
||||||
|
* empty array.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @return string[] An array of string values as provided for the given
|
||||||
|
* header. If the header does not appear in the message, this method MUST
|
||||||
|
* return an empty array.
|
||||||
|
*/
|
||||||
|
public function getHeader($name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a comma-separated string of the values for a single header.
|
||||||
|
*
|
||||||
|
* This method returns all of the header values of the given
|
||||||
|
* case-insensitive header name as a string concatenated together using
|
||||||
|
* a comma.
|
||||||
|
*
|
||||||
|
* NOTE: Not all header values may be appropriately represented using
|
||||||
|
* comma concatenation. For such headers, use getHeader() instead
|
||||||
|
* and supply your own delimiter when concatenating.
|
||||||
|
*
|
||||||
|
* If the header does not appear in the message, this method MUST return
|
||||||
|
* an empty string.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @return string A string of values as provided for the given header
|
||||||
|
* concatenated together using a comma. If the header does not appear in
|
||||||
|
* the message, this method MUST return an empty string.
|
||||||
|
*/
|
||||||
|
public function getHeaderLine($name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the provided value replacing the specified header.
|
||||||
|
*
|
||||||
|
* While header names are case-insensitive, the casing of the header will
|
||||||
|
* be preserved by this function, and returned from getHeaders().
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new and/or updated header and value.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name.
|
||||||
|
* @param string|string[] $value Header value(s).
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException for invalid header names or values.
|
||||||
|
*/
|
||||||
|
public function withHeader($name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified header appended with the given value.
|
||||||
|
*
|
||||||
|
* Existing values for the specified header will be maintained. The new
|
||||||
|
* value(s) will be appended to the existing list. If the header did not
|
||||||
|
* exist previously, it will be added.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new header and/or value.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name to add.
|
||||||
|
* @param string|string[] $value Header value(s).
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException for invalid header names or values.
|
||||||
|
*/
|
||||||
|
public function withAddedHeader($name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance without the specified header.
|
||||||
|
*
|
||||||
|
* Header resolution MUST be done without case-sensitivity.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that removes
|
||||||
|
* the named header.
|
||||||
|
*
|
||||||
|
* @param string $name Case-insensitive header field name to remove.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withoutHeader($name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the body of the message.
|
||||||
|
*
|
||||||
|
* @return StreamInterface Returns the body as a stream.
|
||||||
|
*/
|
||||||
|
public function getBody();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified message body.
|
||||||
|
*
|
||||||
|
* The body MUST be a StreamInterface object.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return a new instance that has the
|
||||||
|
* new body stream.
|
||||||
|
*
|
||||||
|
* @param StreamInterface $body Body.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException When the body is not valid.
|
||||||
|
*/
|
||||||
|
public function withBody(StreamInterface $body);
|
||||||
|
}
|
129
SafeBoxEncryptor/vendor/psr/http-message/src/RequestInterface.php
vendored
Normal file
129
SafeBoxEncryptor/vendor/psr/http-message/src/RequestInterface.php
vendored
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an outgoing, client-side request.
|
||||||
|
*
|
||||||
|
* Per the HTTP specification, this interface includes properties for
|
||||||
|
* each of the following:
|
||||||
|
*
|
||||||
|
* - Protocol version
|
||||||
|
* - HTTP method
|
||||||
|
* - URI
|
||||||
|
* - Headers
|
||||||
|
* - Message body
|
||||||
|
*
|
||||||
|
* During construction, implementations MUST attempt to set the Host header from
|
||||||
|
* a provided URI if no Host header is provided.
|
||||||
|
*
|
||||||
|
* Requests are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*/
|
||||||
|
interface RequestInterface extends MessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieves the message's request target.
|
||||||
|
*
|
||||||
|
* Retrieves the message's request-target either as it will appear (for
|
||||||
|
* clients), as it appeared at request (for servers), or as it was
|
||||||
|
* specified for the instance (see withRequestTarget()).
|
||||||
|
*
|
||||||
|
* In most cases, this will be the origin-form of the composed URI,
|
||||||
|
* unless a value was provided to the concrete implementation (see
|
||||||
|
* withRequestTarget() below).
|
||||||
|
*
|
||||||
|
* If no URI is available, and no request-target has been specifically
|
||||||
|
* provided, this method MUST return the string "/".
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getRequestTarget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specific request-target.
|
||||||
|
*
|
||||||
|
* If the request needs a non-origin-form request-target — e.g., for
|
||||||
|
* specifying an absolute-form, authority-form, or asterisk-form —
|
||||||
|
* this method may be used to create an instance with the specified
|
||||||
|
* request-target, verbatim.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* changed request target.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various
|
||||||
|
* request-target forms allowed in request messages)
|
||||||
|
* @param mixed $requestTarget
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withRequestTarget($requestTarget);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the HTTP method of the request.
|
||||||
|
*
|
||||||
|
* @return string Returns the request method.
|
||||||
|
*/
|
||||||
|
public function getMethod();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the provided HTTP method.
|
||||||
|
*
|
||||||
|
* While HTTP method names are typically all uppercase characters, HTTP
|
||||||
|
* method names are case-sensitive and thus implementations SHOULD NOT
|
||||||
|
* modify the given string.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* changed request method.
|
||||||
|
*
|
||||||
|
* @param string $method Case-sensitive method.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException for invalid HTTP methods.
|
||||||
|
*/
|
||||||
|
public function withMethod($method);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the URI instance.
|
||||||
|
*
|
||||||
|
* This method MUST return a UriInterface instance.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc3986#section-4.3
|
||||||
|
* @return UriInterface Returns a UriInterface instance
|
||||||
|
* representing the URI of the request.
|
||||||
|
*/
|
||||||
|
public function getUri();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an instance with the provided URI.
|
||||||
|
*
|
||||||
|
* This method MUST update the Host header of the returned request by
|
||||||
|
* default if the URI contains a host component. If the URI does not
|
||||||
|
* contain a host component, any pre-existing Host header MUST be carried
|
||||||
|
* over to the returned request.
|
||||||
|
*
|
||||||
|
* You can opt-in to preserving the original state of the Host header by
|
||||||
|
* setting `$preserveHost` to `true`. When `$preserveHost` is set to
|
||||||
|
* `true`, this method interacts with the Host header in the following ways:
|
||||||
|
*
|
||||||
|
* - If the Host header is missing or empty, and the new URI contains
|
||||||
|
* a host component, this method MUST update the Host header in the returned
|
||||||
|
* request.
|
||||||
|
* - If the Host header is missing or empty, and the new URI does not contain a
|
||||||
|
* host component, this method MUST NOT update the Host header in the returned
|
||||||
|
* request.
|
||||||
|
* - If a Host header is present and non-empty, this method MUST NOT update
|
||||||
|
* the Host header in the returned request.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* new UriInterface instance.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc3986#section-4.3
|
||||||
|
* @param UriInterface $uri New request URI to use.
|
||||||
|
* @param bool $preserveHost Preserve the original state of the Host header.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withUri(UriInterface $uri, $preserveHost = false);
|
||||||
|
}
|
68
SafeBoxEncryptor/vendor/psr/http-message/src/ResponseInterface.php
vendored
Normal file
68
SafeBoxEncryptor/vendor/psr/http-message/src/ResponseInterface.php
vendored
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an outgoing, server-side response.
|
||||||
|
*
|
||||||
|
* Per the HTTP specification, this interface includes properties for
|
||||||
|
* each of the following:
|
||||||
|
*
|
||||||
|
* - Protocol version
|
||||||
|
* - Status code and reason phrase
|
||||||
|
* - Headers
|
||||||
|
* - Message body
|
||||||
|
*
|
||||||
|
* Responses are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*/
|
||||||
|
interface ResponseInterface extends MessageInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Gets the response status code.
|
||||||
|
*
|
||||||
|
* The status code is a 3-digit integer result code of the server's attempt
|
||||||
|
* to understand and satisfy the request.
|
||||||
|
*
|
||||||
|
* @return int Status code.
|
||||||
|
*/
|
||||||
|
public function getStatusCode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified status code and, optionally, reason phrase.
|
||||||
|
*
|
||||||
|
* If no reason phrase is specified, implementations MAY choose to default
|
||||||
|
* to the RFC 7231 or IANA recommended reason phrase for the response's
|
||||||
|
* status code.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated status and reason phrase.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc7231#section-6
|
||||||
|
* @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
||||||
|
* @param int $code The 3-digit integer result code to set.
|
||||||
|
* @param string $reasonPhrase The reason phrase to use with the
|
||||||
|
* provided status code; if none is provided, implementations MAY
|
||||||
|
* use the defaults as suggested in the HTTP specification.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException For invalid status code arguments.
|
||||||
|
*/
|
||||||
|
public function withStatus($code, $reasonPhrase = '');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the response reason phrase associated with the status code.
|
||||||
|
*
|
||||||
|
* Because a reason phrase is not a required element in a response
|
||||||
|
* status line, the reason phrase value MAY be null. Implementations MAY
|
||||||
|
* choose to return the default RFC 7231 recommended reason phrase (or those
|
||||||
|
* listed in the IANA HTTP Status Code Registry) for the response's
|
||||||
|
* status code.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc7231#section-6
|
||||||
|
* @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
|
||||||
|
* @return string Reason phrase; must return an empty string if none present.
|
||||||
|
*/
|
||||||
|
public function getReasonPhrase();
|
||||||
|
}
|
261
SafeBoxEncryptor/vendor/psr/http-message/src/ServerRequestInterface.php
vendored
Normal file
261
SafeBoxEncryptor/vendor/psr/http-message/src/ServerRequestInterface.php
vendored
Normal file
|
@ -0,0 +1,261 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Representation of an incoming, server-side HTTP request.
|
||||||
|
*
|
||||||
|
* Per the HTTP specification, this interface includes properties for
|
||||||
|
* each of the following:
|
||||||
|
*
|
||||||
|
* - Protocol version
|
||||||
|
* - HTTP method
|
||||||
|
* - URI
|
||||||
|
* - Headers
|
||||||
|
* - Message body
|
||||||
|
*
|
||||||
|
* Additionally, it encapsulates all data as it has arrived to the
|
||||||
|
* application from the CGI and/or PHP environment, including:
|
||||||
|
*
|
||||||
|
* - The values represented in $_SERVER.
|
||||||
|
* - Any cookies provided (generally via $_COOKIE)
|
||||||
|
* - Query string arguments (generally via $_GET, or as parsed via parse_str())
|
||||||
|
* - Upload files, if any (as represented by $_FILES)
|
||||||
|
* - Deserialized body parameters (generally from $_POST)
|
||||||
|
*
|
||||||
|
* $_SERVER values MUST be treated as immutable, as they represent application
|
||||||
|
* state at the time of request; as such, no methods are provided to allow
|
||||||
|
* modification of those values. The other values provide such methods, as they
|
||||||
|
* can be restored from $_SERVER or the request body, and may need treatment
|
||||||
|
* during the application (e.g., body parameters may be deserialized based on
|
||||||
|
* content type).
|
||||||
|
*
|
||||||
|
* Additionally, this interface recognizes the utility of introspecting a
|
||||||
|
* request to derive and match additional parameters (e.g., via URI path
|
||||||
|
* matching, decrypting cookie values, deserializing non-form-encoded body
|
||||||
|
* content, matching authorization headers to users, etc). These parameters
|
||||||
|
* are stored in an "attributes" property.
|
||||||
|
*
|
||||||
|
* Requests are considered immutable; all methods that might change state MUST
|
||||||
|
* be implemented such that they retain the internal state of the current
|
||||||
|
* message and return an instance that contains the changed state.
|
||||||
|
*/
|
||||||
|
interface ServerRequestInterface extends RequestInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieve server parameters.
|
||||||
|
*
|
||||||
|
* Retrieves data related to the incoming request environment,
|
||||||
|
* typically derived from PHP's $_SERVER superglobal. The data IS NOT
|
||||||
|
* REQUIRED to originate from $_SERVER.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getServerParams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve cookies.
|
||||||
|
*
|
||||||
|
* Retrieves cookies sent by the client to the server.
|
||||||
|
*
|
||||||
|
* The data MUST be compatible with the structure of the $_COOKIE
|
||||||
|
* superglobal.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getCookieParams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified cookies.
|
||||||
|
*
|
||||||
|
* The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST
|
||||||
|
* be compatible with the structure of $_COOKIE. Typically, this data will
|
||||||
|
* be injected at instantiation.
|
||||||
|
*
|
||||||
|
* This method MUST NOT update the related Cookie header of the request
|
||||||
|
* instance, nor related values in the server params.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated cookie values.
|
||||||
|
*
|
||||||
|
* @param array $cookies Array of key/value pairs representing cookies.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withCookieParams(array $cookies);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve query string arguments.
|
||||||
|
*
|
||||||
|
* Retrieves the deserialized query string arguments, if any.
|
||||||
|
*
|
||||||
|
* Note: the query params might not be in sync with the URI or server
|
||||||
|
* params. If you need to ensure you are only getting the original
|
||||||
|
* values, you may need to parse the query string from `getUri()->getQuery()`
|
||||||
|
* or from the `QUERY_STRING` server param.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getQueryParams();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified query string arguments.
|
||||||
|
*
|
||||||
|
* These values SHOULD remain immutable over the course of the incoming
|
||||||
|
* request. They MAY be injected during instantiation, such as from PHP's
|
||||||
|
* $_GET superglobal, or MAY be derived from some other value such as the
|
||||||
|
* URI. In cases where the arguments are parsed from the URI, the data
|
||||||
|
* MUST be compatible with what PHP's parse_str() would return for
|
||||||
|
* purposes of how duplicate query parameters are handled, and how nested
|
||||||
|
* sets are handled.
|
||||||
|
*
|
||||||
|
* Setting query string arguments MUST NOT change the URI stored by the
|
||||||
|
* request, nor the values in the server params.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated query string arguments.
|
||||||
|
*
|
||||||
|
* @param array $query Array of query string arguments, typically from
|
||||||
|
* $_GET.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withQueryParams(array $query);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve normalized file upload data.
|
||||||
|
*
|
||||||
|
* This method returns upload metadata in a normalized tree, with each leaf
|
||||||
|
* an instance of Psr\Http\Message\UploadedFileInterface.
|
||||||
|
*
|
||||||
|
* These values MAY be prepared from $_FILES or the message body during
|
||||||
|
* instantiation, or MAY be injected via withUploadedFiles().
|
||||||
|
*
|
||||||
|
* @return array An array tree of UploadedFileInterface instances; an empty
|
||||||
|
* array MUST be returned if no data is present.
|
||||||
|
*/
|
||||||
|
public function getUploadedFiles();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new instance with the specified uploaded files.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated body parameters.
|
||||||
|
*
|
||||||
|
* @param array $uploadedFiles An array tree of UploadedFileInterface instances.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException if an invalid structure is provided.
|
||||||
|
*/
|
||||||
|
public function withUploadedFiles(array $uploadedFiles);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve any parameters provided in the request body.
|
||||||
|
*
|
||||||
|
* If the request Content-Type is either application/x-www-form-urlencoded
|
||||||
|
* or multipart/form-data, and the request method is POST, this method MUST
|
||||||
|
* return the contents of $_POST.
|
||||||
|
*
|
||||||
|
* Otherwise, this method may return any results of deserializing
|
||||||
|
* the request body content; as parsing returns structured content, the
|
||||||
|
* potential types MUST be arrays or objects only. A null value indicates
|
||||||
|
* the absence of body content.
|
||||||
|
*
|
||||||
|
* @return null|array|object The deserialized body parameters, if any.
|
||||||
|
* These will typically be an array or object.
|
||||||
|
*/
|
||||||
|
public function getParsedBody();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified body parameters.
|
||||||
|
*
|
||||||
|
* These MAY be injected during instantiation.
|
||||||
|
*
|
||||||
|
* If the request Content-Type is either application/x-www-form-urlencoded
|
||||||
|
* or multipart/form-data, and the request method is POST, use this method
|
||||||
|
* ONLY to inject the contents of $_POST.
|
||||||
|
*
|
||||||
|
* The data IS NOT REQUIRED to come from $_POST, but MUST be the results of
|
||||||
|
* deserializing the request body content. Deserialization/parsing returns
|
||||||
|
* structured data, and, as such, this method ONLY accepts arrays or objects,
|
||||||
|
* or a null value if nothing was available to parse.
|
||||||
|
*
|
||||||
|
* As an example, if content negotiation determines that the request data
|
||||||
|
* is a JSON payload, this method could be used to create a request
|
||||||
|
* instance with the deserialized parameters.
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated body parameters.
|
||||||
|
*
|
||||||
|
* @param null|array|object $data The deserialized body data. This will
|
||||||
|
* typically be in an array or object.
|
||||||
|
* @return static
|
||||||
|
* @throws \InvalidArgumentException if an unsupported argument type is
|
||||||
|
* provided.
|
||||||
|
*/
|
||||||
|
public function withParsedBody($data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve attributes derived from the request.
|
||||||
|
*
|
||||||
|
* The request "attributes" may be used to allow injection of any
|
||||||
|
* parameters derived from the request: e.g., the results of path
|
||||||
|
* match operations; the results of decrypting cookies; the results of
|
||||||
|
* deserializing non-form-encoded message bodies; etc. Attributes
|
||||||
|
* will be application and request specific, and CAN be mutable.
|
||||||
|
*
|
||||||
|
* @return array Attributes derived from the request.
|
||||||
|
*/
|
||||||
|
public function getAttributes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a single derived request attribute.
|
||||||
|
*
|
||||||
|
* Retrieves a single derived request attribute as described in
|
||||||
|
* getAttributes(). If the attribute has not been previously set, returns
|
||||||
|
* the default value as provided.
|
||||||
|
*
|
||||||
|
* This method obviates the need for a hasAttribute() method, as it allows
|
||||||
|
* specifying a default value to return if the attribute is not found.
|
||||||
|
*
|
||||||
|
* @see getAttributes()
|
||||||
|
* @param string $name The attribute name.
|
||||||
|
* @param mixed $default Default value to return if the attribute does not exist.
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getAttribute($name, $default = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified derived request attribute.
|
||||||
|
*
|
||||||
|
* This method allows setting a single derived request attribute as
|
||||||
|
* described in getAttributes().
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that has the
|
||||||
|
* updated attribute.
|
||||||
|
*
|
||||||
|
* @see getAttributes()
|
||||||
|
* @param string $name The attribute name.
|
||||||
|
* @param mixed $value The value of the attribute.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withAttribute($name, $value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance that removes the specified derived request attribute.
|
||||||
|
*
|
||||||
|
* This method allows removing a single derived request attribute as
|
||||||
|
* described in getAttributes().
|
||||||
|
*
|
||||||
|
* This method MUST be implemented in such a way as to retain the
|
||||||
|
* immutability of the message, and MUST return an instance that removes
|
||||||
|
* the attribute.
|
||||||
|
*
|
||||||
|
* @see getAttributes()
|
||||||
|
* @param string $name The attribute name.
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public function withoutAttribute($name);
|
||||||
|
}
|
158
SafeBoxEncryptor/vendor/psr/http-message/src/StreamInterface.php
vendored
Normal file
158
SafeBoxEncryptor/vendor/psr/http-message/src/StreamInterface.php
vendored
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes a data stream.
|
||||||
|
*
|
||||||
|
* Typically, an instance will wrap a PHP stream; this interface provides
|
||||||
|
* a wrapper around the most common operations, including serialization of
|
||||||
|
* the entire stream to a string.
|
||||||
|
*/
|
||||||
|
interface StreamInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Reads all data from the stream into a string, from the beginning to end.
|
||||||
|
*
|
||||||
|
* This method MUST attempt to seek to the beginning of the stream before
|
||||||
|
* reading data and read the stream until the end is reached.
|
||||||
|
*
|
||||||
|
* Warning: This could attempt to load a large amount of data into memory.
|
||||||
|
*
|
||||||
|
* This method MUST NOT raise an exception in order to conform with PHP's
|
||||||
|
* string casting operations.
|
||||||
|
*
|
||||||
|
* @see http://php.net/manual/en/language.oop5.magic.php#object.tostring
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the stream and any underlying resources.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function close();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Separates any underlying resources from the stream.
|
||||||
|
*
|
||||||
|
* After the stream has been detached, the stream is in an unusable state.
|
||||||
|
*
|
||||||
|
* @return resource|null Underlying PHP stream, if any
|
||||||
|
*/
|
||||||
|
public function detach();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the size of the stream if known.
|
||||||
|
*
|
||||||
|
* @return int|null Returns the size in bytes if known, or null if unknown.
|
||||||
|
*/
|
||||||
|
public function getSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current position of the file read/write pointer
|
||||||
|
*
|
||||||
|
* @return int Position of the file pointer
|
||||||
|
* @throws \RuntimeException on error.
|
||||||
|
*/
|
||||||
|
public function tell();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the stream is at the end of the stream.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function eof();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the stream is seekable.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isSeekable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Seek to a position in the stream.
|
||||||
|
*
|
||||||
|
* @link http://www.php.net/manual/en/function.fseek.php
|
||||||
|
* @param int $offset Stream offset
|
||||||
|
* @param int $whence Specifies how the cursor position will be calculated
|
||||||
|
* based on the seek offset. Valid values are identical to the built-in
|
||||||
|
* PHP $whence values for `fseek()`. SEEK_SET: Set position equal to
|
||||||
|
* offset bytes SEEK_CUR: Set position to current location plus offset
|
||||||
|
* SEEK_END: Set position to end-of-stream plus offset.
|
||||||
|
* @throws \RuntimeException on failure.
|
||||||
|
*/
|
||||||
|
public function seek($offset, $whence = SEEK_SET);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Seek to the beginning of the stream.
|
||||||
|
*
|
||||||
|
* If the stream is not seekable, this method will raise an exception;
|
||||||
|
* otherwise, it will perform a seek(0).
|
||||||
|
*
|
||||||
|
* @see seek()
|
||||||
|
* @link http://www.php.net/manual/en/function.fseek.php
|
||||||
|
* @throws \RuntimeException on failure.
|
||||||
|
*/
|
||||||
|
public function rewind();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the stream is writable.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isWritable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write data to the stream.
|
||||||
|
*
|
||||||
|
* @param string $string The string that is to be written.
|
||||||
|
* @return int Returns the number of bytes written to the stream.
|
||||||
|
* @throws \RuntimeException on failure.
|
||||||
|
*/
|
||||||
|
public function write($string);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the stream is readable.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isReadable();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read data from the stream.
|
||||||
|
*
|
||||||
|
* @param int $length Read up to $length bytes from the object and return
|
||||||
|
* them. Fewer than $length bytes may be returned if underlying stream
|
||||||
|
* call returns fewer bytes.
|
||||||
|
* @return string Returns the data read from the stream, or an empty string
|
||||||
|
* if no bytes are available.
|
||||||
|
* @throws \RuntimeException if an error occurs.
|
||||||
|
*/
|
||||||
|
public function read($length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the remaining contents in a string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
* @throws \RuntimeException if unable to read or an error occurs while
|
||||||
|
* reading.
|
||||||
|
*/
|
||||||
|
public function getContents();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get stream metadata as an associative array or retrieve a specific key.
|
||||||
|
*
|
||||||
|
* The keys returned are identical to the keys returned from PHP's
|
||||||
|
* stream_get_meta_data() function.
|
||||||
|
*
|
||||||
|
* @link http://php.net/manual/en/function.stream-get-meta-data.php
|
||||||
|
* @param string $key Specific metadata to retrieve.
|
||||||
|
* @return array|mixed|null Returns an associative array if no key is
|
||||||
|
* provided. Returns a specific key value if a key is provided and the
|
||||||
|
* value is found, or null if the key is not found.
|
||||||
|
*/
|
||||||
|
public function getMetadata($key = null);
|
||||||
|
}
|
123
SafeBoxEncryptor/vendor/psr/http-message/src/UploadedFileInterface.php
vendored
Normal file
123
SafeBoxEncryptor/vendor/psr/http-message/src/UploadedFileInterface.php
vendored
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value object representing a file uploaded through an HTTP request.
|
||||||
|
*
|
||||||
|
* Instances of this interface are considered immutable; all methods that
|
||||||
|
* might change state MUST be implemented such that they retain the internal
|
||||||
|
* state of the current instance and return an instance that contains the
|
||||||
|
* changed state.
|
||||||
|
*/
|
||||||
|
interface UploadedFileInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieve a stream representing the uploaded file.
|
||||||
|
*
|
||||||
|
* This method MUST return a StreamInterface instance, representing the
|
||||||
|
* uploaded file. The purpose of this method is to allow utilizing native PHP
|
||||||
|
* stream functionality to manipulate the file upload, such as
|
||||||
|
* stream_copy_to_stream() (though the result will need to be decorated in a
|
||||||
|
* native PHP stream wrapper to work with such functions).
|
||||||
|
*
|
||||||
|
* If the moveTo() method has been called previously, this method MUST raise
|
||||||
|
* an exception.
|
||||||
|
*
|
||||||
|
* @return StreamInterface Stream representation of the uploaded file.
|
||||||
|
* @throws \RuntimeException in cases when no stream is available or can be
|
||||||
|
* created.
|
||||||
|
*/
|
||||||
|
public function getStream();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move the uploaded file to a new location.
|
||||||
|
*
|
||||||
|
* Use this method as an alternative to move_uploaded_file(). This method is
|
||||||
|
* guaranteed to work in both SAPI and non-SAPI environments.
|
||||||
|
* Implementations must determine which environment they are in, and use the
|
||||||
|
* appropriate method (move_uploaded_file(), rename(), or a stream
|
||||||
|
* operation) to perform the operation.
|
||||||
|
*
|
||||||
|
* $targetPath may be an absolute path, or a relative path. If it is a
|
||||||
|
* relative path, resolution should be the same as used by PHP's rename()
|
||||||
|
* function.
|
||||||
|
*
|
||||||
|
* The original file or stream MUST be removed on completion.
|
||||||
|
*
|
||||||
|
* If this method is called more than once, any subsequent calls MUST raise
|
||||||
|
* an exception.
|
||||||
|
*
|
||||||
|
* When used in an SAPI environment where $_FILES is populated, when writing
|
||||||
|
* files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be
|
||||||
|
* used to ensure permissions and upload status are verified correctly.
|
||||||
|
*
|
||||||
|
* If you wish to move to a stream, use getStream(), as SAPI operations
|
||||||
|
* cannot guarantee writing to stream destinations.
|
||||||
|
*
|
||||||
|
* @see http://php.net/is_uploaded_file
|
||||||
|
* @see http://php.net/move_uploaded_file
|
||||||
|
* @param string $targetPath Path to which to move the uploaded file.
|
||||||
|
* @throws \InvalidArgumentException if the $targetPath specified is invalid.
|
||||||
|
* @throws \RuntimeException on any error during the move operation, or on
|
||||||
|
* the second or subsequent call to the method.
|
||||||
|
*/
|
||||||
|
public function moveTo($targetPath);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the file size.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "size" key of
|
||||||
|
* the file in the $_FILES array if available, as PHP calculates this based
|
||||||
|
* on the actual size transmitted.
|
||||||
|
*
|
||||||
|
* @return int|null The file size in bytes or null if unknown.
|
||||||
|
*/
|
||||||
|
public function getSize();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the error associated with the uploaded file.
|
||||||
|
*
|
||||||
|
* The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.
|
||||||
|
*
|
||||||
|
* If the file was uploaded successfully, this method MUST return
|
||||||
|
* UPLOAD_ERR_OK.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "error" key of
|
||||||
|
* the file in the $_FILES array.
|
||||||
|
*
|
||||||
|
* @see http://php.net/manual/en/features.file-upload.errors.php
|
||||||
|
* @return int One of PHP's UPLOAD_ERR_XXX constants.
|
||||||
|
*/
|
||||||
|
public function getError();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the filename sent by the client.
|
||||||
|
*
|
||||||
|
* Do not trust the value returned by this method. A client could send
|
||||||
|
* a malicious filename with the intention to corrupt or hack your
|
||||||
|
* application.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "name" key of
|
||||||
|
* the file in the $_FILES array.
|
||||||
|
*
|
||||||
|
* @return string|null The filename sent by the client or null if none
|
||||||
|
* was provided.
|
||||||
|
*/
|
||||||
|
public function getClientFilename();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the media type sent by the client.
|
||||||
|
*
|
||||||
|
* Do not trust the value returned by this method. A client could send
|
||||||
|
* a malicious media type with the intention to corrupt or hack your
|
||||||
|
* application.
|
||||||
|
*
|
||||||
|
* Implementations SHOULD return the value stored in the "type" key of
|
||||||
|
* the file in the $_FILES array.
|
||||||
|
*
|
||||||
|
* @return string|null The media type sent by the client or null if none
|
||||||
|
* was provided.
|
||||||
|
*/
|
||||||
|
public function getClientMediaType();
|
||||||
|
}
|
323
SafeBoxEncryptor/vendor/psr/http-message/src/UriInterface.php
vendored
Normal file
323
SafeBoxEncryptor/vendor/psr/http-message/src/UriInterface.php
vendored
Normal file
|
@ -0,0 +1,323 @@
|
||||||
|
<?php
|
||||||
|
namespace Psr\Http\Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Value object representing a URI.
|
||||||
|
*
|
||||||
|
* This interface is meant to represent URIs according to RFC 3986 and to
|
||||||
|
* provide methods for most common operations. Additional functionality for
|
||||||
|
* working with URIs can be provided on top of the interface or externally.
|
||||||
|
* Its primary use is for HTTP requests, but may also be used in other
|
||||||
|
* contexts.
|
||||||
|
*
|
||||||
|
* Instances of this interface are considered immutable; all methods that
|
||||||
|
* might change state MUST be implemented such that they retain the internal
|
||||||
|
* state of the current instance and return an instance that contains the
|
||||||
|
* changed state.
|
||||||
|
*
|
||||||
|
* Typically the Host header will be also be present in the request message.
|
||||||
|
* For server-side requests, the scheme will typically be discoverable in the
|
||||||
|
* server parameters.
|
||||||
|
*
|
||||||
|
* @link http://tools.ietf.org/html/rfc3986 (the URI specification)
|
||||||
|
*/
|
||||||
|
interface UriInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Retrieve the scheme component of the URI.
|
||||||
|
*
|
||||||
|
* If no scheme is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The value returned MUST be normalized to lowercase, per RFC 3986
|
||||||
|
* Section 3.1.
|
||||||
|
*
|
||||||
|
* The trailing ":" character is not part of the scheme and MUST NOT be
|
||||||
|
* added.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.1
|
||||||
|
* @return string The URI scheme.
|
||||||
|
*/
|
||||||
|
public function getScheme();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the authority component of the URI.
|
||||||
|
*
|
||||||
|
* If no authority information is present, this method MUST return an empty
|
||||||
|
* string.
|
||||||
|
*
|
||||||
|
* The authority syntax of the URI is:
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* [user-info@]host[:port]
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* If the port component is not set or is the standard port for the current
|
||||||
|
* scheme, it SHOULD NOT be included.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.2
|
||||||
|
* @return string The URI authority, in "[user-info@]host[:port]" format.
|
||||||
|
*/
|
||||||
|
public function getAuthority();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the user information component of the URI.
|
||||||
|
*
|
||||||
|
* If no user information is present, this method MUST return an empty
|
||||||
|
* string.
|
||||||
|
*
|
||||||
|
* If a user is present in the URI, this will return that value;
|
||||||
|
* additionally, if the password is also present, it will be appended to the
|
||||||
|
* user value, with a colon (":") separating the values.
|
||||||
|
*
|
||||||
|
* The trailing "@" character is not part of the user information and MUST
|
||||||
|
* NOT be added.
|
||||||
|
*
|
||||||
|
* @return string The URI user information, in "username[:password]" format.
|
||||||
|
*/
|
||||||
|
public function getUserInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the host component of the URI.
|
||||||
|
*
|
||||||
|
* If no host is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The value returned MUST be normalized to lowercase, per RFC 3986
|
||||||
|
* Section 3.2.2.
|
||||||
|
*
|
||||||
|
* @see http://tools.ietf.org/html/rfc3986#section-3.2.2
|
||||||
|
* @return string The URI host.
|
||||||
|
*/
|
||||||
|
public function getHost();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the port component of the URI.
|
||||||
|
*
|
||||||
|
* If a port is present, and it is non-standard for the current scheme,
|
||||||
|
* this method MUST return it as an integer. If the port is the standard port
|
||||||
|
* used with the current scheme, this method SHOULD return null.
|
||||||
|
*
|
||||||
|
* If no port is present, and no scheme is present, this method MUST return
|
||||||
|
* a null value.
|
||||||
|
*
|
||||||
|
* If no port is present, but a scheme is present, this method MAY return
|
||||||
|
* the standard port for that scheme, but SHOULD return null.
|
||||||
|
*
|
||||||
|
* @return null|int The URI port.
|
||||||
|
*/
|
||||||
|
public function getPort();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the path component of the URI.
|
||||||
|
*
|
||||||
|
* The path can either be empty or absolute (starting with a slash) or
|
||||||
|
* rootless (not starting with a slash). Implementations MUST support all
|
||||||
|
* three syntaxes.
|
||||||
|
*
|
||||||
|
* Normally, the empty path "" and absolute path "/" are considered equal as
|
||||||
|
* defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically
|
||||||
|
* do this normalization because in contexts with a trimmed base path, e.g.
|
||||||
|
* the front controller, this difference becomes significant. It's the task
|
||||||
|
* of the user to handle both "" and "/".
|
||||||
|
*
|
||||||
|
* The value returned MUST be percent-encoded, but MUST NOT double-encode
|
||||||
|
* any characters. To determine what characters to encode, please refer to
|
||||||
|
* RFC 3986, Sections 2 and 3.3.
|
||||||
|
*
|
||||||
|
* As an example, if the value should include a slash ("/") not intended as
|
||||||
|
* delimiter between path segments, that value MUST be passed in encoded
|
||||||
|
* form (e.g., "%2F") to the instance.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-2
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.3
|
||||||
|
* @return string The URI path.
|
||||||
|
*/
|
||||||
|
public function getPath();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the query string of the URI.
|
||||||
|
*
|
||||||
|
* If no query string is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The leading "?" character is not part of the query and MUST NOT be
|
||||||
|
* added.
|
||||||
|
*
|
||||||
|
* The value returned MUST be percent-encoded, but MUST NOT double-encode
|
||||||
|
* any characters. To determine what characters to encode, please refer to
|
||||||
|
* RFC 3986, Sections 2 and 3.4.
|
||||||
|
*
|
||||||
|
* As an example, if a value in a key/value pair of the query string should
|
||||||
|
* include an ampersand ("&") not intended as a delimiter between values,
|
||||||
|
* that value MUST be passed in encoded form (e.g., "%26") to the instance.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-2
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.4
|
||||||
|
* @return string The URI query string.
|
||||||
|
*/
|
||||||
|
public function getQuery();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the fragment component of the URI.
|
||||||
|
*
|
||||||
|
* If no fragment is present, this method MUST return an empty string.
|
||||||
|
*
|
||||||
|
* The leading "#" character is not part of the fragment and MUST NOT be
|
||||||
|
* added.
|
||||||
|
*
|
||||||
|
* The value returned MUST be percent-encoded, but MUST NOT double-encode
|
||||||
|
* any characters. To determine what characters to encode, please refer to
|
||||||
|
* RFC 3986, Sections 2 and 3.5.
|
||||||
|
*
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-2
|
||||||
|
* @see https://tools.ietf.org/html/rfc3986#section-3.5
|
||||||
|
* @return string The URI fragment.
|
||||||
|
*/
|
||||||
|
public function getFragment();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified scheme.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified scheme.
|
||||||
|
*
|
||||||
|
* Implementations MUST support the schemes "http" and "https" case
|
||||||
|
* insensitively, and MAY accommodate other schemes if required.
|
||||||
|
*
|
||||||
|
* An empty scheme is equivalent to removing the scheme.
|
||||||
|
*
|
||||||
|
* @param string $scheme The scheme to use with the new instance.
|
||||||
|
* @return static A new instance with the specified scheme.
|
||||||
|
* @throws \InvalidArgumentException for invalid or unsupported schemes.
|
||||||
|
*/
|
||||||
|
public function withScheme($scheme);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified user information.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified user information.
|
||||||
|
*
|
||||||
|
* Password is optional, but the user information MUST include the
|
||||||
|
* user; an empty string for the user is equivalent to removing user
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* @param string $user The user name to use for authority.
|
||||||
|
* @param null|string $password The password associated with $user.
|
||||||
|
* @return static A new instance with the specified user information.
|
||||||
|
*/
|
||||||
|
public function withUserInfo($user, $password = null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified host.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified host.
|
||||||
|
*
|
||||||
|
* An empty host value is equivalent to removing the host.
|
||||||
|
*
|
||||||
|
* @param string $host The hostname to use with the new instance.
|
||||||
|
* @return static A new instance with the specified host.
|
||||||
|
* @throws \InvalidArgumentException for invalid hostnames.
|
||||||
|
*/
|
||||||
|
public function withHost($host);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified port.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified port.
|
||||||
|
*
|
||||||
|
* Implementations MUST raise an exception for ports outside the
|
||||||
|
* established TCP and UDP port ranges.
|
||||||
|
*
|
||||||
|
* A null value provided for the port is equivalent to removing the port
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* @param null|int $port The port to use with the new instance; a null value
|
||||||
|
* removes the port information.
|
||||||
|
* @return static A new instance with the specified port.
|
||||||
|
* @throws \InvalidArgumentException for invalid ports.
|
||||||
|
*/
|
||||||
|
public function withPort($port);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified path.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified path.
|
||||||
|
*
|
||||||
|
* The path can either be empty or absolute (starting with a slash) or
|
||||||
|
* rootless (not starting with a slash). Implementations MUST support all
|
||||||
|
* three syntaxes.
|
||||||
|
*
|
||||||
|
* If the path is intended to be domain-relative rather than path relative then
|
||||||
|
* it must begin with a slash ("/"). Paths not starting with a slash ("/")
|
||||||
|
* are assumed to be relative to some base path known to the application or
|
||||||
|
* consumer.
|
||||||
|
*
|
||||||
|
* Users can provide both encoded and decoded path characters.
|
||||||
|
* Implementations ensure the correct encoding as outlined in getPath().
|
||||||
|
*
|
||||||
|
* @param string $path The path to use with the new instance.
|
||||||
|
* @return static A new instance with the specified path.
|
||||||
|
* @throws \InvalidArgumentException for invalid paths.
|
||||||
|
*/
|
||||||
|
public function withPath($path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified query string.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified query string.
|
||||||
|
*
|
||||||
|
* Users can provide both encoded and decoded query characters.
|
||||||
|
* Implementations ensure the correct encoding as outlined in getQuery().
|
||||||
|
*
|
||||||
|
* An empty query string value is equivalent to removing the query string.
|
||||||
|
*
|
||||||
|
* @param string $query The query string to use with the new instance.
|
||||||
|
* @return static A new instance with the specified query string.
|
||||||
|
* @throws \InvalidArgumentException for invalid query strings.
|
||||||
|
*/
|
||||||
|
public function withQuery($query);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance with the specified URI fragment.
|
||||||
|
*
|
||||||
|
* This method MUST retain the state of the current instance, and return
|
||||||
|
* an instance that contains the specified URI fragment.
|
||||||
|
*
|
||||||
|
* Users can provide both encoded and decoded fragment characters.
|
||||||
|
* Implementations ensure the correct encoding as outlined in getFragment().
|
||||||
|
*
|
||||||
|
* An empty fragment value is equivalent to removing the fragment.
|
||||||
|
*
|
||||||
|
* @param string $fragment The fragment to use with the new instance.
|
||||||
|
* @return static A new instance with the specified fragment.
|
||||||
|
*/
|
||||||
|
public function withFragment($fragment);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the string representation as a URI reference.
|
||||||
|
*
|
||||||
|
* Depending on which components of the URI are present, the resulting
|
||||||
|
* string is either a full URI or relative reference according to RFC 3986,
|
||||||
|
* Section 4.1. The method concatenates the various components of the URI,
|
||||||
|
* using the appropriate delimiters:
|
||||||
|
*
|
||||||
|
* - If a scheme is present, it MUST be suffixed by ":".
|
||||||
|
* - If an authority is present, it MUST be prefixed by "//".
|
||||||
|
* - The path can be concatenated without delimiters. But there are two
|
||||||
|
* cases where the path has to be adjusted to make the URI reference
|
||||||
|
* valid as PHP does not allow to throw an exception in __toString():
|
||||||
|
* - If the path is rootless and an authority is present, the path MUST
|
||||||
|
* be prefixed by "/".
|
||||||
|
* - If the path is starting with more than one "/" and no authority is
|
||||||
|
* present, the starting slashes MUST be reduced to one.
|
||||||
|
* - If a query is present, it MUST be prefixed by "?".
|
||||||
|
* - If a fragment is present, it MUST be prefixed by "#".
|
||||||
|
*
|
||||||
|
* @see http://tools.ietf.org/html/rfc3986#section-4.1
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function __toString();
|
||||||
|
}
|
79
SafeBoxEncryptor/vendor/symfony/finder/CHANGELOG.md
vendored
Normal file
79
SafeBoxEncryptor/vendor/symfony/finder/CHANGELOG.md
vendored
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
CHANGELOG
|
||||||
|
=========
|
||||||
|
|
||||||
|
5.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added `$useNaturalSort` argument to `Finder::sortByName()`
|
||||||
|
|
||||||
|
4.3.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added Finder::ignoreVCSIgnored() to ignore files based on rules listed in .gitignore
|
||||||
|
|
||||||
|
4.2.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added $useNaturalSort option to Finder::sortByName() method
|
||||||
|
* the `Finder::sortByName()` method will have a new `$useNaturalSort`
|
||||||
|
argument in version 5.0, not defining it is deprecated
|
||||||
|
* added `Finder::reverseSorting()` to reverse the sorting
|
||||||
|
|
||||||
|
4.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* removed `ExceptionInterface`
|
||||||
|
* removed `Symfony\Component\Finder\Iterator\FilterIterator`
|
||||||
|
|
||||||
|
3.4.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* deprecated `Symfony\Component\Finder\Iterator\FilterIterator`
|
||||||
|
* added Finder::hasResults() method to check if any results were found
|
||||||
|
|
||||||
|
3.3.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added double-star matching to Glob::toRegex()
|
||||||
|
|
||||||
|
3.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* removed deprecated classes
|
||||||
|
|
||||||
|
2.8.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* deprecated adapters and related classes
|
||||||
|
|
||||||
|
2.5.0
|
||||||
|
-----
|
||||||
|
* added support for GLOB_BRACE in the paths passed to Finder::in()
|
||||||
|
|
||||||
|
2.3.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added a way to ignore unreadable directories (via Finder::ignoreUnreadableDirs())
|
||||||
|
* unified the way subfolders that are not executable are handled by always throwing an AccessDeniedException exception
|
||||||
|
|
||||||
|
2.2.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added Finder::path() and Finder::notPath() methods
|
||||||
|
* added finder adapters to improve performance on specific platforms
|
||||||
|
* added support for wildcard characters (glob patterns) in the paths passed
|
||||||
|
to Finder::in()
|
||||||
|
|
||||||
|
2.1.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* added Finder::sortByAccessedTime(), Finder::sortByChangedTime(), and
|
||||||
|
Finder::sortByModifiedTime()
|
||||||
|
* added Countable to Finder
|
||||||
|
* added support for an array of directories as an argument to
|
||||||
|
Finder::exclude()
|
||||||
|
* added searching based on the file content via Finder::contains() and
|
||||||
|
Finder::notContains()
|
||||||
|
* added support for the != operator in the Comparator
|
||||||
|
* [BC BREAK] filter expressions (used for file name and content) are no more
|
||||||
|
considered as regexps but glob patterns when they are enclosed in '*' or '?'
|
91
SafeBoxEncryptor/vendor/symfony/finder/Comparator/Comparator.php
vendored
Normal file
91
SafeBoxEncryptor/vendor/symfony/finder/Comparator/Comparator.php
vendored
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
<?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\Component\Finder\Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Comparator.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class Comparator
|
||||||
|
{
|
||||||
|
private $target;
|
||||||
|
private $operator = '==';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the target value.
|
||||||
|
*
|
||||||
|
* @return string The target value
|
||||||
|
*/
|
||||||
|
public function getTarget()
|
||||||
|
{
|
||||||
|
return $this->target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTarget(string $target)
|
||||||
|
{
|
||||||
|
$this->target = $target;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the comparison operator.
|
||||||
|
*
|
||||||
|
* @return string The operator
|
||||||
|
*/
|
||||||
|
public function getOperator()
|
||||||
|
{
|
||||||
|
return $this->operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the comparison operator.
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function setOperator(string $operator)
|
||||||
|
{
|
||||||
|
if ('' === $operator) {
|
||||||
|
$operator = '==';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!\in_array($operator, ['>', '<', '>=', '<=', '==', '!='])) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('Invalid operator "%s".', $operator));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->operator = $operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests against the target.
|
||||||
|
*
|
||||||
|
* @param mixed $test A test value
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function test($test)
|
||||||
|
{
|
||||||
|
switch ($this->operator) {
|
||||||
|
case '>':
|
||||||
|
return $test > $this->target;
|
||||||
|
case '>=':
|
||||||
|
return $test >= $this->target;
|
||||||
|
case '<':
|
||||||
|
return $test < $this->target;
|
||||||
|
case '<=':
|
||||||
|
return $test <= $this->target;
|
||||||
|
case '!=':
|
||||||
|
return $test != $this->target;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $test == $this->target;
|
||||||
|
}
|
||||||
|
}
|
51
SafeBoxEncryptor/vendor/symfony/finder/Comparator/DateComparator.php
vendored
Normal file
51
SafeBoxEncryptor/vendor/symfony/finder/Comparator/DateComparator.php
vendored
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
<?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\Component\Finder\Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DateCompare compiles date comparisons.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class DateComparator extends Comparator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $test A comparison string
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException If the test is not understood
|
||||||
|
*/
|
||||||
|
public function __construct(string $test)
|
||||||
|
{
|
||||||
|
if (!preg_match('#^\s*(==|!=|[<>]=?|after|since|before|until)?\s*(.+?)\s*$#i', $test, $matches)) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a date test.', $test));
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$date = new \DateTime($matches[2]);
|
||||||
|
$target = $date->format('U');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('"%s" is not a valid date.', $matches[2]));
|
||||||
|
}
|
||||||
|
|
||||||
|
$operator = $matches[1] ?? '==';
|
||||||
|
if ('since' === $operator || 'after' === $operator) {
|
||||||
|
$operator = '>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('until' === $operator || 'before' === $operator) {
|
||||||
|
$operator = '<';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setOperator($operator);
|
||||||
|
$this->setTarget($target);
|
||||||
|
}
|
||||||
|
}
|
79
SafeBoxEncryptor/vendor/symfony/finder/Comparator/NumberComparator.php
vendored
Normal file
79
SafeBoxEncryptor/vendor/symfony/finder/Comparator/NumberComparator.php
vendored
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?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\Component\Finder\Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NumberComparator compiles a simple comparison to an anonymous
|
||||||
|
* subroutine, which you can call with a value to be tested again.
|
||||||
|
*
|
||||||
|
* Now this would be very pointless, if NumberCompare didn't understand
|
||||||
|
* magnitudes.
|
||||||
|
*
|
||||||
|
* The target value may use magnitudes of kilobytes (k, ki),
|
||||||
|
* megabytes (m, mi), or gigabytes (g, gi). Those suffixed
|
||||||
|
* with an i use the appropriate 2**n version in accordance with the
|
||||||
|
* IEC standard: http://physics.nist.gov/cuu/Units/binary.html
|
||||||
|
*
|
||||||
|
* Based on the Perl Number::Compare module.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com> PHP port
|
||||||
|
* @author Richard Clamp <richardc@unixbeard.net> Perl version
|
||||||
|
* @copyright 2004-2005 Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @copyright 2002 Richard Clamp <richardc@unixbeard.net>
|
||||||
|
*
|
||||||
|
* @see http://physics.nist.gov/cuu/Units/binary.html
|
||||||
|
*/
|
||||||
|
class NumberComparator extends Comparator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string|int $test A comparison string or an integer
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException If the test is not understood
|
||||||
|
*/
|
||||||
|
public function __construct(?string $test)
|
||||||
|
{
|
||||||
|
if (!preg_match('#^\s*(==|!=|[<>]=?)?\s*([0-9\.]+)\s*([kmg]i?)?\s*$#i', $test, $matches)) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('Don\'t understand "%s" as a number test.', $test));
|
||||||
|
}
|
||||||
|
|
||||||
|
$target = $matches[2];
|
||||||
|
if (!is_numeric($target)) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('Invalid number "%s".', $target));
|
||||||
|
}
|
||||||
|
if (isset($matches[3])) {
|
||||||
|
// magnitude
|
||||||
|
switch (strtolower($matches[3])) {
|
||||||
|
case 'k':
|
||||||
|
$target *= 1000;
|
||||||
|
break;
|
||||||
|
case 'ki':
|
||||||
|
$target *= 1024;
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
$target *= 1000000;
|
||||||
|
break;
|
||||||
|
case 'mi':
|
||||||
|
$target *= 1024 * 1024;
|
||||||
|
break;
|
||||||
|
case 'g':
|
||||||
|
$target *= 1000000000;
|
||||||
|
break;
|
||||||
|
case 'gi':
|
||||||
|
$target *= 1024 * 1024 * 1024;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setTarget($target);
|
||||||
|
$this->setOperator($matches[1] ?? '==');
|
||||||
|
}
|
||||||
|
}
|
19
SafeBoxEncryptor/vendor/symfony/finder/Exception/AccessDeniedException.php
vendored
Normal file
19
SafeBoxEncryptor/vendor/symfony/finder/Exception/AccessDeniedException.php
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?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\Component\Finder\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
||||||
|
*/
|
||||||
|
class AccessDeniedException extends \UnexpectedValueException
|
||||||
|
{
|
||||||
|
}
|
19
SafeBoxEncryptor/vendor/symfony/finder/Exception/DirectoryNotFoundException.php
vendored
Normal file
19
SafeBoxEncryptor/vendor/symfony/finder/Exception/DirectoryNotFoundException.php
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<?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\Component\Finder\Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andreas Erhard <andreas.erhard@i-med.ac.at>
|
||||||
|
*/
|
||||||
|
class DirectoryNotFoundException extends \InvalidArgumentException
|
||||||
|
{
|
||||||
|
}
|
803
SafeBoxEncryptor/vendor/symfony/finder/Finder.php
vendored
Normal file
803
SafeBoxEncryptor/vendor/symfony/finder/Finder.php
vendored
Normal file
|
@ -0,0 +1,803 @@
|
||||||
|
<?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\Component\Finder;
|
||||||
|
|
||||||
|
use Symfony\Component\Finder\Comparator\DateComparator;
|
||||||
|
use Symfony\Component\Finder\Comparator\NumberComparator;
|
||||||
|
use Symfony\Component\Finder\Exception\DirectoryNotFoundException;
|
||||||
|
use Symfony\Component\Finder\Iterator\CustomFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\DateRangeFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\DepthRangeFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\FilecontentFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\FilenameFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\SizeRangeFilterIterator;
|
||||||
|
use Symfony\Component\Finder\Iterator\SortableIterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finder allows to build rules to find files and directories.
|
||||||
|
*
|
||||||
|
* It is a thin wrapper around several specialized iterator classes.
|
||||||
|
*
|
||||||
|
* All rules may be invoked several times.
|
||||||
|
*
|
||||||
|
* All methods return the current Finder object to allow chaining:
|
||||||
|
*
|
||||||
|
* $finder = Finder::create()->files()->name('*.php')->in(__DIR__);
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class Finder implements \IteratorAggregate, \Countable
|
||||||
|
{
|
||||||
|
public const IGNORE_VCS_FILES = 1;
|
||||||
|
public const IGNORE_DOT_FILES = 2;
|
||||||
|
public const IGNORE_VCS_IGNORED_FILES = 4;
|
||||||
|
|
||||||
|
private $mode = 0;
|
||||||
|
private $names = [];
|
||||||
|
private $notNames = [];
|
||||||
|
private $exclude = [];
|
||||||
|
private $filters = [];
|
||||||
|
private $depths = [];
|
||||||
|
private $sizes = [];
|
||||||
|
private $followLinks = false;
|
||||||
|
private $reverseSorting = false;
|
||||||
|
private $sort = false;
|
||||||
|
private $ignore = 0;
|
||||||
|
private $dirs = [];
|
||||||
|
private $dates = [];
|
||||||
|
private $iterators = [];
|
||||||
|
private $contains = [];
|
||||||
|
private $notContains = [];
|
||||||
|
private $paths = [];
|
||||||
|
private $notPaths = [];
|
||||||
|
private $ignoreUnreadableDirs = false;
|
||||||
|
|
||||||
|
private static $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg'];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->ignore = static::IGNORE_VCS_FILES | static::IGNORE_DOT_FILES;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new Finder.
|
||||||
|
*
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public static function create()
|
||||||
|
{
|
||||||
|
return new static();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restricts the matching to directories only.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function directories()
|
||||||
|
{
|
||||||
|
$this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restricts the matching to files only.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function files()
|
||||||
|
{
|
||||||
|
$this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds tests for the directory depth.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
*
|
||||||
|
* $finder->depth('> 1') // the Finder will start matching at level 1.
|
||||||
|
* $finder->depth('< 3') // the Finder will descend at most 3 levels of directories below the starting point.
|
||||||
|
* $finder->depth(['>= 1', '< 3'])
|
||||||
|
*
|
||||||
|
* @param string|int|string[]|int[] $levels The depth level expression or an array of depth levels
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see DepthRangeFilterIterator
|
||||||
|
* @see NumberComparator
|
||||||
|
*/
|
||||||
|
public function depth($levels)
|
||||||
|
{
|
||||||
|
foreach ((array) $levels as $level) {
|
||||||
|
$this->depths[] = new Comparator\NumberComparator($level);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds tests for file dates (last modified).
|
||||||
|
*
|
||||||
|
* The date must be something that strtotime() is able to parse:
|
||||||
|
*
|
||||||
|
* $finder->date('since yesterday');
|
||||||
|
* $finder->date('until 2 days ago');
|
||||||
|
* $finder->date('> now - 2 hours');
|
||||||
|
* $finder->date('>= 2005-10-15');
|
||||||
|
* $finder->date(['>= 2005-10-15', '<= 2006-05-27']);
|
||||||
|
*
|
||||||
|
* @param string|string[] $dates A date range string or an array of date ranges
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see strtotime
|
||||||
|
* @see DateRangeFilterIterator
|
||||||
|
* @see DateComparator
|
||||||
|
*/
|
||||||
|
public function date($dates)
|
||||||
|
{
|
||||||
|
foreach ((array) $dates as $date) {
|
||||||
|
$this->dates[] = new Comparator\DateComparator($date);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds rules that files must match.
|
||||||
|
*
|
||||||
|
* You can use patterns (delimited with / sign), globs or simple strings.
|
||||||
|
*
|
||||||
|
* $finder->name('*.php')
|
||||||
|
* $finder->name('/\.php$/') // same as above
|
||||||
|
* $finder->name('test.php')
|
||||||
|
* $finder->name(['test.py', 'test.php'])
|
||||||
|
*
|
||||||
|
* @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see FilenameFilterIterator
|
||||||
|
*/
|
||||||
|
public function name($patterns)
|
||||||
|
{
|
||||||
|
$this->names = array_merge($this->names, (array) $patterns);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds rules that files must not match.
|
||||||
|
*
|
||||||
|
* @param string|string[] $patterns A pattern (a regexp, a glob, or a string) or an array of patterns
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see FilenameFilterIterator
|
||||||
|
*/
|
||||||
|
public function notName($patterns)
|
||||||
|
{
|
||||||
|
$this->notNames = array_merge($this->notNames, (array) $patterns);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds tests that file contents must match.
|
||||||
|
*
|
||||||
|
* Strings or PCRE patterns can be used:
|
||||||
|
*
|
||||||
|
* $finder->contains('Lorem ipsum')
|
||||||
|
* $finder->contains('/Lorem ipsum/i')
|
||||||
|
* $finder->contains(['dolor', '/ipsum/i'])
|
||||||
|
*
|
||||||
|
* @param string|string[] $patterns A pattern (string or regexp) or an array of patterns
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see FilecontentFilterIterator
|
||||||
|
*/
|
||||||
|
public function contains($patterns)
|
||||||
|
{
|
||||||
|
$this->contains = array_merge($this->contains, (array) $patterns);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds tests that file contents must not match.
|
||||||
|
*
|
||||||
|
* Strings or PCRE patterns can be used:
|
||||||
|
*
|
||||||
|
* $finder->notContains('Lorem ipsum')
|
||||||
|
* $finder->notContains('/Lorem ipsum/i')
|
||||||
|
* $finder->notContains(['lorem', '/dolor/i'])
|
||||||
|
*
|
||||||
|
* @param string|string[] $patterns A pattern (string or regexp) or an array of patterns
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see FilecontentFilterIterator
|
||||||
|
*/
|
||||||
|
public function notContains($patterns)
|
||||||
|
{
|
||||||
|
$this->notContains = array_merge($this->notContains, (array) $patterns);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds rules that filenames must match.
|
||||||
|
*
|
||||||
|
* You can use patterns (delimited with / sign) or simple strings.
|
||||||
|
*
|
||||||
|
* $finder->path('some/special/dir')
|
||||||
|
* $finder->path('/some\/special\/dir/') // same as above
|
||||||
|
* $finder->path(['some dir', 'another/dir'])
|
||||||
|
*
|
||||||
|
* Use only / as dirname separator.
|
||||||
|
*
|
||||||
|
* @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see FilenameFilterIterator
|
||||||
|
*/
|
||||||
|
public function path($patterns)
|
||||||
|
{
|
||||||
|
$this->paths = array_merge($this->paths, (array) $patterns);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds rules that filenames must not match.
|
||||||
|
*
|
||||||
|
* You can use patterns (delimited with / sign) or simple strings.
|
||||||
|
*
|
||||||
|
* $finder->notPath('some/special/dir')
|
||||||
|
* $finder->notPath('/some\/special\/dir/') // same as above
|
||||||
|
* $finder->notPath(['some/file.txt', 'another/file.log'])
|
||||||
|
*
|
||||||
|
* Use only / as dirname separator.
|
||||||
|
*
|
||||||
|
* @param string|string[] $patterns A pattern (a regexp or a string) or an array of patterns
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see FilenameFilterIterator
|
||||||
|
*/
|
||||||
|
public function notPath($patterns)
|
||||||
|
{
|
||||||
|
$this->notPaths = array_merge($this->notPaths, (array) $patterns);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds tests for file sizes.
|
||||||
|
*
|
||||||
|
* $finder->size('> 10K');
|
||||||
|
* $finder->size('<= 1Ki');
|
||||||
|
* $finder->size(4);
|
||||||
|
* $finder->size(['> 10K', '< 20K'])
|
||||||
|
*
|
||||||
|
* @param string|int|string[]|int[] $sizes A size range string or an integer or an array of size ranges
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SizeRangeFilterIterator
|
||||||
|
* @see NumberComparator
|
||||||
|
*/
|
||||||
|
public function size($sizes)
|
||||||
|
{
|
||||||
|
foreach ((array) $sizes as $size) {
|
||||||
|
$this->sizes[] = new Comparator\NumberComparator($size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excludes directories.
|
||||||
|
*
|
||||||
|
* Directories passed as argument must be relative to the ones defined with the `in()` method. For example:
|
||||||
|
*
|
||||||
|
* $finder->in(__DIR__)->exclude('ruby');
|
||||||
|
*
|
||||||
|
* @param string|array $dirs A directory path or an array of directories
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see ExcludeDirectoryFilterIterator
|
||||||
|
*/
|
||||||
|
public function exclude($dirs)
|
||||||
|
{
|
||||||
|
$this->exclude = array_merge($this->exclude, (array) $dirs);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Excludes "hidden" directories and files (starting with a dot).
|
||||||
|
*
|
||||||
|
* This option is enabled by default.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see ExcludeDirectoryFilterIterator
|
||||||
|
*/
|
||||||
|
public function ignoreDotFiles(bool $ignoreDotFiles)
|
||||||
|
{
|
||||||
|
if ($ignoreDotFiles) {
|
||||||
|
$this->ignore |= static::IGNORE_DOT_FILES;
|
||||||
|
} else {
|
||||||
|
$this->ignore &= ~static::IGNORE_DOT_FILES;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forces the finder to ignore version control directories.
|
||||||
|
*
|
||||||
|
* This option is enabled by default.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see ExcludeDirectoryFilterIterator
|
||||||
|
*/
|
||||||
|
public function ignoreVCS(bool $ignoreVCS)
|
||||||
|
{
|
||||||
|
if ($ignoreVCS) {
|
||||||
|
$this->ignore |= static::IGNORE_VCS_FILES;
|
||||||
|
} else {
|
||||||
|
$this->ignore &= ~static::IGNORE_VCS_FILES;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forces Finder to obey .gitignore and ignore files based on rules listed there.
|
||||||
|
*
|
||||||
|
* This option is disabled by default.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function ignoreVCSIgnored(bool $ignoreVCSIgnored)
|
||||||
|
{
|
||||||
|
if ($ignoreVCSIgnored) {
|
||||||
|
$this->ignore |= static::IGNORE_VCS_IGNORED_FILES;
|
||||||
|
} else {
|
||||||
|
$this->ignore &= ~static::IGNORE_VCS_IGNORED_FILES;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds VCS patterns.
|
||||||
|
*
|
||||||
|
* @see ignoreVCS()
|
||||||
|
*
|
||||||
|
* @param string|string[] $pattern VCS patterns to ignore
|
||||||
|
*/
|
||||||
|
public static function addVCSPattern($pattern)
|
||||||
|
{
|
||||||
|
foreach ((array) $pattern as $p) {
|
||||||
|
self::$vcsPatterns[] = $p;
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$vcsPatterns = array_unique(self::$vcsPatterns);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts files and directories by an anonymous function.
|
||||||
|
*
|
||||||
|
* The anonymous function receives two \SplFileInfo instances to compare.
|
||||||
|
*
|
||||||
|
* This can be slow as all the matching files and directories must be retrieved for comparison.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SortableIterator
|
||||||
|
*/
|
||||||
|
public function sort(\Closure $closure)
|
||||||
|
{
|
||||||
|
$this->sort = $closure;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts files and directories by name.
|
||||||
|
*
|
||||||
|
* This can be slow as all the matching files and directories must be retrieved for comparison.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SortableIterator
|
||||||
|
*/
|
||||||
|
public function sortByName(bool $useNaturalSort = false)
|
||||||
|
{
|
||||||
|
$this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts files and directories by type (directories before files), then by name.
|
||||||
|
*
|
||||||
|
* This can be slow as all the matching files and directories must be retrieved for comparison.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SortableIterator
|
||||||
|
*/
|
||||||
|
public function sortByType()
|
||||||
|
{
|
||||||
|
$this->sort = Iterator\SortableIterator::SORT_BY_TYPE;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts files and directories by the last accessed time.
|
||||||
|
*
|
||||||
|
* This is the time that the file was last accessed, read or written to.
|
||||||
|
*
|
||||||
|
* This can be slow as all the matching files and directories must be retrieved for comparison.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SortableIterator
|
||||||
|
*/
|
||||||
|
public function sortByAccessedTime()
|
||||||
|
{
|
||||||
|
$this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverses the sorting.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function reverseSorting()
|
||||||
|
{
|
||||||
|
$this->reverseSorting = true;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts files and directories by the last inode changed time.
|
||||||
|
*
|
||||||
|
* This is the time that the inode information was last modified (permissions, owner, group or other metadata).
|
||||||
|
*
|
||||||
|
* On Windows, since inode is not available, changed time is actually the file creation time.
|
||||||
|
*
|
||||||
|
* This can be slow as all the matching files and directories must be retrieved for comparison.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SortableIterator
|
||||||
|
*/
|
||||||
|
public function sortByChangedTime()
|
||||||
|
{
|
||||||
|
$this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts files and directories by the last modified time.
|
||||||
|
*
|
||||||
|
* This is the last time the actual contents of the file were last modified.
|
||||||
|
*
|
||||||
|
* This can be slow as all the matching files and directories must be retrieved for comparison.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see SortableIterator
|
||||||
|
*/
|
||||||
|
public function sortByModifiedTime()
|
||||||
|
{
|
||||||
|
$this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator with an anonymous function.
|
||||||
|
*
|
||||||
|
* The anonymous function receives a \SplFileInfo and must return false
|
||||||
|
* to remove files.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @see CustomFilterIterator
|
||||||
|
*/
|
||||||
|
public function filter(\Closure $closure)
|
||||||
|
{
|
||||||
|
$this->filters[] = $closure;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forces the following of symlinks.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function followLinks()
|
||||||
|
{
|
||||||
|
$this->followLinks = true;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells finder to ignore unreadable directories.
|
||||||
|
*
|
||||||
|
* By default, scanning unreadable directories content throws an AccessDeniedException.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function ignoreUnreadableDirs(bool $ignore = true)
|
||||||
|
{
|
||||||
|
$this->ignoreUnreadableDirs = $ignore;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches files and directories which match defined rules.
|
||||||
|
*
|
||||||
|
* @param string|string[] $dirs A directory path or an array of directories
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @throws DirectoryNotFoundException if one of the directories does not exist
|
||||||
|
*/
|
||||||
|
public function in($dirs)
|
||||||
|
{
|
||||||
|
$resolvedDirs = [];
|
||||||
|
|
||||||
|
foreach ((array) $dirs as $dir) {
|
||||||
|
if (is_dir($dir)) {
|
||||||
|
$resolvedDirs[] = $this->normalizeDir($dir);
|
||||||
|
} elseif ($glob = glob($dir, (\defined('GLOB_BRACE') ? \GLOB_BRACE : 0) | \GLOB_ONLYDIR | \GLOB_NOSORT)) {
|
||||||
|
sort($glob);
|
||||||
|
$resolvedDirs = array_merge($resolvedDirs, array_map([$this, 'normalizeDir'], $glob));
|
||||||
|
} else {
|
||||||
|
throw new DirectoryNotFoundException(sprintf('The "%s" directory does not exist.', $dir));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->dirs = array_merge($this->dirs, $resolvedDirs);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an Iterator for the current Finder configuration.
|
||||||
|
*
|
||||||
|
* This method implements the IteratorAggregate interface.
|
||||||
|
*
|
||||||
|
* @return \Iterator|SplFileInfo[] An iterator
|
||||||
|
*
|
||||||
|
* @throws \LogicException if the in() method has not been called
|
||||||
|
*/
|
||||||
|
public function getIterator()
|
||||||
|
{
|
||||||
|
if (0 === \count($this->dirs) && 0 === \count($this->iterators)) {
|
||||||
|
throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (1 === \count($this->dirs) && 0 === \count($this->iterators)) {
|
||||||
|
$iterator = $this->searchInDirectory($this->dirs[0]);
|
||||||
|
|
||||||
|
if ($this->sort || $this->reverseSorting) {
|
||||||
|
$iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new \AppendIterator();
|
||||||
|
foreach ($this->dirs as $dir) {
|
||||||
|
$iterator->append($this->searchInDirectory($dir));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->iterators as $it) {
|
||||||
|
$iterator->append($it);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->sort || $this->reverseSorting) {
|
||||||
|
$iterator = (new Iterator\SortableIterator($iterator, $this->sort, $this->reverseSorting))->getIterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Appends an existing set of files/directories to the finder.
|
||||||
|
*
|
||||||
|
* The set can be another Finder, an Iterator, an IteratorAggregate, or even a plain array.
|
||||||
|
*
|
||||||
|
* @return $this
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException when the given argument is not iterable
|
||||||
|
*/
|
||||||
|
public function append(iterable $iterator)
|
||||||
|
{
|
||||||
|
if ($iterator instanceof \IteratorAggregate) {
|
||||||
|
$this->iterators[] = $iterator->getIterator();
|
||||||
|
} elseif ($iterator instanceof \Iterator) {
|
||||||
|
$this->iterators[] = $iterator;
|
||||||
|
} elseif ($iterator instanceof \Traversable || \is_array($iterator)) {
|
||||||
|
$it = new \ArrayIterator();
|
||||||
|
foreach ($iterator as $file) {
|
||||||
|
$file = $file instanceof \SplFileInfo ? $file : new \SplFileInfo($file);
|
||||||
|
$it[$file->getPathname()] = $file;
|
||||||
|
}
|
||||||
|
$this->iterators[] = $it;
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException('Finder::append() method wrong argument type.');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if any results were found.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function hasResults()
|
||||||
|
{
|
||||||
|
foreach ($this->getIterator() as $_) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Counts all the results collected by the iterators.
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function count()
|
||||||
|
{
|
||||||
|
return iterator_count($this->getIterator());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function searchInDirectory(string $dir): \Iterator
|
||||||
|
{
|
||||||
|
$exclude = $this->exclude;
|
||||||
|
$notPaths = $this->notPaths;
|
||||||
|
|
||||||
|
if (static::IGNORE_VCS_FILES === (static::IGNORE_VCS_FILES & $this->ignore)) {
|
||||||
|
$exclude = array_merge($exclude, self::$vcsPatterns);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (static::IGNORE_DOT_FILES === (static::IGNORE_DOT_FILES & $this->ignore)) {
|
||||||
|
$notPaths[] = '#(^|/)\..+(/|$)#';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (static::IGNORE_VCS_IGNORED_FILES === (static::IGNORE_VCS_IGNORED_FILES & $this->ignore)) {
|
||||||
|
$gitignoreFilePath = sprintf('%s/.gitignore', $dir);
|
||||||
|
if (!is_readable($gitignoreFilePath)) {
|
||||||
|
throw new \RuntimeException(sprintf('The "ignoreVCSIgnored" option cannot be used by the Finder as the "%s" file is not readable.', $gitignoreFilePath));
|
||||||
|
}
|
||||||
|
$notPaths = array_merge($notPaths, [Gitignore::toRegex(file_get_contents($gitignoreFilePath))]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$minDepth = 0;
|
||||||
|
$maxDepth = \PHP_INT_MAX;
|
||||||
|
|
||||||
|
foreach ($this->depths as $comparator) {
|
||||||
|
switch ($comparator->getOperator()) {
|
||||||
|
case '>':
|
||||||
|
$minDepth = $comparator->getTarget() + 1;
|
||||||
|
break;
|
||||||
|
case '>=':
|
||||||
|
$minDepth = $comparator->getTarget();
|
||||||
|
break;
|
||||||
|
case '<':
|
||||||
|
$maxDepth = $comparator->getTarget() - 1;
|
||||||
|
break;
|
||||||
|
case '<=':
|
||||||
|
$maxDepth = $comparator->getTarget();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$minDepth = $maxDepth = $comparator->getTarget();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$flags = \RecursiveDirectoryIterator::SKIP_DOTS;
|
||||||
|
|
||||||
|
if ($this->followLinks) {
|
||||||
|
$flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS;
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new Iterator\RecursiveDirectoryIterator($dir, $flags, $this->ignoreUnreadableDirs);
|
||||||
|
|
||||||
|
if ($exclude) {
|
||||||
|
$iterator = new Iterator\ExcludeDirectoryFilterIterator($iterator, $exclude);
|
||||||
|
}
|
||||||
|
|
||||||
|
$iterator = new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::SELF_FIRST);
|
||||||
|
|
||||||
|
if ($minDepth > 0 || $maxDepth < \PHP_INT_MAX) {
|
||||||
|
$iterator = new Iterator\DepthRangeFilterIterator($iterator, $minDepth, $maxDepth);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->mode) {
|
||||||
|
$iterator = new Iterator\FileTypeFilterIterator($iterator, $this->mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->names || $this->notNames) {
|
||||||
|
$iterator = new Iterator\FilenameFilterIterator($iterator, $this->names, $this->notNames);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->contains || $this->notContains) {
|
||||||
|
$iterator = new Iterator\FilecontentFilterIterator($iterator, $this->contains, $this->notContains);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->sizes) {
|
||||||
|
$iterator = new Iterator\SizeRangeFilterIterator($iterator, $this->sizes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->dates) {
|
||||||
|
$iterator = new Iterator\DateRangeFilterIterator($iterator, $this->dates);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->filters) {
|
||||||
|
$iterator = new Iterator\CustomFilterIterator($iterator, $this->filters);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->paths || $notPaths) {
|
||||||
|
$iterator = new Iterator\PathFilterIterator($iterator, $this->paths, $notPaths);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalizes given directory names by removing trailing slashes.
|
||||||
|
*
|
||||||
|
* Excluding: (s)ftp:// or ssh2.(s)ftp:// wrapper
|
||||||
|
*/
|
||||||
|
private function normalizeDir(string $dir): string
|
||||||
|
{
|
||||||
|
if ('/' === $dir) {
|
||||||
|
return $dir;
|
||||||
|
}
|
||||||
|
|
||||||
|
$dir = rtrim($dir, '/'.\DIRECTORY_SEPARATOR);
|
||||||
|
|
||||||
|
if (preg_match('#^(ssh2\.)?s?ftp://#', $dir)) {
|
||||||
|
$dir .= '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
return $dir;
|
||||||
|
}
|
||||||
|
}
|
133
SafeBoxEncryptor/vendor/symfony/finder/Gitignore.php
vendored
Normal file
133
SafeBoxEncryptor/vendor/symfony/finder/Gitignore.php
vendored
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
<?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\Component\Finder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gitignore matches against text.
|
||||||
|
*
|
||||||
|
* @author Ahmed Abdou <mail@ahmd.io>
|
||||||
|
*/
|
||||||
|
class Gitignore
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns a regexp which is the equivalent of the gitignore pattern.
|
||||||
|
*
|
||||||
|
* @return string The regexp
|
||||||
|
*/
|
||||||
|
public static function toRegex(string $gitignoreFileContent): string
|
||||||
|
{
|
||||||
|
$gitignoreFileContent = preg_replace('/^[^\\\r\n]*#.*/m', '', $gitignoreFileContent);
|
||||||
|
$gitignoreLines = preg_split('/\r\n|\r|\n/', $gitignoreFileContent);
|
||||||
|
|
||||||
|
$positives = [];
|
||||||
|
$negatives = [];
|
||||||
|
foreach ($gitignoreLines as $i => $line) {
|
||||||
|
$line = trim($line);
|
||||||
|
if ('' === $line) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (1 === preg_match('/^!/', $line)) {
|
||||||
|
$positives[$i] = null;
|
||||||
|
$negatives[$i] = self::getRegexFromGitignore(preg_replace('/^!(.*)/', '${1}', $line), true);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$negatives[$i] = null;
|
||||||
|
$positives[$i] = self::getRegexFromGitignore($line);
|
||||||
|
}
|
||||||
|
|
||||||
|
$index = 0;
|
||||||
|
$patterns = [];
|
||||||
|
foreach ($positives as $pattern) {
|
||||||
|
if (null === $pattern) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$negativesAfter = array_filter(\array_slice($negatives, ++$index));
|
||||||
|
if ([] !== $negativesAfter) {
|
||||||
|
$pattern .= sprintf('(?<!%s)', implode('|', $negativesAfter));
|
||||||
|
}
|
||||||
|
|
||||||
|
$patterns[] = $pattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sprintf('/^((%s))$/', implode(')|(', $patterns));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function getRegexFromGitignore(string $gitignorePattern, bool $negative = false): string
|
||||||
|
{
|
||||||
|
$regex = '';
|
||||||
|
$isRelativePath = false;
|
||||||
|
// If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself
|
||||||
|
$slashPosition = strpos($gitignorePattern, '/');
|
||||||
|
if (false !== $slashPosition && \strlen($gitignorePattern) - 1 !== $slashPosition) {
|
||||||
|
if (0 === $slashPosition) {
|
||||||
|
$gitignorePattern = substr($gitignorePattern, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$isRelativePath = true;
|
||||||
|
$regex .= '^';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ('/' === $gitignorePattern[\strlen($gitignorePattern) - 1]) {
|
||||||
|
$gitignorePattern = substr($gitignorePattern, 0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$iMax = \strlen($gitignorePattern);
|
||||||
|
for ($i = 0; $i < $iMax; ++$i) {
|
||||||
|
$tripleChars = substr($gitignorePattern, $i, 3);
|
||||||
|
if ('**/' === $tripleChars || '/**' === $tripleChars) {
|
||||||
|
$regex .= '.*';
|
||||||
|
$i += 2;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$doubleChars = substr($gitignorePattern, $i, 2);
|
||||||
|
if ('**' === $doubleChars) {
|
||||||
|
$regex .= '.*';
|
||||||
|
++$i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ('*/' === $doubleChars) {
|
||||||
|
$regex .= '[^\/]*\/?[^\/]*';
|
||||||
|
++$i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$c = $gitignorePattern[$i];
|
||||||
|
switch ($c) {
|
||||||
|
case '*':
|
||||||
|
$regex .= $isRelativePath ? '[^\/]*' : '[^\/]*\/?[^\/]*';
|
||||||
|
break;
|
||||||
|
case '/':
|
||||||
|
case '.':
|
||||||
|
case ':':
|
||||||
|
case '(':
|
||||||
|
case ')':
|
||||||
|
case '{':
|
||||||
|
case '}':
|
||||||
|
$regex .= '\\'.$c;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$regex .= $c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($negative) {
|
||||||
|
// a lookbehind assertion has to be a fixed width (it can not have nested '|' statements)
|
||||||
|
return sprintf('%s$|%s\/$', $regex, $regex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return '(?>'.$regex.'($|\/.*))';
|
||||||
|
}
|
||||||
|
}
|
111
SafeBoxEncryptor/vendor/symfony/finder/Glob.php
vendored
Normal file
111
SafeBoxEncryptor/vendor/symfony/finder/Glob.php
vendored
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
<?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\Component\Finder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Glob matches globbing patterns against text.
|
||||||
|
*
|
||||||
|
* if match_glob("foo.*", "foo.bar") echo "matched\n";
|
||||||
|
*
|
||||||
|
* // prints foo.bar and foo.baz
|
||||||
|
* $regex = glob_to_regex("foo.*");
|
||||||
|
* for (['foo.bar', 'foo.baz', 'foo', 'bar'] as $t)
|
||||||
|
* {
|
||||||
|
* if (/$regex/) echo "matched: $car\n";
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Glob implements glob(3) style matching that can be used to match
|
||||||
|
* against text, rather than fetching names from a filesystem.
|
||||||
|
*
|
||||||
|
* Based on the Perl Text::Glob module.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com> PHP port
|
||||||
|
* @author Richard Clamp <richardc@unixbeard.net> Perl version
|
||||||
|
* @copyright 2004-2005 Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @copyright 2002 Richard Clamp <richardc@unixbeard.net>
|
||||||
|
*/
|
||||||
|
class Glob
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns a regexp which is the equivalent of the glob pattern.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function toRegex(string $glob, bool $strictLeadingDot = true, bool $strictWildcardSlash = true, string $delimiter = '#')
|
||||||
|
{
|
||||||
|
$firstByte = true;
|
||||||
|
$escaping = false;
|
||||||
|
$inCurlies = 0;
|
||||||
|
$regex = '';
|
||||||
|
$sizeGlob = \strlen($glob);
|
||||||
|
for ($i = 0; $i < $sizeGlob; ++$i) {
|
||||||
|
$car = $glob[$i];
|
||||||
|
if ($firstByte && $strictLeadingDot && '.' !== $car) {
|
||||||
|
$regex .= '(?=[^\.])';
|
||||||
|
}
|
||||||
|
|
||||||
|
$firstByte = '/' === $car;
|
||||||
|
|
||||||
|
if ($firstByte && $strictWildcardSlash && isset($glob[$i + 2]) && '**' === $glob[$i + 1].$glob[$i + 2] && (!isset($glob[$i + 3]) || '/' === $glob[$i + 3])) {
|
||||||
|
$car = '[^/]++/';
|
||||||
|
if (!isset($glob[$i + 3])) {
|
||||||
|
$car .= '?';
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($strictLeadingDot) {
|
||||||
|
$car = '(?=[^\.])'.$car;
|
||||||
|
}
|
||||||
|
|
||||||
|
$car = '/(?:'.$car.')*';
|
||||||
|
$i += 2 + isset($glob[$i + 3]);
|
||||||
|
|
||||||
|
if ('/' === $delimiter) {
|
||||||
|
$car = str_replace('/', '\\/', $car);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($delimiter === $car || '.' === $car || '(' === $car || ')' === $car || '|' === $car || '+' === $car || '^' === $car || '$' === $car) {
|
||||||
|
$regex .= "\\$car";
|
||||||
|
} elseif ('*' === $car) {
|
||||||
|
$regex .= $escaping ? '\\*' : ($strictWildcardSlash ? '[^/]*' : '.*');
|
||||||
|
} elseif ('?' === $car) {
|
||||||
|
$regex .= $escaping ? '\\?' : ($strictWildcardSlash ? '[^/]' : '.');
|
||||||
|
} elseif ('{' === $car) {
|
||||||
|
$regex .= $escaping ? '\\{' : '(';
|
||||||
|
if (!$escaping) {
|
||||||
|
++$inCurlies;
|
||||||
|
}
|
||||||
|
} elseif ('}' === $car && $inCurlies) {
|
||||||
|
$regex .= $escaping ? '}' : ')';
|
||||||
|
if (!$escaping) {
|
||||||
|
--$inCurlies;
|
||||||
|
}
|
||||||
|
} elseif (',' === $car && $inCurlies) {
|
||||||
|
$regex .= $escaping ? ',' : '|';
|
||||||
|
} elseif ('\\' === $car) {
|
||||||
|
if ($escaping) {
|
||||||
|
$regex .= '\\\\';
|
||||||
|
$escaping = false;
|
||||||
|
} else {
|
||||||
|
$escaping = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
$regex .= $car;
|
||||||
|
}
|
||||||
|
$escaping = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $delimiter.'^'.$regex.'$'.$delimiter;
|
||||||
|
}
|
||||||
|
}
|
61
SafeBoxEncryptor/vendor/symfony/finder/Iterator/CustomFilterIterator.php
vendored
Normal file
61
SafeBoxEncryptor/vendor/symfony/finder/Iterator/CustomFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CustomFilterIterator filters files by applying anonymous functions.
|
||||||
|
*
|
||||||
|
* The anonymous function receives a \SplFileInfo and must return false
|
||||||
|
* to remove files.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class CustomFilterIterator extends \FilterIterator
|
||||||
|
{
|
||||||
|
private $filters = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Iterator $iterator The Iterator to filter
|
||||||
|
* @param callable[] $filters An array of PHP callbacks
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function __construct(\Iterator $iterator, array $filters)
|
||||||
|
{
|
||||||
|
foreach ($filters as $filter) {
|
||||||
|
if (!\is_callable($filter)) {
|
||||||
|
throw new \InvalidArgumentException('Invalid PHP callback.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->filters = $filters;
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
$fileinfo = $this->current();
|
||||||
|
|
||||||
|
foreach ($this->filters as $filter) {
|
||||||
|
if (false === $filter($fileinfo)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
58
SafeBoxEncryptor/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
vendored
Normal file
58
SafeBoxEncryptor/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
use Symfony\Component\Finder\Comparator\DateComparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DateRangeFilterIterator filters out files that are not in the given date range (last modified dates).
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class DateRangeFilterIterator extends \FilterIterator
|
||||||
|
{
|
||||||
|
private $comparators = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Iterator $iterator The Iterator to filter
|
||||||
|
* @param DateComparator[] $comparators An array of DateComparator instances
|
||||||
|
*/
|
||||||
|
public function __construct(\Iterator $iterator, array $comparators)
|
||||||
|
{
|
||||||
|
$this->comparators = $comparators;
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
$fileinfo = $this->current();
|
||||||
|
|
||||||
|
if (!file_exists($fileinfo->getPathname())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filedate = $fileinfo->getMTime();
|
||||||
|
foreach ($this->comparators as $compare) {
|
||||||
|
if (!$compare->test($filedate)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
45
SafeBoxEncryptor/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
vendored
Normal file
45
SafeBoxEncryptor/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DepthRangeFilterIterator limits the directory depth.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class DepthRangeFilterIterator extends \FilterIterator
|
||||||
|
{
|
||||||
|
private $minDepth = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \RecursiveIteratorIterator $iterator The Iterator to filter
|
||||||
|
* @param int $minDepth The min depth
|
||||||
|
* @param int $maxDepth The max depth
|
||||||
|
*/
|
||||||
|
public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth = 0, int $maxDepth = \PHP_INT_MAX)
|
||||||
|
{
|
||||||
|
$this->minDepth = $minDepth;
|
||||||
|
$iterator->setMaxDepth(\PHP_INT_MAX === $maxDepth ? -1 : $maxDepth);
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
return $this->getInnerIterator()->getDepth() >= $this->minDepth;
|
||||||
|
}
|
||||||
|
}
|
87
SafeBoxEncryptor/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
vendored
Normal file
87
SafeBoxEncryptor/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ExcludeDirectoryFilterIterator filters out directories.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class ExcludeDirectoryFilterIterator extends \FilterIterator implements \RecursiveIterator
|
||||||
|
{
|
||||||
|
private $iterator;
|
||||||
|
private $isRecursive;
|
||||||
|
private $excludedDirs = [];
|
||||||
|
private $excludedPattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Iterator $iterator The Iterator to filter
|
||||||
|
* @param string[] $directories An array of directories to exclude
|
||||||
|
*/
|
||||||
|
public function __construct(\Iterator $iterator, array $directories)
|
||||||
|
{
|
||||||
|
$this->iterator = $iterator;
|
||||||
|
$this->isRecursive = $iterator instanceof \RecursiveIterator;
|
||||||
|
$patterns = [];
|
||||||
|
foreach ($directories as $directory) {
|
||||||
|
$directory = rtrim($directory, '/');
|
||||||
|
if (!$this->isRecursive || false !== strpos($directory, '/')) {
|
||||||
|
$patterns[] = preg_quote($directory, '#');
|
||||||
|
} else {
|
||||||
|
$this->excludedDirs[$directory] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($patterns) {
|
||||||
|
$this->excludedPattern = '#(?:^|/)(?:'.implode('|', $patterns).')(?:/|$)#';
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool True if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
if ($this->isRecursive && isset($this->excludedDirs[$this->getFilename()]) && $this->isDir()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->excludedPattern) {
|
||||||
|
$path = $this->isDir() ? $this->current()->getRelativePathname() : $this->current()->getRelativePath();
|
||||||
|
$path = str_replace('\\', '/', $path);
|
||||||
|
|
||||||
|
return !preg_match($this->excludedPattern, $path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function hasChildren()
|
||||||
|
{
|
||||||
|
return $this->isRecursive && $this->iterator->hasChildren();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getChildren()
|
||||||
|
{
|
||||||
|
$children = new self($this->iterator->getChildren(), []);
|
||||||
|
$children->excludedDirs = $this->excludedDirs;
|
||||||
|
$children->excludedPattern = $this->excludedPattern;
|
||||||
|
|
||||||
|
return $children;
|
||||||
|
}
|
||||||
|
}
|
53
SafeBoxEncryptor/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
vendored
Normal file
53
SafeBoxEncryptor/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FileTypeFilterIterator only keeps files, directories, or both.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class FileTypeFilterIterator extends \FilterIterator
|
||||||
|
{
|
||||||
|
public const ONLY_FILES = 1;
|
||||||
|
public const ONLY_DIRECTORIES = 2;
|
||||||
|
|
||||||
|
private $mode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Iterator $iterator The Iterator to filter
|
||||||
|
* @param int $mode The mode (self::ONLY_FILES or self::ONLY_DIRECTORIES)
|
||||||
|
*/
|
||||||
|
public function __construct(\Iterator $iterator, int $mode)
|
||||||
|
{
|
||||||
|
$this->mode = $mode;
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
$fileinfo = $this->current();
|
||||||
|
if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) {
|
||||||
|
return false;
|
||||||
|
} elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
58
SafeBoxEncryptor/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php
vendored
Normal file
58
SafeBoxEncryptor/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FilecontentFilterIterator filters files by their contents using patterns (regexps or strings).
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @author Włodzimierz Gajda <gajdaw@gajdaw.pl>
|
||||||
|
*/
|
||||||
|
class FilecontentFilterIterator extends MultiplePcreFilterIterator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
if (!$this->matchRegexps && !$this->noMatchRegexps) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fileinfo = $this->current();
|
||||||
|
|
||||||
|
if ($fileinfo->isDir() || !$fileinfo->isReadable()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$content = $fileinfo->getContents();
|
||||||
|
if (!$content) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->isAccepted($content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts string to regexp if necessary.
|
||||||
|
*
|
||||||
|
* @param string $str Pattern: string or regexp
|
||||||
|
*
|
||||||
|
* @return string regexp corresponding to a given string or regexp
|
||||||
|
*/
|
||||||
|
protected function toRegex(string $str)
|
||||||
|
{
|
||||||
|
return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/';
|
||||||
|
}
|
||||||
|
}
|
47
SafeBoxEncryptor/vendor/symfony/finder/Iterator/FilenameFilterIterator.php
vendored
Normal file
47
SafeBoxEncryptor/vendor/symfony/finder/Iterator/FilenameFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
use Symfony\Component\Finder\Glob;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FilenameFilterIterator filters files by patterns (a regexp, a glob, or a string).
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class FilenameFilterIterator extends MultiplePcreFilterIterator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
return $this->isAccepted($this->current()->getFilename());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts glob to regexp.
|
||||||
|
*
|
||||||
|
* PCRE patterns are left unchanged.
|
||||||
|
* Glob strings are transformed with Glob::toRegex().
|
||||||
|
*
|
||||||
|
* @param string $str Pattern: glob or regexp
|
||||||
|
*
|
||||||
|
* @return string regexp corresponding to a given glob or regexp
|
||||||
|
*/
|
||||||
|
protected function toRegex(string $str)
|
||||||
|
{
|
||||||
|
return $this->isRegex($str) ? $str : Glob::toRegex($str);
|
||||||
|
}
|
||||||
|
}
|
106
SafeBoxEncryptor/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
vendored
Normal file
106
SafeBoxEncryptor/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MultiplePcreFilterIterator filters files using patterns (regexps, globs or strings).
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
abstract class MultiplePcreFilterIterator extends \FilterIterator
|
||||||
|
{
|
||||||
|
protected $matchRegexps = [];
|
||||||
|
protected $noMatchRegexps = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Iterator $iterator The Iterator to filter
|
||||||
|
* @param string[] $matchPatterns An array of patterns that need to match
|
||||||
|
* @param string[] $noMatchPatterns An array of patterns that need to not match
|
||||||
|
*/
|
||||||
|
public function __construct(\Iterator $iterator, array $matchPatterns, array $noMatchPatterns)
|
||||||
|
{
|
||||||
|
foreach ($matchPatterns as $pattern) {
|
||||||
|
$this->matchRegexps[] = $this->toRegex($pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($noMatchPatterns as $pattern) {
|
||||||
|
$this->noMatchRegexps[] = $this->toRegex($pattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the string is accepted by the regex filters.
|
||||||
|
*
|
||||||
|
* If there is no regexps defined in the class, this method will accept the string.
|
||||||
|
* Such case can be handled by child classes before calling the method if they want to
|
||||||
|
* apply a different behavior.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isAccepted(string $string)
|
||||||
|
{
|
||||||
|
// should at least not match one rule to exclude
|
||||||
|
foreach ($this->noMatchRegexps as $regex) {
|
||||||
|
if (preg_match($regex, $string)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// should at least match one rule
|
||||||
|
if ($this->matchRegexps) {
|
||||||
|
foreach ($this->matchRegexps as $regex) {
|
||||||
|
if (preg_match($regex, $string)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If there is no match rules, the file is accepted
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the string is a regex.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isRegex(string $str)
|
||||||
|
{
|
||||||
|
if (preg_match('/^(.{3,}?)[imsxuADU]*$/', $str, $m)) {
|
||||||
|
$start = substr($m[1], 0, 1);
|
||||||
|
$end = substr($m[1], -1);
|
||||||
|
|
||||||
|
if ($start === $end) {
|
||||||
|
return !preg_match('/[*?[:alnum:] \\\\]/', $start);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ([['{', '}'], ['(', ')'], ['[', ']'], ['<', '>']] as $delimiters) {
|
||||||
|
if ($start === $delimiters[0] && $end === $delimiters[1]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts string into regexp.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
abstract protected function toRegex(string $str);
|
||||||
|
}
|
56
SafeBoxEncryptor/vendor/symfony/finder/Iterator/PathFilterIterator.php
vendored
Normal file
56
SafeBoxEncryptor/vendor/symfony/finder/Iterator/PathFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PathFilterIterator filters files by path patterns (e.g. some/special/dir).
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
* @author Włodzimierz Gajda <gajdaw@gajdaw.pl>
|
||||||
|
*/
|
||||||
|
class PathFilterIterator extends MultiplePcreFilterIterator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
$filename = $this->current()->getRelativePathname();
|
||||||
|
|
||||||
|
if ('\\' === \DIRECTORY_SEPARATOR) {
|
||||||
|
$filename = str_replace('\\', '/', $filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->isAccepted($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts strings to regexp.
|
||||||
|
*
|
||||||
|
* PCRE patterns are left unchanged.
|
||||||
|
*
|
||||||
|
* Default conversion:
|
||||||
|
* 'lorem/ipsum/dolor' ==> 'lorem\/ipsum\/dolor/'
|
||||||
|
*
|
||||||
|
* Use only / as directory separator (on Windows also).
|
||||||
|
*
|
||||||
|
* @param string $str Pattern: regexp or dirname
|
||||||
|
*
|
||||||
|
* @return string regexp corresponding to a given string or regexp
|
||||||
|
*/
|
||||||
|
protected function toRegex(string $str)
|
||||||
|
{
|
||||||
|
return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/';
|
||||||
|
}
|
||||||
|
}
|
144
SafeBoxEncryptor/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
vendored
Normal file
144
SafeBoxEncryptor/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php
vendored
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
use Symfony\Component\Finder\Exception\AccessDeniedException;
|
||||||
|
use Symfony\Component\Finder\SplFileInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends the \RecursiveDirectoryIterator to support relative paths.
|
||||||
|
*
|
||||||
|
* @author Victor Berchet <victor@suumit.com>
|
||||||
|
*/
|
||||||
|
class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private $ignoreUnreadableDirs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private $rewindable;
|
||||||
|
|
||||||
|
// these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations
|
||||||
|
private $rootPath;
|
||||||
|
private $subPath;
|
||||||
|
private $directorySeparator = '/';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \RuntimeException
|
||||||
|
*/
|
||||||
|
public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs = false)
|
||||||
|
{
|
||||||
|
if ($flags & (self::CURRENT_AS_PATHNAME | self::CURRENT_AS_SELF)) {
|
||||||
|
throw new \RuntimeException('This iterator only support returning current as fileinfo.');
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::__construct($path, $flags);
|
||||||
|
$this->ignoreUnreadableDirs = $ignoreUnreadableDirs;
|
||||||
|
$this->rootPath = $path;
|
||||||
|
if ('/' !== \DIRECTORY_SEPARATOR && !($flags & self::UNIX_PATHS)) {
|
||||||
|
$this->directorySeparator = \DIRECTORY_SEPARATOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return an instance of SplFileInfo with support for relative paths.
|
||||||
|
*
|
||||||
|
* @return SplFileInfo File information
|
||||||
|
*/
|
||||||
|
public function current()
|
||||||
|
{
|
||||||
|
// the logic here avoids redoing the same work in all iterations
|
||||||
|
|
||||||
|
if (null === $subPathname = $this->subPath) {
|
||||||
|
$subPathname = $this->subPath = (string) $this->getSubPath();
|
||||||
|
}
|
||||||
|
if ('' !== $subPathname) {
|
||||||
|
$subPathname .= $this->directorySeparator;
|
||||||
|
}
|
||||||
|
$subPathname .= $this->getFilename();
|
||||||
|
|
||||||
|
if ('/' !== $basePath = $this->rootPath) {
|
||||||
|
$basePath .= $this->directorySeparator;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \RecursiveIterator
|
||||||
|
*
|
||||||
|
* @throws AccessDeniedException
|
||||||
|
*/
|
||||||
|
public function getChildren()
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$children = parent::getChildren();
|
||||||
|
|
||||||
|
if ($children instanceof self) {
|
||||||
|
// parent method will call the constructor with default arguments, so unreadable dirs won't be ignored anymore
|
||||||
|
$children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs;
|
||||||
|
|
||||||
|
// performance optimization to avoid redoing the same work in all children
|
||||||
|
$children->rewindable = &$this->rewindable;
|
||||||
|
$children->rootPath = $this->rootPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $children;
|
||||||
|
} catch (\UnexpectedValueException $e) {
|
||||||
|
if ($this->ignoreUnreadableDirs) {
|
||||||
|
// If directory is unreadable and finder is set to ignore it, a fake empty content is returned.
|
||||||
|
return new \RecursiveArrayIterator([]);
|
||||||
|
} else {
|
||||||
|
throw new AccessDeniedException($e->getMessage(), $e->getCode(), $e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do nothing for non rewindable stream.
|
||||||
|
*/
|
||||||
|
public function rewind()
|
||||||
|
{
|
||||||
|
if (false === $this->isRewindable()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
parent::rewind();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the stream is rewindable.
|
||||||
|
*
|
||||||
|
* @return bool true when the stream is rewindable, false otherwise
|
||||||
|
*/
|
||||||
|
public function isRewindable()
|
||||||
|
{
|
||||||
|
if (null !== $this->rewindable) {
|
||||||
|
return $this->rewindable;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (false !== $stream = @opendir($this->getPath())) {
|
||||||
|
$infos = stream_get_meta_data($stream);
|
||||||
|
closedir($stream);
|
||||||
|
|
||||||
|
if ($infos['seekable']) {
|
||||||
|
return $this->rewindable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->rewindable = false;
|
||||||
|
}
|
||||||
|
}
|
57
SafeBoxEncryptor/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
vendored
Normal file
57
SafeBoxEncryptor/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
use Symfony\Component\Finder\Comparator\NumberComparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SizeRangeFilterIterator filters out files that are not in the given size range.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class SizeRangeFilterIterator extends \FilterIterator
|
||||||
|
{
|
||||||
|
private $comparators = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Iterator $iterator The Iterator to filter
|
||||||
|
* @param NumberComparator[] $comparators An array of NumberComparator instances
|
||||||
|
*/
|
||||||
|
public function __construct(\Iterator $iterator, array $comparators)
|
||||||
|
{
|
||||||
|
$this->comparators = $comparators;
|
||||||
|
|
||||||
|
parent::__construct($iterator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filters the iterator values.
|
||||||
|
*
|
||||||
|
* @return bool true if the value should be kept, false otherwise
|
||||||
|
*/
|
||||||
|
public function accept()
|
||||||
|
{
|
||||||
|
$fileinfo = $this->current();
|
||||||
|
if (!$fileinfo->isFile()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filesize = $fileinfo->getSize();
|
||||||
|
foreach ($this->comparators as $compare) {
|
||||||
|
if (!$compare->test($filesize)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
101
SafeBoxEncryptor/vendor/symfony/finder/Iterator/SortableIterator.php
vendored
Normal file
101
SafeBoxEncryptor/vendor/symfony/finder/Iterator/SortableIterator.php
vendored
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
<?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\Component\Finder\Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SortableIterator applies a sort on a given Iterator.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class SortableIterator implements \IteratorAggregate
|
||||||
|
{
|
||||||
|
public const SORT_BY_NONE = 0;
|
||||||
|
public const SORT_BY_NAME = 1;
|
||||||
|
public const SORT_BY_TYPE = 2;
|
||||||
|
public const SORT_BY_ACCESSED_TIME = 3;
|
||||||
|
public const SORT_BY_CHANGED_TIME = 4;
|
||||||
|
public const SORT_BY_MODIFIED_TIME = 5;
|
||||||
|
public const SORT_BY_NAME_NATURAL = 6;
|
||||||
|
|
||||||
|
private $iterator;
|
||||||
|
private $sort;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Traversable $iterator The Iterator to filter
|
||||||
|
* @param int|callable $sort The sort type (SORT_BY_NAME, SORT_BY_TYPE, or a PHP callback)
|
||||||
|
*
|
||||||
|
* @throws \InvalidArgumentException
|
||||||
|
*/
|
||||||
|
public function __construct(\Traversable $iterator, $sort, bool $reverseOrder = false)
|
||||||
|
{
|
||||||
|
$this->iterator = $iterator;
|
||||||
|
$order = $reverseOrder ? -1 : 1;
|
||||||
|
|
||||||
|
if (self::SORT_BY_NAME === $sort) {
|
||||||
|
$this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) {
|
||||||
|
return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
|
||||||
|
};
|
||||||
|
} elseif (self::SORT_BY_NAME_NATURAL === $sort) {
|
||||||
|
$this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) {
|
||||||
|
return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
|
||||||
|
};
|
||||||
|
} elseif (self::SORT_BY_TYPE === $sort) {
|
||||||
|
$this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) {
|
||||||
|
if ($a->isDir() && $b->isFile()) {
|
||||||
|
return -$order;
|
||||||
|
} elseif ($a->isFile() && $b->isDir()) {
|
||||||
|
return $order;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname());
|
||||||
|
};
|
||||||
|
} elseif (self::SORT_BY_ACCESSED_TIME === $sort) {
|
||||||
|
$this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) {
|
||||||
|
return $order * ($a->getATime() - $b->getATime());
|
||||||
|
};
|
||||||
|
} elseif (self::SORT_BY_CHANGED_TIME === $sort) {
|
||||||
|
$this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) {
|
||||||
|
return $order * ($a->getCTime() - $b->getCTime());
|
||||||
|
};
|
||||||
|
} elseif (self::SORT_BY_MODIFIED_TIME === $sort) {
|
||||||
|
$this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) {
|
||||||
|
return $order * ($a->getMTime() - $b->getMTime());
|
||||||
|
};
|
||||||
|
} elseif (self::SORT_BY_NONE === $sort) {
|
||||||
|
$this->sort = $order;
|
||||||
|
} elseif (\is_callable($sort)) {
|
||||||
|
$this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort;
|
||||||
|
} else {
|
||||||
|
throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Traversable
|
||||||
|
*/
|
||||||
|
public function getIterator()
|
||||||
|
{
|
||||||
|
if (1 === $this->sort) {
|
||||||
|
return $this->iterator;
|
||||||
|
}
|
||||||
|
|
||||||
|
$array = iterator_to_array($this->iterator, true);
|
||||||
|
|
||||||
|
if (-1 === $this->sort) {
|
||||||
|
$array = array_reverse($array);
|
||||||
|
} else {
|
||||||
|
uasort($array, $this->sort);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new \ArrayIterator($array);
|
||||||
|
}
|
||||||
|
}
|
19
SafeBoxEncryptor/vendor/symfony/finder/LICENSE
vendored
Normal file
19
SafeBoxEncryptor/vendor/symfony/finder/LICENSE
vendored
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2004-2021 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.
|
14
SafeBoxEncryptor/vendor/symfony/finder/README.md
vendored
Normal file
14
SafeBoxEncryptor/vendor/symfony/finder/README.md
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
Finder Component
|
||||||
|
================
|
||||||
|
|
||||||
|
The Finder component finds files and directories via an intuitive fluent
|
||||||
|
interface.
|
||||||
|
|
||||||
|
Resources
|
||||||
|
---------
|
||||||
|
|
||||||
|
* [Documentation](https://symfony.com/doc/current/components/finder.html)
|
||||||
|
* [Contributing](https://symfony.com/doc/current/contributing/index.html)
|
||||||
|
* [Report issues](https://github.com/symfony/symfony/issues) and
|
||||||
|
[send Pull Requests](https://github.com/symfony/symfony/pulls)
|
||||||
|
in the [main Symfony repository](https://github.com/symfony/symfony)
|
85
SafeBoxEncryptor/vendor/symfony/finder/SplFileInfo.php
vendored
Normal file
85
SafeBoxEncryptor/vendor/symfony/finder/SplFileInfo.php
vendored
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
<?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\Component\Finder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends \SplFileInfo to support relative paths.
|
||||||
|
*
|
||||||
|
* @author Fabien Potencier <fabien@symfony.com>
|
||||||
|
*/
|
||||||
|
class SplFileInfo extends \SplFileInfo
|
||||||
|
{
|
||||||
|
private $relativePath;
|
||||||
|
private $relativePathname;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $file The file name
|
||||||
|
* @param string $relativePath The relative path
|
||||||
|
* @param string $relativePathname The relative path name
|
||||||
|
*/
|
||||||
|
public function __construct(string $file, string $relativePath, string $relativePathname)
|
||||||
|
{
|
||||||
|
parent::__construct($file);
|
||||||
|
$this->relativePath = $relativePath;
|
||||||
|
$this->relativePathname = $relativePathname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the relative path.
|
||||||
|
*
|
||||||
|
* This path does not contain the file name.
|
||||||
|
*
|
||||||
|
* @return string the relative path
|
||||||
|
*/
|
||||||
|
public function getRelativePath()
|
||||||
|
{
|
||||||
|
return $this->relativePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the relative path name.
|
||||||
|
*
|
||||||
|
* This path contains the file name.
|
||||||
|
*
|
||||||
|
* @return string the relative path name
|
||||||
|
*/
|
||||||
|
public function getRelativePathname()
|
||||||
|
{
|
||||||
|
return $this->relativePathname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFilenameWithoutExtension(): string
|
||||||
|
{
|
||||||
|
$filename = $this->getFilename();
|
||||||
|
|
||||||
|
return pathinfo($filename, \PATHINFO_FILENAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the contents of the file.
|
||||||
|
*
|
||||||
|
* @return string the contents of the file
|
||||||
|
*
|
||||||
|
* @throws \RuntimeException
|
||||||
|
*/
|
||||||
|
public function getContents()
|
||||||
|
{
|
||||||
|
set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; });
|
||||||
|
$content = file_get_contents($this->getPathname());
|
||||||
|
restore_error_handler();
|
||||||
|
if (false === $content) {
|
||||||
|
throw new \RuntimeException($error);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
}
|
28
SafeBoxEncryptor/vendor/symfony/finder/composer.json
vendored
Normal file
28
SafeBoxEncryptor/vendor/symfony/finder/composer.json
vendored
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"name": "symfony/finder",
|
||||||
|
"type": "library",
|
||||||
|
"description": "Finds files and directories via an intuitive fluent interface",
|
||||||
|
"keywords": [],
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Fabien Potencier",
|
||||||
|
"email": "fabien@symfony.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2.5"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": { "Symfony\\Component\\Finder\\": "" },
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user