mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FEATURE: Ignore anonymous page views on private sites (#12800)
For sites with login_required set to true, counting anonymous pageviews is confusing. Requests to /login and other pages would make it look like anonymous users have access to site's content.
This commit is contained in:
parent
7217dcb67a
commit
765ba1ab2d
@ -61,7 +61,7 @@ class Middleware::RequestTracker
|
|||||||
elsif data[:has_auth_cookie]
|
elsif data[:has_auth_cookie]
|
||||||
ApplicationRequest.increment!(:page_view_logged_in)
|
ApplicationRequest.increment!(:page_view_logged_in)
|
||||||
ApplicationRequest.increment!(:page_view_logged_in_mobile) if data[:is_mobile]
|
ApplicationRequest.increment!(:page_view_logged_in_mobile) if data[:is_mobile]
|
||||||
else
|
elsif !SiteSetting.login_required
|
||||||
ApplicationRequest.increment!(:page_view_anon)
|
ApplicationRequest.increment!(:page_view_anon)
|
||||||
ApplicationRequest.increment!(:page_view_anon_mobile) if data[:is_mobile]
|
ApplicationRequest.increment!(:page_view_anon_mobile) if data[:is_mobile]
|
||||||
end
|
end
|
||||||
|
@ -129,6 +129,53 @@ describe Middleware::RequestTracker do
|
|||||||
expect(ApplicationRequest.page_view_crawler.first.count).to eq(1)
|
expect(ApplicationRequest.page_view_crawler.first.count).to eq(1)
|
||||||
expect(ApplicationRequest.page_view_anon.first.count).to eq(1)
|
expect(ApplicationRequest.page_view_anon.first.count).to eq(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "ignore_anonymous_pageviews" do
|
||||||
|
let(:anon_data) do
|
||||||
|
Middleware::RequestTracker.get_data(env(
|
||||||
|
"HTTP_USER_AGENT" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36"
|
||||||
|
), ["200", { "Content-Type" => 'text/html' }], 0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:logged_in_data) do
|
||||||
|
user = Fabricate(:user, active: true)
|
||||||
|
token = UserAuthToken.generate!(user_id: user.id)
|
||||||
|
Middleware::RequestTracker.get_data(env(
|
||||||
|
"HTTP_USER_AGENT" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36",
|
||||||
|
"HTTP_COOKIE" => "_t=#{token.unhashed_auth_token};"
|
||||||
|
), ["200", { "Content-Type" => 'text/html' }], 0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "does not ignore anonymous requests for public sites" do
|
||||||
|
SiteSetting.login_required = false
|
||||||
|
|
||||||
|
Middleware::RequestTracker.log_request(anon_data)
|
||||||
|
Middleware::RequestTracker.log_request(logged_in_data)
|
||||||
|
|
||||||
|
ApplicationRequest.write_cache!
|
||||||
|
|
||||||
|
expect(ApplicationRequest.http_total.first.count).to eq(2)
|
||||||
|
expect(ApplicationRequest.http_2xx.first.count).to eq(2)
|
||||||
|
|
||||||
|
expect(ApplicationRequest.page_view_logged_in.first.count).to eq(1)
|
||||||
|
expect(ApplicationRequest.page_view_anon.first.count).to eq(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "ignores anonymous requests for private sites" do
|
||||||
|
SiteSetting.login_required = true
|
||||||
|
|
||||||
|
Middleware::RequestTracker.log_request(anon_data)
|
||||||
|
Middleware::RequestTracker.log_request(logged_in_data)
|
||||||
|
|
||||||
|
ApplicationRequest.write_cache!
|
||||||
|
|
||||||
|
expect(ApplicationRequest.http_total.first.count).to eq(2)
|
||||||
|
expect(ApplicationRequest.http_2xx.first.count).to eq(2)
|
||||||
|
|
||||||
|
expect(ApplicationRequest.page_view_logged_in.first.count).to eq(1)
|
||||||
|
expect(ApplicationRequest.page_view_anon.first).to eq(nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "rate limiting" do
|
context "rate limiting" do
|
||||||
|
Loading…
Reference in New Issue
Block a user