class Controller::User

Public Class Methods

new(current_identity, params, db) click to toggle source
Calls superclass method JunglePath::Controller::Base::new
# File lib/jungle_path/app/controllers/controller.rb, line 14
def initialize(current_identity, params, db)
        super(current_identity, params, db, Schema::User)
end
strip_phone_leave_domain_if_any(user_phone) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 132
def self.strip_phone_leave_domain_if_any user_phone
        phone = nil
        if user_phone
                parts = user_phone.split('@')
                phone = parts[0].gsub(/[^0-9]/,'')
                phone = phone[1..-1] if phone[0] == '1'
                phone = "#{phone}@#{parts[1]}" if parts.length > 1
        end
        phone
end
validate_hash_with_password(hash, password) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 128
def self.validate_hash_with_password(hash, password)
        PasswordHash.validatePassword(password, hash)
end

Private Class Methods

validate_password_message(password) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 168
def self.validate_password_message(password)
        message = ''
        pw_set = configatron.application.password_settings
        # returns message if password is not a minimum strength...
        message = "#{pw_set[:length][:message]}\n" unless password and password.length > pw_set[:length][:must_be_greater_than]
        pw_set[:regular_expression_matches].each do |match|
                message += "#{match[:message]}\n" if (match[:expression] =~ password) == nil
        end
        # message += "Password must have at least one alphabetical character.\n" if (/[[:alpha:]]/ =~ password) == nil
        # message += "Password must have at least one numeric character." if (/[[:digit:]]/ =~ password) == nil
        # message = "Password may not contain a '@' character." if password and password.include? '@'
        if message == ''
                nil
        else
                message
        end
end

Public Instance Methods

delete() click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 143
          def delete
                  model = @table_class.new @params
self.class.validate_delete(model)
                  delete_user_roles model.id
result = @db.delete._model(model)
          end
insert(include_secure_columns: false) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 18
  def insert(include_secure_columns: false)
          params = self.class.add_audit_parameter_values_for_insert(@params, @current_user, @current_key, @table_class)
          model = @table_class.new params
          #puts "params: #{params}."
          #puts "model: #{model.to_h}."

          #model.user_name = params[:email] unless model.user_name
          model.user_name = model.email unless model.user_name
          model.user_name = model.user_name.downcase if model.user_name

          if params[:first_name] and params[:last_name]
                  model.name = "#{model.first_name} #{model.last_name}"
          elsif params[:first_name]
                  model.name = model.first_name
          elsif params[:last_name]
                  model.name = model.last_name
          elsif params[:name]
                          name = params[:name].split(' ')
                          model.first_name = name[0]
                          model.last_name = name[1..-1].join(' ') if name.length > 1
          end

          #puts "model: #{model}."

          model.sms_verification_code = validate_or_set_sms_verification_code(model.sms_verification_code)
          model.activation_key = validate_or_set_activation_key(model.activation_key)

          password = params[:password]
          password = model.sms_verification_code unless password

          message = self.class.validate_password_message(password)
          if message
                  self.class.validate_insert(model, message)
                  raise Exceptions::InvalidPassword, "#{message}", caller
          end
          ## todo: validate password strength, etc. here!
          #model.hash = PasswordHash.createHash(password)
          #model.key = KeyHelpers.generate_api_key unless model.key #create a new key_string unless one was passed in.
          #model.key = model.key.downcase if model.key

          self.class.validate_insert(model)
          # result = handle_profile_image params
          # model.profile_image_id = result.id if result
          begin
                  result = @db.insert._model(model)
                  #puts "result: #{result}."
                  result = self.class.handle_include_secure_columns_flag(result, include_secure_columns, @table_class)
                  #default to role admin:
                  #params[:role_id] = 2 unless params[:role_id] # default to 'user' role.
                  #if params[:role_id]
#  user_role = {role_id: params[:role_id], user_id: result.id}
#  Controller::UserRole.new(@current_user, @current_key, user_role, @db).insert
#end
          rescue Sequel::UniqueConstraintViolation => e
                  # already there? update instead...
                  puts "not unique!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
                  user_query = Schema::User.new({user_name: params[:user_name]})
                  user = @db.select._model_by_any(user_query)
                  puts "user: #{user}."
                  params[:id] = user.id if user
                  if user
                          update
                          user = @db.select._model(user)
                  else
                          raise
                  end
          end
          result
  end
update() click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 88
          def update
                  params = self.class.add_audit_parameter_values_for_update(@params, @current_user, @current_key, @table_class)
                  model = @table_class.new params
                  puts "params: #{params}."
                  puts "model: #{model.to_h}."
                  puts "aaa model.id: #{model.id}, #{model.id.class}."
                  model.user_name = params[:email] unless model.user_name
                  model.user_name = model.user_name.downcase if model.user_name
                  model.sms_verification_code = validate_or_set_sms_verification_code(model.sms_verification_code)
                  model.activation_key = validate_or_set_activation_key(model.activation_key)

                  password = params[:password]
                  if password
                          message = self.class.validate_password_message(password)
                          if message
                                  self.class.validate_update(model, message)
                                  raise Exceptions::InvalidPassword, "#{message}", caller
                          end
                          # todo: validate password strength, etc. here!
                          model.hash = PasswordHash.createHash(password)
                  end
                  #model.key = KeyHelpers.generate_api_key unless model.key #create a new key_string unless one was passed in.
                  #model.key = model.key.downcase if model.key

                  self.class.validate_update(model)
                  # result = handle_profile_image params
                  # model.profile_image_id = result.id if result
                  result = @db.update._model(model)
                  if params[:role_id]
                          puts "model.class #{model.class}."
                          puts "model.id: #{model.id}, #{model.id.class}."
  if model.id > 0 #don't delete root's role!!!
    delete_user_roles model.id
  end
  #user_role = {role_id: params[:role_id], user_id: params[:id]}
  #temp = Controller::UserRole.new(@current_user, @current_key, user_role, @db).insert
end
                  result
          end

Private Instance Methods

delete_user_roles(user_id) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 152
def delete_user_roles user_id
        ds = @db.base['delete from user_role where user_id = ?', user_id]
        result = ds.all
        puts "deleted all user_roles for user_id #{user_id}: #{result}."
end
handle_profile_image(params) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 158
def handle_profile_image params
        result = nil
        if params[:image_name] and params[:image]
                encoding = (params[:image_encoding] or 'base64')
                hash = {image_file: params[:image_name], image_file_data: params[:image], image_file_data_encoding: encoding}
                result = ::Controller::Image.new(@current_user, @current_key, hash, @db).insert
        end
        result
end
validate_or_set_activation_key(activation_key) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 192
def validate_or_set_activation_key(activation_key)
        activation_key = KeyHelpers.generate_api_key('ak_') unless activation_key
        activation_key
end
validate_or_set_sms_verification_code(sms_verification_code) click to toggle source
# File lib/jungle_path/app/controllers/controller.rb, line 186
          def validate_or_set_sms_verification_code(sms_verification_code)
                  sms_verification_code = "000000#{(rand() * 1000000).to_i}"[-6, 6] unless sms_verification_code
sms_verification_code = "000000#{sms_verification_code}"[-6, 6] unless sms_verification_code.length == 6
                  sms_verification_code
          end