Sha256: 60647b6565a6f5c13a3ebe6a463d52bf538b9871a3dee86513544bb026eced70

Contents?: true

Size: 724 Bytes

Versions: 1

Compression:

Stored size: 724 Bytes

Contents

# frozen_string_literal: true

require "rack"
require "rack/request"

module Rack
  class NakedToWww
    VERSION = "0.1.0"

    def initialize(app)
      @app = app
    end

    def call(env)
      if naked?(env)
        redirect_to_www(env)
      else
        @app.call(env)
      end
    end

    private

    def naked?(env)
      return false if env["HTTP_HOST"].nil?
      return false if /^localhost/.match?(env["HTTP_HOST"])

      env["HTTP_HOST"].split(".").length <= 2
    end

    def redirect_to_www(env)
      req = Request.new(env)

      url = URI(req.url)
      url.host = "www.#{url.host}"

      headers = {"Content-Type" => "text/html", "Location" => url.to_s}

      [302, headers, []]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rack-naked-to-www-0.1.0 lib/rack/naked-to-www.rb