FIX: Download avatar for new users
Previously avatars were only loaded on subsequent logins
This commit is contained in:
parent
f327bf7f32
commit
090f63c429
17
plugin.rb
17
plugin.rb
|
@ -131,18 +131,23 @@ class OAuth2BasicAuthenticator < ::Auth::OAuth2Authenticator
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Jobs.enqueue(:download_avatar_from_url,
|
download_avatar(result.user, avatar_url)
|
||||||
url: avatar_url,
|
|
||||||
user_id: result.user.id,
|
|
||||||
override_gravatar: SiteSetting.sso_overrides_avatar
|
|
||||||
) if result.user && avatar_url.present?
|
|
||||||
|
|
||||||
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
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
def after_create_account(user, auth)
|
def after_create_account(user, auth)
|
||||||
::PluginStore.set("oauth2_basic", "oauth2_basic_user_#{auth[:extra_data][:oauth2_basic_user_id]}", user_id: user.id)
|
::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
|
end
|
||||||
|
|
||||||
def enabled?
|
def enabled?
|
||||||
|
|
|
@ -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" })
|
stub_request(:get, "http://avatar.example.com/avatar.png").to_return(body: png, headers: { "Content-Type" => "image/png" })
|
||||||
end
|
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(
|
authenticator.expects(:fetch_user_details).returns(
|
||||||
email: user.email,
|
email: user.email,
|
||||||
avatar: 'http://avatar.example.com/avatar.png'
|
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['user_id']).to eq(user.id)
|
||||||
expect(job_args['override_gravatar']).to eq(false)
|
expect(job_args['override_gravatar']).to eq(false)
|
||||||
end
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'can walk json' do
|
it 'can walk json' do
|
||||||
|
|
Loading…
Reference in New Issue