mirror of
https://github.com/BillyOutlast/UNIT3D.git
synced 2026-02-05 19:51:21 +01:00
Filenames were randomized for a few of these to prevent public access, but it's still much better to put user-uploaded files behind auth.
72 lines
2.0 KiB
PHP
72 lines
2.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* NOTICE OF LICENSE.
|
|
*
|
|
* UNIT3D Community Edition is open-sourced software licensed under the GNU Affero General Public License v3.0
|
|
* The details is bundled with this project in the file LICENSE.txt.
|
|
*
|
|
* @project UNIT3D Community Edition
|
|
*
|
|
* @author Roardom <roardom@protonmail.com>
|
|
* @license https://www.gnu.org/licenses/agpl-3.0.en.html/ GNU Affero General Public License v3.0
|
|
*/
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Helpers\Bencode;
|
|
use App\Models\Torrent;
|
|
use Exception;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Throwable;
|
|
|
|
class CleanTorrentFiles extends Command
|
|
{
|
|
/**
|
|
* The console command name.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $name = 'clean:torrent_files';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Cleans torrent files to remove extra unneeded data';
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @throws Exception|Throwable If there is an error during the execution of the command.
|
|
*/
|
|
final public function handle(): void
|
|
{
|
|
$this->alert('Torrent file cleaning started');
|
|
|
|
Torrent::withoutGlobalScopes()->select('file_name')->orderBy('id')->chunk(100, function ($torrents): void {
|
|
foreach ($torrents as $torrent) {
|
|
if (Storage::disk('torrent-files')->exists($torrent->file_name)) {
|
|
$filePath = Storage::disk('torrent-files')->path($torrent->file_name);
|
|
$dict = Bencode::bdecode_file($filePath);
|
|
|
|
// Whitelisted keys
|
|
$dict = array_intersect_key($dict, [
|
|
'created by' => '',
|
|
'encoding' => '',
|
|
'info' => '',
|
|
]);
|
|
|
|
Storage::disk('torrent-files')->put($filePath, Bencode::bencode($dict));
|
|
}
|
|
}
|
|
});
|
|
|
|
$this->alert('Torrent file cleaning complete');
|
|
}
|
|
}
|