validateDomain($domain); $this->processBlocks($domain); return; } protected function validateDomain($domain) { if(!strpos($domain, '.')) { $this->error('Invalid domain'); return; } if(str_starts_with($domain, 'https://')) { $domain = str_replace('https://', '', $domain); } if(str_starts_with($domain, 'http://')) { $domain = str_replace('http://', '', $domain); } $valid = filter_var($domain, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME|FILTER_NULL_ON_FAILURE); if(!$valid) { $this->error('Invalid domain'); return; } $domain = strtolower(parse_url('https://' . $domain, PHP_URL_HOST)); 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 ]); } }