discourse/app/serializers/post_item_excerpt.rb
Sam 05e03eab29
FIX: Bookmarked hidden post excerpts leak to unauthorized bookmark owners (#39873)
In rare occasions bookmarks can be made on spam posts that become
hidden. In that case go ahead and hide the excerpts from the bookmark
page.

---------

Co-authored-by: discourse-patch-triage[bot] <272280883+discourse-patch-triage[bot]@users.noreply.github.com>
Co-authored-by: Gabriel Grubba <70247653+Grubba27@users.noreply.github.com>
2026-05-15 14:04:05 +10:00

40 lines
815 B
Ruby
Vendored

# frozen_string_literal: true
module PostItemExcerpt
def self.included(base)
base.attributes(:excerpt, :truncated)
end
def cooked
@cooked ||= object.cooked || PrettyText.cook(object.raw)
end
def excerpt
return nil unless can_see_post_item_excerpt?
return nil unless cooked
@excerpt ||= PrettyText.excerpt(cooked, 300, keep_emoji_images: true)
end
def include_excerpt?
can_see_post_item_excerpt?
end
def include_cooked?
can_see_post_item_excerpt?
end
def truncated
true
end
def include_truncated?
can_see_post_item_excerpt? && cooked.length > 300
end
private
def can_see_post_item_excerpt?
return true if !respond_to?(:post_item_excerpt_post) || post_item_excerpt_post.blank?
scope&.can_see_post?(post_item_excerpt_post)
end
end