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