/comments.atom: fix restricted posts being leaked.
Fix thumbnail URLs of loli/shota/banned posts being leaked in /comments.atom. Restricted posts are now entirely hidden in /comments.atom. Example: https://danbooru.donmai.us/comments.atom?search[post_id]=2.
This commit is contained in:
@@ -97,6 +97,7 @@ class CommentsController < ApplicationController
|
|||||||
|
|
||||||
if request.format.atom?
|
if request.format.atom?
|
||||||
@comments = @comments.includes(:creator, :post)
|
@comments = @comments.includes(:creator, :post)
|
||||||
|
@comments = @comments.select { |comment| comment.post.visible? }
|
||||||
elsif request.format.html?
|
elsif request.format.html?
|
||||||
@comments = @comments.includes(:creator, :updater, post: :uploader)
|
@comments = @comments.includes(:creator, :updater, post: :uploader)
|
||||||
@comments = @comments.includes(:votes) if CurrentUser.is_member?
|
@comments = @comments.includes(:votes) if CurrentUser.is_member?
|
||||||
|
|||||||
@@ -93,9 +93,21 @@ class CommentsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
should "render for atom feeds" do
|
context "for atom feeds" do
|
||||||
get comments_path(format: "atom")
|
should "render" do
|
||||||
assert_response :success
|
@comment = as(@user) { create(:comment, post: @post) }
|
||||||
|
get comments_path(format: "atom")
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not show comments on restricted posts" do
|
||||||
|
@post.update!(is_banned: true)
|
||||||
|
@comment = as(@user) { create(:comment, post: @post) }
|
||||||
|
|
||||||
|
get comments_path(format: "atom")
|
||||||
|
assert_response :success
|
||||||
|
assert_equal(0, response.parsed_body.css("entry").size)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ class ActionDispatch::IntegrationTest
|
|||||||
extend ControllerHelper
|
extend ControllerHelper
|
||||||
|
|
||||||
register_encoder :xml, response_parser: ->(body) { Nokogiri.XML(body) }
|
register_encoder :xml, response_parser: ->(body) { Nokogiri.XML(body) }
|
||||||
|
register_encoder :atom, response_parser: ->(body) { Nokogiri.XML(body) }
|
||||||
register_encoder :html, response_parser: ->(body) { Nokogiri.HTML5(body) }
|
register_encoder :html, response_parser: ->(body) { Nokogiri.HTML5(body) }
|
||||||
|
|
||||||
def method_authenticated(method_name, url, user, **options)
|
def method_authenticated(method_name, url, user, **options)
|
||||||
|
|||||||
Reference in New Issue
Block a user