class Pliny::Middleware::CORS

Constants

ALLOW_HEADERS
ALLOW_METHODS
EXPOSE_HEADERS

Public Class Methods

add_additional_header(header) click to toggle source
# File lib/pliny/middleware/cors.rb, line 13
def self.add_additional_header(header)
  @@additional_headers << header
end
new(app) click to toggle source
# File lib/pliny/middleware/cors.rb, line 17
def initialize(app)
  @app = app
end

Public Instance Methods

allow_headers() click to toggle source
# File lib/pliny/middleware/cors.rb, line 41
def allow_headers
  ALLOW_HEADERS + @@additional_headers
end
call(env) click to toggle source
# File lib/pliny/middleware/cors.rb, line 21
def call(env)
  # preflight request: render a stub 200 with the CORS headers
  if cors_request?(env) && env["REQUEST_METHOD"] == "OPTIONS"
    [200, cors_headers(env), [""]]
  else
    status, headers, response = @app.call(env)

    # regular CORS request: append CORS headers to response
    if cors_request?(env)
      headers.merge!(cors_headers(env))
    end

    [status, headers, response]
  end
end
cors_headers(env) click to toggle source
# File lib/pliny/middleware/cors.rb, line 45
def cors_headers(env)
  {
    'Access-Control-Allow-Origin'      => env["HTTP_ORIGIN"],
    'Access-Control-Allow-Methods'     => ALLOW_METHODS.join(', '),
    'Access-Control-Allow-Headers'     => allow_headers.join(', '),
    'Access-Control-Allow-Credentials' => "true",
    'Access-Control-Max-Age'           => "1728000",
    'Access-Control-Expose-Headers'    => EXPOSE_HEADERS.join(', ')
  }
end
cors_request?(env) click to toggle source
# File lib/pliny/middleware/cors.rb, line 37
def cors_request?(env)
  env.has_key?("HTTP_ORIGIN")
end