use Asika\SimpleConsole\CommandArgsException;
use Friendica\Model\APContact;
-use Friendica\Model\Contact;
use Friendica\Protocol\ActivityPub\Transmitter;
+use Friendica\Protocol\Relay as ProtocolRelay;
/**
* tool to control the list of ActivityPub relay servers from the CLI
}
if ((count($this->args) == 1) && ($this->getArgument(0) == 'list')) {
- $contacts = $this->dba->select('apcontact', ['url'],
- ["`type` IN (?, ?) AND `url` IN (SELECT `url` FROM `contact` WHERE `uid` = ? AND `rel` = ?)",
- 'Application', 'Service', 0, Contact::FRIEND]);
- while ($contact = $this->dba->fetch($contacts)) {
+ foreach (ProtocolRelay::getList(['url']) as $contact) {
$this->out($contact['url']);
}
- $this->dba->close($contacts);
} elseif (count($this->args) == 0) {
throw new CommandArgsException('too few arguments');
} elseif (count($this->args) == 1) {
*/
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') {
return false;
}
public static function getList(array $fields = []): array
{
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]);
}
/**