FIX: Download avatar for new users

Previously avatars were only loaded on subsequent logins
This commit is contained in:
David Taylor 2019-02-05 14:53:34 +00:00
parent f327bf7f32
commit 090f63c429
2 changed files with 35 additions and 7 deletions

View File

@ -131,18 +131,23 @@ class OAuth2BasicAuthenticator < ::Auth::OAuth2Authenticator
end
end
Jobs.enqueue(:download_avatar_from_url,
url: avatar_url,
user_id: result.user.id,
override_gravatar: SiteSetting.sso_overrides_avatar
) if result.user && avatar_url.present?
download_avatar(result.user, avatar_url)
result.extra_data = { oauth2_basic_user_id: user_details[:user_id] }
result.extra_data = { oauth2_basic_user_id: user_details[:user_id], avatar_url: avatar_url }
result
end
def after_create_account(user, auth)
::PluginStore.set("oauth2_basic", "oauth2_basic_user_#{auth[:extra_data][:oauth2_basic_user_id]}", user_id: user.id)
download_avatar(user, auth[:extra_data][:avatar_url])
end
def download_avatar(user, avatar_url)
Jobs.enqueue(:download_avatar_from_url,
url: avatar_url,
user_id: user.id,
override_gravatar: SiteSetting.sso_overrides_avatar
) if user && avatar_url.present?
end
def enabled?

View File

@ -56,7 +56,7 @@ describe OAuth2BasicAuthenticator do
stub_request(:get, "http://avatar.example.com/avatar.png").to_return(body: png, headers: { "Content-Type" => "image/png" })
end
it 'enqueues a download_avatar_from_url job' do
it 'enqueues a download_avatar_from_url job for existing user' do
authenticator.expects(:fetch_user_details).returns(
email: user.email,
avatar: 'http://avatar.example.com/avatar.png'
@ -71,7 +71,30 @@ describe OAuth2BasicAuthenticator do
expect(job_args['user_id']).to eq(user.id)
expect(job_args['override_gravatar']).to eq(false)
end
it 'enqueues a download_avatar_from_url job for new user' do
authenticator.expects(:fetch_user_details).returns(
email: "unknown@user.com",
avatar: 'http://avatar.example.com/avatar.png'
)
auth_result = nil
expect {
auth_result = authenticator.after_authenticate(auth)
}.to change { job_klass.jobs.count }.by(0)
expect {
authenticator.after_create_account(user, auth_result.session_data)
}.to change { job_klass.jobs.count }.by(1)
job_args = job_klass.jobs.last['args'].first
expect(job_args['url']).to eq("http://avatar.example.com/avatar.png")
expect(job_args['user_id']).to eq(user.id)
expect(job_args['override_gravatar']).to eq(false)
end
end
end
it 'can walk json' do