SECURITY: only show restricted tag lists to authorized users (#20004)
Co-authored-by: Penar Musaraj <pmusaraj@gmail.com>
This commit is contained in:
parent
6d92c3cbda
commit
105fee978d
|
@ -5,12 +5,13 @@ class TagsController < ::ApplicationController
|
||||||
include TopicQueryParams
|
include TopicQueryParams
|
||||||
|
|
||||||
before_action :ensure_tags_enabled
|
before_action :ensure_tags_enabled
|
||||||
before_action :ensure_visible, only: %i[show info]
|
|
||||||
|
|
||||||
def self.show_methods
|
def self.show_methods
|
||||||
Discourse.anonymous_filters.map { |f| :"show_#{f}" }
|
Discourse.anonymous_filters.map { |f| :"show_#{f}" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
before_action :ensure_visible, only: [:show, :info, *show_methods]
|
||||||
|
|
||||||
requires_login except: [:index, :show, :tag_feed, :search, :info, *show_methods]
|
requires_login except: [:index, :show, :tag_feed, :search, :info, *show_methods]
|
||||||
|
|
||||||
skip_before_action :check_xhr, only: [:tag_feed, :show, :index, *show_methods]
|
skip_before_action :check_xhr, only: [:tag_feed, :show, :index, *show_methods]
|
||||||
|
|
|
@ -676,6 +676,18 @@ RSpec.describe TagsController do
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns a 404 when tag is restricted" do
|
||||||
|
tag_group = Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: ["test"])
|
||||||
|
|
||||||
|
get "/tag/test/l/latest.json"
|
||||||
|
expect(response.status).to eq(404)
|
||||||
|
|
||||||
|
sign_in(admin)
|
||||||
|
|
||||||
|
get "/tag/test/l/latest.json"
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
end
|
||||||
|
|
||||||
context "with muted tags" do
|
context "with muted tags" do
|
||||||
before do
|
before do
|
||||||
TagUser.create!(
|
TagUser.create!(
|
||||||
|
@ -755,6 +767,18 @@ RSpec.describe TagsController do
|
||||||
get "/tag/#{tag.name}/l/top.json?period=decadely"
|
get "/tag/#{tag.name}/l/top.json?period=decadely"
|
||||||
expect(response.status).to eq(400)
|
expect(response.status).to eq(400)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns a 404 if tag is restricted" do
|
||||||
|
tag_group = Fabricate(:tag_group, permissions: { "staff" => 1 }, tag_names: ["test"])
|
||||||
|
|
||||||
|
get "/tag/test/l/top.json"
|
||||||
|
expect(response.status).to eq(404)
|
||||||
|
|
||||||
|
sign_in(admin)
|
||||||
|
|
||||||
|
get "/tag/test/l/top.json"
|
||||||
|
expect(response.status).to eq(200)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#search" do
|
describe "#search" do
|
||||||
|
|
Loading…
Reference in New Issue