mirror of
https://github.com/wahyd4/libr-2.git
synced 2026-08-09 05:15:53 +10:00
117 lines
2.6 KiB
Ruby
117 lines
2.6 KiB
Ruby
class User < ActiveRecord::Base
|
|
# Include default devise modules. Others available are:
|
|
# :confirmable, :lockable, :timeoutable and :omniauthable
|
|
devise :database_authenticatable, :registerable, :recoverable, :rememberable,
|
|
:trackable, :validatable, :omniauthable
|
|
|
|
before_create :set_name, :generate_auth_key
|
|
after_create :set_avatar
|
|
|
|
has_many :comments
|
|
has_many :likes
|
|
has_many :favorites
|
|
has_many :share_instances
|
|
has_many :auth_tokens
|
|
|
|
has_many :follow_relations
|
|
|
|
has_many :stars, through: :follow_relations, source: :star, primary_key: :user_id ,foreign_key: :user_id
|
|
has_many :timeline_sources
|
|
|
|
has_one :avatar
|
|
has_one :identity
|
|
|
|
acts_as_paranoid
|
|
|
|
def self.json_attrs
|
|
[:id, :email, :name]
|
|
end
|
|
|
|
def followers
|
|
user_ids = FollowRelation.where(star_id: self.id).pluck(:user_id)
|
|
User.where(id: user_ids)
|
|
end
|
|
|
|
def followers_ids
|
|
FollowRelation.where(star_id: self.id).pluck(:user_id)
|
|
end
|
|
|
|
def active_auth_token
|
|
if auth_tokens.empty?
|
|
generate_auth_key
|
|
end
|
|
auth_tokens.first.value
|
|
end
|
|
|
|
def avatar_url
|
|
avatar.try(:file).try(:url) || external_avatar
|
|
end
|
|
|
|
def self.find_for_oauth(auth, signed_in_resource = nil)
|
|
|
|
identity = Identity.find_for_oauth(auth)
|
|
|
|
user = signed_in_resource ? signed_in_resource : identity.user
|
|
if user.nil?
|
|
email_is_verified = auth.info.email && (auth.info.verified || auth.info.verified_email)
|
|
email = auth.info.email if email_is_verified
|
|
user = User.where(:email => email).first if email
|
|
|
|
if user.nil?
|
|
name = auth.info.nickname || auth.extra.raw_info.name
|
|
avatar = auth.info.image
|
|
user = create_user_from_oauth(auth.uid, auth.provider, name, nil, avatar)
|
|
end
|
|
|
|
end
|
|
|
|
if identity.user != user
|
|
identity.user = user
|
|
identity.save!
|
|
end
|
|
user
|
|
end
|
|
|
|
def email_verified?
|
|
true
|
|
end
|
|
|
|
def self.create_user_from_oauth(uid, provider, name, email, avatar)
|
|
user = User.new(
|
|
name: name || uid,
|
|
email: email ? email : "#{uid}-#{provider}@librme.com",
|
|
password: Devise.friendly_token[0, 20]
|
|
)
|
|
user.create_avatar file: URI.parse(avatar) if avatar.present?
|
|
user.save!
|
|
user
|
|
end
|
|
|
|
private
|
|
|
|
def set_name
|
|
unless self.name
|
|
email_name = email.split('@')[0]
|
|
self.name = email_name
|
|
end
|
|
end
|
|
|
|
def ensure_authentication_token
|
|
if auth_keys.empty?
|
|
generate_auth_key
|
|
end
|
|
end
|
|
|
|
def generate_auth_key
|
|
AuthToken.generate_token_for self
|
|
end
|
|
|
|
def set_avatar
|
|
# UserAvatarWorker.perform_async(self.id) unless self.external_avatar
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|