]> git.openstreetmap.org Git - rails.git/blobdiff - config/initializers/cors.rb
More refactoring of common code in object models
[rails.git] / config / initializers / cors.rb
index 9bbf937cfef24cc0493251c971fd918377434001..1a8ce106d2ad29647c791de75ebaf03e74ca02e9 100644 (file)
@@ -1,11 +1,26 @@
 require "rack/cors"
 
 require "rack/cors"
 
+# Mark CORS responses as uncacheable as we don't want a browser to
+# try and reuse a response that had a different origin, even with
+# revalidation, as the origin check will fail.
+module OpenStreetMap
+  class Cors < Rack::Cors
+    def call(env)
+      status, headers, body = super env
+      if headers['Access-Control-Allow-Origin']
+        headers['Cache-Control'] = 'no-cache'
+      end
+      [status, headers, body]
+    end
+  end
+end
+
 # 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.)
 # 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
+Rails.configuration.middleware.use OpenStreetMap::Cors do
   allow do
     origins "*"
     resource "/oauth/*", :headers => :any, :methods => [:get, :post]
   allow do
     origins "*"
     resource "/oauth/*", :headers => :any, :methods => [:get, :post]