Merge pull request #13323 from annando/relay

Improvements for relays like relay.fedi.buzz
This commit is contained in:
Hypolite Petovan 2023-07-30 20:53:14 +02:00 committed by GitHub
commit 737422330a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 7 deletions

View File

@ -23,8 +23,8 @@ namespace Friendica\Console;
use Asika\SimpleConsole\CommandArgsException; use Asika\SimpleConsole\CommandArgsException;
use Friendica\Model\APContact; use Friendica\Model\APContact;
use Friendica\Model\Contact;
use Friendica\Protocol\ActivityPub\Transmitter; use Friendica\Protocol\ActivityPub\Transmitter;
use Friendica\Protocol\Relay as ProtocolRelay;
/** /**
* tool to control the list of ActivityPub relay servers from the CLI * tool to control the list of ActivityPub relay servers from the CLI
@ -90,13 +90,9 @@ HELP;
} }
if ((count($this->args) == 1) && ($this->getArgument(0) == 'list')) { if ((count($this->args) == 1) && ($this->getArgument(0) == 'list')) {
$contacts = $this->dba->select('apcontact', ['url'], foreach (ProtocolRelay::getList(['url']) as $contact) {
["`type` IN (?, ?) AND `url` IN (SELECT `url` FROM `contact` WHERE `uid` = ? AND `rel` = ?)",
'Application', 'Service', 0, Contact::FRIEND]);
while ($contact = $this->dba->fetch($contacts)) {
$this->out($contact['url']); $this->out($contact['url']);
} }
$this->dba->close($contacts);
} elseif (count($this->args) == 0) { } elseif (count($this->args) == 0) {
throw new CommandArgsException('too few arguments'); throw new CommandArgsException('too few arguments');
} elseif (count($this->args) == 1) { } elseif (count($this->args) == 1) {

View File

@ -584,6 +584,14 @@ class APContact
*/ */
public static function isRelay(array $apcontact): bool public static function isRelay(array $apcontact): bool
{ {
if (in_array($apcontact['type'], ['Person', 'Organization'])) {
return false;
}
if (($apcontact['type'] == 'Service') && empty($apcontact['outbox']) && empty($apcontact['sharedinbox']) && empty($apcontact['following']) && empty($apcontact['followers']) && empty($apcontact['statuses_count'])) {
return true;
}
if (empty($apcontact['nick']) || $apcontact['nick'] != 'relay') { if (empty($apcontact['nick']) || $apcontact['nick'] != 'relay') {
return false; return false;
} }

View File

@ -354,7 +354,7 @@ class Relay
public static function getList(array $fields = []): array public static function getList(array $fields = []): array
{ {
return DBA::selectToArray('apcontact', $fields, return DBA::selectToArray('apcontact', $fields,
["`type` = ? AND `url` IN (SELECT `url` FROM `contact` WHERE `uid` = ? AND `rel` = ?)", 'Application', 0, Contact::FRIEND]); ["`type` IN (?, ?) AND `url` IN (SELECT `url` FROM `contact` WHERE `uid` = ? AND `rel` = ?)", 'Application', 'Service', 0, Contact::FRIEND]);
} }
/** /**