Guest User

Untitled

a guest
Aug 1st, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. require 'digest'
  2. class User < ActiveRecord::Base
  3. ###username validation
  4. validates_presence_of :username, :message => "Username is required!"
  5. validates_uniqueness_of :username, :message => "Username already exists, please choose another!"
  6. validates_length_of :username, :in => 6..20, :message => "Username must be between 6 and 20 characters!"
  7. validates_format_of :username, :with => /^[a-zA-Z0-9_-]{6,20}$/ , :message => "Only letters, numbers, hyphens, spaces, and underscores are allowed!"
  8. ###password validation
  9. validates_presence_of :password, :message => "Password is required!"
  10. validates_confirmation_of :password, :message => "Passwords do not match!"
  11. validates_length_of :password, :minimum => 8, :message => "Pasword must be at least 8 characters long!"
  12. validates_format_of :password, :with => /^(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z]).*$/, :message => "Must contain 1 number, 1 uppercase letter, and 1 special character!"
  13. ###name validation
  14. validates_presence_of :name, :message => "Name is required!"
  15. validates_length_of :name, :minimum => 4, :message => "Name must be at least 4 characters long!"
  16. validates_format_of :name, :with => /^[a-zA-Z0-9\s_-]{4,}$/ , :message => "Only letters, numbers, hyphens, spaces, and underscores are allowed!"
  17. ###email validation
  18. validates_presence_of :email_address, :message => "Email Address is required!"
  19. validates_uniqueness_of :email_address, :message => "Email Address already exists, please choose another!"
  20. 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!"
  21. ###company validation
  22. validates_presence_of :company_name, :message => "Company Name is required!"
  23. validates_length_of :company_name, :minimum => 4, :message => "Company Name must be at least 4 characters long!"
  24. validates_format_of :company_name, :with => /^[a-zA-Z0-9\s_-]{4,}$/, :message => "Only letters, numbers, hyphens, and spaces are allowed!"
  25. ###url validation
  26. validates_presence_of :url, :message => "URL is required!"
  27. validates_uniqueness_of :url, :message => "URL already exists, please choose another!"
  28. validates_length_of :url, :minimum => 3, :message => "URL must be at least 3 characters long!"
  29. validates_format_of :url, :with => /^[a-zA-Z0-9_-]{3,}$/, :message => "Only letters, numbers, hyphens, and underscores are allowed!"
  30. #(?=.*[a-z])
  31. before_save :encrypt_password
  32. belongs_to :company
  33.  
  34. def has_password?(submitted_password)
  35. encrypted_password == encrypt(submitted_password)
  36. end
  37.  
  38. def self.authenticate(email_address, submitted_password)
  39. user = find_by_email_address(email_address)
  40. return nil if user.nil?
  41. return user if user.has_password?(submitted_password)
  42. end
  43.  
  44. def self.authenticate_with_salt(id, cookie_salt)
  45. user = find_by_id(id)
  46. (user && user.salt == cookie_salt) ? user : nil
  47. end
  48.  
  49.  
  50. private
  51.  
  52. def encrypt_password
  53. self.salt = make_salt if new_record?
  54. self.encrypted_password = encrypt(password)
  55. end
  56.  
  57. def encrypt(string)
  58. secure_hash("#{salt}--#{string}")
  59. end
  60.  
  61. def make_salt
  62. secure_hash("#{Time.now.utc}--#{password}")
  63. end
  64.  
  65. def secure_hash(string)
  66. Digest::SHA2.hexdigest(string)
  67. end
  68.  
  69. end
Add Comment
Please, Sign In to add comment