Sha256: 607203434c38bd2ed00404eff05a41f188cc50cd8a963069adc3b20770654907

Contents?: true

Size: 923 Bytes

Versions: 17

Compression:

Stored size: 923 Bytes

Contents

require 'rack/utils'
require 'sinatra/base'
module Mirage
  class Server < Sinatra::Base
    module Helpers
      module HttpHeaders
        HTTP_HEADER_FILTER_EXCEPTIONS = %w(CONTENT_TYPE CONTENT_LENGTH)
        def extract_http_headers(env)
          headers = env.reject do |k, v|
            !HTTP_HEADER_FILTER_EXCEPTIONS.include?(k.to_s.upcase) && (!(/^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

17 entries across 17 versions & 2 rubygems

Version Path
mirage-4.0.0.alpha10 server/helpers/http_headers.rb
mirage-4.0.0.alpha9 server/helpers/http_headers.rb
mirage-4.0.0.alpha8 server/helpers/http_headers.rb
mirage-4.0.0.alpha6 server/helpers/http_headers.rb
mirage-4.0.0.alpha5 server/helpers/http_headers.rb
mirage-4.0.0.alpha4 server/helpers/http_headers.rb
mirage-4.0.0.alpha3 server/helpers/http_headers.rb
mirage-4.0.0.alpha2 server/helpers/http_headers.rb
mirage-4.0.0.alpha1 server/helpers/http_headers.rb
mirage-3.0.14 server/helpers/http_headers.rb
mirage-3.0.13 server/helpers/http_headers.rb
mirage-3.0.12 server/helpers/http_headers.rb
mirage-3.0.11 server/helpers/http_headers.rb
mirage-3.0.10 server/helpers/http_headers.rb
mirage-3.0.9 server/helpers/http_headers.rb
mirage-on-thin-3.0.8 server/helpers/http_headers.rb
mirage-3.0.8 server/helpers/http_headers.rb