Module: Belt::Helpers::CorsOrigin

Defined in:
lib/belt/helpers/cors_origin.rb

Class Method Summary collapse

Class Method Details

.allowed_originsObject



38
39
40
# File 'lib/belt/helpers/cors_origin.rb', line 38

def self.allowed_origins
  @allowed_origins ||= build_allowed_origins
end

.matches_allowed?(origin, allowed) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/belt/helpers/cors_origin.rb', line 16

def self.matches_allowed?(origin, allowed)
  return false unless origin

  allowed.any? do |pattern|
    if pattern.include?('*')
      regex = Regexp.new("\\A#{Regexp.escape(pattern).gsub('\*', '[^.]+')}\\z")
      regex.match?(origin)
    else
      pattern == origin
    end
  end
end

.origin_from_event(event) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/belt/helpers/cors_origin.rb', line 29

def self.origin_from_event(event)
  return nil unless event.is_a?(Hash)

  headers = event['headers']
  return nil unless headers.is_a?(Hash)

  headers['Origin'] || headers['origin']
end

.reset!Object



42
43
44
# File 'lib/belt/helpers/cors_origin.rb', line 42

def self.reset!
  @allowed_origins = nil
end

.resolve_origin(request_origin) ⇒ Object



6
7
8
9
10
11
12
13
14
# File 'lib/belt/helpers/cors_origin.rb', line 6

def self.resolve_origin(request_origin)
  allowed = allowed_origins
  return nil if allowed.empty?
  return request_origin if request_origin && matches_allowed?(request_origin, allowed)

  # Don't return a wildcard pattern as a literal origin — use '*' instead
  first = allowed.first
  first.include?('*') ? '*' : first
end