Skip to content
Snippets Groups Projects
Commit c8999a11 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Sanitize remote html in atom feeds, API (not just UI), use cached mention

relations on Status#mentions
parent 7cd3de34
Branches
Tags
No related merge requests found
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment