forked from projects/thebadspace
ro
0eeab6355e
changed the the way files are uploaded to go into their own directory called 'references' organized by location, identified by uuid. the 'references' directory was added to git ignore to those images are not saved in the repo, since every install will have their own set of images also updated reference links to be shown on the front end if they have been added to a location unnecessary links where moved from the admin member template since they have been incorporated into the appropriate area. a template for editing member account information has also been added.
106 lines
3.4 KiB
PHP
106 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Models\Source;
|
|
use Carbon\Carbon;
|
|
use GuzzleHttp\Exception\ConnectException;
|
|
|
|
class SourceRepository
|
|
{
|
|
protected $source;
|
|
protected $missing;
|
|
protected $updated;
|
|
protected $sources;
|
|
|
|
public function __construct(Source $source)
|
|
{
|
|
$this->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)
|
|
{
|
|
//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');
|
|
} catch (ConnectException $e) {
|
|
//TODO: Logo Errors
|
|
}
|
|
} else {
|
|
try {
|
|
$result = \Mastodon::domain('https://' . $source['url'])
|
|
->token($source['token'])
|
|
->get('/instance/domain_blocks');
|
|
} catch (ConnectException $e) {
|
|
//TODO: Logo Errors
|
|
}
|
|
}
|
|
} 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;
|
|
}
|
|
}
|