# frozen_string_literal: true
# PORO Representaiton of an Authenticated Auth0 User
class User
EMAIL_REGEX = /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i.freeze def initialize(userinfo = nil) @userinfo = userinfo.presence || {} end def id if auth0? @userinfo["uid"] elsif @userinfo["uid"].present? "#{@userinfo['provider']}|#{@userinfo['uid']}" end end def image @userinfo.dig("info", "image") end def name name_or_email = @userinfo.dig("info", "name") if name_or_email =~ EMAIL_REGEX nickname else name_or_email end end def nickname @userinfo.dig("info", "nickname") end def first_name namae.given end def admin? roles.include? "admin" end def persisted? @userinfo.present? end def to_h @userinfo.to_h end def to_s name end def ==(other) if other.nil? || !other.instance_of?(User) false else to_h == other.to_h end end alias eql? == def hash @userinfo.hash end private def auth0? @userinfo["provider"] == "auth0" end def namae @namae ||= Namae::Name.parse(name) end def roles @roles ||= (@userinfo.dig("extra", "raw_info", "http://<%= app_name %>/roles") || []) end
end