about summary refs log tree commit diff
path: root/app/models/relay.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2018-08-12 18:16:26 +0200
committerGitHub <noreply@github.com>2018-08-12 18:16:26 +0200
commit39e361a56d849a027ed12df69122a369bc6ff39d (patch)
treecf178ca2ebfda1c101bba438b42e472926647067 /app/models/relay.rb
parent2aeeffc3ec421111f751cab61a15642cbddd9f0d (diff)
Expect relays to answer with accept/reject (#8179)
Diffstat (limited to 'app/models/relay.rb')
-rw-r--r--app/models/relay.rb12
1 files changed, 8 insertions, 4 deletions
diff --git a/app/models/relay.rb b/app/models/relay.rb
index 76143bb27..75cb060b2 100644
--- a/app/models/relay.rb
+++ b/app/models/relay.rb
@@ -5,10 +5,10 @@
 #
 #  id                 :bigint(8)        not null, primary key
 #  inbox_url          :string           default(""), not null
-#  enabled            :boolean          default(FALSE), not null
 #  follow_activity_id :string
 #  created_at         :datetime         not null
 #  updated_at         :datetime         not null
+#  state              :integer          default("idle"), not null
 #
 
 class Relay < ApplicationRecord
@@ -16,24 +16,28 @@ class Relay < ApplicationRecord
 
   validates :inbox_url, presence: true, uniqueness: true, url: true, if: :will_save_change_to_inbox_url?
 
-  scope :enabled, -> { where(enabled: true) }
+  enum state: [:idle, :pending, :accepted, :rejected]
+
+  scope :enabled, -> { accepted }
 
   before_destroy :ensure_disabled
 
+  alias enabled? accepted?
+
   def enable!
     activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
     payload     = Oj.dump(follow_activity(activity_id))
 
+    update!(state: :pending, follow_activity_id: activity_id)
     ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
-    update(enabled: true, follow_activity_id: activity_id)
   end
 
   def disable!
     activity_id = ActivityPub::TagManager.instance.generate_uri_for(nil)
     payload     = Oj.dump(unfollow_activity(activity_id))
 
+    update!(state: :idle, follow_activity_id: nil)
     ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
-    update(enabled: false, follow_activity_id: nil)
   end
 
   private