Class: Supabase::Rails::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/supabase/rails/middleware.rb

Constant Summary collapse

VALID_MODES =
%i[api web].freeze

Instance Method Summary collapse

Constructor Details

#initialize(app, mode: :api, auth: :user, env: nil, supabase_options: nil, cors: nil, session: nil, user_model: nil) ⇒ Middleware

Returns a new instance of Middleware.



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/supabase/rails/middleware.rb', line 12

def initialize(app, mode: :api, auth: :user, env: nil, supabase_options: nil, cors: nil, session: nil, user_model: nil)
  raise ConfigError.invalid_mode(mode) unless VALID_MODES.include?(mode)

  @app = app
  @mode = mode
  @auth = auth
  @env_overrides = env
  @supabase_options = supabase_options
  @cors = cors
  @session = session
  @user_model = user_model
end

Instance Method Details

#call(env) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/supabase/rails/middleware.rb', line 25

def call(env)
  if cors_enabled? && env["REQUEST_METHOD"] == "OPTIONS"
    return [204, CORS.add_headers({}, @cors), []]
  end

  return @app.call(env) if env[Rails::CONTEXT_KEY]

  result = build_context(env)

  return error_response(result.error) if result.failure?

  env[Rails::CONTEXT_KEY] = result.value
  status, headers, body = @app.call(env)
  headers = CORS.add_headers(headers, @cors) if cors_enabled?
  [status, headers, body]
end