plumb host and protocol to gravatar fallbacks

test plan:
 * go to /images/users/<id> for a user without an avatar set,
   but avatars are enabled
 * you should end up back on the same host, with ssl
 * change your avatar on the profile page
 * the fallback to dashed should also be over ssl

Change-Id: I3e3cd322e75c2bd7a329c39887043915f80d2112
Reviewed-on: https://gerrit.instructure.com/8956
Tested-by: Hudson <hudson@instructure.com>
Reviewed-by: Zach Wily <zach@instructure.com>
This commit is contained in:
Cody Cutrer 2012-02-23 12:21:12 -07:00
parent 30de1a294e
commit 9aeff5370d
5 changed files with 15 additions and 15 deletions

View File

@ -161,7 +161,7 @@ class ProfileController < ApplicationController
end
end
@pics << {
:url => @current_user.gravatar_url(50, "http://#{HostUrl.default_host}/images/dotted_pic.png"),
:url => @current_user.gravatar_url(50, "#{request.protocol}#{request.host_with_port}/images/dotted_pic.png"),
:type => 'gravatar',
:alt => 'gravatar pic'
}

View File

@ -912,7 +912,7 @@ class UsersController < ApplicationController
url = Rails.cache.fetch(Cacher.avatar_cache_key(user_id)) do
user = User.find_by_id(user_id) if user_id.present?
if user && service_enabled?(:avatars)
url = user.avatar_url(nil, @domain_root_account && @domain_root_account.settings[:avatars], params[:fallback])
url = user.avatar_url(nil, @domain_root_account && @domain_root_account.settings[:avatars], params[:fallback], request)
end
url ||= params[:fallback] || '/images/no_pic.gif'
end

View File

@ -1088,8 +1088,8 @@ class User < ActiveRecord::Base
User.max_messages_per_day
end
def gravatar_url(size=50, fallback=nil)
fallback ||= "http://#{HostUrl.default_host}/images/no_pic.gif"
def gravatar_url(size=50, fallback=nil, request=nil)
fallback ||= request ? "#{request.protocol}#{request.host_with_port}/images/no_pic.gif" : "http://#{HostUrl.default_host}/images/no_pic.gif"
"https://secure.gravatar.com/avatar/#{Digest::MD5.hexdigest(self.email) rescue '000'}?s=#{size}&d=#{CGI::escape(fallback)}"
end
@ -1225,14 +1225,14 @@ class User < ActiveRecord::Base
}.uniq
end
def avatar_url(size=nil, avatar_setting=nil, fallback='/images/no_pic.gif')
def avatar_url(size=nil, avatar_setting=nil, fallback='/images/no_pic.gif', request = nil)
size ||= 50
avatar_setting ||= 'enabled'
if avatar_setting == 'enabled' || (avatar_setting == 'enabled_pending' && avatar_approved?) || (avatar_setting == 'sis_only')
@avatar_url ||= self.avatar_image_url
end
@avatar_url ||= fallback if self.avatar_image_source == 'no_pic'
@avatar_url ||= gravatar_url(size, fallback) if avatar_setting == 'enabled'
@avatar_url ||= gravatar_url(size, fallback, request) if avatar_setting == 'enabled'
@avatar_url ||= fallback
end

View File

@ -370,15 +370,6 @@ describe UsersController do
get 'avatar_image_url', :user_id => @user.id, :fallback => "https://test.domain/my/custom/fallback/url.png"
response.should redirect_to "https://secure.gravatar.com/avatar/000?s=50&d=https%3A%2F%2Ftest.domain%2Fmy%2Fcustom%2Ffallback%2Furl.png"
end
it "should handle receiving an encrypted user id" do
course_with_student_logged_in(:active_all => true)
@account = Account.default
@account.enable_service(:avatars)
@account.save!
@account.service_enabled?(:avatars).should be_true
get 'avatar_image_url', :user_id => CGI.unescape(User.avatar_key(@user.id))
response.should redirect_to "https://secure.gravatar.com/avatar/000?s=50&d=http%3A%2F%2F#{CGI.escape(HostUrl.default_host)}%2Fimages%2Fno_pic.gif"
end
it "should take an invalid id and return no_pic" do
@account = Account.default
@account.enable_service(:avatars)

View File

@ -94,5 +94,14 @@ describe UsersController do
response.body.should match /Olds, JT.*St\. Clair, John/m
end
end
describe "#avatar_image_url" do
it "should maintain protocol and domain name in gravatar redirect" do
Account.default.tap { |a| a.enable_service(:avatars) }.save
user
get "https://someschool.instructure.com/images/users/#{User.avatar_key(@user.id)}"
response.should redirect_to "https://secure.gravatar.com/avatar/000?s=50&d=#{CGI::escape("https://someschool.instructure.com/images/no_pic.gif")}"
end
end
end