module Firebase::Admin::Auth::Utils

Constants

AUTH_EMULATOR_HOST_VAR
HOSTNAME_PATTERN
INVALID_CHARS_PATTERN
PATHNAME_PATTERN

Public Instance Methods

get_emulator_host() click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 72
def get_emulator_host
  emulator_host = ENV[AUTH_EMULATOR_HOST_VAR]&.strip
  return nil unless emulator_host && !emulator_host.empty?
  if emulator_host.include?("//")
    msg = "Invalid #{AUTH_EMULATOR_HOST_VAR}: \"#{emulator_host}\". It must follow the format \"host:post\""
    raise ArgumentError, msg
  end
  emulator_host
end
get_emulator_v1_url() click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 82
def get_emulator_v1_url
  return nil unless (emulator_host = get_emulator_host)
  "http://#{emulator_host}/identitytoolkit.googleapis.com/v1"
end
is_emulated?() click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 87
def is_emulated?
  !!get_emulator_host
end
to_boolean(val) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 53
def to_boolean(val)
  !!val unless val.nil?
end
validate_display_name(name, required: false) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 47
def validate_display_name(name, required: false)
  return nil if name.nil? && !required
  raise ArgumentError, "display_name must be a non-empty string" unless name.is_a?(String) && !name.empty?
  name
end
validate_email(email, required: false) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 18
def validate_email(email, required: false)
  return nil if email.nil? && !required
  raise ArgumentError, "email must be a non-empty string" unless email.is_a?(String) && !email.empty?
  parts = email.split("@")
  raise ArgumentError, "email is malformed #{email}" unless parts.length == 2 && !parts[0].empty? && !parts[1].empty?
  email
end
validate_password(password, required: false) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 33
def validate_password(password, required: false)
  return nil if password.nil? && !required
  raise ArgumentError, "password must a string" unless password.is_a?(String)
  raise ArgumentError, "password must be at least 6 characters long" unless password.length >= 6
  password
end
validate_phone_number(phone_number, required: false) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 26
def validate_phone_number(phone_number, required: false)
  return nil if phone_number.nil? && !required
  raise ArgumentError, "phone_number must be a non-empty string" unless phone_number.is_a?(String)
  raise ArgumentError, "phone_number must be an E.164 identifier" unless phone_number.match?(/^\+\d{1,14}$/)
  phone_number
end
validate_photo_url(url, required: false) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 40
def validate_photo_url(url, required: false)
  return nil if url.nil? && !required
  raise ArgumentError, "photo_url must be a valid url" unless url.is_a?(String) && !url.empty?
  raise ArgumentError, "photo_url must be a valid url" unless validate_url(url)
  url
end
validate_uid(uid, required: false) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 11
def validate_uid(uid, required: false)
  return nil if uid.nil? && !required
  raise ArgumentError, "uid must be a string" unless uid.is_a?(String)
  raise ArgumentError, "uid must be non-empty with no more than 128 chars" unless uid.length.between?(1, 128)
  uid
end
validate_url(url) click to toggle source
# File lib/firebase/admin/auth/utils.rb, line 59
def validate_url(url)
  return false unless url.is_a?(String) && !url.empty? && !url.match?(INVALID_CHARS_PATTERN)
  begin
    uri = URI.parse(url)
    return false unless %w[https http].include?(uri.scheme)
    return false unless uri.hostname&.match?(HOSTNAME_PATTERN)
    return false unless uri.path.empty? || uri.path == "/" || uri.path.match?(PATHNAME_PATTERN)
    true
  rescue
    false
  end
end