Module: Supabase::Rails::Core

Defined in:
lib/supabase/rails/core.rb

Class Method Summary collapse

Class Method Details

.create_admin_client(auth: nil, env: nil, supabase_options: nil) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/supabase/rails/core.rb', line 61

def create_admin_client(auth: nil, env: nil, supabase_options: nil)
  resolved_env = env.is_a?(SupabaseEnv) ? env : Env.resolve(env || {})
  _token, key_name = extract_auth_fields(auth)

  secret_key = resolve_secret_key(resolved_env.secret_keys, key_name)

  ::Supabase::Client.new(
    supabase_url: resolved_env.url,
    supabase_key: secret_key,
    options: build_client_options(supabase_options || {}, nil)
  )
end

.create_context_client(auth: nil, env: nil, supabase_options: nil) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/supabase/rails/core.rb', line 48

def create_context_client(auth: nil, env: nil, supabase_options: nil)
  resolved_env = env.is_a?(SupabaseEnv) ? env : Env.resolve(env || {})
  token, key_name = extract_auth_fields(auth)

  anon_key = resolve_publishable_key(resolved_env.publishable_keys, key_name)

  ::Supabase::Client.new(
    supabase_url: resolved_env.url,
    supabase_key: anon_key,
    options: build_client_options(supabase_options || {}, token)
  )
end

.extract_credentials(headers) ⇒ Object



27
28
29
30
31
32
# File 'lib/supabase/rails/core.rb', line 27

def extract_credentials(headers)
  Credentials.new(
    token: extract_bearer_token(lookup_header(headers, "authorization")),
    apikey: stringify(lookup_header(headers, "apikey"))
  )
end

.secure_compare(a, b) ⇒ Object



258
259
260
261
262
263
264
265
# File 'lib/supabase/rails/core.rb', line 258

def secure_compare(a, b)
  a_str = a.to_s
  b_str = b.to_s
  # Length pre-check is required: fixed_length_secure_compare raises on mismatch.
  return false if a_str.bytesize != b_str.bytesize

  OpenSSL.fixed_length_secure_compare(a_str, b_str)
end

.verify_credentials(credentials, auth: :user, env: nil) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/supabase/rails/core.rb', line 34

def verify_credentials(credentials, auth: :user, env: nil)
  resolved_env = env.is_a?(SupabaseEnv) ? env : Env.resolve(env || {})

  modes = Array(auth)
  modes = [:user] if modes.empty?

  modes.each do |mode|
    result = try_mode(mode, credentials, resolved_env)
    return result if result
  end

  raise AuthError.invalid_credentials
end