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



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

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

  return nil unless (resource = pam_get_user(attributes))

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

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

#pam_get_user(attributes = {}) ⇒ Object



63
64
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
# File 'lib/devise_pam_authenticatable/model.rb', line 63

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

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

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