mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Allow plugins to extend frame-ancestors (#13316)
This commit is contained in:
@@ -188,26 +188,49 @@ describe ContentSecurityPolicy do
|
||||
end
|
||||
end
|
||||
|
||||
it 'can be extended by plugins' do
|
||||
plugin = Class.new(Plugin::Instance) do
|
||||
attr_accessor :enabled
|
||||
def enabled?
|
||||
@enabled
|
||||
context 'with a plugin' do
|
||||
let(:plugin_class) do
|
||||
Class.new(Plugin::Instance) do
|
||||
attr_accessor :enabled
|
||||
def enabled?
|
||||
@enabled
|
||||
end
|
||||
end
|
||||
end.new(nil, "#{Rails.root}/spec/fixtures/plugins/csp_extension/plugin.rb")
|
||||
end
|
||||
|
||||
plugin.activate!
|
||||
Discourse.plugins << plugin
|
||||
it 'can extend script-src and object-src' do
|
||||
plugin = plugin_class.new(nil, "#{Rails.root}/spec/fixtures/plugins/csp_extension/plugin.rb")
|
||||
|
||||
plugin.enabled = true
|
||||
expect(parse(policy)['script-src']).to include('https://from-plugin.com')
|
||||
expect(parse(policy)['object-src']).to include('https://test-stripping.com')
|
||||
expect(parse(policy)['object-src']).to_not include("'none'")
|
||||
plugin.activate!
|
||||
Discourse.plugins << plugin
|
||||
|
||||
plugin.enabled = false
|
||||
expect(parse(policy)['script-src']).to_not include('https://from-plugin.com')
|
||||
plugin.enabled = true
|
||||
expect(parse(policy)['script-src']).to include('https://from-plugin.com')
|
||||
expect(parse(policy)['object-src']).to include('https://test-stripping.com')
|
||||
expect(parse(policy)['object-src']).to_not include("'none'")
|
||||
|
||||
Discourse.plugins.pop
|
||||
plugin.enabled = false
|
||||
expect(parse(policy)['script-src']).to_not include('https://from-plugin.com')
|
||||
|
||||
Discourse.plugins.delete plugin
|
||||
end
|
||||
|
||||
it 'can extend frame_ancestors' do
|
||||
SiteSetting.content_security_policy_frame_ancestors = true
|
||||
plugin = plugin_class.new(nil, "#{Rails.root}/spec/fixtures/plugins/csp_extension/plugin.rb")
|
||||
|
||||
plugin.activate!
|
||||
Discourse.plugins << plugin
|
||||
|
||||
plugin.enabled = true
|
||||
expect(parse(policy)['frame-ancestors']).to include("'self'")
|
||||
expect(parse(policy)['frame-ancestors']).to include('https://frame-ancestors-plugin.ext')
|
||||
|
||||
plugin.enabled = false
|
||||
expect(parse(policy)['frame-ancestors']).to_not include('https://frame-ancestors-plugin.ext')
|
||||
|
||||
Discourse.plugins.delete plugin
|
||||
end
|
||||
end
|
||||
|
||||
it 'only includes unsafe-inline for qunit paths' do
|
||||
|
||||
Reference in New Issue
Block a user