trabajo-afectivo/app/models/authorization.rb

111 lines
3.2 KiB
Ruby
Raw Normal View History

# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
class Authorization < ApplicationModel
belongs_to :user, optional: true
after_create :delete_user_cache
after_update :delete_user_cache
after_destroy :delete_user_cache
validates :user_id, presence: true
validates :uid, presence: true, uniqueness: { case_sensitive: true, scope: :provider }
validates :provider, presence: true
2012-04-10 14:06:46 +00:00
def self.find_from_hash(hash)
2016-03-08 06:32:58 +00:00
auth = Authorization.find_by(provider: hash['provider'], uid: hash['uid'])
if auth
2012-04-10 14:06:46 +00:00
# update auth tokens
auth.update!(
token: hash['credentials']['token'],
secret: hash['credentials']['secret']
2012-04-10 14:06:46 +00:00
)
# update username of auth entry if empty
if !auth.username && hash['info']['nickname'].present?
auth.update!(
username: hash['info']['nickname'],
)
end
# update firstname/lastname if needed
user = User.find(auth.user_id)
if user.firstname.blank? && user.lastname.blank?
if hash['info']['first_name'].present? && hash['info']['last_name'].present?
user.firstname = hash['info']['first_name']
user.lastname = hash['info']['last_name']
elsif hash['info']['display_name'].present?
user.firstname = hash['info']['display_name']
end
end
2014-12-01 07:32:35 +00:00
# update image if needed
if hash['info']['image'].present?
2014-12-01 07:32:35 +00:00
avatar = Avatar.add(
object: 'User',
o_id: user.id,
url: hash['info']['image'],
source: hash['provider'],
deletable: true,
updated_by_id: user.id,
created_by_id: user.id,
2012-04-10 14:06:46 +00:00
)
if avatar && user.image != avatar.store_hash
user.image = avatar.store_hash
2014-12-01 07:32:35 +00:00
end
2012-04-10 14:06:46 +00:00
end
if user.changed?
user.save
end
2012-04-10 14:06:46 +00:00
end
2014-12-01 07:32:35 +00:00
auth
2012-04-10 14:06:46 +00:00
end
2012-04-10 14:06:46 +00:00
def self.create_from_hash(hash, user = nil)
2014-12-01 07:32:35 +00:00
if !user && Setting.get('auth_third_party_auto_link_at_inital_login') && hash['info'] && hash['info']['email'].present?
user = User.find_by(email: hash['info']['email'].downcase)
end
if !user
user = User.create_from_hash!(hash)
end
# save/update avatar
2017-10-20 13:32:01 +00:00
if hash['info'].present? && hash['info']['image'].present?
2014-12-01 07:32:35 +00:00
avatar = Avatar.add(
object: 'User',
o_id: user.id,
url: hash['info']['image'],
source: hash['provider'],
deletable: true,
updated_by_id: user.id,
created_by_id: user.id,
2012-04-10 14:06:46 +00:00
)
2014-12-01 07:32:35 +00:00
# update user link
if avatar && user.image != avatar.store_hash
user.image = avatar.store_hash
user.save
2014-12-01 07:32:35 +00:00
end
2012-04-10 14:06:46 +00:00
end
Authorization.create!(
user: user,
uid: hash['uid'],
2015-07-06 11:48:07 +00:00
username: hash['info']['nickname'] || hash['info']['username'] || hash['info']['name'] || hash['info']['email'] || hash['username'],
provider: hash['provider'],
token: hash['credentials']['token'],
secret: hash['credentials']['secret']
2012-04-10 14:06:46 +00:00
)
2012-04-16 08:04:49 +00:00
end
private
def delete_user_cache
return if !user
2017-11-23 08:09:44 +00:00
user.touch # rubocop:disable Rails/SkipsModelValidations
end
2014-12-01 07:32:35 +00:00
end