Module: Devise::Models::PamAuthenticatable::ClassMethods

Defined in:
lib/devise_pam_authenticatable/model.rb

Instance Method Summary collapse

Instance Method Details

#authenticate_with_pam(attributes = {}) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/devise_pam_authenticatable/model.rb', line 94

def authenticate_with_pam(attributes = {})
  return nil unless attributes[:password]

  return nil unless (resource = pam_find_user(attributes))

  # potential conflict detected
  resource = resource.pam_conflict(attributes) if resource.pam_conflict?

  return nil unless resource && resource.try(:valid_pam_authentication?, attributes[:password])
  if resource.new_record?
    resource.pam_setup(attributes)
    resource.save!
  end
  resource
end

#pam_find_user(attributes = {}) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/devise_pam_authenticatable/model.rb', line 65

def pam_find_user(attributes = {})
  if ::Devise.usernamefield && attributes[:username]
    resource = find_by(::Devise.usernamefield => attributes[:username])

    if resource.blank?
      resource = new
      resource[::Devise.usernamefield] = attributes[:username]
    end
    return resource
  elsif ::Devise.emailfield && attributes[:email]
    if ::Devise.check_at_sign && ::Devise.usernamefield && attributes[:email].index('@').nil?
      resource = find_by(::Devise.usernamefield => attributes[:email])
    else
      resource = find_by(::Devise.emailfield => attributes[:email])
    end

    if resource.blank?
      resource = new
      if ::Devise.check_at_sign && ::Devise.usernamefield && attributes[:email].index('@').nil?
        # use email as username
        resource[::Devise.usernamefield] = attributes[:email]
      else
        resource[::Devise.emailfield] = attributes[:email]
      end
    end
    return resource
  end
end