mirror of
https://github.com/NNTmux/newznab-tmux.git
synced 2026-08-28 17:01:16 +00:00
Update 7z support
This commit is contained in:
@@ -117,6 +117,7 @@ ECHOCLI=true
|
||||
RENAME_PAR2=false
|
||||
ADD_PAR2=false
|
||||
RENAME_MUSIC_MEDIAINFO=true
|
||||
FETCH_LAST_FILE=true
|
||||
CACHE_EXPIRY_SHORT=5
|
||||
CACHE_EXPIRY_MEDIUM=10
|
||||
CACHE_EXPIRY_LONG=15
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,287 @@
|
||||
<?php
|
||||
|
||||
namespace Blacklight\processing\post;
|
||||
|
||||
/**
|
||||
* Minimal partial 7z header parser to recover file names from an in-memory buffer.
|
||||
* Supports unencoded headers directly; encoded headers are flagged so caller can fallback
|
||||
* to external 7z listing for sizes/attributes. Provides heuristics for encryption.
|
||||
*/
|
||||
class SevenZipPartialParser
|
||||
{
|
||||
private string $data;
|
||||
|
||||
private int $len;
|
||||
|
||||
private array $names = [];
|
||||
|
||||
private bool $parsed = false;
|
||||
|
||||
private bool $encodedHeader = false; // flag if we encountered kEncodedHeader
|
||||
|
||||
private bool $encrypted = false; // heuristic flag if AES encryption detected
|
||||
|
||||
// 7z IDs we care about
|
||||
private const K_HEADER = 0x01;
|
||||
|
||||
private const K_ARCHIVE_PROPERTIES = 0x02; // skipped
|
||||
|
||||
private const K_ADDITIONAL_STREAMS_INFO = 0x03; // skipped
|
||||
|
||||
private const K_MAIN_STREAMS_INFO = 0x04; // skipped
|
||||
|
||||
private const K_FILES_INFO = 0x05;
|
||||
|
||||
private const K_END = 0x00;
|
||||
|
||||
private const K_ENCODED_HEADER = 0x17; // unsupported here
|
||||
|
||||
private const K_NAME = 0x11;
|
||||
|
||||
public function __construct(string $data)
|
||||
{
|
||||
$this->data = $data;
|
||||
$this->len = strlen($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Public accessor: returns recovered filenames (UTF-8) or empty array.
|
||||
*/
|
||||
public function getFileNames(): array
|
||||
{
|
||||
if (! $this->parsed) {
|
||||
$this->parse();
|
||||
}
|
||||
|
||||
return $this->names;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public accessor: returns true if AES encryption is detected (heuristic).
|
||||
*/
|
||||
public function isEncrypted(): bool
|
||||
{
|
||||
if (! $this->parsed) {
|
||||
$this->parse();
|
||||
}
|
||||
|
||||
return $this->encrypted;
|
||||
}
|
||||
|
||||
public function hasEncodedHeader(): bool
|
||||
{
|
||||
if (! $this->parsed) {
|
||||
$this->parse();
|
||||
}
|
||||
|
||||
return $this->encodedHeader;
|
||||
}
|
||||
|
||||
private function parse(): void
|
||||
{
|
||||
$this->parsed = true;
|
||||
if ($this->len < 32) { // need at least fixed header
|
||||
return;
|
||||
}
|
||||
// Signature check
|
||||
if (strncmp($this->data, "\x37\x7A\xBC\xAF\x27\x1C", 6) !== 0) {
|
||||
return;
|
||||
}
|
||||
$nextHeaderOffset = $this->readUInt64LE(12);
|
||||
$nextHeaderSize = $this->readUInt64LE(20);
|
||||
// Bounds sanity
|
||||
if ($nextHeaderSize <= 0 || $nextHeaderSize > 4 * 1024 * 1024) { // cap 4MB header
|
||||
return;
|
||||
}
|
||||
$nextHeaderStart = 32 + $nextHeaderOffset;
|
||||
$nextHeaderEnd = $nextHeaderStart + $nextHeaderSize;
|
||||
if ($nextHeaderEnd > $this->len) { // incomplete buffer
|
||||
return;
|
||||
}
|
||||
$cursor = $nextHeaderStart;
|
||||
// First byte may be kEncodedHeader (unsupported) or kHeader
|
||||
$id = ord($this->data[$cursor]);
|
||||
if ($id === self::K_ENCODED_HEADER) {
|
||||
$this->encodedHeader = true; // caller can try external 7z listing fallback
|
||||
// Heuristic: scan a limited window after this byte for AES method ID (06 F1 07 01) indicating encryption.
|
||||
$scan = substr($this->data, $cursor, min(512, $this->len - $cursor));
|
||||
if (strpos($scan, "\x06\xF1\x07\x01") !== false) {
|
||||
$this->encrypted = true;
|
||||
}
|
||||
|
||||
return; // we don't decode here
|
||||
}
|
||||
if ($id !== self::K_HEADER) {
|
||||
return; // unexpected structure
|
||||
}
|
||||
$cursor++;
|
||||
// Loop until K_END looking for K_FILES_INFO (0x05)
|
||||
while ($cursor < $nextHeaderEnd) {
|
||||
$id = ord($this->data[$cursor]);
|
||||
$cursor++;
|
||||
if ($id === self::K_END) {
|
||||
break; // done
|
||||
}
|
||||
if ($id === self::K_FILES_INFO) {
|
||||
$cursor = $this->parseFilesInfo($cursor, $nextHeaderEnd);
|
||||
break; // stop after names
|
||||
} else {
|
||||
// Skip blocks we don't parse by walking their internal structure heuristically.
|
||||
// For archive/main streams info we skip until their terminating K_END.
|
||||
if (in_array($id, [self::K_ARCHIVE_PROPERTIES, self::K_ADDITIONAL_STREAMS_INFO, self::K_MAIN_STREAMS_INFO], true)) {
|
||||
$cursor = $this->skipUntilEnd($cursor, $nextHeaderEnd);
|
||||
if ($cursor === -1) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
// Unknown ID – bail out
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function parseFilesInfo(int $cursor, int $limit): int
|
||||
{
|
||||
// Number of files (VInt)
|
||||
$numFiles = $this->readVIntAt($cursor, $value, $newCursor, $limit) ? $value : null;
|
||||
if ($numFiles === null || $numFiles < 0 || $numFiles > 10000) { // sanity cap
|
||||
return $limit; // abort
|
||||
}
|
||||
$cursor = $newCursor;
|
||||
// Property loop until K_END
|
||||
$names = [];
|
||||
while ($cursor < $limit) {
|
||||
$propId = ord($this->data[$cursor]);
|
||||
$cursor++;
|
||||
if ($propId === self::K_END) {
|
||||
break;
|
||||
}
|
||||
// Size of property data (VInt)
|
||||
if (! $this->readVIntAt($cursor, $propSize, $cursor, $limit)) {
|
||||
break;
|
||||
}
|
||||
if ($propSize < 0 || $propSize > ($limit - $cursor)) {
|
||||
break;
|
||||
}
|
||||
if ($propId === self::K_NAME) {
|
||||
if ($propSize < 1) {
|
||||
break;
|
||||
}
|
||||
$external = ord($this->data[$cursor]);
|
||||
if ($external !== 0) { // External data not supported
|
||||
break;
|
||||
}
|
||||
$nameBytes = $propSize - 1;
|
||||
$cursor++;
|
||||
if ($nameBytes <= 0) {
|
||||
break;
|
||||
}
|
||||
$blob = substr($this->data, $cursor, $nameBytes);
|
||||
// Ensure even length for UTF-16LE. Truncate last byte if odd.
|
||||
if (($nameBytes & 1) === 1) {
|
||||
$blob = substr($blob, 0, -1);
|
||||
}
|
||||
// Split on UTF-16LE null terminators (00 00)
|
||||
$segments = preg_split('/\x00\x00/', $blob);
|
||||
foreach ($segments as $seg) {
|
||||
if ($seg === '') {
|
||||
continue;
|
||||
}
|
||||
$utf8 = @iconv('UTF-16LE', 'UTF-8//IGNORE', $seg); // may return false
|
||||
if ($utf8 === false) {
|
||||
continue;
|
||||
}
|
||||
$utf8 = trim($utf8);
|
||||
if ($utf8 === '') {
|
||||
continue;
|
||||
}
|
||||
// Basic filtering – exclude paths with directory separators beyond simple relative path
|
||||
$utf8Clean = str_replace(['\\'], '/', $utf8);
|
||||
// Remove leading './'
|
||||
$utf8Clean = preg_replace('#^\./#', '', $utf8Clean);
|
||||
if ($utf8Clean === '' || substr_count($utf8Clean, '/') > 8) { // excessive depth -> skip
|
||||
continue;
|
||||
}
|
||||
$names[] = $utf8Clean;
|
||||
if (count($names) >= $numFiles) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Done reading this property
|
||||
$cursor += $nameBytes;
|
||||
// We collected names; we can stop early.
|
||||
$this->names = array_values(array_unique($names));
|
||||
|
||||
return $limit;
|
||||
} else {
|
||||
// Skip property we don't care about
|
||||
$cursor += $propSize;
|
||||
}
|
||||
}
|
||||
// Assign if we gathered any
|
||||
if ($names) {
|
||||
$this->names = array_values(array_unique($names));
|
||||
}
|
||||
|
||||
return $limit;
|
||||
}
|
||||
|
||||
private function skipUntilEnd(int $cursor, int $limit): int
|
||||
{
|
||||
while ($cursor < $limit) {
|
||||
$id = ord($this->data[$cursor]);
|
||||
$cursor++;
|
||||
if ($id === self::K_END) {
|
||||
return $cursor;
|
||||
}
|
||||
// Property-like: read size then skip
|
||||
if (! $this->readVIntAt($cursor, $propSize, $cursor, $limit)) {
|
||||
return -1;
|
||||
}
|
||||
if ($propSize < 0 || $propSize > ($limit - $cursor)) {
|
||||
return -1;
|
||||
}
|
||||
$cursor += $propSize;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads a 7z variable-length integer at offset, returns value via reference.
|
||||
*/
|
||||
private function readVIntAt(int $offset, ?int &$value, ?int &$newOffset, int $limit): bool
|
||||
{
|
||||
$value = 0;
|
||||
$shift = 0;
|
||||
$pos = $offset;
|
||||
while ($pos < $limit && $shift <= 63) {
|
||||
$b = ord($this->data[$pos]);
|
||||
$pos++;
|
||||
$value |= ($b & 0x7F) << $shift;
|
||||
if (($b & 0x80) === 0) {
|
||||
$newOffset = $pos;
|
||||
|
||||
return true;
|
||||
}
|
||||
$shift += 7;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function readUInt64LE(int $offset): int
|
||||
{
|
||||
if ($offset + 8 > $this->len) {
|
||||
return 0;
|
||||
}
|
||||
$v = 0;
|
||||
for ($i = 0; $i < 8; $i++) {
|
||||
$v |= ord($this->data[$offset + $i]) << ($i * 8);
|
||||
}
|
||||
|
||||
// Constrain to PHP int (on 64-bit fine; on 32-bit may overflow but those environments uncommon here)
|
||||
return $v & 0xFFFFFFFFFFFFFFFF;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -30,7 +30,7 @@
|
||||
"conditions": []
|
||||
},
|
||||
{
|
||||
"action": "vendor/bin/php-cs-fixer fix",
|
||||
"action": "vendor/bin/pint",
|
||||
"options": [],
|
||||
"conditions": []
|
||||
}
|
||||
|
||||
+1
-1
@@ -29,6 +29,7 @@
|
||||
"ext-iconv": "*",
|
||||
"ext-intl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-mysqlnd": "*",
|
||||
"ext-openssl": "*",
|
||||
@@ -200,7 +201,6 @@
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi"
|
||||
],
|
||||
"check-style": "php-cs-fixer fix --dry-run --diff",
|
||||
"fix-style": "pint"
|
||||
}
|
||||
}
|
||||
|
||||
Generated
+42
-42
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "10251ecba0052663a759a5be58b311d9",
|
||||
"content-hash": "ee41533387c7cf6236214d5ba2035c28",
|
||||
"packages": [
|
||||
{
|
||||
"name": "aharen/omdbapi",
|
||||
@@ -1022,23 +1022,23 @@
|
||||
},
|
||||
{
|
||||
"name": "dariusiii/tmdb-laravel",
|
||||
"version": "12.0.3",
|
||||
"version": "12.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/DariusIII/tmdb-laravel.git",
|
||||
"reference": "3c0fa42a0bd569b2a550cbc7631eab56c889f551"
|
||||
"reference": "c0b9ddf6f7094392cae174eb05fd200e3dbfea91"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/DariusIII/tmdb-laravel/zipball/3c0fa42a0bd569b2a550cbc7631eab56c889f551",
|
||||
"reference": "3c0fa42a0bd569b2a550cbc7631eab56c889f551",
|
||||
"url": "https://api.github.com/repos/DariusIII/tmdb-laravel/zipball/c0b9ddf6f7094392cae174eb05fd200e3dbfea91",
|
||||
"reference": "c0b9ddf6f7094392cae174eb05fd200e3dbfea91",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0",
|
||||
"nyholm/psr7": "^1.8",
|
||||
"php": ">=8.0",
|
||||
"php": ">=8.3",
|
||||
"php-tmdb/api": "^5.0"
|
||||
},
|
||||
"require-dev": {
|
||||
@@ -1092,9 +1092,9 @@
|
||||
"wrapper"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/DariusIII/tmdb-laravel/tree/12.0.3"
|
||||
"source": "https://github.com/DariusIII/tmdb-laravel/tree/12.1"
|
||||
},
|
||||
"time": "2025-03-26T11:19:20+00:00"
|
||||
"time": "2025-09-02T12:45:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dariusiii/tv-maze-php-api",
|
||||
@@ -15781,16 +15781,16 @@
|
||||
},
|
||||
{
|
||||
"name": "friendsofphp/php-cs-fixer",
|
||||
"version": "v3.86.0",
|
||||
"version": "v3.87.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
|
||||
"reference": "4a952bd19dc97879b0620f495552ef09b55f7d36"
|
||||
"reference": "50a13c4c5f25d2c6894e30e92c051474cf0e115a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/4a952bd19dc97879b0620f495552ef09b55f7d36",
|
||||
"reference": "4a952bd19dc97879b0620f495552ef09b55f7d36",
|
||||
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/50a13c4c5f25d2c6894e30e92c051474cf0e115a",
|
||||
"reference": "50a13c4c5f25d2c6894e30e92c051474cf0e115a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -15801,39 +15801,38 @@
|
||||
"ext-hash": "*",
|
||||
"ext-json": "*",
|
||||
"ext-tokenizer": "*",
|
||||
"fidry/cpu-core-counter": "^1.2",
|
||||
"fidry/cpu-core-counter": "^1.3",
|
||||
"php": "^7.4 || ^8.0",
|
||||
"react/child-process": "^0.6.6",
|
||||
"react/event-loop": "^1.5",
|
||||
"react/promise": "^3.2",
|
||||
"react/promise": "^3.3",
|
||||
"react/socket": "^1.16",
|
||||
"react/stream": "^1.4",
|
||||
"sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0",
|
||||
"symfony/console": "^5.4.47 || ^6.4.13 || ^7.0",
|
||||
"symfony/event-dispatcher": "^5.4.45 || ^6.4.13 || ^7.0",
|
||||
"symfony/filesystem": "^5.4.45 || ^6.4.13 || ^7.0",
|
||||
"symfony/finder": "^5.4.45 || ^6.4.17 || ^7.0",
|
||||
"symfony/options-resolver": "^5.4.45 || ^6.4.16 || ^7.0",
|
||||
"symfony/polyfill-mbstring": "^1.32",
|
||||
"symfony/polyfill-php80": "^1.32",
|
||||
"symfony/polyfill-php81": "^1.32",
|
||||
"symfony/process": "^5.4.47 || ^6.4.20 || ^7.2",
|
||||
"symfony/stopwatch": "^5.4.45 || ^6.4.19 || ^7.0"
|
||||
"symfony/console": "^5.4.47 || ^6.4.24 || ^7.0",
|
||||
"symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0",
|
||||
"symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0",
|
||||
"symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0",
|
||||
"symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0",
|
||||
"symfony/polyfill-mbstring": "^1.33",
|
||||
"symfony/polyfill-php80": "^1.33",
|
||||
"symfony/polyfill-php81": "^1.33",
|
||||
"symfony/process": "^5.4.47 || ^6.4.24 || ^7.2",
|
||||
"symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"facile-it/paraunit": "^1.3.1 || ^2.6",
|
||||
"facile-it/paraunit": "^1.3.1 || ^2.7",
|
||||
"infection/infection": "^0.29.14",
|
||||
"justinrainbow/json-schema": "^5.3 || ^6.4",
|
||||
"justinrainbow/json-schema": "^6.4",
|
||||
"keradus/cli-executor": "^2.2",
|
||||
"mikey179/vfsstream": "^1.6.12",
|
||||
"php-coveralls/php-coveralls": "^2.8",
|
||||
"php-cs-fixer/accessible-object": "^1.1",
|
||||
"php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
|
||||
"php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
|
||||
"phpunit/phpunit": "^9.6.23 || ^10.5.47 || ^11.5.25",
|
||||
"symfony/polyfill-php84": "^1.32",
|
||||
"symfony/var-dumper": "^5.4.48 || ^6.4.23 || ^7.3.1",
|
||||
"symfony/yaml": "^5.4.45 || ^6.4.23 || ^7.3.1"
|
||||
"phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34",
|
||||
"symfony/polyfill-php84": "^1.33",
|
||||
"symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2",
|
||||
"symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-dom": "For handling output formats in XML",
|
||||
@@ -15874,7 +15873,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.86.0"
|
||||
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v97773{PHP_CS_FIXER_VERSION}"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -15882,7 +15881,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-13T22:36:21+00:00"
|
||||
"time": "2025-09-02T10:58:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "hamcrest/hamcrest-php",
|
||||
@@ -16969,34 +16968,34 @@
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "12.3.4",
|
||||
"version": "12.3.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "7ad0e9bdc72b147600badccd694a2e57ffc9297a"
|
||||
"reference": "da2cdaff87220fa641e7652364281b736e4347e0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7ad0e9bdc72b147600badccd694a2e57ffc9297a",
|
||||
"reference": "7ad0e9bdc72b147600badccd694a2e57ffc9297a",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/da2cdaff87220fa641e7652364281b736e4347e0",
|
||||
"reference": "da2cdaff87220fa641e7652364281b736e4347e0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"nikic/php-parser": "^5.4.0",
|
||||
"nikic/php-parser": "^5.6.1",
|
||||
"php": ">=8.3",
|
||||
"phpunit/php-file-iterator": "^6.0",
|
||||
"phpunit/php-text-template": "^5.0",
|
||||
"sebastian/complexity": "^5.0",
|
||||
"sebastian/environment": "^8.0",
|
||||
"sebastian/environment": "^8.0.3",
|
||||
"sebastian/lines-of-code": "^4.0",
|
||||
"sebastian/version": "^6.0",
|
||||
"theseer/tokenizer": "^1.2.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^12.1"
|
||||
"phpunit/phpunit": "^12.3.7"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-pcov": "PHP extension that provides line coverage",
|
||||
@@ -17034,7 +17033,7 @@
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.4"
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.3.6"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -17054,7 +17053,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-29T11:32:44+00:00"
|
||||
"time": "2025-09-02T05:23:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
@@ -19316,6 +19315,7 @@
|
||||
"ext-iconv": "*",
|
||||
"ext-intl": "*",
|
||||
"ext-json": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-mbstring": "*",
|
||||
"ext-mysqlnd": "*",
|
||||
"ext-openssl": "*",
|
||||
|
||||
@@ -8,6 +8,7 @@ return [
|
||||
'delete_passworded_releases' => env('DELETE_PASSWORDED_RELEASES', false),
|
||||
'delete_possible_passworded_releases' => env('DELETE_POSSIBLE_PASSWORDED_RELEASES', false),
|
||||
'extract_using_rarinfo' => env('EXTRACT_USING_RARINFO', false),
|
||||
'fetch_last_file' => env('FETCH_LAST_FILE', true),
|
||||
'path_to_nzbs' => env('PATH_TO_NZBS', storage_path('nzb')),
|
||||
'private_profiles' => env('PRIVATE_PROFILES', true),
|
||||
'store_user_ip' => env('STORE_USER_IP', false),
|
||||
|
||||
Reference in New Issue
Block a user