66 lines
1.7 KiB
Ruby
66 lines
1.7 KiB
Ruby
class User < ApplicationRecord
|
|
include EmailValidatable
|
|
|
|
# Relations
|
|
has_many :invitations, dependent: :destroy
|
|
has_many :donations, dependent: :nullify
|
|
|
|
validates_uniqueness_of :cn
|
|
validates_length_of :cn, :minimum => 3
|
|
validates_uniqueness_of :email
|
|
validates :email, email: true
|
|
|
|
encrypts :ln_login
|
|
encrypts :ln_password
|
|
|
|
# Include default devise modules. Others available are:
|
|
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
|
|
devise :ldap_authenticatable,
|
|
:confirmable,
|
|
:recoverable,
|
|
:validatable
|
|
|
|
def ldap_before_save
|
|
self.email = Devise::LDAP::Adapter.get_ldap_param(self.cn, "mail").first
|
|
|
|
dn = Devise::LDAP::Adapter.get_ldap_param(self.cn, "dn")
|
|
self.ou = dn.split(',').select{|e| e[0..1] == "ou"}.first.delete_prefix("ou=")
|
|
|
|
if self.confirmed_at.blank? && self.confirmation_token.blank?
|
|
# User had an account with a trusted email address before akkounts was a thing
|
|
self.confirmed_at = DateTime.now
|
|
end
|
|
end
|
|
|
|
def reset_password(new_password, new_password_confirmation)
|
|
if new_password == new_password_confirmation && ::Devise.ldap_update_password
|
|
Devise::LDAP::Adapter.update_password(login_with, new_password)
|
|
end
|
|
clear_reset_password_token if valid?
|
|
save
|
|
end
|
|
|
|
def is_admin?
|
|
admin ||= if admin = Devise::LDAP::Adapter.get_ldap_param(self.cn, :admin)
|
|
!!admin.first
|
|
else
|
|
false
|
|
end
|
|
end
|
|
|
|
def address
|
|
"#{self.cn}@#{self.ou}"
|
|
end
|
|
|
|
def valid_attribute?(attribute_name)
|
|
self.valid?
|
|
self.errors[attribute_name].blank?
|
|
end
|
|
|
|
def ln_create_invoice(payload)
|
|
lndhub = Lndhub.new
|
|
lndhub.authenticate self
|
|
lndhub.addinvoice payload
|
|
end
|
|
end
|