From 090f63c4290672a4e399f7c68b84a4f896ca6d36 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Tue, 5 Feb 2019 14:53:34 +0000 Subject: [PATCH] FIX: Download avatar for new users Previously avatars were only loaded on subsequent logins --- plugin.rb | 17 +++++++++++------ spec/plugin_spec.rb | 25 ++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/plugin.rb b/plugin.rb index 58ea1dc..d3c6e79 100644 --- a/plugin.rb +++ b/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? diff --git a/spec/plugin_spec.rb b/spec/plugin_spec.rb index 8812009..485cf3b 100644 --- a/spec/plugin_spec.rb +++ b/spec/plugin_spec.rb @@ -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