Skip to content

Commit

Permalink
SECURITY: Restrict message-bus access on login_required sites
Browse files Browse the repository at this point in the history
  • Loading branch information
davidtaylorhq committed Aug 14, 2019
1 parent ab3e180 commit d237da1
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ export default {

// we do not want to start anything till document is complete
messageBus.stop();

if (siteSettings.login_required && !user) {
// Endpoint is not available in this case, so don't try
return;
}

// jQuery ready is called on "interactive" we want "complete"
// Possibly change to document.addEventListener('readystatechange',...
// but would only stop a handful of interval, message bus being delayed by
Expand Down
3 changes: 3 additions & 0 deletions config/initializers/004-message_bus.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ def setup_message_bus_env(env)
Discourse.warn_exception(e, message: "Unexpected error in Message Bus")
end
user_id = user && user.id

raise Discourse::InvalidAccess if !user_id && SiteSetting.login_required

is_admin = !!(user && user.admin?)
group_ids = if is_admin
# special rule, admin is allowed access to all groups
Expand Down
33 changes: 33 additions & 0 deletions spec/integration/message_bus_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# frozen_string_literal: true

require 'rails_helper'

describe 'message bus integration' do

it "allows anonymous requests to the messagebus" do
post "/message-bus/poll"
expect(response.status).to eq(200)
end

it "allows authenticated requests to the messagebus" do
sign_in Fabricate(:user)
post "/message-bus/poll"
expect(response.status).to eq(200)
end

context "with login_required" do
before { SiteSetting.login_required = true }

it "blocks anonymous requests to the messagebus" do
post "/message-bus/poll"
expect(response.status).to eq(403)
end

it "allows authenticated requests to the messagebus" do
sign_in Fabricate(:user)
post "/message-bus/poll"
expect(response.status).to eq(200)
end
end

end

0 comments on commit d237da1

Please sign in to comment.