]> source.dussan.org Git - redmine.git/commitdiff
Make JSONP support optional and disabled by default (#12992).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 Jan 2013 18:37:09 +0000 (18:37 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 Jan 2013 18:37:09 +0000 (18:37 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11272 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/views/settings/_authentication.html.erb
config/locales/en.yml
config/locales/fr.yml
config/settings.yml
lib/redmine/views/builders/json.rb
test/integration/api_test/jsonp_test.rb

index bba896497da8c73374b8d6bdf611dca10d09e41e..d190fab6653779628fb97d6b2227483bdd8710b6 100644 (file)
@@ -19,6 +19,8 @@
 <p><%= setting_check_box :openid, :disabled => !Object.const_defined?(:OpenID) %></p>
 
 <p><%= setting_check_box :rest_api_enabled %></p>
+
+<p><%= setting_check_box :jsonp_enabled %></p>
 </div>
 
 <fieldset class="box">
index 9dac5ed2ae053c2d44c9d332e6f271ffddc195c6..05ec1d32f18fe55d351be9d77303255f5e20748a 100644 (file)
@@ -397,6 +397,7 @@ en:
   setting_thumbnails_enabled: Display attachment thumbnails
   setting_thumbnails_size: Thumbnails size (in pixels)
   setting_non_working_week_days: Non-working days
+  setting_jsonp_enabled: Enable JSONP support
 
   permission_add_project: Create project
   permission_add_subprojects: Create subprojects
index db6220e001d6258025854ca1c6c653183a193189..f39943472a514d3df79cfc5572f6202455117a58 100644 (file)
@@ -394,6 +394,7 @@ fr:
   setting_thumbnails_enabled: Afficher les vignettes des images
   setting_thumbnails_size: Taille des vignettes (en pixels)
   setting_non_working_week_days: Jours non travaillés
+  setting_jsonp_enabled: Activer le support JSONP
 
   permission_add_project: Créer un projet
   permission_add_subprojects: Créer des sous-projets
index 6f3cfa7e557df03dcb6b256d2465f2f4de89cddf..c538334fbcc537ad1bb00f3bddc233fdcbb17e8a 100644 (file)
@@ -211,6 +211,8 @@ start_of_week:
   default: ''
 rest_api_enabled:
   default: 0
+jsonp_enabled:
+  default: 0
 default_notification_option:
   default: 'only_my_events'
 emails_header:
index b55e952e7a65e3963a7d5e314daa1bd82f616b01..feae6de536608ed4d2270d00491fd3e504f39e16 100644 (file)
@@ -25,7 +25,10 @@ module Redmine
 
         def initialize(request, response)
           super
-          self.jsonp = (request.params[:callback] || request.params[:jsonp]).to_s.gsub(/[^a-zA-Z0-9_]/, '')
+          callback = request.params[:callback] || request.params[:jsonp]
+          if callback && Setting.jsonp_enabled?
+            self.jsonp = callback.to_s.gsub(/[^a-zA-Z0-9_]/, '')
+          end
         end
 
         def output
index 3007a2db8fa0f4c27fdecfc70110253670956167..df3be427c8feff0ad1061b33b10742da16fb7c64 100644 (file)
@@ -20,8 +20,20 @@ require File.expand_path('../../../test_helper', __FILE__)
 class Redmine::ApiTest::JsonpTest < Redmine::ApiTest::Base
   fixtures :trackers
 
+  def test_should_ignore_jsonp_callback_with_jsonp_disabled
+    with_settings :jsonp_enabled => '0' do
+      get '/trackers.json?jsonp=handler'
+    end
+
+    assert_response :success
+    assert_match %r{^\{"trackers":.+\}$}, response.body
+    assert_equal 'application/json; charset=utf-8', response.headers['Content-Type']
+  end
+
   def test_jsonp_should_accept_callback_param
-    get '/trackers.json?callback=handler'
+    with_settings :jsonp_enabled => '1' do
+      get '/trackers.json?callback=handler'
+    end
 
     assert_response :success
     assert_match %r{^handler\(\{"trackers":.+\}\)$}, response.body
@@ -29,7 +41,9 @@ class Redmine::ApiTest::JsonpTest < Redmine::ApiTest::Base
   end
 
   def test_jsonp_should_accept_jsonp_param
-    get '/trackers.json?jsonp=handler'
+    with_settings :jsonp_enabled => '1' do
+      get '/trackers.json?jsonp=handler'
+    end
 
     assert_response :success
     assert_match %r{^handler\(\{"trackers":.+\}\)$}, response.body
@@ -37,7 +51,9 @@ class Redmine::ApiTest::JsonpTest < Redmine::ApiTest::Base
   end
 
   def test_jsonp_should_strip_invalid_characters_from_callback
-    get '/trackers.json?callback=+-aA$1_'
+    with_settings :jsonp_enabled => '1' do
+      get '/trackers.json?callback=+-aA$1_'
+    end
 
     assert_response :success
     assert_match %r{^aA1_\(\{"trackers":.+\}\)$}, response.body
@@ -45,7 +61,9 @@ class Redmine::ApiTest::JsonpTest < Redmine::ApiTest::Base
   end
 
   def test_jsonp_without_callback_should_return_json
-    get '/trackers.json?callback='
+    with_settings :jsonp_enabled => '1' do
+      get '/trackers.json?callback='
+    end
 
     assert_response :success
     assert_match %r{^\{"trackers":.+\}$}, response.body