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
|
||||
|
||||
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?
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue