class User < ApplicationRecord has_many :screenshots, :inverse_of=>:user # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, # :registerable, # :recoverable, # :rememberable, :trackable, # :validatable, :timeoutable, # :lockable, :omniauthable, omniauth_providers: [ :salsa, # :launchpad, # :stackexchange, # :google_oauth2, # :amazon, # :github ] # Return a human-friendly string describing the user's SSO provider def pretty_provider case self.provider # when 'launchpad' # 'Ubuntu One/Launchpad' # when 'stackexchange' # 'StackExchange' # when 'google_oauth2' # 'Google' # when 'amazon' # 'Amazon' # when 'github' # 'GitHub' when 'salsa' 'salsa.debian.org' else 'local authentication' end end def is_admin? self.admin == 1 end # Check if a user has been created on-the-fly and is just an # anonymous user who uploaded a screenshot. They can turn this # user record into a registered account though. def is_anonymous? self.provider == nil end def self.from_omniauth(auth) where(provider: auth.provider, email: auth.info.email).first_or_create do |user| user.provider = auth.provider user.uid = auth.uid user.email = auth.info.email user.name = auth.info.name # Set a random password user.password = Devise.friendly_token[0,20] end end def approved_screenshots self.screenshots.where(approved: true) end # Seamlessly create a user account for the current client. # It helps track uploads because uploaded screenshots get assigned # to this user record. The user can later decide to use a real # account and get their screenshots transferred to that. # def self.create_pseudo_user # generated_password = Devise.friendly_token.first(8) # new_user = User.create( # name: 'Anonymous', # password: generated_password) # Log.log "New pseudo user for anonymous upload created: #{new_user}" # sign_in new_user # end # # Currently the approach is different: do not create an account # for a user. Instead store the IDs of the uploaded screenshots # and transfer them if the user decides to do a real login using SSO. end