Sha256: ac91da1eb2becb27aad72a080c9181fad9ee25a3181e71a04d36d3636fc7d630

Contents?: true

Size: 827 Bytes

Versions: 8

Compression:

Stored size: 827 Bytes

Contents

# frozen_string_literal: true

class Rage::OriginValidator
  def initialize(app, *allowed_origins)
    @app = app
    @validator = build_validator(allowed_origins)
  end

  def call(env)
    if @validator.call(env)
      @app.call(env)
    else
      Rage.logger.error("Request origin not allowed: #{env["HTTP_ORIGIN"]}")
      [404, {}, ["Not Found"]]
    end
  end

  private

  def build_validator(allowed_origins)
    if allowed_origins.empty?
      ->(env) { false }
    else
      origins_eval = allowed_origins.map { |origin|
        origin.is_a?(Regexp) ?
          "origin =~ /#{origin.source}/.freeze" :
          "origin == '#{origin}'.freeze"
      }.join(" || ")

      eval <<-RUBY
        ->(env) do
          origin = env["HTTP_ORIGIN".freeze]
          #{origins_eval}
        end
      RUBY
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rage-rb-1.14.0 lib/rage/middleware/origin_validator.rb
rage-rb-1.13.0 lib/rage/middleware/origin_validator.rb
rage-rb-1.12.0 lib/rage/middleware/origin_validator.rb
rage-rb-1.11.0 lib/rage/middleware/origin_validator.rb
rage-rb-1.10.1 lib/rage/middleware/origin_validator.rb
rage-rb-1.10.0 lib/rage/middleware/origin_validator.rb
rage-rb-1.9.0 lib/rage/middleware/origin_validator.rb
rage-rb-1.8.0 lib/rage/middleware/origin_validator.rb