%td
%samp= relay.inbox_url
%td
- - if relay.enabled?
+ - if relay.accepted?
%span.positive-hint
= fa_icon('check')
= ' '
= t 'admin.relays.enabled'
+ - elsif relay.pending?
+ = fa_icon('hourglass')
+ = ' '
+ = t 'admin.relays.pending'
- else
%span.negative-hint
= fa_icon('times')
= ' '
= t 'admin.relays.disabled'
%td
- - if relay.enabled?
+ - if relay.accepted?
= table_link_to 'power-off', t('admin.relays.disable'), disable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
- - else
+ - elsif !relay.pending?
= table_link_to 'power-off', t('admin.relays.enable'), enable_admin_relay_path(relay), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
= table_link_to 'times', t('admin.relays.delete'), admin_relay_path(relay), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }
description_html: A <strong>federation relay</strong> is an intermediary server that exchanges large volumes of public toots between servers that subscribe and publish to it. <strong>It can help small and medium servers discover content from the fediverse</strong>, which would otherwise require local users manually following other people on remote servers.
enable_hint: Once enabled, your server will subscribe to all public toots from this relay, and will begin sending this server's public toots to it.
inbox_url: Relay URL
+ pending: Waiting for relay's approval
setup: Setup a relay connection
status: Status
title: Relays
Fabricator(:relay) do
inbox_url "https://example.com/inbox"
- enabled true
+ state :idle
end
expect(recipient.requested?(sender)).to be false
end
end
+
+ context 'given a relay' do
+ let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
+
+ let(:json) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: 'foo',
+ type: 'Accept',
+ actor: ActivityPub::TagManager.instance.uri_for(sender),
+ object: {
+ id: 'https://abc-123/456',
+ type: 'Follow',
+ actor: ActivityPub::TagManager.instance.uri_for(recipient),
+ object: ActivityPub::TagManager.instance.uri_for(sender),
+ },
+ }.with_indifferent_access
+ end
+
+ subject { described_class.new(json, sender) }
+
+ it 'marks the relay as accepted' do
+ subject.perform
+ expect(relay.reload.accepted?).to be true
+ end
+ end
end
expect(recipient.requested?(sender)).to be false
end
end
+
+ context 'given a relay' do
+ let!(:relay) { Fabricate(:relay, state: :pending, follow_activity_id: 'https://abc-123/456') }
+
+ let(:json) do
+ {
+ '@context': 'https://www.w3.org/ns/activitystreams',
+ id: 'foo',
+ type: 'Reject',
+ actor: ActivityPub::TagManager.instance.uri_for(sender),
+ object: {
+ id: 'https://abc-123/456',
+ type: 'Follow',
+ actor: ActivityPub::TagManager.instance.uri_for(recipient),
+ object: ActivityPub::TagManager.instance.uri_for(sender),
+ },
+ }.with_indifferent_access
+ end
+
+ subject { described_class.new(json, sender) }
+
+ it 'marks the relay as rejected' do
+ subject.perform
+ expect(relay.reload.rejected?).to be true
+ end
+ end
end