diff --git a/.rubocop.yml b/.rubocop.yml index 0302ec1c2..bc38dcde8 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -12,7 +12,6 @@ Metrics/ClassLength: Exclude: - 'app/models/conversation.rb' - 'app/models/contact.rb' - - 'app/models/user.rb' - 'app/mailers/conversation_reply_mailer.rb' - 'app/models/message.rb' - 'app/builders/messages/facebook/message_builder.rb' diff --git a/app/models/concerns/user_attribute_helpers.rb b/app/models/concerns/user_attribute_helpers.rb new file mode 100644 index 000000000..32ff026ac --- /dev/null +++ b/app/models/concerns/user_attribute_helpers.rb @@ -0,0 +1,53 @@ +module UserAttributeHelpers + extend ActiveSupport::Concern + + def available_name + self[:display_name].presence || name + end + + def availability_status + current_account_user&.availability_status + end + + def auto_offline + current_account_user&.auto_offline + end + + def inviter + current_account_user&.inviter + end + + def active_account_user + account_users.order(active_at: :desc)&.first + end + + def current_account_user + # We want to avoid subsequent queries in case where the association is preloaded. + # using where here will trigger n+1 queries. + account_users.find { |ac_usr| ac_usr.account_id == Current.account.id } if Current.account + end + + def account + current_account_user&.account + end + + def administrator? + current_account_user&.administrator? + end + + def agent? + current_account_user&.agent? + end + + def role + current_account_user&.role + end + + # Used internally for Chatwoot in Chatwoot + def hmac_identifier + hmac_key = GlobalConfig.get('CHATWOOT_INBOX_HMAC_KEY')['CHATWOOT_INBOX_HMAC_KEY'] + return OpenSSL::HMAC.hexdigest('sha256', hmac_key, email) if hmac_key.present? + + '' + end +end diff --git a/app/models/user.rb b/app/models/user.rb index fe3f284ea..a908bd1f8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -48,6 +48,7 @@ class User < ApplicationRecord include Rails.application.routes.url_helpers include Reportable include SsoAuthenticatable + include UserAttributeHelpers devise :database_authenticatable, :registerable, @@ -112,60 +113,10 @@ class User < ApplicationRecord self.uid = email end - def active_account_user - account_users.order(active_at: :desc)&.first - end - - def current_account_user - # We want to avoid subsequent queries in case where the association is preloaded. - # using where here will trigger n+1 queries. - account_users.find { |ac_usr| ac_usr.account_id == Current.account.id } if Current.account - end - - def available_name - self[:display_name].presence || name - end - - # Used internally for Chatwoot in Chatwoot - def hmac_identifier - hmac_key = GlobalConfig.get('CHATWOOT_INBOX_HMAC_KEY')['CHATWOOT_INBOX_HMAC_KEY'] - return OpenSSL::HMAC.hexdigest('sha256', hmac_key, email) if hmac_key.present? - - '' - end - - def account - current_account_user&.account - end - def assigned_inboxes administrator? ? Current.account.inboxes : inboxes.where(account_id: Current.account.id) end - def administrator? - current_account_user&.administrator? - end - - def agent? - current_account_user&.agent? - end - - def role - current_account_user&.role - end - - def availability_status - current_account_user&.availability_status - end - - def auto_offline - current_account_user&.auto_offline - end - - def inviter - current_account_user&.inviter - end - def serializable_hash(options = nil) super(options).merge(confirmed: confirmed?) end