Module: Cors::Ui::CorsConfigReader

Defined in:
lib/cors/ui/cors_config_reader.rb

Class Method Summary collapse

Class Method Details

.fetch_all_resources ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/cors/ui/cors_config_reader.rb', line 4

def self.fetch_all_resources
  cors_middleware = Rails.application.config.middleware.detect do |m|
    m.klass == Rack::Cors
  end

  return [] unless cors_middleware

  middleware_instance = cors_middleware.build(Rails.application)
  all_resources_blocks = middleware_instance.instance_variable_get(:@all_resources)

  configs = []

  all_resources_blocks.each do |resources_block|
    # Extract common settings from the allow block
    origins = resources_block.instance_variable_get(:@origins)
    public_resources = resources_block.instance_variable_get(:@public_resources)
    resources_block.instance_variable_get(:@resources).each do |resource|
      # byebug
      configs << {
        origins: process_origins(origins),
        path: resource.instance_variable_get(:@path),
        methods: process_value(resource.instance_variable_get(:@methods)),
        headers: process_value(resource.instance_variable_get(:@headers)),
        expose: process_value(resource.instance_variable_get(:@expose)).present? ? process_value(resource.instance_variable_get(:@expose)) : "None",
        max_age: resource.instance_variable_get(:@max_age),
        credentials: resource.instance_variable_get(:@credentials),
        if_condition: resource.instance_variable_get(:@if_proc).present? ? "Custom Condition" : "None",
        public: public_resources || resource.instance_variable_get(:@public_resource)
      }
    end
  end

  configs
rescue => e
  Rails.logger.error "Error fetching CORS config: #{e.message}"
  []
end