Module: Verikloak::HeaderSources

Defined in:
lib/verikloak/header_sources.rb

Overview

Provides normalization helpers for Rack env header keys and token priority lists.

Constant Summary collapse

DEFAULT_FORWARDED_HEADER =
'HTTP_X_FORWARDED_ACCESS_TOKEN'
AUTHORIZATION_HEADER =
'HTTP_AUTHORIZATION'

Class Method Summary collapse

Class Method Details

.default_priority(forwarded_header: DEFAULT_FORWARDED_HEADER) ⇒ Array<String>

Default priority list using the provided forwarded header name.

Parameters:

  • forwarded_header (String, Symbol) (defaults to: DEFAULT_FORWARDED_HEADER)

Returns:

  • (Array<String>)

    normalized default priority



59
60
61
# File 'lib/verikloak/header_sources.rb', line 59

def default_priority(forwarded_header: DEFAULT_FORWARDED_HEADER)
  normalize_priority([forwarded_header], forwarded_header: forwarded_header).first
end

.normalize_env_key(header) ⇒ String

Normalize a Rack env header key, accepting symbols, mixed case, or dash separated names and returning an upper-case HTTP_* variant.

Parameters:

  • header (String, Symbol, nil)

Returns:

  • (String)

    normalized env key or empty string when blank



22
23
24
25
26
27
28
29
# File 'lib/verikloak/header_sources.rb', line 22

def normalize_env_key(header)
  key = header.to_s.strip
  return '' if key.empty?

  key = key.tr('-', '_').upcase
  key = "HTTP_#{key}" unless key.start_with?('HTTP_')
  key
end

.normalize_priority(priority, forwarded_header: DEFAULT_FORWARDED_HEADER, drop_authorization: true) ⇒ Array(Array<String>, String)

Normalize a token priority list by stripping blanks, rejecting Authorization as a source, and deduplicating entries while preserving order.

Parameters:

  • priority (Array<String, Symbol>, String, Symbol, nil)
  • forwarded_header (String, Symbol) (defaults to: DEFAULT_FORWARDED_HEADER)
  • drop_authorization (Boolean) (defaults to: true)

Returns:

  • (Array(Array<String>, String))

    normalized priority and forwarded key



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/verikloak/header_sources.rb', line 39

def normalize_priority(priority, forwarded_header: DEFAULT_FORWARDED_HEADER, drop_authorization: true)
  forwarded_env = normalize_env_key(forwarded_header)
  items = Array(priority).flatten

  normalized = items.map { |value| normalize_env_key(value) }.reject(&:empty?)
  normalized = [forwarded_env] if normalized.empty?
  normalized = normalized.reject { |key| drop_authorization && key == AUTHORIZATION_HEADER }

  deduped = []
  normalized.each do |key|
    deduped << key unless deduped.include?(key)
  end

  [deduped.freeze, forwarded_env]
end