gem 'paperclip', '~> 2.0'
gem 'deadlock_retry', '>= 1.2.0'
gem 'i18n-js', '>= 3.0.0.rc2'
+gem 'rack-cors'
# We need ruby-openid 2.2.0 or later for ruby 1.9 support
gem 'ruby-openid', '>= 2.2.0'
--- /dev/null
+require "rack/cors"
+
+# Allow any and all cross-origin requests to the API. Allow any origin, and
+# any headers. Non-browser requests do not have origin or header restrictions,
+# so browser-requests should be similarly permitted. (Though the API does not
+# require any custom headers, Ajax frameworks may automatically add headers
+# such as X-Requested-By to requests.)
+Rails.configuration.middleware.use Rack::Cors do
+ allow do
+ origins "*"
+ resource "/api/*", :headers => :any, :methods => [:get, :post, :put, :delete]
+ end
+end
--- /dev/null
+require File.dirname(__FILE__) + '/../test_helper'
+
+class CORSTest < ActionController::IntegrationTest
+ # Rails 4 adds a built-in `options` method. When we upgrade, we can remove
+ # this definition.
+ unless instance_method_names.include?("options")
+ def options(*args)
+ reset! unless integration_session
+ @html_document = nil
+ integration_session.send(:process, :options, *args).tap do
+ copy_session_variables!
+ end
+ end
+ end
+
+ def test_api_routes_allow_cross_origin_requests
+ options "/api/capabilities", nil,
+ 'HTTP_ORIGIN' => "http://www.example.com",
+ 'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'GET'
+
+ assert_response :success
+ assert_equal "http://www.example.com", response.headers['Access-Control-Allow-Origin']
+ end
+
+ def test_non_api_routes_dont_allow_cross_origin_requests
+ assert_raises ActionController::RoutingError do
+ options "/", nil,
+ 'HTTP_ORIGIN' => "http://www.example.com",
+ 'HTTP_ACCESS_CONTROL_REQUEST_METHOD' => 'GET'
+ end
+ end
+end