diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-12-22 23:03:57 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-12-22 23:03:57 +0100 |
commit | b891a81008d2cf595cb37432a8e1f36606db16d6 (patch) | |
tree | e3b083966fc14dda46a2ec75586fdf566c2585aa /app/models | |
parent | 2d2154ba75279186b064c887452b7d6ee70b8ba2 (diff) |
Follow call on locked account creates follow request instead
Reflect "requested" relationship in API and UI Reflect inability of private posts to be reblogged in the UI Disable Webfinger for locked accounts
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/account.rb | 6 | ||||
-rw-r--r-- | app/models/follow_request.rb | 19 | ||||
-rw-r--r-- | app/models/status.rb | 2 |
3 files changed, 26 insertions, 1 deletions
diff --git a/app/models/account.rb b/app/models/account.rb index aa904588b..273c09833 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -34,6 +34,8 @@ class Account < ApplicationRecord has_many :notifications, inverse_of: :account, dependent: :destroy # Follow relations + has_many :follow_requests, dependent: :destroy + has_many :active_relationships, class_name: 'Follow', foreign_key: 'account_id', dependent: :destroy has_many :passive_relationships, class_name: 'Follow', foreign_key: 'target_account_id', dependent: :destroy @@ -179,6 +181,10 @@ class Account < ApplicationRecord def blocking_map(target_account_ids, account_id) Block.where(target_account_id: target_account_ids).where(account_id: account_id).map { |b| [b.target_account_id, true] }.to_h end + + def requested_map(target_account_ids, account_id) + FollowRequest.where(target_account_id: target_account_ids).where(account_id: account_id).map { |r| [r.target_account_id, true] }.to_h + end end before_create do diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb new file mode 100644 index 000000000..132316fb4 --- /dev/null +++ b/app/models/follow_request.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class FollowRequest < ApplicationRecord + belongs_to :account + belongs_to :target_account, class_name: 'Account' + + validates :account, :target_account, presence: true + validates :account_id, uniqueness: { scope: :target_account_id } + + def authorize! + account.follow!(target_account) + FeedManager.instance.merge_into_timeline(target_account, account) + destroy! + end + + def reject! + destroy! + end +end diff --git a/app/models/status.rb b/app/models/status.rb index 1e6298a0e..033ae0529 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -170,7 +170,7 @@ class Status < ApplicationRecord text.strip! self.reblog = reblog.reblog if reblog? && reblog.reblog? self.in_reply_to_account_id = thread.account_id if reply? - self.visibility = :public if visibility.nil? + self.visibility = (account.locked? ? :private : :public) if visibility.nil? end private |