Module: Clickwrap::TrustedProxyConfiguration

Defined in:
lib/clickwrap/trusted_proxy_configuration.rb

Overview

Produces a stable digest from the effective trusted-proxy rules themselves. A sentence such as "Cloudflare proxies" is not configuration evidence; the normalized address ranges and regular expressions are.

Constant Summary collapse

SCHEMA =
"clickwrap.trusted-proxy-configuration.v1"

Class Method Summary collapse

Class Method Details

.digest_for(trusted_proxies, source: "host_configuration") ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
# File 'lib/clickwrap/trusted_proxy_configuration.rb', line 13

def digest_for(trusted_proxies, source: "host_configuration")
  entries = collection(trusted_proxies).map { |entry| normalize(entry) }
  entries.sort_by! { |entry| CanonicalJson.generate(entry) }

  payload = {
    "schema" => SCHEMA,
    "source" => source.to_s,
    "entries" => entries
  }
  Digest.digest_canonical(payload)
end

.digest_for_rails_application(application) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/clickwrap/trusted_proxy_configuration.rb', line 25

def digest_for_rails_application(application)
  configured = application.config.action_dispatch.trusted_proxies
  if configured.nil?
    require "action_dispatch/middleware/remote_ip"
    configured = ActionDispatch::RemoteIp::TRUSTED_PROXIES
    source = "rails_default_trusted_proxies"
  else
    source = "rails_application_config_action_dispatch_trusted_proxies"
  end

  digest_for(configured, source: source)
end