about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2018-08-28 19:51:36 +0200
committerGitHub <noreply@github.com>2018-08-28 19:51:36 +0200
commit14563f51674aa601b7684dc62a394469a9634c4d (patch)
tree3ed84be5da351d2819fcc6088c273e34c9c86846
parent3fe5029fbec1e328d95b768f6bd40fec8af0906c (diff)
parent43d132039bf0fdd8c6bc6e2a1d2fe3ef59c0710f (diff)
Merge pull request #684 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
-rw-r--r--app/javascript/mastodon/components/status.js4
-rw-r--r--app/views/admin/relays/_relay.html.haml10
-rw-r--r--config/locales/en.yml1
-rw-r--r--spec/fabricators/relay_fabricator.rb2
-rw-r--r--spec/lib/activitypub/activity/accept_spec.rb26
-rw-r--r--spec/lib/activitypub/activity/reject_spec.rb26
6 files changed, 63 insertions, 6 deletions
diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js
index 7090c12d0..43647acc0 100644
--- a/app/javascript/mastodon/components/status.js
+++ b/app/javascript/mastodon/components/status.js
@@ -269,10 +269,10 @@ export default class Status extends ImmutablePureComponent {
 
     return (
       <HotKeys handlers={handlers}>
-        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText, !status.get('hidden'))}>
+        <div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText, !status.get('hidden'))}>
           {prepend}
 
-          <div className={classNames('status', `status-${status.get('visibility')}`, { muted: this.props.muted })} data-id={status.get('id')}>
+          <div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}>
             <div className='status__info'>
               <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'><RelativeTimestamp timestamp={status.get('created_at')} /></a>
 
diff --git a/app/views/admin/relays/_relay.html.haml b/app/views/admin/relays/_relay.html.haml
index d974c80a6..667821894 100644
--- a/app/views/admin/relays/_relay.html.haml
+++ b/app/views/admin/relays/_relay.html.haml
@@ -2,20 +2,24 @@
   %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') }
diff --git a/config/locales/en.yml b/config/locales/en.yml
index b185ae28a..38a6df8f7 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -303,6 +303,7 @@ en:
       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
diff --git a/spec/fabricators/relay_fabricator.rb b/spec/fabricators/relay_fabricator.rb
index 2c9df4ad3..3f8726f6b 100644
--- a/spec/fabricators/relay_fabricator.rb
+++ b/spec/fabricators/relay_fabricator.rb
@@ -1,4 +1,4 @@
 Fabricator(:relay) do
   inbox_url "https://example.com/inbox"
-  enabled   true
+  state   :idle
 end
diff --git a/spec/lib/activitypub/activity/accept_spec.rb b/spec/lib/activitypub/activity/accept_spec.rb
index 6503c83e3..883bab6ac 100644
--- a/spec/lib/activitypub/activity/accept_spec.rb
+++ b/spec/lib/activitypub/activity/accept_spec.rb
@@ -35,4 +35,30 @@ RSpec.describe ActivityPub::Activity::Accept do
       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
diff --git a/spec/lib/activitypub/activity/reject_spec.rb b/spec/lib/activitypub/activity/reject_spec.rb
index 7fd95bcc6..e7205df8d 100644
--- a/spec/lib/activitypub/activity/reject_spec.rb
+++ b/spec/lib/activitypub/activity/reject_spec.rb
@@ -35,4 +35,30 @@ RSpec.describe ActivityPub::Activity::Reject do
       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