Synopsis
bin/console relay list [-h|--help|-?] [-v]
bin/console relay add <actor> [-h|--help|-?] [-v]
- bin/console relay remove <actor> [-h|--help|-?] [-v]
+ bin/console relay remove <actor> [-f|--force] [-h|--help|-?] [-v]
Description
bin/console relay list
Remove a relay actor in the format https://relayserver.tld/actor
Options
+ -f|--force Change the relay status in the system even if the unsubscribe message failed
-h|--help|-? Show help information
-v Show more debug information.
HELP;
$this->out($actor . " couldn't be added");
}
} elseif ($mode == 'remove') {
- if (Transmitter::sendRelayUndoFollow($actor)) {
+ $force = $this->getOption(['f', 'force'], false);
+
+ if (Transmitter::sendRelayUndoFollow($actor, $force)) {
$this->out('Successfully removed ' . $actor);
- } else {
+ } elseif (!$force) {
$this->out($actor . " couldn't be removed");
+ } else {
+ $this->out($actor . " is forcefully removed");
}
} else {
throw new CommandArgsException($mode . ' is no valid command');
return;
}
+ $contact = Contact::getByURL($actor);
+ if (empty($contact)) {
+ Logger::info('Relay contact not found', ['actor' => $actor]);
+ return;
+ }
+
+ if (!in_array($contact['rel'], [Contact::SHARING, Contact::FRIEND])) {
+ Logger::notice('Relay is no sharer', ['actor' => $actor]);
+ return;
+ }
+
Logger::info('Got relayed message id', ['id' => $object_id]);
$item_id = Item::searchByLink($object_id);
*/
public static function sendRelayFollow(string $url)
{
- $contact_id = Contact::getIdForURL($url);
- if (!$contact_id) {
+ $contact = Contact::getByURL($url);
+ if (empty($contact)) {
return false;
}
- $activity_id = ActivityPub\Transmitter::activityIDFromContact($contact_id);
+ $activity_id = ActivityPub\Transmitter::activityIDFromContact($contact['id']);
$success = ActivityPub\Transmitter::sendActivity('Follow', $url, 0, $activity_id);
if ($success) {
- DBA::update('contact', ['rel' => Contact::FRIEND], ['id' => $contact_id]);
+ $rel = $contact['rel'] == Contact::SHARING ? Contact::FRIEND : Contact::FOLLOWER;
+ DBA::update('contact', ['rel' => $rel], ['id' => $contact['id']]);
}
return $success;
/**
* Unsubscribe from a relay
*
- * @param string $url Subscribe actor url
+ * @param string $url Subscribe actor url
+ * @param bool $force Set the relay status as non follower even if unsubscribe hadn't worked
* @return bool success
*/
- public static function sendRelayUndoFollow(string $url)
+ public static function sendRelayUndoFollow(string $url, bool $force = false)
{
- $contact_id = Contact::getIdForURL($url);
- if (!$contact_id) {
+ $contact = Contact::getByURL($url);
+ if (empty($contact)) {
return false;
}
- $success = self::sendContactUndo($url, $contact_id, 0);
- if ($success) {
- DBA::update('contact', ['rel' => Contact::SHARING], ['id' => $contact_id]);
+ $success = self::sendContactUndo($url, $contact['id'], 0);
+ if ($success || $force) {
+ $rel = $contact['rel'] == Contact::FRIEND ? Contact::SHARING : Contact::NOTHING;
+ DBA::update('contact', ['rel' => $rel], ['id' => $contact['id']]);
}
return $success;