source = $source; $this->missing = []; $this->updated = []; $this->sources = $source::where("active", true)->get(); } public function getActive() { return $this->source::where("active", true)->get(); } public function updateSourceData($index = 0) { //$sources = $this->getActive(); //checks all the sources to refresh data $count = count($this->sources); if ($count == 0) { return [ 'checked' => $this->updated, 'notchecked' => $this->missing, 'count' => $count, 'updated' => 'false', ]; } else { //check index if ($index <= $count - 1) { $source = $this->sources[$index]; $result = $this->getMastoBlocklist($source); if (count($result) > 0) { $source->list_data = json_encode($result); $source->last_updated = Carbon::now(); $source->save(); array_push($this->updated, ['source' => $source->url]); $index++; $result = $this->updateSourceData($index); } else { //if empty run the same index again array_push($this->missing, ['source' => $source->url]); $result = $this->updateSourceData($index); } } else { //continue } return [ 'checked' => $this->updated, 'notchecked' => $this->missing, 'count' => $count, 'updated' => 'true', ]; } } private function getMastoBlocklist($source) { $result = []; if ($source['type'] == 'mastodon') { if ($source['token'] == null) { try { $result = \Mastodon::domain('https://' . $source['url']) ->get('/instance/domain_blocks'); //array_push($checked, ['source' => $source->url]); } catch (ConnectException $e) { //dd($source); //array_push($missing, ['source' => $source->url]); } } else { try { $result = \Mastodon::domain('https://' . $source['url']) ->token($source['token']) ->get('/instance/domain_blocks'); //array_push($checked, ['source' => $source->url]); } catch (ConnectException $e) { //array_push($missing, ['source' => $source->url]); //dd($source); } } } elseif ($source['type'] == 'custom' && $source['format'] == 'csv') { try { $denylist = array_map('str_getcsv', file('https://' . $source['url'])); foreach ($denylist as $item) { array_push($result, [ 'domain' => $item[0], 'severity' => $item[1], 'comment' => $item[2]]); } array_push($checked, ['source' => $source->url]); } catch (Exception $e) { array_push($missing, ['source' => $source->url]); } } return $result; } }