diff --git a/app/helpers/users_helper.rb b/app/helpers/users_helper.rb index fba08963..2d982171 100644 --- a/app/helpers/users_helper.rb +++ b/app/helpers/users_helper.rb @@ -1,13 +1,13 @@ module UsersHelper - + # see also: /config/initializers/gravatar_image_tag.rb - + def avatar(user) case user.avatar_provider when 'gravatar' if user.avatar.nil? or user.avatar.empty? then content_tag :div, nil, class: [ 'avatar-missing' ] - else + else gravatar_image_tag user.avatar, class: user.active? ? '' : 'disabled' end when 'webfinger' @@ -15,6 +15,30 @@ def avatar(user) end end + def get_avatar_url(user) + case user.avatar_provider + when 'gravatar' + if user.avatar.nil? or user.avatar.empty? then + return nil + end + + id = Digest::MD5.hexdigest(user.avatar) + return "https://secure.gravatar.com/avatar/#{id}" + when 'webfinger' + identifier = user.avatar + avatar_url = Rails.cache.fetch("fetch_avatar_url_from_webfinger_or_activitypub #{identifier}", expires_in: 1.day) do + fetch_avatar_url_from_webfinger_or_activitypub identifier + end + + if not avatar_url + return nil + end + + return avatar_url + end + + end + def redirect_path(user) return users_path + '/#' + user.initial end diff --git a/app/models/user.rb b/app/models/user.rb index ec733604..8d789476 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,7 @@ # frozen_string_literal: true +include UsersHelper + class User < ApplicationRecord validates :name, presence: true validates :barcode, uniqueness: { conditions: -> { where.not(barcode: nil) } } @@ -15,7 +17,7 @@ class User < ApplicationRecord user.barcode = nil end end - + after_save do |user| Audit.create! difference: user.balance - user.balance_before_last_save, drink: @purchased_drink, user: user.audit? ? user : nil @@ -58,7 +60,13 @@ def email end end + def avatar_url + @url = get_avatar_url(self) + @url + end + + def as_json(options={}) - super(except: [ :avatar_provider, :avatar ], methods: :email) + super(except: [ :avatar_provider, :avatar ], methods: [ :email, :avatar_url ]) end end