Merge pull request #2670 from Wilhansen/sso_override_avatar

Implement SSO overriding avatars.
This commit is contained in:
Sam
2014-08-22 10:22:06 +10:00
8 changed files with 46 additions and 12 deletions

View File

@ -121,9 +121,32 @@ class DiscourseSingleSignOn < SingleSignOn
user.name = User.suggest_name(name || username || email)
end
if SiteSetting.sso_overrides_avatar && (
avatar_force_update == "true" ||
avatar_force_update.to_i != 0 ||
sso_record.external_avatar_url != avatar_url)
begin
tempfile = FileHelper.download(avatar_url, 1.megabyte, "sso-avatar")
upload = Upload.create_for(user.id, tempfile, "external-avatar", File.size(tempfile.path), { origin: avatar_url })
user.uploaded_avatar_id = upload.id
if !user.user_avatar.contains_upload?(upload.id)
user.user_avatar.custom_upload_id = upload.id
end
rescue SocketError
# skip saving, we are not connected to the net
Rails.logger.warn "Failed to download external avatar: #{avatar_url}, socket error - user id #{ user.id }"
ensure
tempfile.close! if tempfile && tempfile.respond_to?(:close!)
end
end
# change external attributes for sso record
sso_record.external_username = username
sso_record.external_email = email
sso_record.external_name = name
sso_record.external_avatar_url = avatar_url
end
end

View File

@ -6,15 +6,16 @@ end
#
# Table name: single_sign_on_records
#
# id :integer not null, primary key
# user_id :integer not null
# external_id :string(255) not null
# last_payload :text not null
# created_at :datetime
# updated_at :datetime
# external_username :string(255)
# external_email :string(255)
# external_name :string(255)
# id :integer not null, primary key
# user_id :integer not null
# external_id :string(255) not null
# last_payload :text not null
# created_at :datetime
# updated_at :datetime
# external_username :string(255)
# external_email :string(255)
# external_name :string(255)
# external_avatar_url :string(255)
#
# Indexes
#