Sha256: 677b44a22e71918bad478a0dd0591a45aae0eb22c55078ecdcb639ba3d463403

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

# frozen_string_literal: true

require "rack/proxy"
require "socket"

module Snowpacker
  # Proxy server for snowpacker
  class SnowpackerProxy < Rack::Proxy
    def perform_request(env)
      if env["PATH_INFO"].start_with?(%r{/#{Snowpacker.config.output_path}}) && dev_server_running?
        env["HTTP_HOST"] = env["HTTP_X_FORWARDED_HOST"] = Snowpacker.config.hostname
        env["HTTP_X_FORWARDED_SERVER"] = host_with_port
        env["HTTP_PORT"] = env["HTTP_X_FORWARDED_PORT"] = Snowpacker.config.port
        env["HTTP_X_FORWARDED_PROTO"] = env["HTTP_X_FORWARDED_SCHEME"] = "http"

        # unless dev_server.https?
          env["HTTPS"] = env["HTTP_X_FORWARDED_SSL"] = "off"
        # end

        env["SCRIPT_NAME"] = ""

        super(env)
      else
        @app.call(env)
      end
    end

    private

    def dev_server_running?
      host = Snowpacker.config.hostname
      port = Snowpacker.config.port
      connect_timeout = 0.01

      Socket.tcp(host, port, connect_timeout: connect_timeout).close
      true
    rescue Errno::ECONNREFUSED
      puts "Snowpacker is not currently running on #{host_with_port}"
      false
    end

    def host_with_port
      hostname = Snowpacker.config.hostname
      port = Snowpacker.config.port
      "#{hostname}:#{port}"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
snowpacker-0.0.4.alpha1 lib/snowpacker/snowpacker_proxy.rb