Module: Devise::Models::PamAuthenticatable

Defined in:
lib/devise_pam_authenticatable/model.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#get_pam_nameObject



44
45
46
47
48
49
50
51
52
# File 'lib/devise_pam_authenticatable/model.rb', line 44

def get_pam_name
  return self[::Devise.usernamefield] if ::Devise.usernamefield && self[::Devise.usernamefield]
  suffix = get_suffix
  return nil unless suffix && ::Devise.emailfield
  email = "#{self[::Devise.emailfield]}\n"
  pos = email.index("@#{suffix}\n")
  return nil unless pos
  email.slice(0, pos)
end

#get_serviceObject



7
8
9
10
# File 'lib/devise_pam_authenticatable/model.rb', line 7

def get_service
  return self.class.pam_service if self.class.instance_variable_defined?('@pam_service')
  ::Devise.pam_default_service
end

#get_suffixObject



12
13
14
15
# File 'lib/devise_pam_authenticatable/model.rb', line 12

def get_suffix
  return self.class.pam_suffix if self.class.instance_variable_defined?('@pam_suffix')
  ::Devise.pam_default_suffix
end

#is_pam_accountObject



28
29
30
31
# File 'lib/devise_pam_authenticatable/model.rb', line 28

def 
  return false unless get_pam_name
  Rpam2.(get_service, get_pam_name)
end

#is_pam_conflictObject



23
24
25
26
# File 'lib/devise_pam_authenticatable/model.rb', line 23

def is_pam_conflict
  # use blank password as discriminator between traditional login and pam login
  resource.respond_to?('password') && resource.password.present? && 
end

#on_pam_conflict(_attributes) ⇒ Object



17
18
19
20
21
# File 'lib/devise_pam_authenticatable/model.rb', line 17

def on_pam_conflict(_attributes)
  # to disable login with pam return nil elsewise return a (different?) user object
  # as default assume there is never a conflict and return user object
  self
end

#pam_setup(attributes) ⇒ Object



33
34
35
36
37
38
# File 'lib/devise_pam_authenticatable/model.rb', line 33

def pam_setup(attributes)
  return unless ::Devise.emailfield && ::Devise.usernamefield
  self[::Devise.emailfield] = Rpam2.getenv(get_service, get_pam_name, attributes[:password], 'email', false)
  self[::Devise.emailfield] = attributes[::Devise.emailfield] if self[::Devise.emailfield].nil?
  self[::Devise.emailfield] = "#{self[::Devise.usernamefield]}@#{get_suffix}" if self[::Devise.emailfield].nil? && get_suffix
end

#password_required?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/devise_pam_authenticatable/model.rb', line 40

def password_required?
  false
end

#valid_pam_authentication?(pw) ⇒ Boolean

Checks if a resource is valid upon authentication.

Returns:

  • (Boolean)


55
56
57
58
# File 'lib/devise_pam_authenticatable/model.rb', line 55

def valid_pam_authentication?(pw)
  return nil unless get_pam_name
  Rpam2.auth(get_service, get_pam_name, pw)
end