54
55
56
57
58
59
60
61
62
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
|
# File 'lib/devise_pam_authenticatable/model.rb', line 54
def authenticate_with_pam(attributes = {})
return nil unless attributes[:password]
if ::Devise.usernamefield && attributes[:username]
resource = find_by(::Devise.usernamefield => attributes[:username])
if resource.blank?
resource = new
resource[::Devise.usernamefield] = attributes[:username]
end
elsif ::Devise.emailfield
return nil unless attributes[:email]
resource = find_by(::Devise.emailfield => attributes[:email])
if resource.blank?
resource = new
if ::Devise.check_at_sign && ::Devise.usernamefield && attributes[:email].index('@').nil?
resource[::Devise.usernamefield] = attributes[:email]
else
resource[::Devise.emailfield] = attributes[:email]
end
end
else
return nil
end
resource = resource.pam_on_filled_pw(attributes) if resource.respond_to?('password') && resource.password.present?
return nil unless resource && resource.try(:valid_pam_authentication?, attributes[:password])
if resource.new_record?
resource.pam_setup(attributes)
resource.save!
end
resource
end
|