diff --git a/app/models/discourse_single_sign_on.rb b/app/models/discourse_single_sign_on.rb index 63aaf74eaba..5edfeb6b71d 100644 --- a/app/models/discourse_single_sign_on.rb +++ b/app/models/discourse_single_sign_on.rb @@ -127,28 +127,7 @@ class DiscourseSingleSignOn < SingleSignOn avatar_force_update || sso_record.external_avatar_url != avatar_url) - begin - tempfile = FileHelper.download(avatar_url, SiteSetting.max_image_size_kb.kilobytes, "sso-avatar", true) - - ext = FastImage.type(tempfile).to_s - tempfile.rewind - - upload = Upload.create_for(user.id, tempfile, "external-avatar." + ext, tempfile.size, { origin: avatar_url }) - user.uploaded_avatar_id = upload.id - - unless user.user_avatar - user.build_user_avatar - end - - if !user.user_avatar.contains_upload?(upload.id) - user.user_avatar.custom_upload_id = upload.id - end - rescue => e - # skip saving, we are not connected to the net - Rails.logger.warn "#{e}: Failed to download external avatar: #{avatar_url}, user id #{ user.id }" - ensure - tempfile.close! if tempfile && tempfile.respond_to?(:close!) - end + UserAvatar.import_url_for_user(avatar_url, user) end # change external attributes for sso record diff --git a/app/models/user_avatar.rb b/app/models/user_avatar.rb index 87dd8d5dbb2..bc33d1889a0 100644 --- a/app/models/user_avatar.rb +++ b/app/models/user_avatar.rb @@ -62,6 +62,29 @@ class UserAvatar < ActiveRecord::Base "#{upload_id}_#{OptimizedImage::VERSION}" end + def self.import_url_for_user(avatar_url, user) + tempfile = FileHelper.download(avatar_url, SiteSetting.max_image_size_kb.kilobytes, "sso-avatar", true) + + ext = FastImage.type(tempfile).to_s + tempfile.rewind + + upload = Upload.create_for(user.id, tempfile, "external-avatar." + ext, tempfile.size, { origin: avatar_url }) + user.uploaded_avatar_id = upload.id + + unless user.user_avatar + user.build_user_avatar + end + + if !user.user_avatar.contains_upload?(upload.id) + user.user_avatar.custom_upload_id = upload.id + end + rescue => e + # skip saving, we are not connected to the net + Rails.logger.warn "#{e}: Failed to download external avatar: #{avatar_url}, user id #{ user.id }" + ensure + tempfile.close! if tempfile && tempfile.respond_to?(:close!) + end + end # == Schema Information