diff --git a/app/models/user.rb b/app/models/user.rb index cca5693bbfd..8f42ac3c786 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -475,6 +475,7 @@ class User < ActiveRecord::Base url.gsub! "{color}", letter_avatar_color(username.downcase) url.gsub! "{username}", username url.gsub! "{first_letter}", username[0].downcase + url.gsub! "{hostname}", RailsMultisite::ConnectionManagement.current_hostname url else "#{Discourse.base_uri}/letter_avatar/#{username.downcase}/{size}/#{LetterAvatar.version}.png" diff --git a/config/nginx.sample.conf b/config/nginx.sample.conf index 6e846f2a95e..fa29fe8c85c 100644 --- a/config/nginx.sample.conf +++ b/config/nginx.sample.conf @@ -192,6 +192,11 @@ server { break; } + location /letter_avatar_proxy { + rewrite /letter_avatar_proxy/(.*)$ /$1 break; + proxy_pass https://avatars.discourse.org; + } + # this means every file in public is tried first try_files $uri @discourse; } diff --git a/config/site_settings.yml b/config/site_settings.yml index 14971387278..81453913b25 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -593,9 +593,9 @@ files: client: true shadowed_by_global: true external_system_avatars_url: - default: "https://avatars.discourse.org/v2/letter/{first_letter}/{color}/{size}.png" + default: "//{hostname}/letter_avatar_proxy/v2/letter/{first_letter}/{color}/{size}.png" client: true - regex: '^https?:\/\/.+[^\/]' + regex: '^((https?:)?\/)?\/.+[^\/]' default_opengraph_image_url: '' trust: diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2f3fbfd2730..1a6f028b2c9 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -912,7 +912,7 @@ describe User do expect(user.small_avatar_url).to eq("//test.localhost/letter_avatar/sam/45/#{LetterAvatar.version}.png") SiteSetting.external_system_avatars_enabled = true - expect(user.small_avatar_url).to eq("https://avatars.discourse.org/v2/letter/s/5f9b8f/45.png") + expect(user.small_avatar_url).to eq("//test.localhost/letter_avatar_proxy/v2/letter/s/5f9b8f/45.png") end end