From 1062dbc3e9cbf9370803c0acea55eb3c054060ca Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Tue, 5 May 2020 16:42:48 +0800 Subject: [PATCH] FIX: Discobot has not been created with our custom avatar. Previously the image was imported from a Discourse hosted CDN but the URL has since become invalid. However, it was not caught since all errors are rescued. This commit fixes the issue by shipping the user avatar with the plugin. --- app/models/user_avatar.rb | 28 ++++++++----- .../assets/images/discobot.png | Bin 0 -> 10343 bytes .../db/fixtures/001_discobot.rb | 38 ++++++++---------- 3 files changed, 35 insertions(+), 31 deletions(-) create mode 100644 plugins/discourse-narrative-bot/assets/images/discobot.png diff --git a/app/models/user_avatar.rb b/app/models/user_avatar.rb index f6dbf133126..e2b7f44dc6b 100644 --- a/app/models/user_avatar.rb +++ b/app/models/user_avatar.rb @@ -96,16 +96,31 @@ class UserAvatar < ActiveRecord::Base return unless tempfile - ext = FastImage.type(tempfile).to_s - tempfile.rewind + create_custom_avatar( + user, + tempfile, + override_gravatar: options&.dig(:override_gravatar), + origin: avatar_url + ) + rescue Net::ReadTimeout, OpenURI::HTTPError + # skip saving, we are not connected to the net + ensure + tempfile.close! if tempfile && tempfile.respond_to?(:close!) + end - upload = UploadCreator.new(tempfile, "external-avatar." + ext, origin: avatar_url, type: "avatar").create_for(user.id) + def self.create_custom_avatar(user, file, override_gravatar: false, origin: nil) + ext = FastImage.type(file).to_s + file.rewind + + upload = UploadCreator.new(file, "external-avatar.#{ext}", + origin: origin, + type: "avatar" + ).create_for(user.id) user.create_user_avatar! unless user.user_avatar if !user.user_avatar.contains_upload?(upload.id) user.user_avatar.update!(custom_upload_id: upload.id) - override_gravatar = !options || options[:override_gravatar] if user.uploaded_avatar_id.nil? || !user.user_avatar.contains_upload?(user.uploaded_avatar_id) || @@ -114,11 +129,6 @@ class UserAvatar < ActiveRecord::Base user.update!(uploaded_avatar_id: upload.id) end end - - rescue Net::ReadTimeout, OpenURI::HTTPError - # skip saving, we are not connected to the net - ensure - tempfile.close! if tempfile && tempfile.respond_to?(:close!) end def self.ensure_consistency! diff --git a/plugins/discourse-narrative-bot/assets/images/discobot.png b/plugins/discourse-narrative-bot/assets/images/discobot.png new file mode 100644 index 0000000000000000000000000000000000000000..b6c711304241edfc3e23d08a463cb4fbffcb7e7d GIT binary patch literal 10343 zcma)iWlS8gov zmKfs39v--Jv#&VbbMwy)amN_!LkMxbcskd~�LjRvhh880vUakWL@sOX2T%hqyu@ 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 literal 0 HcmV?d00001 diff --git a/plugins/discourse-narrative-bot/db/fixtures/001_discobot.rb b/plugins/discourse-narrative-bot/db/fixtures/001_discobot.rb index 3972a350fbf..f30861e89ae 100644 --- a/plugins/discourse-narrative-bot/db/fixtures/001_discobot.rb +++ b/plugins/discourse-narrative-bot/db/fixtures/001_discobot.rb @@ -1,23 +1,24 @@ # frozen_string_literal: true discobot_username = 'discobot' +discobot_user_id = -2 -def seed_primary_email +def seed_primary_email(user_id) UserEmail.seed do |ue| - ue.id = -2 + ue.id = user_id ue.email = "discobot_email" ue.primary = true - ue.user_id = -2 + ue.user_id = user_id end end -unless user = User.find_by(id: -2) +unless user = User.find_by(id: discobot_user_id) suggested_username = UserNameSuggester.suggest(discobot_username) - seed_primary_email + seed_primary_email(discobot_user_id) User.seed do |u| - u.id = -2 + u.id = discobot_user_id u.name = discobot_username u.username = suggested_username u.username_lower = suggested_username.downcase @@ -26,26 +27,13 @@ unless user = User.find_by(id: -2) u.approved = true u.trust_level = TrustLevel[4] end - - # TODO Pull the user avatar from that thread for now. In the future, pull it from a local file or from some central discobot repo. - if !Rails.env.test? - begin - UserAvatar.import_url_for_user( - "https://cdn.discourse.org/dev/uploads/default/original/2X/e/edb63d57a720838a7ce6a68f02ba4618787f2299.png", - User.find(-2), - override_gravatar: true - ) - rescue - # In case the avatar can't be downloaded, don't fail seed - end - end end -bot = User.find(-2) +bot = User.find(discobot_user_id) # ensure discobot has a primary email unless bot.primary_email - seed_primary_email + seed_primary_email(discobot_user_id) bot.reload end @@ -62,4 +50,10 @@ if !bot.user_profile.bio_raw ) end -Group.user_trust_level_change!(-2, TrustLevel[4]) +if !Rails.env.test? && (bot.user_avatar&.custom_upload_id.blank?) + File.open(Rails.root.join("plugins", "discourse-narrative-bot", "assets", "images", "discobot.png"), 'r') do |file| + UserAvatar.create_custom_avatar(bot, file, override_gravatar: true) + end +end + +Group.user_trust_level_change!(discobot_user_id, TrustLevel[4])