mirror of
https://github.com/mastodon/mastodon.git
synced 2024-12-22 18:45:41 +01:00
Sanitize remote html in atom feeds, API (not just UI), use cached mention
relations on Status#mentions
This commit is contained in:
parent
7cd3de3494
commit
c8999a116e
6 changed files with 18 additions and 31 deletions
|
@ -12,6 +12,14 @@ module ApplicationHelper
|
|||
id.start_with?("tag:#{Rails.configuration.x.local_domain}")
|
||||
end
|
||||
|
||||
def content_for_status(actual_status)
|
||||
if actual_status.local?
|
||||
linkify(actual_status)
|
||||
else
|
||||
sanitize(actual_status.content, tags: %w(a br p), attributes: %w(href rel))
|
||||
end
|
||||
end
|
||||
|
||||
def linkify(status)
|
||||
mention_hash = {}
|
||||
status.mentions.each { |m| mention_hash[m.acct] = m }
|
||||
|
|
|
@ -137,13 +137,7 @@ module AtomBuilderHelper
|
|||
|
||||
def conditionally_formatted(activity)
|
||||
if activity.is_a?(Status)
|
||||
if activity.reblog? && activity.reblog.local?
|
||||
linkify(activity.reblog)
|
||||
elsif !activity.reblog? && activity.local?
|
||||
linkify(activity)
|
||||
else
|
||||
activity.content
|
||||
end
|
||||
content_for_status(activity.reblog? ? activity.reblog : activity)
|
||||
elsif activity.nil?
|
||||
nil
|
||||
else
|
||||
|
|
|
@ -27,12 +27,4 @@ module StreamEntriesHelper
|
|||
def favourited_by_me_class(status)
|
||||
user_signed_in? && current_user.account.favourited?(status) ? 'favourited' : ''
|
||||
end
|
||||
|
||||
def content_for_status(actual_status)
|
||||
if actual_status.local?
|
||||
linkify(actual_status)
|
||||
else
|
||||
sanitize(actual_status.content, tags: %w(a br p), attributes: %w(href rel))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -60,22 +60,15 @@ class Status < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def mentions
|
||||
m = []
|
||||
|
||||
m << thread.account if reply?
|
||||
m << reblog.account if reblog?
|
||||
|
||||
unless reblog?
|
||||
self.text.scan(Account::MENTION_RE).each do |match|
|
||||
uri = match.first
|
||||
username, domain = uri.split('@')
|
||||
account = Account.find_by(username: username, domain: domain)
|
||||
|
||||
m << account unless account.nil?
|
||||
end
|
||||
if @mentions.nil?
|
||||
@mentions = []
|
||||
@mentions << thread.account if reply?
|
||||
@mentions << reblog.account if reblog?
|
||||
self.mentioned_accounts.each { |mention| @mentions << mention.account } unless reblog?
|
||||
@mentions = @mentions.uniq
|
||||
end
|
||||
|
||||
m.uniq
|
||||
@mentions
|
||||
end
|
||||
|
||||
def ancestors
|
||||
|
|
|
@ -2,7 +2,7 @@ object @status
|
|||
attributes :id, :created_at, :in_reply_to_id
|
||||
|
||||
node(:uri) { |status| uri_for_target(status) }
|
||||
node(:content) { |status| status.local? ? linkify(status) : status.content }
|
||||
node(:content) { |status| content_for_status(status) }
|
||||
node(:url) { |status| url_for_target(status) }
|
||||
node(:reblogs_count) { |status| status.reblogs_count }
|
||||
node(:favourites_count) { |status| status.favourites_count }
|
||||
|
|
|
@ -50,7 +50,7 @@ RSpec.describe Status, type: :model do
|
|||
end
|
||||
|
||||
it 'returns mentioned accounts' do
|
||||
subject.text = 'Hello @bob!'
|
||||
subject.mentioned_accounts.create!(account: bob)
|
||||
expect(subject.mentions).to include bob
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue