summaryrefslogtreecommitdiffstats
path: root/app/models/encrypted_message.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2020-06-02 19:24:53 +0200
committerGitHub <noreply@github.com>2020-06-02 19:24:53 +0200
commit5d8398c8b8b51ee7363e7d45acc560f489783e34 (patch)
tree1e0b663049feafdc003ad3c01b25bf5d5d793402 /app/models/encrypted_message.rb
parent9b7e3b4774d47c184aa759364d41f40e0cdfa210 (diff)
Add E2EE API (#13820)
Diffstat (limited to 'app/models/encrypted_message.rb')
-rw-r--r--app/models/encrypted_message.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/app/models/encrypted_message.rb b/app/models/encrypted_message.rb
new file mode 100644
index 00000000000..5e0aba4342a
--- /dev/null
+++ b/app/models/encrypted_message.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+# == Schema Information
+#
+# Table name: encrypted_messages
+#
+# id :bigint(8) not null, primary key
+# device_id :bigint(8)
+# from_account_id :bigint(8)
+# from_device_id :string default(""), not null
+# type :integer default(0), not null
+# body :text default(""), not null
+# digest :text default(""), not null
+# message_franking :text default(""), not null
+# created_at :datetime not null
+# updated_at :datetime not null
+#
+
+class EncryptedMessage < ApplicationRecord
+ self.inheritance_column = nil
+
+ include Paginable
+
+ scope :up_to, ->(id) { where(arel_table[:id].lteq(id)) }
+
+ belongs_to :device
+ belongs_to :from_account, class_name: 'Account'
+
+ around_create Mastodon::Snowflake::Callbacks
+
+ after_commit :push_to_streaming_api
+
+ private
+
+ def push_to_streaming_api
+ Rails.logger.info(streaming_channel)
+ Rails.logger.info(subscribed_to_timeline?)
+
+ return if destroyed? || !subscribed_to_timeline?
+
+ PushEncryptedMessageWorker.perform_async(id)
+ end
+
+ def subscribed_to_timeline?
+ Redis.current.exists("subscribed:#{streaming_channel}")
+ end
+
+ def streaming_channel
+ "timeline:#{device.account_id}:#{device.device_id}"
+ end
+end