Sha256: 3f1d63cf0ee6378a671a8185a21c142706be7f6afb95ed55201db297b0ca90a5

Contents?: true

Size: 828 Bytes

Versions: 1

Compression:

Stored size: 828 Bytes

Contents

require 'rack/utils'
require 'sinatra/base'
module Mirage
  class Server < Sinatra::Base
    module Helpers
      module HttpHeaders
        def extract_http_headers(env)
          headers = env.reject do |k, v|
            k.to_s.upcase != 'CONTENT_TYPE' && (!(/^HTTP_[A-Z_]+$/ === k) || v.nil?)
          end.map do |k, v|
            [reconstruct_header_name(k), v]
          end.inject(Rack::Utils::HeaderHash.new) do |hash, k_v|
            k, v = k_v
            hash[k] = v
            hash
          end

          x_forwarded_for = (headers["X-Forwarded-For"].to_s.split(/, +/) << env["REMOTE_ADDR"]).join(", ")

          headers.merge!("X-Forwarded-For" => x_forwarded_for)
        end

        def reconstruct_header_name(name)
          name.sub(/^HTTP_/, "").gsub("_", "-")
        end
      end
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mirage-3.0.7 server/helpers/http_headers.rb