closes #4477
[arvados.git] / services / api / app / controllers / application_controller.rb
index 5013c0935a98b8421c5dad572c0037a9bad0e83d..54d5adb439c37e9cf9371fccec4e77ecee56b002 100644 (file)
@@ -27,6 +27,7 @@ class ApplicationController < ActionController::Base
 
   ERROR_ACTIONS = [:render_error, :render_not_found]
 
+  before_filter :set_cors_headers
   before_filter :respond_with_json_by_default
   before_filter :remote_ip
   before_filter :load_read_auths
@@ -346,6 +347,13 @@ class ApplicationController < ActionController::Base
     end
   end
 
+  def set_cors_headers
+    response.headers['Access-Control-Allow-Origin'] = '*'
+    response.headers['Access-Control-Allow-Methods'] = 'GET, HEAD, PUT, POST, DELETE'
+    response.headers['Access-Control-Allow-Headers'] = 'Authorization'
+    response.headers['Access-Control-Max-Age'] = '86486400'
+  end
+
   def respond_with_json_by_default
     html_index = request.accepts.index(Mime::HTML)
     if html_index.nil? or request.accepts[0...html_index].include?(Mime::JSON)
@@ -451,18 +459,18 @@ class ApplicationController < ActionController::Base
     (self.class.send "_#{params[:action]}_requires_parameters" rescue {}).
       each do |key, info|
       if info[:required] and not params.include?(key)
-        raise ArgumentError("#{key} parameter is required")
+        raise ArgumentError.new("#{key} parameter is required")
       elsif info[:type] == 'boolean'
         # Make sure params[key] is either true or false -- not a
         # string, not nil, etc.
         if not params.include?(key)
           params[key] = info[:default]
-        elsif [false, 'false'].include? params[key]
+        elsif [false, 'false', '0', 0].include? params[key]
           params[key] = false
-        elsif [true, 'true'].include? params[key]
+        elsif [true, 'true', '1', 1].include? params[key]
           params[key] = true
         else
-          raise TypeError("#{key} parameter must be a boolean, true or false")
+          raise TypeError.new("#{key} parameter must be a boolean, true or false")
         end
       end
     end