123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace App\Console\Commands;
- use Illuminate\Console\Command;
- use App\User;
- use App\Models\DefaultDomainBlock;
- use App\Models\UserDomainBlock;
- use function Laravel\Prompts\text;
- use function Laravel\Prompts\confirm;
- use function Laravel\Prompts\progress;
- class AddUserDomainBlock extends Command
- {
- /**
- * The name and signature of the console command.
- *
- * @var string
- */
- protected $signature = 'app:add-user-domain-block';
- /**
- * The console command description.
- *
- * @var string
- */
- protected $description = 'Apply a domain block to all users';
- /**
- * Execute the console command.
- */
- public function handle()
- {
- $domain = text('Enter domain you want to block');
- $domain = strtolower($domain);
- $domain = $this->validateDomain($domain);
- if(!$domain || empty($domain)) {
- $this->error('Invalid domain');
- return;
- }
- $this->processBlocks($domain);
- return;
- }
- protected function validateDomain($domain)
- {
- if(!strpos($domain, '.')) {
- return;
- }
- if(str_starts_with($domain, 'https://')) {
- $domain = str_replace('https://', '', $domain);
- }
- if(str_starts_with($domain, 'http://')) {
- $domain = str_replace('http://', '', $domain);
- }
- $domain = strtolower(parse_url('https://' . $domain, PHP_URL_HOST));
- $valid = filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME|FILTER_NULL_ON_FAILURE);
- if(!$valid) {
- return;
- }
- if($domain === config('pixelfed.domain.app')) {
- $this->error('Invalid domain');
- return;
- }
- $confirmed = confirm('Are you sure you want to block ' . $domain . '?');
- if(!$confirmed) {
- return;
- }
- return $domain;
- }
- protected function processBlocks($domain)
- {
- DefaultDomainBlock::updateOrCreate([
- 'domain' => $domain
- ]);
- progress(
- label: 'Updating user domain blocks...',
- steps: User::lazyById(500),
- callback: fn ($user) => $this->performTask($user, $domain),
- );
- }
- protected function performTask($user, $domain)
- {
- if(!$user->profile_id || $user->delete_after) {
- return;
- }
- if($user->status != null && $user->status != 'disabled') {
- return;
- }
- UserDomainBlock::updateOrCreate([
- 'profile_id' => $user->profile_id,
- 'domain' => $domain
- ]);
- }
- }
|