Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'digest'
- class User < ActiveRecord::Base
- ###username validation
- validates_presence_of :username, :message => "Username is required!"
- validates_uniqueness_of :username, :message => "Username already exists, please choose another!"
- validates_length_of :username, :in => 6..20, :message => "Username must be between 6 and 20 characters!"
- validates_format_of :username, :with => /^[a-zA-Z0-9_-]{6,20}$/ , :message => "Only letters, numbers, hyphens, spaces, and underscores are allowed!"
- ###password validation
- validates_presence_of :password, :message => "Password is required!"
- validates_confirmation_of :password, :message => "Passwords do not match!"
- validates_length_of :password, :minimum => 8, :message => "Pasword must be at least 8 characters long!"
- validates_format_of :password, :with => /^(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z]).*$/, :message => "Must contain 1 number, 1 uppercase letter, and 1 special character!"
- ###name validation
- validates_presence_of :name, :message => "Name is required!"
- validates_length_of :name, :minimum => 4, :message => "Name must be at least 4 characters long!"
- validates_format_of :name, :with => /^[a-zA-Z0-9\s_-]{4,}$/ , :message => "Only letters, numbers, hyphens, spaces, and underscores are allowed!"
- ###email validation
- validates_presence_of :email_address, :message => "Email Address is required!"
- validates_uniqueness_of :email_address, :message => "Email Address already exists, please choose another!"
- validates_format_of :email_address, :with => /\b[A-Z0-9._%a-z-]+@(?:[A-Z0-9a-z-]+.)+[A-Za-z]{2,4}\z/ , :message => "Invalid Email Address!"
- ###company validation
- validates_presence_of :company_name, :message => "Company Name is required!"
- validates_length_of :company_name, :minimum => 4, :message => "Company Name must be at least 4 characters long!"
- validates_format_of :company_name, :with => /^[a-zA-Z0-9\s_-]{4,}$/, :message => "Only letters, numbers, hyphens, and spaces are allowed!"
- ###url validation
- validates_presence_of :url, :message => "URL is required!"
- validates_uniqueness_of :url, :message => "URL already exists, please choose another!"
- validates_length_of :url, :minimum => 3, :message => "URL must be at least 3 characters long!"
- validates_format_of :url, :with => /^[a-zA-Z0-9_-]{3,}$/, :message => "Only letters, numbers, hyphens, and underscores are allowed!"
- #(?=.*[a-z])
- before_save :encrypt_password
- belongs_to :company
- def has_password?(submitted_password)
- encrypted_password == encrypt(submitted_password)
- end
- def self.authenticate(email_address, submitted_password)
- user = find_by_email_address(email_address)
- return nil if user.nil?
- return user if user.has_password?(submitted_password)
- end
- def self.authenticate_with_salt(id, cookie_salt)
- user = find_by_id(id)
- (user && user.salt == cookie_salt) ? user : nil
- end
- private
- def encrypt_password
- self.salt = make_salt if new_record?
- self.encrypted_password = encrypt(password)
- end
- def encrypt(string)
- secure_hash("#{salt}--#{string}")
- end
- def make_salt
- secure_hash("#{Time.now.utc}--#{password}")
- end
- def secure_hash(string)
- Digest::SHA2.hexdigest(string)
- end
- end
Add Comment
Please, Sign In to add comment