forked from cybrespace/mastodon
Fix semantics of follow requests another slaps
This commit is contained in:
parent
0b95eb3612
commit
50660d54e8
|
@ -191,6 +191,7 @@ module AtomBuilderHelper
|
||||||
include_author xml, stream_entry.target
|
include_author xml, stream_entry.target
|
||||||
else
|
else
|
||||||
object_type xml, stream_entry.target.object_type
|
object_type xml, stream_entry.target.object_type
|
||||||
|
verb xml, stream_entry.target.verb
|
||||||
title xml, stream_entry.target.title
|
title xml, stream_entry.target.title
|
||||||
link_alternate xml, TagManager.instance.url_for(stream_entry.target)
|
link_alternate xml, TagManager.instance.url_for(stream_entry.target)
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,10 +18,6 @@ class Block < ApplicationRecord
|
||||||
target_account
|
target_account
|
||||||
end
|
end
|
||||||
|
|
||||||
def object_type
|
|
||||||
:person
|
|
||||||
end
|
|
||||||
|
|
||||||
def hidden?
|
def hidden?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,8 +19,6 @@ class Favourite < ApplicationRecord
|
||||||
destroyed? ? "#{account.acct} no longer favourites a status by #{status.account.acct}" : "#{account.acct} favourited a status by #{status.account.acct}"
|
destroyed? ? "#{account.acct} no longer favourites a status by #{status.account.acct}" : "#{account.acct} favourited a status by #{status.account.acct}"
|
||||||
end
|
end
|
||||||
|
|
||||||
delegate :object_type, to: :target
|
|
||||||
|
|
||||||
def thread
|
def thread
|
||||||
status
|
status
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,10 +20,6 @@ class Follow < ApplicationRecord
|
||||||
target_account
|
target_account
|
||||||
end
|
end
|
||||||
|
|
||||||
def object_type
|
|
||||||
:person
|
|
||||||
end
|
|
||||||
|
|
||||||
def title
|
def title
|
||||||
destroyed? ? "#{account.acct} is no longer following #{target_account.acct}" : "#{account.acct} started following #{target_account.acct}"
|
destroyed? ? "#{account.acct} is no longer following #{target_account.acct}" : "#{account.acct} started following #{target_account.acct}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -14,6 +14,7 @@ class FollowRequest < ApplicationRecord
|
||||||
|
|
||||||
def authorize!
|
def authorize!
|
||||||
@verb = :authorize
|
@verb = :authorize
|
||||||
|
@target = clone.freeze
|
||||||
|
|
||||||
account.follow!(target_account)
|
account.follow!(target_account)
|
||||||
MergeWorker.perform_async(target_account.id, account.id)
|
MergeWorker.perform_async(target_account.id, account.id)
|
||||||
|
@ -23,6 +24,8 @@ class FollowRequest < ApplicationRecord
|
||||||
|
|
||||||
def reject!
|
def reject!
|
||||||
@verb = :reject
|
@verb = :reject
|
||||||
|
@target = clone.freeze
|
||||||
|
|
||||||
destroy!
|
destroy!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,11 +34,11 @@ class FollowRequest < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def target
|
def target
|
||||||
|
if destroyed? && @verb
|
||||||
|
@target
|
||||||
|
else
|
||||||
target_account
|
target_account
|
||||||
end
|
end
|
||||||
|
|
||||||
def object_type
|
|
||||||
:person
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def hidden?
|
def hidden?
|
||||||
|
|
|
@ -10,6 +10,7 @@ class StreamEntry < ApplicationRecord
|
||||||
belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id'
|
belongs_to :follow, foreign_type: 'Follow', foreign_key: 'activity_id'
|
||||||
belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id'
|
belongs_to :favourite, foreign_type: 'Favourite', foreign_key: 'activity_id'
|
||||||
belongs_to :block, foreign_type: 'Block', foreign_key: 'activity_id'
|
belongs_to :block, foreign_type: 'Block', foreign_key: 'activity_id'
|
||||||
|
belongs_to :follow_request, foreign_type: 'FollowRequest', foreign_key: 'activity_id'
|
||||||
|
|
||||||
validates :account, :activity, presence: true
|
validates :account, :activity, presence: true
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ class StreamEntry < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def targeted?
|
def targeted?
|
||||||
[:follow, :request_friend, :authorize, :unfollow, :block, :unblock, :share, :favorite].include? verb
|
[:follow, :request_friend, :authorize, :reject, :unfollow, :block, :unblock, :share, :favorite].include? verb
|
||||||
end
|
end
|
||||||
|
|
||||||
def target
|
def target
|
||||||
|
@ -58,7 +59,7 @@ class StreamEntry < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def activity
|
def activity
|
||||||
!new_record? ? send(activity_type.downcase) : super
|
!new_record? ? send(activity_type.underscore) : super
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -23,7 +23,7 @@ Accounts and statuses have an access "scope":
|
||||||
|
|
||||||
Accounts can be "private" or "public". The former requires a follow request to be approved before a follow relationship can be established, the latter can be followed directly.
|
Accounts can be "private" or "public". The former requires a follow request to be approved before a follow relationship can be established, the latter can be followed directly.
|
||||||
|
|
||||||
Statuses can be "private", "unlisted" or "public". Private must only be shown to the followers of the account, public can be displayed publicly. Unlisted statuses may be displayed publicly but preferably outside of any spotlights e.g. "whole known network" or "public" timelines.
|
Statuses can be "private", "unlisted" or "public". Private must only be shown to the followers of the account or people mentioned in the status; public can be displayed publicly. Unlisted statuses may be displayed publicly but preferably outside of any spotlights e.g. "whole known network" or "public" timelines.
|
||||||
|
|
||||||
Namespace of the scope element is `http://mastodon.social/schema/1.0`. Example:
|
Namespace of the scope element is `http://mastodon.social/schema/1.0`. Example:
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ Mastodon uses the following Salmon slaps to signal a follow request, a follow re
|
||||||
- `http://activitystrea.ms/schema/1.0/authorize`
|
- `http://activitystrea.ms/schema/1.0/authorize`
|
||||||
- `http://activitystrea.ms/schema/1.0/reject`
|
- `http://activitystrea.ms/schema/1.0/reject`
|
||||||
|
|
||||||
The activity object of the slaps is the account in question. Request-friend slap is sent to that account, when the end-user of that account decides, the authorize/reject decision slap is sent back to the requester.
|
The activity object of the request-friend slap is the account in question. The activity object of the authorize and reject slaps is the original request-friend activity. Request-friend slap is sent to the locked account, when the end-user of that account decides, the authorize/reject decision slap is sent back to the requester.
|
||||||
|
|
||||||
#### PuSH amendment
|
#### PuSH amendment
|
||||||
|
|
||||||
|
|
|
@ -26,13 +26,8 @@ RSpec.describe Favourite, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#object_type' do
|
describe '#object_type' do
|
||||||
it 'is a note when the target is a note' do
|
it 'is an activity' do
|
||||||
expect(subject.object_type).to be :note
|
expect(subject.object_type).to be :activity
|
||||||
end
|
|
||||||
|
|
||||||
it 'is a comment when the target is a comment' do
|
|
||||||
status.in_reply_to_id = 2
|
|
||||||
expect(subject.object_type).to be :comment
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,8 @@ RSpec.describe Follow, type: :model do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#object_type' do
|
describe '#object_type' do
|
||||||
it 'is a person' do
|
it 'is an activity' do
|
||||||
expect(subject.object_type).to be :person
|
expect(subject.object_type).to be :activity
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue